Quoting wm4 (2016-02-02 13:35:46)
> On Tue,  2 Feb 2016 12:41:28 +0100
> Anton Khirnov <[email protected]> wrote:
> 
> > ---
> >  libavfilter/avfilter.c  | 15 +++++++++++++++
> >  libavfilter/avfilter.h  |  7 +++++++
> >  libavfilter/buffersrc.c |  9 +++++++++
> >  3 files changed, 31 insertions(+)
> > 
> > diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> > index cd98d16..8eefc51 100644
> > --- a/libavfilter/avfilter.c
> > +++ b/libavfilter/avfilter.c
> > @@ -20,8 +20,10 @@
> >   */
> >  
> >  #include "libavutil/avstring.h"
> > +#include "libavutil/buffer.h"
> >  #include "libavutil/channel_layout.h"
> >  #include "libavutil/common.h"
> > +#include "libavutil/hwcontext.h"
> >  #include "libavutil/imgutils.h"
> >  #include "libavutil/internal.h"
> >  #include "libavutil/opt.h"
> > @@ -217,6 +219,17 @@ int avfilter_config_links(AVFilterContext *filter)
> >                      return ret;
> >                  }
> >  
> > +            if (link->src->nb_inputs && 
> > link->src->inputs[0]->hw_frames_ctx &&
> > +                !link->hw_frames_ctx) {
> > +                AVHWFramesContext *input_ctx = 
> > (AVHWFramesContext*)link->src->inputs[0]->hw_frames_ctx->data;
> > +
> > +                if (input_ctx->format == link->format) {
> > +                    link->hw_frames_ctx = 
> > av_buffer_ref(link->src->inputs[0]->hw_frames_ctx);
> > +                    if (!link->hw_frames_ctx)
> > +                        return AVERROR(ENOMEM);
> > +                }
> > +            }
> > +
> >              link->init_state = AVLINK_INIT;
> >          }
> >      }
> > @@ -481,6 +494,8 @@ static void free_link(AVFilterLink *link)
> >      if (link->dst)
> >          link->dst->inputs[link->dstpad - link->dst->input_pads] = NULL;
> >  
> > +    av_buffer_unref(&link->hw_frames_ctx);
> > +
> >      ff_formats_unref(&link->in_formats);
> >      ff_formats_unref(&link->out_formats);
> >      ff_formats_unref(&link->in_samplerates);
> > diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
> > index 1890858..0a0c415 100644
> > --- a/libavfilter/avfilter.h
> > +++ b/libavfilter/avfilter.h
> > @@ -35,6 +35,7 @@
> >  
> >  #include "libavutil/attributes.h"
> >  #include "libavutil/avutil.h"
> > +#include "libavutil/buffer.h"
> >  #include "libavutil/frame.h"
> >  #include "libavutil/log.h"
> >  #include "libavutil/samplefmt.h"
> > @@ -387,6 +388,12 @@ struct AVFilterLink {
> >       * Sinks can use it to set a default output frame rate.
> >       */
> >      AVRational frame_rate;
> > +
> > +    /**
> > +     * For hwaccel pixel formats, this should be a reference to the
> > +     * AVHWFramesContext describing the frames.
> > +     */
> > +    AVBufferRef *hw_frames_ctx;
> >  };
> >  
> >  /**
> > diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
> > index f5b852f..41ac9fd 100644
> > --- a/libavfilter/buffersrc.c
> > +++ b/libavfilter/buffersrc.c
> > @@ -52,6 +52,8 @@ typedef struct BufferSourceContext {
> >      char               *pix_fmt_str;
> >      AVRational        pixel_aspect;
> >  
> > +    AVBufferRef **hw_frames_ctx;
> > +
> >      /* audio only */
> >      int sample_rate;
> >      enum AVSampleFormat sample_fmt;
> > @@ -193,6 +195,7 @@ static const AVOption video_options[] = {
> >      { "sar",           "sample aspect ratio",    OFFSET(pixel_aspect),     
> > AV_OPT_TYPE_RATIONAL, { .dbl = 1 }, 0, DBL_MAX, V },
> >      { "time_base",     NULL,                     OFFSET(time_base),        
> > AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
> >      { "frame_rate",    NULL,                     OFFSET(frame_rate),       
> > AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
> > +    { "hw_frames_ctx", NULL,                     OFFSET(hw_frames_ctx),    
> > AV_OPT_TYPE_BINARY, .flags = V },
> 
> Really. Why can't the user set it directly?

Directly how/where?

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to