OSDN Git Service

stagefright: use frame height if slice height is 0
authorLajos Molnar <lajos@google.com>
Wed, 24 Sep 2014 20:55:10 +0000 (13:55 -0700)
committerLajos Molnar <lajos@google.com>
Wed, 24 Sep 2014 20:59:54 +0000 (13:59 -0700)
This is a workaround for some vendors that set slice height to 0.
Android uses slice height is the vertical stride for YUV planar
and semiplanar formats.

Bug: 13433554
Change-Id: I4da038e7a768dcd8360c33fa1a9ce95a172f16bb

media/libstagefright/ACodec.cpp

index 3c04859..4589ed1 100644 (file)
@@ -2933,13 +2933,6 @@ bool ACodec::describeDefaultColorFormat(DescribeColorFormatParams &params) {
     image.mNumPlanes = 0;
 
     const OMX_COLOR_FORMATTYPE fmt = params.eColorFormat;
-    // we need stride and slice-height to be non-zero
-    if (params.nStride == 0 || params.nSliceHeight == 0) {
-        ALOGW("cannot describe color format 0x%x = %d with stride=%u and sliceHeight=%u",
-                fmt, fmt, params.nStride, params.nSliceHeight);
-        return false;
-    }
-
     image.mWidth = params.nFrameWidth;
     image.mHeight = params.nFrameHeight;
 
@@ -2952,6 +2945,20 @@ bool ACodec::describeDefaultColorFormat(DescribeColorFormatParams &params) {
         return false;
     }
 
+    // TEMPORARY FIX for some vendors that advertise sliceHeight as 0
+    if (params.nStride != 0 && params.nSliceHeight == 0) {
+        ALOGW("using sliceHeight=%u instead of what codec advertised (=0)",
+                params.nFrameHeight);
+        params.nSliceHeight = params.nFrameHeight;
+    }
+
+    // we need stride and slice-height to be non-zero
+    if (params.nStride == 0 || params.nSliceHeight == 0) {
+        ALOGW("cannot describe color format 0x%x = %d with stride=%u and sliceHeight=%u",
+                fmt, fmt, params.nStride, params.nSliceHeight);
+        return false;
+    }
+
     // set-up YUV format
     image.mType = MediaImage::MEDIA_IMAGE_TYPE_YUV;
     image.mNumPlanes = 3;