androidmedia: Hacks for HuaweiMediaPad which reports wrong color format
authorChen Jie <chenj@lemote.com>
Fri, 7 Jun 2013 06:06:56 +0000 (14:06 +0800)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 7 Jun 2013 09:08:52 +0000 (11:08 +0200)
COLOR_FormatYCbYCr is reported but it is actually COLOR_TI_FormatYUV420PackedSemiPlanar.

sys/androidmedia/gstamc.c
sys/androidmedia/gstamcvideodec.c

index c8820ac..1629284 100644 (file)
@@ -1841,6 +1841,13 @@ scan_codecs (GstPlugin * plugin)
       }
 
       for (k = 0; k < n_elems; k++) {
+        if (strcmp (name_str, "OMX.k3.video.decoder.avc") == 0)
+          if (n_elems == 1 && color_formats_elems[k] == COLOR_FormatYCbYCr) {
+            GST_INFO ("On HuaweiMediaPad it reports a wrong COLOR_FormatYCbYCr,"
+                      "should be COLOR_TI_FormatYUV420PackedSemiPlanar, fix it.");
+            color_formats_elems[k] = COLOR_TI_FormatYUV420PackedSemiPlanar;
+          }
+
         GST_INFO ("Color format %d: %d", k, color_formats_elems[k]);
         gst_codec_type->color_formats[k] = color_formats_elems[k];
       }
index 18c7334..a464521 100644 (file)
@@ -698,6 +698,7 @@ gst_amc_video_dec_set_src_caps (GstAmcVideoDec * self, GstAmcFormat * format)
   gint crop_left, crop_right;
   gint crop_top, crop_bottom;
   GstVideoFormat gst_format;
+  GstAmcVideoDecClass *klass = GST_AMC_VIDEO_DEC_GET_CLASS (self);
 
   if (!gst_amc_format_get_int (format, "color-format", &color_format) ||
       !gst_amc_format_get_int (format, "width", &width) ||
@@ -706,6 +707,10 @@ gst_amc_video_dec_set_src_caps (GstAmcVideoDec * self, GstAmcFormat * format)
     return FALSE;
   }
 
+  if (strcmp (klass->codec_info->name, "OMX.k3.video.decoder.avc") &&
+      color_format == COLOR_FormatYCbYCr)
+    color_format = COLOR_TI_FormatYUV420PackedSemiPlanar;
+
   if (!gst_amc_format_get_int (format, "stride", &stride) ||
       !gst_amc_format_get_int (format, "slice-height", &slice_height)) {
     GST_ERROR_OBJECT (self, "Failed to get stride and slice-height");