From 076820bb101d8141b12504bd97e2e2512eca7bb3 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Tue, 26 Oct 2021 13:02:38 +0200 Subject: [PATCH 1/2] Fix broken video compression due to NPE in library Library issue: https://github.com/natario1/Transcoder/issues/154 Possibly fixes https://github.com/vector-im/element-android/issues/4337 Also add some logging for failures. --- changelog.d/4353.bugfix | 1 + .../internal/session/content/UploadContentWorker.kt | 3 +++ .../sdk/internal/session/content/VideoCompressor.kt | 12 +++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 changelog.d/4353.bugfix diff --git a/changelog.d/4353.bugfix b/changelog.d/4353.bugfix new file mode 100644 index 0000000000..170dbed418 --- /dev/null +++ b/changelog.d/4353.bugfix @@ -0,0 +1 @@ +Fix video compression before upload diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt index 0c5a90ca60..f1b60f5ecf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt @@ -188,6 +188,9 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter } }) .let { videoCompressionResult -> + if (videoCompressionResult is VideoCompressionResult.CompressionFailed) { + videoCompressionResult.failure.printStackTrace() + } when (videoCompressionResult) { is VideoCompressionResult.Success -> { val compressedFile = videoCompressionResult.compressedFile diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/VideoCompressor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/VideoCompressor.kt index 05aaf4e9f1..a43f8abf33 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/VideoCompressor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/VideoCompressor.kt @@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.session.content import com.otaliastudios.transcoder.Transcoder import com.otaliastudios.transcoder.TranscoderListener +import com.otaliastudios.transcoder.source.FilePathDataSource import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.withContext @@ -43,7 +44,16 @@ internal class VideoCompressor @Inject constructor( var result: Int = -1 var failure: Throwable? = null Transcoder.into(destinationFile.path) - .addDataSource(videoFile.path) + .addDataSource(object : FilePathDataSource(videoFile.path) { + // https://github.com/natario1/Transcoder/issues/154 + @Suppress("SENSELESS_COMPARISON") // Source is annotated as @NonNull, but can actually be null... + override fun isInitialized(): Boolean { + if (source == null) { + return false + } + return super.isInitialized() + } + }) .setListener(object : TranscoderListener { override fun onTranscodeProgress(progress: Double) { Timber.d("Compressing: $progress%") From c56859581794ec38b5c2bca44a0eeef2fc648dc4 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Mon, 1 Nov 2021 14:46:55 +0100 Subject: [PATCH 2/2] Video compression error logging: code style --- .../sdk/internal/session/content/UploadContentWorker.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt index f1b60f5ecf..b657d950bd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt @@ -188,9 +188,6 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter } }) .let { videoCompressionResult -> - if (videoCompressionResult is VideoCompressionResult.CompressionFailed) { - videoCompressionResult.failure.printStackTrace() - } when (videoCompressionResult) { is VideoCompressionResult.Success -> { val compressedFile = videoCompressionResult.compressedFile @@ -217,8 +214,11 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter .also { filesToDelete.add(it) } } VideoCompressionResult.CompressionNotNeeded, - VideoCompressionResult.CompressionCancelled, + VideoCompressionResult.CompressionCancelled -> { + workingFile + } is VideoCompressionResult.CompressionFailed -> { + Timber.e(videoCompressionResult.failure, "Video compression failed") workingFile } }