From: Gautam Ramakrishnan <[email protected]>
libopenjpeg2000 uses ceiling division while dividing tile
co-ordinates with the sample separation. Also, corrections
were made to the WRITE_FRAME macro.
---
libavcodec/jpeg2000dec.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
index 05e85f4317..546a646668 100644
--- a/libavcodec/jpeg2000dec.c
+++ b/libavcodec/jpeg2000dec.c
@@ -978,12 +978,11 @@ static int init_tile(Jpeg2000DecoderContext *s, int
tileno)
comp->coord_o[0][1] = tile->coord[0][1];
comp->coord_o[1][0] = tile->coord[1][0];
comp->coord_o[1][1] = tile->coord[1][1];
- if (compno) {
- comp->coord_o[0][0] /= s->cdx[compno];
- comp->coord_o[0][1] /= s->cdx[compno];
- comp->coord_o[1][0] /= s->cdy[compno];
- comp->coord_o[1][1] /= s->cdy[compno];
- }
+
+ comp->coord_o[0][0] = ff_jpeg2000_ceildiv(comp->coord_o[0][0],
s->cdx[compno]);
+ comp->coord_o[0][1] = ff_jpeg2000_ceildiv(comp->coord_o[0][1],
s->cdx[compno]);
+ comp->coord_o[1][0] = ff_jpeg2000_ceildiv(comp->coord_o[1][0],
s->cdy[compno]);
+ comp->coord_o[1][1] = ff_jpeg2000_ceildiv(comp->coord_o[1][1],
s->cdy[compno]);
comp->coord[0][0] = ff_jpeg2000_ceildivpow2(comp->coord_o[0][0],
s->reduction_factor);
comp->coord[0][1] = ff_jpeg2000_ceildivpow2(comp->coord_o[0][1],
s->reduction_factor);
@@ -1936,18 +1935,23 @@ static inline void
tile_codeblocks(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile
float *datap = comp->f_data;
\
int32_t *i_datap = comp->i_data;
\
int cbps = s->cbps[compno];
\
- int w = tile->comp[compno].coord[0][1] -
s->image_offset_x; \
+ int w = tile->comp[compno].coord[0][1] -
\
+ ff_jpeg2000_ceildiv(s->image_offset_x,
s->cdx[compno]); \
+ int h = tile->comp[compno].coord[1][1] -
\
+ ff_jpeg2000_ceildiv(s->image_offset_y,
s->cdy[compno]); \
int plane = 0;
\
\
if (planar)
\
plane = s->cdef[compno] ? s->cdef[compno]-1 :
(s->ncomponents-1); \
\
- y = tile->comp[compno].coord[1][0] - s->image_offset_y /
s->cdy[compno]; \
+ y = tile->comp[compno].coord[1][0] -
\
+ ff_jpeg2000_ceildiv(s->image_offset_y, s->cdy[compno]);
\
line = (PIXEL *)picture->data[plane] + y *
(picture->linesize[plane] / sizeof(PIXEL));\
- for (; y < tile->comp[compno].coord[1][1] - s->image_offset_y;
y++) { \
+ for (; y < h; y++) {
\
PIXEL *dst;
\
\
- x = tile->comp[compno].coord[0][0] - s->image_offset_x /
s->cdx[compno]; \
+ x = tile->comp[compno].coord[0][0] -
\
+ ff_jpeg2000_ceildiv(s->image_offset_x, s->cdx[compno]);
\
dst = line + x * pixelsize + compno*!planar;
\
\
if (codsty->transform == FF_DWT97) {
\
--
2.17.1
_______________________________________________
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".