[FFmpeg-devel] [PATCH] Document and validate AVFrame plane pointers.

wm4 nfxjfg at googlemail.com
Fri Feb 26 23:41:41 CET 2016


On Fri, 26 Feb 2016 22:59:17 +0100
Reimar Döffinger <Reimar.Doeffinger at gmx.de> wrote:

> On Fri, Feb 26, 2016 at 10:39:41PM +0100, wm4 wrote:
> > On Fri, 26 Feb 2016 22:25:21 +0100
> > Reimar Döffinger <Reimar.Doeffinger at gmx.de> wrote:
> >   
> > > Check that the required plane pointers and only
> > > those are set up.
> > > 
> > > Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
> > > ---
> > >  libavcodec/utils.c | 14 ++++++++++++++
> > >  libavutil/frame.h  |  3 +++
> > >  2 files changed, 17 insertions(+)
> > > 
> > > diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> > > index af21cdd..af5ff93 100644
> > > --- a/libavcodec/utils.c
> > > +++ b/libavcodec/utils.c
> > > @@ -885,6 +885,20 @@ static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
> > >          avctx->sw_pix_fmt = avctx->pix_fmt;
> > >  
> > >      ret = avctx->get_buffer2(avctx, frame, flags);
> > > +    if (ret >= 0 && avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
> > > +        int i;
> > > +        int num_planes = av_pix_fmt_count_planes(frame->format);
> > > +        for (i = 0; i < num_planes; i++) {
> > > +            av_assert0(frame->data[i]);
> > > +        }
> > > +        // for formats without data like hwaccel allow
> > > +        // pointers to be non-NULL.
> > > +        for (i = num_planes; num_planes > 0 && i < num_planes; i++) {
> > > +            if (frame->data[i])
> > > +                av_log(avctx, AV_LOG_ERROR, "Buffer returned by get_buffer2() did not zero unused plane pointers\n");
> > > +            frame->data[i] = NULL;
> > > +        }
> > > +    }
> > >    
> > 
> > Can you move it to a separate function? Say, ff_verify_frame(). This
> > could get much more complicated too when checking AVBufferRef usage or
> > audio.  
> 
> Why ff_? If we've decided on it and use it in other places it
> might become a av_* function in libavutil.
> But until then I guess it should be a static function in that file?

For now it also might be used in the encoding functions. Don't know how
far it could go.


More information about the ffmpeg-devel mailing list