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.
This commit is contained in:
Sebastian Dröge 2012-12-23 09:51:42 +01:00
parent 85690b802d
commit fe38fc2b5a

View file

@ -802,27 +802,33 @@ gst_openjpeg_dec_negotiate (GstOpenJPEGDec * self, opj_image_t * image)
format = GST_VIDEO_FORMAT_AYUV; format = GST_VIDEO_FORMAT_AYUV;
} }
} else if (get_highest_prec (image) <= 16) { } else if (get_highest_prec (image) <= 16) {
if (image->comps[1].dx == 1 && image->comps[1].dy == 1) { if (image->comps[0].prec == 10 &&
self->fill_frame = fill_frame_planar16_3; 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 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GST_VIDEO_FORMAT_Y444_10LE; format = GST_VIDEO_FORMAT_Y444_10LE;
#else #else
format = GST_VIDEO_FORMAT_Y444_10BE; format = GST_VIDEO_FORMAT_Y444_10BE;
#endif #endif
} else if (image->comps[1].dx == 2 && image->comps[1].dy == 1) { } else if (image->comps[1].dx == 2 && image->comps[1].dy == 1) {
self->fill_frame = fill_frame_planar16_3; self->fill_frame = fill_frame_planar16_3;
#if G_BYTE_ORDER == G_LITTLE_ENDIAN #if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GST_VIDEO_FORMAT_I422_10LE; format = GST_VIDEO_FORMAT_I422_10LE;
#else #else
format = GST_VIDEO_FORMAT_I422_10BE; format = GST_VIDEO_FORMAT_I422_10BE;
#endif #endif
} else if (image->comps[1].dx == 2 && image->comps[1].dy == 2) { } else if (image->comps[1].dx == 2 && image->comps[1].dy == 2) {
self->fill_frame = fill_frame_planar16_3; self->fill_frame = fill_frame_planar16_3;
#if G_BYTE_ORDER == G_LITTLE_ENDIAN #if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GST_VIDEO_FORMAT_I420_10LE; format = GST_VIDEO_FORMAT_I420_10LE;
#else #else
format = GST_VIDEO_FORMAT_I420_10BE; format = GST_VIDEO_FORMAT_I420_10BE;
#endif #endif
} else {
self->fill_frame = fill_frame_planar16_3_generic;
format = GST_VIDEO_FORMAT_AYUV64;
}
} else { } else {
self->fill_frame = fill_frame_planar16_3_generic; self->fill_frame = fill_frame_planar16_3_generic;
format = GST_VIDEO_FORMAT_AYUV64; format = GST_VIDEO_FORMAT_AYUV64;