X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavfilter%2Finternal.h;h=a377f9b2bab7e2213f54a0ba6ed662c0e83793ad;hb=edb434873238876790f6a17bb65490cc29a1d176;hp=216a3554fc9cfba10552e7ee933fe5a104710651;hpb=565e4993c63f797e2d50ad2f1e8f62fdbe299666;p=ffmpeg diff --git a/libavfilter/internal.h b/libavfilter/internal.h index 216a3554fc9..a377f9b2bab 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -24,9 +24,11 @@ * internal API functions */ +#include "libavutil/internal.h" #include "avfilter.h" +#include "thread.h" +#include "version.h" -#if !FF_API_AVFILTERPAD_PUBLIC /** * A filter pad used for either input or output. */ @@ -43,33 +45,13 @@ struct AVFilterPad { */ enum AVMediaType type; - /** - * Minimum required permissions on incoming buffers. Any buffer with - * insufficient permissions will be automatically copied by the filter - * system to a new buffer which provides the needed access permissions. - * - * Input pads only. - */ - int min_perms; - - /** - * Permissions which are not accepted on incoming buffers. Any buffer - * which has any of these permissions set will be automatically copied - * by the filter system to a new buffer which does not have those - * permissions. This can be used to easily disallow buffers with - * AV_PERM_REUSE. - * - * Input pads only. - */ - int rej_perms; - /** * Callback function to get a video buffer. If NULL, the filter system will * use avfilter_default_get_video_buffer(). * * Input video pads only. */ - AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h); + AVFrame *(*get_video_buffer)(AVFilterLink *link, int w, int h); /** * Callback function to get an audio buffer. If NULL, the filter system will @@ -77,8 +59,7 @@ struct AVFilterPad { * * Input audio pads only. */ - AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms, - int nb_samples); + AVFrame *(*get_audio_buffer)(AVFilterLink *link, int nb_samples); /** * Filtering callback. This is where a filter receives a frame with @@ -90,7 +71,7 @@ struct AVFilterPad { * must ensure that samplesref is properly unreferenced on error if it * hasn't been passed on to another filter. */ - int (*filter_frame)(AVFilterLink *link, AVFilterBufferRef *frame); + int (*filter_frame)(AVFilterLink *link, AVFrame *frame); /** * Frame poll callback. This returns the number of immediately available @@ -135,16 +116,29 @@ struct AVFilterPad { * input pads only. */ int needs_fifo; + + /** + * The filter expects writable frames from its input link, + * duplicating data buffers if needed. + * + * input pads only. + */ + int needs_writable; }; -#endif -/** default handler for freeing audio/video buffer when there are no references left */ -void ff_avfilter_default_free_buffer(AVFilterBuffer *buf); +struct AVFilterGraphInternal { + void *thread; + avfilter_execute_func *thread_execute; +}; + +struct AVFilterInternal { + avfilter_execute_func *execute; +}; /** Tell is a format is contained in the provided list terminated by -1. */ int ff_fmt_is_in(int fmt, const int *fmts); -#define FF_DPRINTF_START(ctx, func) av_dlog(NULL, "%-16s: ", #func) +#define FF_DPRINTF_START(ctx, func) av_log(NULL, AV_LOG_TRACE, "%-16s: ", #func) void ff_dlog_link(void *ctx, AVFilterLink *link, int end); @@ -171,9 +165,6 @@ static inline void ff_insert_inpad(AVFilterContext *f, unsigned index, { ff_insert_pad(index, &f->nb_inputs, offsetof(AVFilterLink, dstpad), &f->input_pads, &f->inputs, p); -#if FF_API_FOO_COUNT - f->input_count = f->nb_inputs; -#endif } /** Insert a new output pad for the filter. */ @@ -182,9 +173,6 @@ static inline void ff_insert_outpad(AVFilterContext *f, unsigned index, { ff_insert_pad(index, &f->nb_outputs, offsetof(AVFilterLink, srcpad), &f->output_pads, &f->outputs, p); -#if FF_API_FOO_COUNT - f->output_count = f->nb_outputs; -#endif } /** @@ -215,6 +203,27 @@ int ff_request_frame(AVFilterLink *link); * @return >= 0 on success, a negative AVERROR on error. The receiving filter * is responsible for unreferencing frame in case of error. */ -int ff_filter_frame(AVFilterLink *link, AVFilterBufferRef *frame); +int ff_filter_frame(AVFilterLink *link, AVFrame *frame); + +/** + * Allocate a new filter context and return it. + * + * @param filter what filter to create an instance of + * @param inst_name name to give to the new filter context + * + * @return newly created filter context or NULL on failure + */ +AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name); + +/** + * Remove a filter from a graph; + */ +void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter); + +/** + * The filter is aware of hardware frames, and any hardware frame context + * should not be automatically propagated through it. + */ +#define FF_FILTER_FLAG_HWFRAME_AWARE (1 << 0) #endif /* AVFILTER_INTERNAL_H */