scale video frame when possible

This commit is contained in:
mertalev 2025-07-21 16:09:30 +03:00
parent a3fc5d80bb
commit 8a8eb6e19d
No known key found for this signature in database
GPG Key ID: DF6ABC77AAD98C95

View File

@ -96,18 +96,27 @@ class ThumbnailsImpl(context: Context) : ThumbnailApi {
private fun decodeVideoThumbnail(assetId: String, targetWidth: Int, targetHeight: Int): Bitmap { private fun decodeVideoThumbnail(assetId: String, targetWidth: Int, targetHeight: Int): Bitmap {
val uri = val uri =
ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, assetId.toLong()) ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, assetId.toLong())
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
contentResolver.loadThumbnail(uri, Size(targetWidth, targetHeight), null) return contentResolver.loadThumbnail(uri, Size(targetWidth, targetHeight), null)
} else { }
val retriever = MediaMetadataRetriever() val retriever = MediaMetadataRetriever()
try { try {
retriever.setDataSource(ctx, uri) retriever.setDataSource(ctx, uri)
retriever.getFrameAtTime(0L) ?: throw RuntimeException("Failed to extract video frame") return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
retriever.getScaledFrameAtTime(
0L,
MediaMetadataRetriever.OPTION_NEXT_SYNC,
targetWidth,
targetHeight
)
} else {
retriever.getFrameAtTime(0L)
} ?: throw RuntimeException("Failed to extract video frame")
} finally { } finally {
retriever.release() retriever.release()
} }
} }
}
private fun decodeSampledBitmap(uri: Uri, targetWidth: Int, targetHeight: Int): Bitmap { private fun decodeSampledBitmap(uri: Uri, targetWidth: Int, targetHeight: Int): Bitmap {
val options = BitmapFactory.Options().apply { val options = BitmapFactory.Options().apply {