On Mon, Jun 22, 2020 at 12:12:05AM +0530, gautamr...@gmail.com wrote: > From: Gautam Ramakrishnan <gautamr...@gmail.com> > > Reduce image size of the image if all components have > a non zero sample separation. This is to replicate the > output of opj_decompress. > --- > libavcodec/jpeg2000dec.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c > index ab36009a2d..05e85f4317 100644 > --- a/libavcodec/jpeg2000dec.c > +++ b/libavcodec/jpeg2000dec.c > @@ -269,6 +269,8 @@ static int get_siz(Jpeg2000DecoderContext *s) > const enum AVPixelFormat *possible_fmts = NULL; > int possible_fmts_nb = 0; > int ret; > + int o_dimx, o_dimy; //original image dimensions. > + int dimx, dimy; > > if (bytestream2_get_bytes_left(&s->g) < 36) { > av_log(s->avctx, AV_LOG_ERROR, "Insufficient space for SIZ\n"); > @@ -371,11 +373,18 @@ static int get_siz(Jpeg2000DecoderContext *s) > } > > /* compute image size with reduction factor */ > - ret = ff_set_dimensions(s->avctx, > - ff_jpeg2000_ceildivpow2(s->width - s->image_offset_x, > - s->reduction_factor), > - ff_jpeg2000_ceildivpow2(s->height - s->image_offset_y, > - s->reduction_factor)); > + o_dimx = ff_jpeg2000_ceildivpow2(s->width - s->image_offset_x, > + s->reduction_factor); > + o_dimy = ff_jpeg2000_ceildivpow2(s->height - s->image_offset_y, > + s->reduction_factor); > + dimx = ff_jpeg2000_ceildiv(o_dimx, s->cdx[0]); > + dimy = ff_jpeg2000_ceildiv(o_dimy, s->cdy[0]); > + for (i = 1; i < s->ncomponents; i++) { > + dimx = FFMAX(dimx, ff_jpeg2000_ceildiv(o_dimx, s->cdx[i])); > + dimy = FFMAX(dimy, ff_jpeg2000_ceildiv(o_dimy, s->cdy[i])); > + } > + > + ret = ff_set_dimensions(s->avctx, dimx, dimy); > if (ret < 0) > return ret;
I think the resolution, the pixel format and any odd-format-handling code probably need to be adjusted together. Changing just the dimension code to select a higher resolution when chroma or alpha planes are of higher resolution then luma. Will probably not work if there is neither a pixel format selected that represents that nor code to compensate for this (as mjpeg does) but i might be missing something is there some testcase this fixes or improves ? thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB No great genius has ever existed without some touch of madness. -- Aristotle
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".