finally block ensures release() is called even if exceptions occur

This commit is contained in:
davotoula
2025-09-23 09:19:10 +02:00
parent 41a233d175
commit db9160a6c2
@@ -338,9 +338,10 @@ class VideoCompressionHelper {
private fun getVideoInfo( private fun getVideoInfo(
uri: Uri, uri: Uri,
context: Context, context: Context,
): VideoInfo? = ): VideoInfo? {
try { var retriever: MediaMetadataRetriever? = null
val retriever = MediaMetadataRetriever() return try {
retriever = MediaMetadataRetriever()
retriever.setDataSource(context, uri) retriever.setDataSource(context, uri)
val width = retriever.prepareVideoWidth() val width = retriever.prepareVideoWidth()
val height = retriever.prepareVideoHeight() val height = retriever.prepareVideoHeight()
@@ -350,8 +351,6 @@ class VideoCompressionHelper {
val framerateString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE) val framerateString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE)
val framerate = framerateString?.toFloatOrNull() ?: 30.0f val framerate = framerateString?.toFloatOrNull() ?: 30.0f
retriever.release()
if (width != null && height != null && width > 0 && height > 0) { if (width != null && height != null && width > 0 && height > 0) {
// Account for rotation // Account for rotation
val resolution = val resolution =
@@ -367,5 +366,12 @@ class VideoCompressionHelper {
} catch (e: Exception) { } catch (e: Exception) {
Log.w("VideoCompressionHelper", "Failed to get video resolution: ${e.message}") Log.w("VideoCompressionHelper", "Failed to get video resolution: ${e.message}")
null null
} finally {
try {
retriever?.release()
} catch (e: Exception) {
Log.w("VideoCompressionHelper", "Failed to release MediaMetadataRetriever: ${e.message}")
}
} }
}
} }