Skip to content

Commit 33aa7a9

Browse files
authored
Calculate video output size taking into account portrait mode (#5068)
1 parent 7c982a3 commit 33aa7a9

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/bitmap/Bitmap.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ fun BitmapFactory.Options.calculateInSampleSize(desiredWidth: Int, desiredHeight
6464
* Decodes the [inputStream] into a [Bitmap] and applies the needed rotation based on [orientation].
6565
* This orientation value must be one of `ExifInterface.ORIENTATION_*` constants.
6666
*/
67-
fun Bitmap.rotateToMetadataOrientation(orientation: Int): Bitmap {
67+
fun Bitmap.rotateToExifMetadataOrientation(orientation: Int): Bitmap {
6868
val matrix = Matrix()
6969
when (orientation) {
7070
ExifInterface.ORIENTATION_ROTATE_270 -> matrix.postRotate(270f)

libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import android.graphics.BitmapFactory
1313
import androidx.exifinterface.media.ExifInterface
1414
import io.element.android.libraries.androidutils.bitmap.calculateInSampleSize
1515
import io.element.android.libraries.androidutils.bitmap.resizeToMax
16-
import io.element.android.libraries.androidutils.bitmap.rotateToMetadataOrientation
16+
import io.element.android.libraries.androidutils.bitmap.rotateToExifMetadataOrientation
1717
import io.element.android.libraries.androidutils.file.createTmpFile
1818
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
1919
import io.element.android.libraries.core.extensions.runCatchingExceptions
@@ -78,7 +78,7 @@ class ImageCompressor @Inject constructor(
7878
options.inJustDecodeBounds = false
7979
val decodedBitmap = BitmapFactory.decodeStream(input, null, options)
8080
?: error("Decoding Bitmap from InputStream failed")
81-
val rotatedBitmap = decodedBitmap.rotateToMetadataOrientation(orientation)
81+
val rotatedBitmap = decodedBitmap.rotateToExifMetadataOrientation(orientation)
8282
if (resizeMode is ResizeMode.Strict) {
8383
rotatedBitmap.resizeToMax(resizeMode.maxWidth, resizeMode.maxHeight)
8484
} else {

libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfig.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,12 @@ internal class VideoResizer(
8181
) {
8282
fun getOutputSize(inputSize: Size): Size {
8383
val resultMajor = min(inputSize.major(), maxSize)
84-
val aspectRatio = inputSize.major().toFloat() / inputSize.minor().toFloat()
85-
return Size(resultMajor, (resultMajor / aspectRatio).roundToInt())
84+
val aspectRatio = inputSize.width.toFloat() / inputSize.height.toFloat()
85+
return if (inputSize.width > inputSize.height) {
86+
Size(resultMajor, (resultMajor / aspectRatio).roundToInt())
87+
} else {
88+
Size((resultMajor * aspectRatio).roundToInt(), resultMajor)
89+
}
8690
}
8791
}
8892

0 commit comments

Comments
 (0)