On Wed, Jun 24, 2009 at 1:27 PM, Michael Niedermayer<michaelni@gmx.at> wrote:
On Sun, Jun 21, 2009 at 04:35:20PM +0000, Jai Menon wrote:
Hi,
Attached patch fixes decoding of files where component precision > 8.
Possible test files are :
codestreams_profile1/p1_04.j2k testfiles_jp2/file6.jp2 testfiles_jp2/file7.jp2
Posting here for comments.
-- Regards,
Jai
j2kdec.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) 10381c8c4a6486b49b3013bc0683cb6d62f9161e high_precision.patch Index: j2kdec.c =================================================================== --- j2kdec.c (revision 4434) +++ j2kdec.c (working copy) @@ -54,7 +54,7 @@ uint8_t cbps[4]; ///< bits per sample in particular components uint8_t sgnd[4]; ///< if a component is signed uint8_t properties[4]; - + int precision; int ncomponents; int tile_width, tile_height; ///< tile size int numXtiles, numYtiles;
@@ -225,6 +225,8 @@ for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i, YRsiz_i uint8_t x = bytestream_get_byte(&s->buf); s->cbps[i] = (x & 0x7f) + 1; + if (s->cbps[i] > s->precision) + s->precision = s->cbps[i]; s->sgnd[i] = (x & 0x80) == 1; if (bytestream_get_byte(&s->buf) != 1) return -1;
FFMAX
Changed locally.
[...]
@@ -806,6 +815,26 @@
line += s->picture.linesize[0]; } + } else { + for (; y < tile->comp[0].coord[1][1] - s->image_offset_y; y++) { + uint16_t *dst; + x = tile->comp[0].coord[0][0] - s->image_offset_x; + dst = line + x * s->ncomponents * 2; + for (; x < tile->comp[0].coord[0][1] - s->image_offset_x; x++) { + for (compno = 0; compno < s->ncomponents; compno++) {
+ *src[compno] = av_rescale(*src[compno], (1 << 16) - 1, + (1 << s->cbps[compno]) - 1);
av_rescale is too slow
So just (*src[compno]/((1 << s->cbps[compno]) - 1)) * ((1 << 16) - 1) ?
+ *src[compno] += 1 << 15; + if (*src[compno] < 0) + *src[compno] = 0; + else if (*src[compno] >= (1 << 16)) + *src[compno] = (1 << 16) - 1; + *dst++ = *src[compno]++;
av_clip()
Ah yes, fixed. I'll change it in the other case as well. Thanks for the review. -- Regards, Jai