Skip to content

Commit 38083c6

Browse files
committed
add more hardware decoders
1 parent 63f1fe7 commit 38083c6

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

android/src/main/java/com/oney/WebRTCModule/webrtcutils/WrappedVideoDecoderFactory.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,21 @@
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
*/
2929
public 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

Comments
 (0)