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
