2424
2525/**
2626 * A patch on top of https://github.com/GetStream/webrtc/blob/main/sdk/android/api/org/webrtc/WrappedVideoDecoderFactory.java
27- * It disables direct-to-SurfaceTextureFrame rendering for c2. exynos.* hardware decoder
27+ * It disables direct-to-SurfaceTextureFrame rendering for c2 exynos/qualcomm/mediatek hardware decoder
2828 */
2929public class WrappedVideoDecoderFactory implements VideoDecoderFactory {
30+ // Known hardware decoders to have failures when it outputs to a SurfaceTexture directly
31+ // Happens possibly when SurfaceTexture data buffer queue is flushed and reused
32+ private static final String [] DECODER_DENYLIST_PREFIXES = {
33+ "OMX.qcom." ,
34+ "OMX.hisi." ,
35+ // https://github.com/androidx/media/issues/2003
36+ "c2.exynos." ,
37+ "c2.qti." ,
38+ // https://github.com/androidx/media/blob/bfe5930f7f29c6492d60e3d01a90abd3c138b615/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java#L1499
39+ "c2.mtk." ,
40+ };
41+
3042 public WrappedVideoDecoderFactory (@ Nullable EglBase .Context eglContext ) {
3143 this .hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory (eglContext );
3244 this .platformSoftwareVideoDecoderFactory = new PlatformSoftwareVideoDecoderFactory (eglContext );
@@ -59,8 +71,10 @@ public VideoDecoder createDecoder(VideoCodecInfo codecType) {
5971 }
6072
6173 private boolean disableSurfaceTextureFrame (String name ) {
62- if (name .startsWith ("OMX.qcom." ) || name .startsWith ("OMX.hisi." ) || name .startsWith ("c2.exynos." )) {
63- return true ;
74+ for (String prefix : DECODER_DENYLIST_PREFIXES ) {
75+ if (name .startsWith (prefix )) {
76+ return true ;
77+ }
6478 }
6579 return false ;
6680 }
@@ -74,6 +88,6 @@ public VideoCodecInfo[] getSupportedCodecs() {
7488 supportedCodecInfos .addAll (Arrays .asList (this .platformSoftwareVideoDecoderFactory .getSupportedCodecs ()));
7589 }
7690
77- return ( VideoCodecInfo []) supportedCodecInfos .toArray (new VideoCodecInfo [supportedCodecInfos .size ()]);
91+ return supportedCodecInfos .toArray (new VideoCodecInfo [supportedCodecInfos .size ()]);
7892 }
7993}
0 commit comments