fix: prevent async state and platform regressions
This commit is contained in:
@@ -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"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user