diff options
author | Vilius Grigaliƫnas <vilius.grigaliunas@gmail.com> | 2015-03-03 10:19:47 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-03 23:20:51 +0100 |
commit | ff6b08141a30920112999342b8ce6e890a5a367d (patch) | |
tree | 7469e75f0079572ceb5ec5b51218d6c9261beccc | |
parent | 37ffe7f90a5708f3b51f277dac377a5454b5c0d5 (diff) | |
download | ffmpeg-ff6b08141a30920112999342b8ce6e890a5a367d.tar.gz |
acvodec/lipopenjpeg: Fix pixel value shift for 12-bit pixel formats
This fixes pixel values not being properly shifted in
libopenjpeg_copyto16 and libopenjpeg_copy_to_packed16 methods.
Pixel formats like xyz12le need to be shifted by AVComponentDescriptor::shift
to get the correct values.
Reviewed-by: Michael Bradshaw <mjbshaw@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/libopenjpegdec.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c index 02b1cebe76..1cd1b9b009 100644 --- a/libavcodec/libopenjpegdec.c +++ b/libavcodec/libopenjpegdec.c @@ -184,10 +184,11 @@ static inline void libopenjpeg_copy_to_packed8(AVFrame *picture, opj_image_t *im static inline void libopenjpeg_copy_to_packed16(AVFrame *picture, opj_image_t *image) { uint16_t *img_ptr; + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(picture->format); int index, x, y, c; int adjust[4]; for (x = 0; x < image->numcomps; x++) - adjust[x] = FFMAX(FFMIN(av_pix_fmt_desc_get(picture->format)->comp[x].depth_minus1 + 1 - image->comps[x].prec, 8), 0); + adjust[x] = FFMAX(FFMIN(desc->comp[x].depth_minus1 + 1 - image->comps[x].prec, 8), 0) + desc->comp[x].shift; for (y = 0; y < picture->height; y++) { index = y * picture->width; @@ -220,10 +221,11 @@ static inline void libopenjpeg_copyto8(AVFrame *picture, opj_image_t *image) { static inline void libopenjpeg_copyto16(AVFrame *picture, opj_image_t *image) { int *comp_data; uint16_t *img_ptr; + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(picture->format); int index, x, y; int adjust[4]; for (x = 0; x < image->numcomps; x++) - adjust[x] = FFMAX(FFMIN(av_pix_fmt_desc_get(picture->format)->comp[x].depth_minus1 + 1 - image->comps[x].prec, 8), 0); + adjust[x] = FFMAX(FFMIN(desc->comp[x].depth_minus1 + 1 - image->comps[x].prec, 8), 0) + desc->comp[x].shift; for (index = 0; index < image->numcomps; index++) { comp_data = image->comps[index].data; |