[FFmpeg-devel] [PATCH 2/5] libavcodec/jpeg2000dec.c: Modify image dimensions
Michael Niedermayer
michael at niedermayer.cc
Sat Jun 27 13:42:04 EEST 2020
On Mon, Jun 22, 2020 at 11:33:38PM +0200, Carl Eugen Hoyos wrote:
> Am Mo., 22. Juni 2020 um 23:32 Uhr schrieb Michael Niedermayer
> <michael at niedermayer.cc>:
> >
> > On Mon, Jun 22, 2020 at 12:12:05AM +0530, gautamramk at gmail.com wrote:
> > > From: Gautam Ramakrishnan <gautamramk at 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 ?
>
> At least p1_01.j2k which has one component.
Ok, will apply
ive also tested the patchset over night with afl
Thanks
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Good people do not need laws to tell them to act responsibly, while bad
people will find a way around the laws. -- Plato
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200627/11d85a65/attachment.sig>
More information about the ffmpeg-devel
mailing list