From ea73ee04818a24ce366449838860c44c4e03de60 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 31 Oct 2024 10:53:44 +0100 Subject: [PATCH] Optimize media: always compress video to have maximum 1080 at the greatest size. --- .../impl/AndroidMediaPreProcessor.kt | 18 +++++++----------- .../mediaupload/impl/VideoCompressor.kt | 12 ++++++++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt index 1ea1acae82..31807269b7 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt @@ -171,17 +171,13 @@ class AndroidMediaPreProcessor @Inject constructor( } private suspend fun processVideo(uri: Uri, mimeType: String?, shouldBeCompressed: Boolean): MediaUploadInfo { - val resultFile = if (shouldBeCompressed) { - videoCompressor.compress(uri) - .onEach { - // TODO handle progress - } - .filterIsInstance() - .first() - .file - } else { - copyToTmpFile(uri) - } + val resultFile = videoCompressor.compress(uri, shouldBeCompressed) + .onEach { + // TODO handle progress + } + .filterIsInstance() + .first() + .file val thumbnailInfo = thumbnailFactory.createVideoThumbnail(resultFile) val videoInfo = extractVideoMetadata(resultFile, mimeType, thumbnailInfo) return MediaUploadInfo.Video( diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt index 760679b32f..8db2fd878a 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt @@ -24,12 +24,20 @@ import javax.inject.Inject class VideoCompressor @Inject constructor( @ApplicationContext private val context: Context, ) { - fun compress(uri: Uri) = callbackFlow { + fun compress(uri: Uri, shouldBeCompressed: Boolean) = callbackFlow { val tmpFile = context.createTmpFile(extension = "mp4") val future = Transcoder.into(tmpFile.path) .setVideoTrackStrategy( DefaultVideoStrategy.Builder() - .addResizer(AtMostResizer(720, 480)) + .addResizer( + AtMostResizer( + if (shouldBeCompressed) { + 720 + } else { + 1080 + } + ) + ) .build() ) .addDataSource(context, uri)