Commit 7412a4a4 authored by Michael Bradshaw's avatar Michael Bradshaw Committed by Carl Eugen Hoyos

libopenjpegdec.c: Correctly scale gray16 output if precision < 16

Fixes ticket #2943.
Signed-off-by: 's avatarCarl Eugen Hoyos <cehoyos@ag.or.at>
parent d73565d5
...@@ -207,12 +207,16 @@ static inline void libopenjpeg_copyto16(AVFrame *picture, opj_image_t *image) { ...@@ -207,12 +207,16 @@ static inline void libopenjpeg_copyto16(AVFrame *picture, opj_image_t *image) {
int *comp_data; int *comp_data;
uint16_t *img_ptr; uint16_t *img_ptr;
int index, x, y; int index, x, y;
int adjust[4];
for (x = 0; x < image->numcomps; x++)
adjust[x] = FFMAX(FFMIN(16 - image->comps[x].prec, 8), 0);
for (index = 0; index < image->numcomps; index++) { for (index = 0; index < image->numcomps; index++) {
comp_data = image->comps[index].data; comp_data = image->comps[index].data;
for (y = 0; y < image->comps[index].h; y++) { for (y = 0; y < image->comps[index].h; y++) {
img_ptr = (uint16_t*) (picture->data[index] + y * picture->linesize[index]); img_ptr = (uint16_t*) (picture->data[index] + y * picture->linesize[index]);
for (x = 0; x < image->comps[index].w; x++) { for (x = 0; x < image->comps[index].w; x++) {
*img_ptr = *comp_data; *img_ptr = *comp_data << adjust[index];
img_ptr++; img_ptr++;
comp_data++; comp_data++;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment