From: Sebastian Dröge Date: Sun, 23 Dec 2012 08:51:42 +0000 (+0100) Subject: openjpegdec: Only use 10 bit YUV formats for exactly 10 bit images, not <= 16 bit X-Git-Tag: 1.19.3~507^2~14349 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fe38fc2b5af23f0718524f8c86817749ea6a3f74;p=platform%2Fupstream%2Fgstreamer.git openjpegdec: Only use 10 bit YUV formats for exactly 10 bit images, not <= 16 bit And use the generic converter to AYUV64 for everything else. --- diff --git a/ext/openjpeg/gstopenjpegdec.c b/ext/openjpeg/gstopenjpegdec.c index da2efdd..ca178e2 100644 --- a/ext/openjpeg/gstopenjpegdec.c +++ b/ext/openjpeg/gstopenjpegdec.c @@ -802,27 +802,33 @@ gst_openjpeg_dec_negotiate (GstOpenJPEGDec * self, opj_image_t * image) format = GST_VIDEO_FORMAT_AYUV; } } else if (get_highest_prec (image) <= 16) { - if (image->comps[1].dx == 1 && image->comps[1].dy == 1) { - self->fill_frame = fill_frame_planar16_3; + if (image->comps[0].prec == 10 && + image->comps[1].prec == 10 && image->comps[2].prec == 10) { + if (image->comps[1].dx == 1 && image->comps[1].dy == 1) { + self->fill_frame = fill_frame_planar16_3; #if G_BYTE_ORDER == G_LITTLE_ENDIAN - format = GST_VIDEO_FORMAT_Y444_10LE; + format = GST_VIDEO_FORMAT_Y444_10LE; #else - format = GST_VIDEO_FORMAT_Y444_10BE; + format = GST_VIDEO_FORMAT_Y444_10BE; #endif - } else if (image->comps[1].dx == 2 && image->comps[1].dy == 1) { - self->fill_frame = fill_frame_planar16_3; + } else if (image->comps[1].dx == 2 && image->comps[1].dy == 1) { + self->fill_frame = fill_frame_planar16_3; #if G_BYTE_ORDER == G_LITTLE_ENDIAN - format = GST_VIDEO_FORMAT_I422_10LE; + format = GST_VIDEO_FORMAT_I422_10LE; #else - format = GST_VIDEO_FORMAT_I422_10BE; + format = GST_VIDEO_FORMAT_I422_10BE; #endif - } else if (image->comps[1].dx == 2 && image->comps[1].dy == 2) { - self->fill_frame = fill_frame_planar16_3; + } else if (image->comps[1].dx == 2 && image->comps[1].dy == 2) { + self->fill_frame = fill_frame_planar16_3; #if G_BYTE_ORDER == G_LITTLE_ENDIAN - format = GST_VIDEO_FORMAT_I420_10LE; + format = GST_VIDEO_FORMAT_I420_10LE; #else - format = GST_VIDEO_FORMAT_I420_10BE; + format = GST_VIDEO_FORMAT_I420_10BE; #endif + } else { + self->fill_frame = fill_frame_planar16_3_generic; + format = GST_VIDEO_FORMAT_AYUV64; + } } else { self->fill_frame = fill_frame_planar16_3_generic; format = GST_VIDEO_FORMAT_AYUV64;