Go to the documentation of this file.
51 "ref[%p buf:%p data:%p linesize[%d, %d, %d, %d] pts:%"PRId64,
53 ref->linesize[0],
ref->linesize[1],
ref->linesize[2],
ref->linesize[3],
57 ff_tlog(
ctx,
" a:%d/%d s:%dx%d i:%c iskey:%d type:%c",
58 ref->sample_aspect_ratio.num,
ref->sample_aspect_ratio.den,
65 if (
ref->nb_samples) {
105 unsigned idx = *count;
113 if (!newpads || !newlinks) {
120 (*links)[idx] =
NULL;
129 return append_pad(&
f->nb_inputs, &
f->input_pads, &
f->inputs, p);
140 return append_pad(&
f->nb_outputs, &
f->output_pads, &
f->outputs, p);
159 if (
src->nb_outputs <= srcpad ||
dst->nb_inputs <= dstpad ||
160 src->outputs[srcpad] ||
dst->inputs[dstpad])
169 if (
src->output_pads[srcpad].type !=
dst->input_pads[dstpad].type) {
171 "Media type mismatch between the '%s' filter output pad %d (%s) and the '%s' filter input pad %d (%s)\n",
182 src->outputs[srcpad] =
dst->inputs[dstpad] =
link;
186 link->srcpad = &
src->output_pads[srcpad];
187 link->dstpad = &
dst->input_pads[dstpad];
188 link->type =
src->output_pads[srcpad].type;
215 #if FF_API_LINK_PUBLIC
253 for (
i = 0;
i <
filter->nb_outputs;
i++) {
293 unsigned filt_srcpad_idx,
unsigned filt_dstpad_idx)
296 unsigned dstpad_idx =
link->dstpad -
link->dst->input_pads;
299 "between the filter '%s' and the filter '%s'\n",
302 link->dst->inputs[dstpad_idx] =
NULL;
305 link->dst->inputs[dstpad_idx] =
link;
311 link->dstpad = &
filt->input_pads[filt_srcpad_idx];
312 filt->inputs[filt_srcpad_idx] =
link;
316 if (
link->outcfg.formats)
318 &
filt->outputs[filt_dstpad_idx]->outcfg.formats);
319 if (
link->outcfg.color_spaces)
321 &
filt->outputs[filt_dstpad_idx]->outcfg.color_spaces);
322 if (
link->outcfg.color_ranges)
324 &
filt->outputs[filt_dstpad_idx]->outcfg.color_ranges);
325 if (
link->outcfg.samplerates)
327 &
filt->outputs[filt_dstpad_idx]->outcfg.samplerates);
328 if (
link->outcfg.channel_layouts)
330 &
filt->outputs[filt_dstpad_idx]->outcfg.channel_layouts);
341 for (
i = 0;
i <
filter->nb_inputs;
i ++) {
350 "Not all input and output are properly linked (%d).\n",
i);
362 case AVLINK_STARTINIT:
371 if (!(config_link =
link->srcpad->config_props)) {
372 if (
link->src->nb_inputs != 1) {
374 "with more than one input "
375 "must set config_props() "
376 "callbacks on all outputs\n");
379 }
else if ((
ret = config_link(
link)) < 0) {
381 "Failed to configure output pad on %s\n",
386 switch (
link->type) {
404 "Video source filters must set their output link's "
405 "width and height\n");
420 if (
link->src->nb_inputs &&
425 "should not be set by non-hwframe-aware filter");
434 if ((config_link =
link->dstpad->config_props))
435 if ((
ret = config_link(
link)) < 0) {
437 "Failed to configure input pad on %s\n",
454 "link[%p s:%dx%d fmt:%s %s->%s]%s",
457 link->src ?
link->src->filter->name :
"",
458 link->dst ?
link->dst->filter->name :
"",
465 "link[%p r:%d cl:%s fmt:%s %s->%s]%s",
468 link->src ?
link->src->filter->name :
"",
469 link->dst ?
link->dst->filter->name :
"",
507 for (
i = 0;
i <
ctx->nb_inputs;
i++) {
515 for (
i = 0;
i <
ctx->nb_inputs;
i++) {
532 if (
link->srcpad->request_frame)
534 else if (
link->src->inputs[0])
576 "with filter '%s'\n",
ctx->filter->name);
596 "Error when evaluating the expression '%s' for enable\n",
604 ctx->enable_str = expr_dup;
610 if(!strcmp(cmd,
"ping")){
611 char local_res[256] = {0};
615 res_len =
sizeof(local_res);
618 if (res == local_res)
621 }
else if(!strcmp(cmd,
"enable")) {
623 }
else if(
filter->filter->process_command) {
631 return is_output ?
filter->nb_outputs :
filter->nb_inputs;
637 return ctx->name ?
ctx->name :
ctx->filter->name;
643 if (!prev &&
ctx->filter &&
ctx->filter->priv_class &&
ctx->priv)
654 return f->priv_class;
659 #define OFFSET(x) offsetof(AVFilterContext, x)
660 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM
661 #define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
668 { .i64 = 0 }, 0, INT_MAX,
FLAGS, .unit =
"threads" },
669 {
"auto",
"autodetect a suitable number of threads to use", 0,
AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags =
FLAGS, .unit =
"threads"},
670 {
"extra_hw_frames",
"Number of extra hardware frames to allocate for the user",
687 int *
ret,
int nb_jobs)
691 for (
i = 0;
i < nb_jobs;
i++) {
736 if (
ret->nb_inputs ) {
738 if (!
ret->input_pads)
746 if (
ret->nb_outputs) {
748 if (!
ret->output_pads)
806 if (
filter->filter->uninit)
809 for (
i = 0;
i <
filter->nb_inputs;
i++) {
814 for (
i = 0;
i <
filter->nb_outputs;
i++) {
820 if (
filter->filter->priv_class)
842 if (
ctx->nb_threads > 0)
843 return FFMIN(
ctx->nb_threads,
ctx->graph->nb_threads);
844 return ctx->graph->nb_threads;
858 char *parsed_key, *
value;
860 const char *shorthand =
NULL;
861 int additional_flags = 0;
863 if (priv_class && (o =
av_opt_next(&priv_class, o))) {
872 &parsed_key, &
value);
901 const char *
arg,
char *res,
int res_len,
int flags)
905 if (!
ctx->filter->priv_class)
935 ctx->thread_type = 0;
938 if (
ctx->filter->init)
943 if (
ctx->enable_str) {
984 return pads[pad_idx].
name;
989 return pads[pad_idx].
type;
1009 #if FF_API_FRAME_PKT
1022 #if FF_API_FRAME_PKT
1069 if (strcmp(
link->dst->filter->name,
"buffersink") &&
1070 strcmp(
link->dst->filter->name,
"format") &&
1071 strcmp(
link->dst->filter->name,
"idet") &&
1072 strcmp(
link->dst->filter->name,
"null") &&
1073 strcmp(
link->dst->filter->name,
"scale")) {
1128 unsigned nb_samples, nb_frames,
i, p;
1142 if (nb_samples +
frame->nb_samples >
max) {
1143 if (nb_samples <
min)
1147 nb_samples +=
frame->nb_samples;
1164 for (
i = 0;
i < nb_frames;
i++) {
1168 p +=
frame->nb_samples;
1171 if (p < nb_samples) {
1172 unsigned n = nb_samples - p;
1206 if (ret < 0 && ret != li->status_out) {
1219 unsigned out = 0, progress = 0;
1223 if (!
filter->nb_outputs) {
1255 for (
i = 0;
i <
filter->nb_outputs;
i++) {
1260 for (
int j = 0; j <
filter->nb_inputs; j++)
1266 for (
i = 0;
i <
filter->nb_inputs;
i++) {
1272 for (
i = 0;
i <
filter->nb_inputs;
i++) {
1279 for (
i = 0;
i <
filter->nb_outputs;
i++) {
1428 filter->filter->activate));
1442 return *rstatus = 0;
1446 return *rstatus = 0;
1547 switch (
link->type) {
1584 "Processing command time:%f command:%s arg:%s\n",
1598 li->frame_wanted_out = 1;
1639 int default_pool_size)
1649 if (
frames->initial_pool_size == 0) {
1654 frames->initial_pool_size = default_pool_size;
1667 void *
arg,
int *
ret,
int nb_jobs)
static void error(const char *err)
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
int(* func)(AVBPrint *dst, const char *in, const char *arg)
int av_samples_copy(uint8_t *const *dst, uint8_t *const *src, int dst_offset, int src_offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt)
Copy samples from src to dst.
AVFrame * ff_get_audio_buffer(AVFilterLink *link, int nb_samples)
Request an audio samples buffer with a specific set of permissions.
#define FF_ENABLE_DEPRECATION_WARNINGS
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_BPRINT_SIZE_UNLIMITED
unsigned avfilter_filter_pad_count(const AVFilter *filter, int is_output)
Get the number of elements in an AVFilter's inputs or outputs array.
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
static FilterLinkInternal * ff_link_internal(AVFilterLink *link)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static const AVClass * filter_child_class_iterate(void **iter)
const char * avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx)
Get the name of an AVFilterPad.
struct AVExpr * enable
variable values for the enable expression
static int evaluate_timeline_at_frame(AVFilterLink *link, const AVFrame *frame)
Evaluate the timeline expression of the link for the time and properties of the frame.
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
static void update_link_current_pts(FilterLinkInternal *li, int64_t pts)
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int ff_filter_opt_parse(void *logctx, const AVClass *priv_class, AVDictionary **options, const char *args)
Parse filter options into a dictionary.
int() avfilter_action_func(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
A function pointer passed to the AVFilterGraph::execute callback to be executed multiple times,...
#define AVERROR_EOF
End of file.
uint8_t * data
The data buffer.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
The exact code depends on how similar the blocks are and how related they are to the and needs to apply these operations to the correct inlink or outlink if there are several Macros are available to factor that when no extra processing is inlink
int64_t current_pts
Current timestamp of the link, as defined by the most recent frame(s), in link time_base units.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int is_disabled
MUST NOT be accessed from outside avfilter.
int ff_filter_activate(AVFilterContext *filter)
int64_t sample_count_in
Number of past samples sent through the link.
enum AVColorSpace colorspace
YUV colorspace type.
This structure describes decoded (raw) audio or video data.
static void free_link(AVFilterLink *link)
static void link_free(AVFilterLink **link)
static void command_queue_pop(AVFilterContext *filter)
int max_samples
Maximum number of samples to filter at once.
const AVOption * av_opt_find2(void *obj, const char *name, const char *unit, int opt_flags, int search_flags, void **target_obj)
Look for an option in an object.
int ff_request_frame(AVFilterLink *link)
Request an input frame from the filter at the other end of the link.
#define AV_LOG_VERBOSE
Detailed information.
void(* filter)(uint8_t *src, int stride, int qscale)
void ff_framequeue_init(FFFrameQueue *fq, FFFrameQueueGlobal *fqg)
Init a frame queue and attach it to a global structure.
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
static const char * default_filter_name(void *filter_ctx)
int nb_channels
Number of channels in this layout.
A link between two filters.
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
AVFilterContext * ff_filter_alloc(const AVFilter *filter, const char *inst_name)
Allocate a new filter context and return it.
int64_t current_pts_us
Current timestamp of the link, as defined by the most recent frame(s), in AV_TIME_BASE units.
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, AVBPrint *bp)
bprint variant of av_channel_layout_describe().
int ff_inoutlink_check_flow(AVFilterLink *inlink, AVFilterLink *outlink)
Check for flow control between input and output.
#define AVFILTERPAD_FLAG_FREE_NAME
The pad's name is allocated and should be freed generically.
Link properties exposed to filter code, but not external callers.
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
int av_expr_parse(AVExpr **expr, const char *s, const char *const *const_names, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), int log_offset, void *log_ctx)
Parse an expression.
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe)
Take a frame from the link's FIFO and update the link's stats.
void ff_framequeue_skip_samples(FFFrameQueue *fq, size_t samples, AVRational time_base)
Skip samples from the first frame in the queue.
int ff_append_inpad(AVFilterContext *f, AVFilterPad *p)
Append a new input/output pad to the filter's list of such pads.
static int set_enable_expr(FFFilterContext *ctxi, const char *expr)
int offset
Native access only.
int av_opt_get_key_value(const char **ropts, const char *key_val_sep, const char *pairs_sep, unsigned flags, char **rkey, char **rval)
Extract a key-value pair from the beginning of a string.
char * enable_str
enable expression string
if it could not because there are no more frames
int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned filt_srcpad_idx, unsigned filt_dstpad_idx)
Insert a filter in the middle of an existing link.
const AVFilter * av_filter_iterate(void **opaque)
Iterate over all registered filters.
static int take_samples(FilterLinkInternal *li, unsigned min, unsigned max, AVFrame **rframe)
int extra_hw_frames
Sets the number of extra hardware frames which the filter will allocate on its output links for use i...
void av_opt_free(void *obj)
Free all allocated objects in obj.
#define AVERROR_OPTION_NOT_FOUND
Option not found.
static FilteringContext * filter_ctx
static int request_frame_to_filter(AVFilterLink *link)
AVChannelLayout ch_layout
Channel layout of the audio data.
AVFilterContext p
The public AVFilterContext.
#define AVFILTER_THREAD_SLICE
Process multiple parts of the frame concurrently.
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
void av_expr_free(AVExpr *e)
Free a parsed expression previously created with av_expr_parse().
A filter pad used for either input or output.
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
int ff_filter_config_links(AVFilterContext *filter)
Negotiate the media format, dimensions, etc of all inputs to a filter.
int samples_skipped
Indicate that samples are skipped.
int ff_outlink_frame_wanted(AVFilterLink *link)
Test if a frame is wanted on an output link.
avfilter_execute_func * thread_execute
static int filter_activate_default(AVFilterContext *filter)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min)
Test if enough samples are available on the link.
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
void ff_inlink_request_frame(AVFilterLink *link)
Mark that a frame is wanted on the link.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
int flags
Flags modifying the (de)muxer behaviour.
int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags)
Make the filter instance process a command.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int flags
A combination of AVFILTER_FLAG_*.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
@ AV_OPT_FLAG_IMPLICIT_KEY
Accept to parse a value without a key; the key will then be returned as NULL.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a link
AVFrame * ff_framequeue_take(FFFrameQueue *fq)
Take the first frame in the queue.
int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)
Make sure a frame is writable.
AVFrame * ff_inlink_peek_frame(AVFilterLink *link, size_t idx)
Access a frame in the link fifo without consuming it.
void ff_avfilter_graph_update_heap(AVFilterGraph *graph, struct FilterLinkInternal *li)
Update the position of a link in the age heap.
#define LIBAVUTIL_VERSION_INT
static void filter_unblock(AVFilterContext *filter)
Clear frame_blocked_in on all outputs.
Describe the class of an AVClass context structure.
static __device__ float fabs(float a)
int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, AVFrame **rframe)
Take samples from the link's FIFO and update the link's stats.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
#define AV_DICT_MULTIKEY
Allow to store several equal keys in the dictionary.
static void consume_update(FilterLinkInternal *li, const AVFrame *frame)
int ff_framequeue_add(FFFrameQueue *fq, AVFrame *frame)
Add a frame.
void ff_framequeue_free(FFFrameQueue *fq)
Free the queue and all queued frames.
Rational number (pair of numerator and denominator).
int ff_append_inpad_free_name(AVFilterContext *f, AVFilterPad *p)
static FFFilterGraph * fffiltergraph(AVFilterGraph *graph)
@ AV_CLASS_STATE_INITIALIZED
Object initialization has finished and it is now in the 'runtime' stage.
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
static const AVClass avfilter_class
int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts)
Test and acknowledge the change of status on the link.
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
size_t ff_inlink_queued_frames(AVFilterLink *link)
Get the number of frames available on the link.
static void tlog_ref(void *ctx, AVFrame *ref, int end)
static FilterLink * ff_filter_link(AVFilterLink *link)
@ AV_CLASS_CATEGORY_FILTER
int status_out
Link output status.
#define FF_FILTER_FLAG_HWFRAME_AWARE
The filter is aware of hardware frames, and any hardware frame context should not be automatically pr...
struct AVFilterCommand * command_queue
void ff_frame_pool_uninit(FFFramePool **pool)
Deallocate the frame pool.
#define AVFILTERPAD_FLAG_NEEDS_WRITABLE
The filter expects writable frames from its input link, duplicating data buffers if needed.
#define AV_OPT_FLAG_FILTERING_PARAM
A generic parameter which can be set by the user for filtering.
static int default_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
static int64_t guess_status_pts(AVFilterContext *ctx, int status, AVRational link_time_base)
void ff_inlink_set_status(AVFilterLink *link, int status)
Set the status on an input link.
int ff_inlink_check_available_frame(AVFilterLink *link)
Test if a frame is available on the link.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
int age_index
Index in the age array.
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
int av_frame_copy(AVFrame *dst, const AVFrame *src)
Copy the frame data from src to dst.
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
int sample_rate
Sample rate of the audio data.
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together.
#define AV_NOPTS_VALUE
Undefined timestamp value.
FFFrameQueueGlobal frame_queues
AVRational time_base
Time base for the timestamps in this frame.
int av_frame_is_writable(AVFrame *frame)
Check if the frame data is writable.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
int ff_filter_process_command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
Generic processing of user supplied commands that are set in the same way as the filter options.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames.
#define AV_LOG_INFO
Standard information.
int avfilter_init_str(AVFilterContext *filter, const char *args)
Initialize a filter with the supplied parameters.
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
AVFrame * ff_framequeue_peek(FFFrameQueue *fq, size_t idx)
Access a frame in the queue, without removing it.
int frame_blocked_in
If set, the source filter can not generate a frame as is.
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
#define ff_tlog_link(ctx, link, end)
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
static const AVOption avfilter_options[]
static int append_pad(unsigned *count, AVFilterPad **pads, AVFilterLink ***links, AVFilterPad *newpad)
Append a new pad.
#define i(width, name, range_min, range_max)
static void link_set_out_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the destination filter.
static void * filter_child_next(void *obj, void *prev)
void ff_avfilter_link_set_in_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
static FFFilterContext * fffilterctx(AVFilterContext *ctx)
uint8_t ** extended_data
pointers to the data planes/channels.
int status_in
Link input status.
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
static uint64_t ff_framequeue_queued_samples(const FFFrameQueue *fq)
Get the number of queued samples.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
int frame_wanted_out
True if a frame is currently wanted on the output of this filter.
#define FF_TPRINTF_START(ctx, func)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int flags
A combination of AVFILTERPAD_FLAG_* flags.
static const int8_t filt[NUMTAPS *2]
const char * name
Pad name.
int ff_inlink_queued_samples(AVFilterLink *link)
static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li_in)
#define AV_FRAME_FLAG_INTERLACED
A flag to mark frames whose content is interlaced.
void * av_calloc(size_t nmemb, size_t size)
This struct describes a set or pool of "hardware" frames (i.e.
unsigned ready
Ready status of the filter.
enum AVMediaType type
AVFilterPad type.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output links
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
static int request_frame(AVFilterLink *outlink)
static size_t ff_framequeue_queued_frames(const FFFrameQueue *fq)
Get the number of queued frames.
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter)
Remove a filter from a graph;.
avfilter_execute_func * execute
int ff_filter_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
const struct AVOption * option
An array of options for the structure or NULL.
int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options)
Initialize a filter with the supplied dictionary of options.
#define AV_OPT_FLAG_RUNTIME_PARAM
A generic parameter which can be set by the user at runtime.
@ AV_OPT_TYPE_INT
Underlying C type is int.
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
static int ref[MAX_W *MAX_W]
struct AVFilterGraph * graph
Graph the filter belongs to.
Filter the word “frame” indicates either a video frame or a group of audio samples
enum FilterLinkInternal::@309 init_state
stage of the initialization of the link properties (dimensions, etc)
char * arg
optional argument for the command
static int filter_frame_framed(AVFilterLink *link, AVFrame *frame)
int ff_outlink_get_status(AVFilterLink *link)
Get the status on an output link.
#define FF_DISABLE_DEPRECATION_WARNINGS
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
char * av_strdup(const char *s)
Duplicate a string.
void avfilter_free(AVFilterContext *filter)
Free a filter context.
int ff_append_outpad(AVFilterContext *f, AVFilterPad *p)
static int default_filter_frame(AVFilterLink *link, AVFrame *frame)
int ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame)
Process the commands queued in the link up to the time of the frame.
#define AVFILTER_FLAG_SUPPORT_TIMELINE
Handy mask to test whether the filter supports or no the timeline feature (internally or generically)...
int ff_append_outpad_free_name(AVFilterContext *f, AVFilterPad *p)
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
static const char *const var_names[]
static int samples_ready(FilterLinkInternal *link, unsigned min)
struct FFFramePool * frame_pool
@ AV_OPT_TYPE_FLAGS
Underlying C type is unsigned int.
#define flags(name, subs,...)
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable.
FFFrameQueue fifo
Queue of frames waiting to be filtered.
int min_samples
Minimum number of samples to filter at once.
const AVFilter * filter
the AVFilter of which this is an instance
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
const AVClass * avfilter_get_class(void)
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
int64_t status_in_pts
Timestamp of the input status change.
const AVDictionaryEntry * av_dict_iterate(const AVDictionary *m, const AVDictionaryEntry *prev)
Iterate over a dictionary.
#define AV_DICT_DONT_STRDUP_KEY
Take ownership of a key that's been allocated with av_malloc() or another memory allocation function.
int64_t frame_count_in
Number of past frames sent through the link.
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
static int filter_frame_to_filter(AVFilterLink *link)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
void ff_filter_set_ready(AVFilterContext *filter, unsigned priority)
Mark a filter ready and schedule it for activation.
int ff_filter_init_hw_frames(AVFilterContext *avctx, AVFilterLink *link, int default_pool_size)
Perform any additional setup required for hardware frames.
double time
time expressed in seconds