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(
uri: Uri,
context: Context,
): VideoInfo? =
try {
val retriever = MediaMetadataRetriever()
): VideoInfo? {
var retriever: MediaMetadataRetriever? = null
return try {
retriever = MediaMetadataRetriever()
retriever.setDataSource(context, uri)
val width = retriever.prepareVideoWidth()
val height = retriever.prepareVideoHeight()
@@ -350,8 +351,6 @@ class VideoCompressionHelper {
val framerateString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE)
val framerate = framerateString?.toFloatOrNull() ?: 30.0f
retriever.release()
if (width != null && height != null && width > 0 && height > 0) {
// Account for rotation
val resolution =
@@ -367,5 +366,12 @@ class VideoCompressionHelper {
} catch (e: Exception) {
Log.w("VideoCompressionHelper", "Failed to get video resolution: ${e.message}")
null
} finally {
try {
retriever?.release()
} catch (e: Exception) {
Log.w("VideoCompressionHelper", "Failed to release MediaMetadataRetriever: ${e.message}")
}
}
}
}