diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-12-23 09:51:42 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-12-23 09:51:42 +0100 |
commit | fe38fc2b5af23f0718524f8c86817749ea6a3f74 (patch) | |
tree | e0947c8dfacbe4dcba9767987b9b8b1178b87223 /ext/openjpeg | |
parent | 85690b802d0aa1778105b5986aa92b39cb7c2f83 (diff) |
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.
Diffstat (limited to 'ext/openjpeg')
-rw-r--r-- | ext/openjpeg/gstopenjpegdec.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/ext/openjpeg/gstopenjpegdec.c b/ext/openjpeg/gstopenjpegdec.c index da2efdd18..ca178e2cf 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; |