From 893a7eeecbfcfc35177e35d4686312df177a62f9 Mon Sep 17 00:00:00 2001 From: glaznev Date: Thu, 22 Sep 2016 10:44:30 -0700 Subject: [PATCH] Support more QCOM specific color formats for Android HW decoder. BUG=b/31483393 Review-Url: https://codereview.webrtc.org/2349843002 Cr-Commit-Position: refs/heads/master@{#14359} --- .../java/src/org/webrtc/MediaCodecVideoDecoder.java | 11 +++++++++-- webrtc/api/android/jni/androidmediacodeccommon.h | 9 +++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java b/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java index 9583667f7a..053780b949 100644 --- a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java +++ b/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java @@ -78,16 +78,23 @@ public class MediaCodecVideoDecoder { // List of supported HW H.264 decoders. private static final String[] supportedH264HwCodecPrefixes = {"OMX.qcom.", "OMX.Intel.", "OMX.Exynos." }; + // NV12 color format supported by QCOM codec, but not declared in MediaCodec - // see /hardware/qcom/media/mm-core/inc/OMX_QCOMExtns.h - private static final int - COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m = 0x7FA30C04; + private static final int COLOR_QCOM_FORMATYVU420PackedSemiPlanar32m4ka = 0x7FA30C01; + private static final int COLOR_QCOM_FORMATYVU420PackedSemiPlanar16m4ka = 0x7FA30C02; + private static final int COLOR_QCOM_FORMATYVU420PackedSemiPlanar64x32Tile2m8ka = 0x7FA30C03; + private static final int COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m = 0x7FA30C04; // Allowable color formats supported by codec - in order of preference. private static final List supportedColorList = Arrays.asList( CodecCapabilities.COLOR_FormatYUV420Planar, CodecCapabilities.COLOR_FormatYUV420SemiPlanar, CodecCapabilities.COLOR_QCOM_FormatYUV420SemiPlanar, + COLOR_QCOM_FORMATYVU420PackedSemiPlanar32m4ka, + COLOR_QCOM_FORMATYVU420PackedSemiPlanar16m4ka, + COLOR_QCOM_FORMATYVU420PackedSemiPlanar64x32Tile2m8ka, COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m); + private int colorFormat; private int width; private int height; diff --git a/webrtc/api/android/jni/androidmediacodeccommon.h b/webrtc/api/android/jni/androidmediacodeccommon.h index 4aa938d81e..528e166f93 100644 --- a/webrtc/api/android/jni/androidmediacodeccommon.h +++ b/webrtc/api/android/jni/androidmediacodeccommon.h @@ -28,8 +28,10 @@ namespace webrtc_jni { #define TAG_COMMON "MediaCodecVideo" -// Color formats supported by encoder - should mirror supportedColorList -// from MediaCodecVideoEncoder.java +// Color formats supported by encoder or decoder - should include all +// colors from supportedColorList in MediaCodecVideoEncoder.java and +// MediaCodecVideoDecoder.java. Supported color format set in encoder +// and decoder could be different. enum COLOR_FORMATTYPE { COLOR_FormatYUV420Planar = 0x13, COLOR_FormatYUV420SemiPlanar = 0x15, @@ -38,6 +40,9 @@ enum COLOR_FORMATTYPE { // see /hardware/qcom/media/mm-core/inc/OMX_QCOMExtns.h // This format is presumably similar to COLOR_FormatYUV420SemiPlanar, // but requires some (16, 32?) byte alignment. + COLOR_QCOM_FORMATYVU420PackedSemiPlanar32m4ka = 0x7FA30C01, + COLOR_QCOM_FORMATYVU420PackedSemiPlanar16m4ka = 0x7FA30C02, + COLOR_QCOM_FORMATYVU420PackedSemiPlanar64x32Tile2m8ka = 0x7FA30C03, COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m = 0x7FA30C04 };