From a36c9c1cc9db978808288604714fd4170575733a Mon Sep 17 00:00:00 2001 From: Chen Jie Date: Fri, 7 Jun 2013 14:06:56 +0800 Subject: [PATCH] androidmedia: Hacks for HuaweiMediaPad which reports wrong color format COLOR_FormatYCbYCr is reported but it is actually COLOR_TI_FormatYUV420PackedSemiPlanar. --- sys/androidmedia/gstamc.c | 7 +++++++ sys/androidmedia/gstamcvideodec.c | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c index c8820acf21..1629284f8b 100644 --- a/sys/androidmedia/gstamc.c +++ b/sys/androidmedia/gstamc.c @@ -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]; } diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c index 18c7334462..a464521d4a 100644 --- a/sys/androidmedia/gstamcvideodec.c +++ b/sys/androidmedia/gstamcvideodec.c @@ -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");