Am Mo., 20. Apr. 2020 um 21:38 Uhr schrieb <[email protected]>:
>
> From: Gautam Ramakrishnan <[email protected]>
>
> This patch adds support for decoding images
> with a Region of Interest. Allows decoding
> samples such as p0_03.j2k. This patch should
> fix ticket #4681.
The following inlined poc makes FFmpeg's output for this
sample bit-exact with kdu_render and opj_decompress.
jasper's output file looks ugly.
Carl Eugen
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
index af6dcee228..5380596c04 100644
--- a/libavcodec/jpeg2000dec.c
+++ b/libavcodec/jpeg2000dec.c
@@ -1921,7 +1921,9 @@ static inline void tile_codeblocks
int val = lrintf(*datap) + (1 << (cbps - 1));
\
/* DC level shift and clip see ISO
15444-1:2002 G.1.2 */ \
val = av_clip(val, 0, (1 << cbps) - 1);
\
- *dst = val << (precision - cbps);
\
+ *dst = val << ((precision < 8 ? 8 :
precision) - cbps); \
+if (precision < 8) \
+*dst |= *dst >> (8 - precision); \
datap++;
\
dst += pixelsize;
\
}
\
@@ -1930,7 +1932,9 @@ static inline void tile_codeblocks
int val = *i_datap + (1 << (cbps - 1));
\
/* DC level shift and clip see ISO
15444-1:2002 G.1.2 */ \
val = av_clip(val, 0, (1 << cbps) - 1);
\
- *dst = val << (precision - cbps);
\
+ *dst = val << ((precision < 8 ? 8 :
precision) - cbps); \
+if (precision < 8) \
+*dst |= *dst >> (8 - precision); \
i_datap++;
\
dst += pixelsize;
\
}
\
@@ -1972,7 +1976,7 @@ static int jpeg2000_decode_tile
}
if (s->precision <= 8) {
- write_frame_8(s, tile, picture, 8);
+ write_frame_8(s, tile, picture, s->precision);
} else {
int precision = picture->format == AV_PIX_FMT_XYZ12 ||
picture->format == AV_PIX_FMT_RGB48 ||
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".