fix: prevent async state and platform regressions

This commit is contained in:
edde746
2026-07-13 00:03:52 +02:00
parent 26d14f7cb0
commit e03edad824
77 changed files with 1210 additions and 270 deletions
@@ -23,13 +23,20 @@ internal object MediaCodecQuery {
return null
}
fun isHardwareAccelerated(info: MediaCodecInfo): Boolean {
// API 29 added the manufacturer-provided classification. Older releases
// expose only component names, so retain the legacy software-name fallback.
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
info.isHardwareAccelerated
fun isHardwareAccelerated(info: MediaCodecInfo): Boolean = isHardwareAccelerated(Build.VERSION.SDK_INT, info.isHardwareAccelerated, info.name)
internal fun isHardwareAccelerated(
sdkInt: Int,
platformReportsHardware: Boolean,
name: String
): Boolean {
// API 29 added manufacturer-provided classification, but some Codec2
// builders still flag known software components as hardware. Require both
// signals there; older releases expose only component names.
return if (sdkInt >= Build.VERSION_CODES.Q) {
platformReportsHardware && !isSoftwareCodecName(name)
} else {
!isSoftwareCodecName(info.name)
!isSoftwareCodecName(name)
}
}
@@ -31,4 +31,17 @@ class MediaCodecQueryTest {
assertFalse("expected hardware codec: $name", MediaCodecQuery.isSoftwareCodecName(name))
}
}
@Test
fun api29RequiresPlatformHardwareFlagAndNonSoftwareComponentName() {
assertFalse(MediaCodecQuery.isHardwareAccelerated(29, true, "c2.ffmpeg.aac.decoder"))
assertFalse(MediaCodecQuery.isHardwareAccelerated(29, false, "c2.qti.avc.decoder"))
assertTrue(MediaCodecQuery.isHardwareAccelerated(29, true, "c2.qti.avc.decoder"))
}
@Test
fun preApi29RetainsNameBasedFallback() {
assertFalse(MediaCodecQuery.isHardwareAccelerated(28, true, "OMX.google.h264.decoder"))
assertTrue(MediaCodecQuery.isHardwareAccelerated(28, false, "OMX.qcom.video.decoder.avc"))
}
}