[FFmpeg-devel] [PATCH] Do not override pix_fmt in rawdec.c

Tomas Härdin tomas.hardin
Wed Jun 9 16:41:39 CEST 2010


On Wed, 2010-06-09 at 15:38 +0200, Michael Niedermayer wrote:
> On Wed, Jun 09, 2010 at 11:38:14AM +0200, Tomas H?rdin wrote:
> > On Mon, 2010-06-07 at 22:23 +0200, Michael Niedermayer wrote:
> > > >  avcodec.h |    5 ++++-
> > > >  rawdec.c  |    2 ++
> > > >  2 files changed, 6 insertions(+), 1 deletion(-)
> > > > d44a164fed7c1a5cd69f362d521ef66aad6f42b2  rawdec_pix_fmt2.patch
> > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> > > > index a6f6b04..d0aa162 100644
> > > > --- a/libavcodec/avcodec.h
> > > > +++ b/libavcodec/avcodec.h
> > > > @@ -1120,8 +1120,11 @@ typedef struct AVCodecContext {
> > > >  
> > > >      /**
> > > >       * Pixel format, see PIX_FMT_xxx.
> > > > +     * May be set by the demuxer, especially when demuxing rawvideo.
> > > > +     * Some demuxers use bits_per_coded_sample or codec_tag for this purpose instead.
> > > 
> > > > +     * Some codecs may override this value. The rawvideo decoder will not.
> > > 
> > > i really would like to avoid adding special cases
> > > 
> > > 
> > > >       * - encoding: Set by user.
> > > > -     * - decoding: Set by libavcodec.
> > > > +     * - decoding: Set by user and/or libavcodec.
> > > 
> > > i would say
> > > Set by user if known, overridden by libavcodec if known
> > 
> > OK. I changed the explanation a bit as well. Patch attached. I also
> > reran the regtests against latest SVN, which worked fine.
> > 
> > For future reference, I searched for all files where both
> > CODEC_ID_RAWVIDEO and bits_per_coded_sample are used in a video context.
> > This in order to hopefully simplify rawdec.c later.
> > 
> > AVI: avidec.c, riff.c
> > MOV: mov.c, movenc.c
> > Others: utils.c, nsvdec.c, vwfcap.c, rawdec.c
> > Soon: mxf.c, mxfdec.c
> > 
> > /Tomas
> 
> >  avcodec.h |    4 +++-
> >  rawdec.c  |    2 ++
> >  2 files changed, 5 insertions(+), 1 deletion(-)
> > 08923a4cccf43a6a6853a1794b17fef2dffa623e  rawdec_pix_fmt3.patch
> > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> > index 5e77fb3..ffc2e07 100644
> > --- a/libavcodec/avcodec.h
> > +++ b/libavcodec/avcodec.h
> > @@ -1121,8 +1121,10 @@ typedef struct AVCodecContext {
> >  
> >      /**
> >       * Pixel format, see PIX_FMT_xxx.
> > +     * May be set by the demuxer if known from headers.
> > +     * May be overriden by the decoder if it knows better.
> >       * - encoding: Set by user.
> > -     * - decoding: Set by libavcodec.
> > +     * - decoding: Set by user if known, overridden by libavcodec if known
> >       */
> >      enum PixelFormat pix_fmt;
> 
> ok
> 
> 
> >  
> > diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
> > index ab13bdc..69b72d1 100644
> > --- a/libavcodec/rawdec.c
> > +++ b/libavcodec/rawdec.c
> > @@ -73,12 +73,14 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
> >  {
> >      RawVideoContext *context = avctx->priv_data;
> >  
> > +    if (avctx->pix_fmt == PIX_FMT_NONE) {
> >      if (avctx->codec_tag == MKTAG('r','a','w',' '))
> >          avctx->pix_fmt = find_pix_fmt(pix_fmt_bps_mov, avctx->bits_per_coded_sample);
> >      else if (avctx->codec_tag)
> >          avctx->pix_fmt = find_pix_fmt(ff_raw_pix_fmt_tags, avctx->codec_tag);
> >      else if (avctx->bits_per_coded_sample)
> >          avctx->pix_fmt = find_pix_fmt(pix_fmt_bps_avi, avctx->bits_per_coded_sample);
> > +    }
> 
> i think this skips too much, considering the new documentation

Fair enough. I made the attached patch only skip the dubious
bits_per_coded_sample step instead since that is only used by demuxers
that don't know pix_fmt. Re-ran tests as well.

/Tomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rawdec_pix_fmt4.patch
Type: text/x-patch
Size: 1293 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100609/78c95fda/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100609/78c95fda/attachment.pgp>



More information about the ffmpeg-devel mailing list