From 05e5bb6107b90f1f12348aae4373b17efbba08ff Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Mon, 27 Jan 2014 14:28:30 +0100 Subject: Fix decoding of some 8 < bpc < 16 signed j2k samples with libopenjpeg. No testcase known. Reviewed-by: Michael Bradshaw --- libavcodec/libopenjpegdec.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c index 7a4be52430..0389dbd2c6 100644 --- a/libavcodec/libopenjpegdec.c +++ b/libavcodec/libopenjpegdec.c @@ -180,7 +180,8 @@ static inline void libopenjpeg_copy_to_packed16(AVFrame *picture, opj_image_t *i img_ptr = (uint16_t*) (picture->data[0] + y*picture->linesize[0]); for (x = 0; x < picture->width; x++, index++) { for (c = 0; c < image->numcomps; c++) { - *img_ptr++ = 0x8000 * image->comps[c].sgnd + ((unsigned)image->comps[c].data[index] << adjust[c]); + *img_ptr++ = (1 << image->comps[c].prec - 1) * image->comps[c].sgnd + + (unsigned)image->comps[c].data[index] << adjust[c]; } } } @@ -217,7 +218,8 @@ static inline void libopenjpeg_copyto16(AVFrame *picture, opj_image_t *image) { for (y = 0; y < image->comps[index].h; y++) { img_ptr = (uint16_t*) (picture->data[index] + y * picture->linesize[index]); for (x = 0; x < image->comps[index].w; x++) { - *img_ptr = 0x8000 * image->comps[index].sgnd + ((unsigned)*comp_data << adjust[index]); + *img_ptr = (1 << image->comps[index].prec - 1) * image->comps[index].sgnd + + (unsigned)*comp_data << adjust[index]; img_ptr++; comp_data++; } -- cgit v1.2.3