[FFmpeg-devel] [PATCH 1/2] libavcodec/jpeg2000dec: Enhance pix fmt selection

Gautam Ramakrishnan gautamramk at gmail.com
Sat Jul 4 20:31:14 EEST 2020


On Sat, Jul 4, 2020 at 12:02 AM Michael Niedermayer
<michael at niedermayer.cc> wrote:
>
> On Fri, Jul 03, 2020 at 01:05:12AM +0530, Gautam Ramakrishnan wrote:
> > On Thu, Jul 2, 2020 at 8:30 PM Michael Niedermayer
> > <michael at niedermayer.cc> wrote:
> > >
> > > On Thu, Jul 02, 2020 at 12:04:22AM +0530, gautamramk at gmail.com wrote:
> > > > From: Gautam Ramakrishnan <gautamramk at gmail.com>
> > > >
> > > > This patch assigns default pix format values when
> > > > a match does not take place.
> > > > ---
> > > >  libavcodec/jpeg2000dec.c | 9 +++++++++
> > > >  1 file changed, 9 insertions(+)
> > > >
> > > > diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
> > > > index 3f4a9ef96c..86f9170723 100644
> > > > --- a/libavcodec/jpeg2000dec.c
> > > > +++ b/libavcodec/jpeg2000dec.c
> > > > @@ -436,6 +436,15 @@ static int get_siz(Jpeg2000DecoderContext *s)
> > > >                  s->cdef[3] = 3;
> > > >                  i = 0;
> > > >              }
> > > > +        } else if (ncomponents == 3 && s->precision == 8) {
> > > > +            s->avctx->pix_fmt = AV_PIX_FMT_RGB24;
> > > > +            i = 0;
> > > > +        } else if (ncomponents == 2 && s->precision == 8) {
> > > > +            s->avctx->pix_fmt = AV_PIX_FMT_YA8;
> > > > +            i = 0;
> > >
> > > I dont think 2 and 3 component formats can ignore the subsampling
> > > of the planes.
> > > They have to match even if they are not 1
> > > if they mismatch the differing plane would need to be rescaled
> > >
> > > Thats unless iam missing something, which is possible
> > I do not have a very good understanding of colour formats. But,
> > I checked out p1_07.j2k, which is a 2 component image. The subsampling
> > of the 2 layers are different. As a result, both components have different
> > dimensions. As a reference, I decoded the pgx files and saw the output.
> > It does match with what would happen with this patch applied. However,
> > that is probably because the samples are designed just to test the working
> > of the decoder and not to actually account for intricacies of the pixel formats.
> > As a compromise, do you think if would make sense if this patch can be applied
> > if the subsampling of all the planes are the same, but not the same as
> > that of rgb24
> > or ya8. Atleast, in that case, we will not have differing planes.
> > In case of YCC formats, it makes sense that every subsampling rate must match.
> > However, for rgb, from my understanding, it could also mean that the
> > final image is
> > just scaled according to the sample separation rate?
>
> for RGB the image leaving the decoder each of the R, G and B planes must
> have the same size.
> for YA the luma and alpha planes similarly must have the same size.
>
> if all planes are considered not subsampled or they are all considered
> subsampled by the same amount is the same from the point of view of
> the pixel format.
It is clear. I shall add a check that ensures that the subsampling of all the
planes are the same.
> Also the decoder could rescale a single subsampled plane if its needed.
> Our jpeg decoder does that for some of these bizare cases
I did not understand which cases are referred here. This is important because
this is very relevant to the p1_07.j2k reference image.
> i hope that clarifies it
>
> thx




-- 
-------------
Gautam |


More information about the ffmpeg-devel mailing list