42 #include "libavutil/ffversion.h"
51 "ref[%p buf:%p data:%p linesize[%d, %d, %d, %d] pts:%"PRId64
" pos:%"PRId64,
57 ff_tlog(ctx,
" a:%d/%d s:%dx%d i:%c iskey:%d type:%c",
66 ff_tlog(ctx,
" cl:%"PRId64
"d n:%d r:%d",
72 ff_tlog(ctx,
"]%s", end ?
"\n" :
"");
83 return FFMPEG_CONFIGURATION;
88 #define LICENSE_PREFIX "libavfilter license: "
109 idx =
FFMIN(idx, *count);
117 if (!newpads || !newlinks)
120 memmove(*pads + idx + 1, *pads + idx,
sizeof(
AVFilterPad) * (*count - idx));
121 memmove(*links + idx + 1, *links + idx,
sizeof(
AVFilterLink*) * (*count - idx));
123 (*links)[idx] =
NULL;
126 for (i = idx + 1; i < *
count; i++)
128 (*(
unsigned *)((
uint8_t *) (*links)[i] + padidx_off))++;
144 "Media type mismatch between the '%s' filter output pad %d (%s) and the '%s' filter input pad %d (%s)\n",
201 unsigned filt_srcpad_idx,
unsigned filt_dstpad_idx)
207 "between the filter '%s' and the filter '%s'\n",
211 if ((ret =
avfilter_link(filt, filt_dstpad_idx, link->
dst, dstpad_idx)) < 0) {
220 filt->
inputs[filt_srcpad_idx] = link;
243 for (i = 0; i < filter->
nb_inputs; i ++) {
248 if (!link->
src || !link->
dst) {
250 "Not all input and output are properly linked (%d).\n", i);
261 case AVLINK_STARTINIT:
273 "with more than one input "
274 "must set config_props() "
275 "callbacks on all outputs\n");
278 }
else if ((ret = config_link(link)) < 0) {
280 "Failed to configure output pad on %s\n",
285 switch (link->
type) {
301 }
else if (!link->
w || !link->
h) {
303 "Video source filters must set their output link's "
304 "width and height\n");
320 if ((ret = config_link(link)) < 0) {
322 "Failed to configure input pad on %s\n",
349 "link[%p s:%dx%d fmt:%s %s->%s]%s",
350 link, link->
w, link->
h,
360 "link[%p r:%d cl:%s fmt:%s %s->%s]%s",
407 int i,
min = INT_MAX;
417 min =
FFMIN(min, val);
469 "Error when evaluating the expression '%s' for enable\n",
494 if(!strcmp(cmd,
"ping")){
495 char local_res[256] = {0};
499 res_len =
sizeof(local_res);
502 if (res == local_res)
505 }
else if(!strcmp(cmd,
"enable")) {
516 #if !FF_API_NOCONST_GET_NAME
527 if (!strcmp(f->
name, name))
544 last_filter = &filter->
next;
554 #if FF_API_OLD_FILTER_REGISTER
560 void avfilter_uninit(
void)
572 for (count = 0; pads->
name; count++)
612 #define OFFSET(x) offsetof(AVFilterContext, x)
613 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM
633 int *ret,
int nb_jobs)
637 for (i = 0; i < nb_jobs; i++) {
638 int r =
func(ctx, arg, i, nb_jobs);
713 #if FF_API_AVFILTER_OPEN
717 return *filter_ctx ? 0 :
AVERROR(ENOMEM);
755 for (i = 0; i < filter->
nb_inputs; i++) {
797 const char *shorthand =
NULL;
809 &parsed_key, &
value);
862 #if FF_API_AVFILTER_INIT_FILTER
915 "options, but options were provided: %s.\n", args);
919 #if FF_API_OLD_FILTER_OPTS || FF_API_OLD_FILTER_OPTS_ERROR
920 if ( !strcmp(filter->
filter->
name,
"format") ||
923 !strcmp(filter->
filter->
name,
"frei0r_src") ||
940 if (!strcmp(filter->
filter->
name,
"frei0r") ||
943 else if (!strcmp(filter->
filter->
name,
"frei0r_src"))
946 while (nb_leading--) {
949 p = copy + strlen(copy);
955 deprecated = strchr(p,
':') !=
NULL;
957 if (!strcmp(filter->
filter->
name,
"aevalsrc")) {
959 while ((p = strchr(p,
':')) && p[1] !=
':') {
960 const char *epos = strchr(p + 1,
'=');
961 const char *spos = strchr(p + 1,
':');
962 const int next_token_is_opt = epos && (!spos || epos < spos);
963 if (next_token_is_opt) {
971 if (p && *p ==
':') {
973 memmove(p, p + 1, strlen(p));
976 while ((p = strchr(p,
':')))
979 #if FF_API_OLD_FILTER_OPTS
982 "'|' to separate the list items.\n");
989 "'|' to separate the list items ('%s' instead of '%s')\n",
1027 return pads[pad_idx].
name;
1032 return pads[pad_idx].
type;
1062 switch (link->
type) {
1082 switch (link->
type) {
1104 "Processing command time:%f command:%s arg:%s\n",
1138 int insamples = frame->
nb_samples, inpos = 0, nb_samples;
1150 "Samples dropped due to memory allocation failure.\n");
1159 nb_samples =
FFMIN(insamples,
1163 nb_samples, nb_channels, link->
format);
1164 inpos += nb_samples;
1165 insamples -= nb_samples;
int(* poll_frame)(AVFilterLink *link)
Frame poll callback.
double * var_values
variable values for the enable expression
int frame_wanted_out
True if a frame is currently wanted on the output of this filter.
const char const char void * val
void ff_tlog_ref(void *ctx, AVFrame *ref, int end)
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
AVFilterContext * ff_filter_alloc(const AVFilter *filter, const char *inst_name)
Allocate a new filter context and return it.
This structure describes decoded (raw) audio or video data.
int thread_type
Type of multithreading allowed for filters in this graph.
static int default_filter_frame(AVFilterLink *link, AVFrame *frame)
void avfilter_free(AVFilterContext *filter)
Free a filter context.
#define AV_LOG_WARNING
Something somehow does not look correct.
void ff_video_frame_pool_uninit(FFVideoFramePool **pool)
Deallocate the video frame pool.
#define LIBAVUTIL_VERSION_INT
Main libavfilter public API header.
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
int max_samples
Maximum number of samples to filter at once.
int(* init)(AVFilterContext *ctx)
Filter initialization function.
int h
agreed upon image height
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
AVBufferRef * hw_device_ctx
For filters which will create hardware frames, sets the device the filter should create them in...
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type.
enum AVMediaType type
AVFilterPad type.
#define LIBAVFILTER_VERSION_INT
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.
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
AVFilterPad * dstpad
input pad on the dest filter
struct AVFilterChannelLayouts * in_channel_layouts
int thread_type
Type of multithreading being allowed/used.
int is_disabled
the enabled state from the last expression evaluation
#define AVFILTER_THREAD_SLICE
Process multiple parts of the frame concurrently.
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
struct AVFilterGraph * graph
filtergraph this filter belongs to
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
const char * name
Pad name.
int priv_size
size of private data to allocate for the filter
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
AVFilterLink ** inputs
array of pointers to input links
char * name
name of this filter instance
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static AVFilter ** last_filter
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together.
AVFilterPad * output_pads
array of output pads
const char * avfilter_license(void)
Return the libavfilter license.
int(* request_frame)(AVFilterLink *link)
Frame request callback.
static av_cold int end(AVCodecContext *avctx)
Accept to parse a value without a key; the key will then be returned as NULL.
const struct AVOption * option
a pointer to the first option specified in the class if any or NULL
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
static void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, ptrdiff_t low_stride, int16_t *high, ptrdiff_t high_stride, int len, uint8_t clip)
int flags
A combination of AVFILTER_FLAG_*.
void ff_command_queue_pop(AVFilterContext *filter)
static double av_q2d(AVRational a)
Convert rational to double.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int avfilter_config_links(AVFilterContext *filter)
Negotiate the media format, dimensions, etc of all inputs to a filter.
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
const AVFilter * avfilter_next(const AVFilter *prev)
Iterate over all registered filters.
#define AVERROR_EOF
End of file.
#define AV_LOG_VERBOSE
Detailed information.
int interlaced_frame
The content of the picture is interlaced.
void(* uninit)(AVFilterContext *ctx)
Filter uninitialization function.
static void copy(LZOContext *c, int cnt)
Copies bytes from input to output buffer with checking.
static void free_link(AVFilterLink *link)
int(* process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags)
Make the filter instance process a command.
const OptionDef options[]
A filter pad used for either input or output.
void ff_update_link_current_pts(AVFilterLink *link, int64_t pts)
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
A link between two filters.
static const AVClass avfilter_class
AVFilterPad * input_pads
array of input pads
int width
width and height of the video frame
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define avpriv_atomic_ptr_cas
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...
int min_samples
Minimum number of samples to filter at once.
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable; if left to 0/0, will be automatically copied from the first input of the source filter if it exists.
int sample_rate
samples per second
static const char * default_filter_name(void *filter_ctx)
AVFrame * ff_get_audio_buffer(AVFilterLink *link, int nb_samples)
Request an audio samples buffer with a specific set of permissions.
int avfilter_link_get_channels(AVFilterLink *link)
Get the number of channels of a link.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
unsigned nb_outputs
number of output pads
unsigned avfilter_version(void)
Return the LIBAVFILTER_VERSION_INT constant.
int64_t current_pts_us
Current timestamp of the link, as defined by the most recent frame(s), in AV_TIME_BASE units...
void * priv
private data for use by the filter
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int(* filter_frame)(AVFilterLink *link, AVFrame *frame)
Filtering callback.
char * enable_str
enable expression string
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
int(* init_dict)(AVFilterContext *ctx, AVDictionary **options)
Should be set instead of init by the filters that want to pass a dictionary of AVOptions to nested co...
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
int frame_wanted_in
True if a frame is currently wanted on the input of this filter.
simple assert() macros that are a bit more flexible than ISO C assert().
#define FF_TPRINTF_START(ctx, func)
struct AVFilterChannelLayouts * out_channel_layouts
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
AVFilterFormats * in_formats
Lists of formats and channel layouts supported by the input and output filters respectively.
static FilteringContext * filter_ctx
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.
static const uint8_t offset[127][2]
void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height)
Copy image in src_data to dst_data.
uint64_t channel_layout
Channel layout of the audio data.
int w
agreed upon image width
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
const AVOption * av_opt_find(void *obj, const char *name, const char *unit, int opt_flags, int search_flags)
Look for an option in an object.
common internal API header
static void * filter_child_next(void *obj, void *prev)
void avfilter_link_set_closed(AVFilterLink *link, int closed)
Set the closed field of a link.
audio channel layout utility functions
static int request_frame(AVFilterLink *outlink)
enum AVPictureType pict_type
Picture type of the frame.
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames...
unsigned nb_inputs
number of input pads
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
static AVFilter * first_filter
struct AVFilterCommand * next
static const AVOption avfilter_options[]
GLsizei GLboolean const GLfloat * value
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
void ff_avfilter_link_set_out_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the destination filter.
int needs_writable
The filter expects writable frames from its input link, duplicating data buffers if needed...
enum AVFilterLink::@151 init_state
stage of the initialization of the link properties (dimensions, etc)
static int ff_filter_frame_needs_framing(AVFilterLink *link, AVFrame *frame)
AVFilterContext * src
source filter
int partial_buf_size
Size of the partial buffer to allocate.
int(* init_opaque)(AVFilterContext *ctx, void *opaque)
Filter initialization function, alternative to the init() callback.
int age_index
Index in the age array.
AVFilterFormats * out_samplerates
AVFrame * partial_buf
Buffer partially filled with samples to achieve a fixed/minimum size.
int format
agreed upon media format
int avfilter_init_str(AVFilterContext *filter, const char *args)
Initialize a filter with the supplied parameters.
const AVFilterPad * inputs
List of inputs, terminated by a zeroed element.
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout)
Return a description of a channel layout.
const AVClass * avfilter_get_class(void)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
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.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
const AVClass * priv_class
A class for the private data, used to declare filter private AVOptions.
#define AV_LOG_INFO
Standard information.
AVFilterFormats * in_samplerates
Lists of channel layouts and sample rates used for automatic negotiation.
int offset
The offset relative to the context structure where the option value is stored.
void ff_tlog_link(void *ctx, AVFilterLink *link, int end)
void av_expr_free(AVExpr *e)
Free a parsed expression previously created with av_expr_parse().
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
AVFilterGraphInternal * internal
Opaque object for libavfilter internal use.
int av_frame_is_writable(AVFrame *frame)
Check if the frame data is writable.
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
char * av_strdup(const char *s)
Duplicate the string s.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
int ff_request_frame_to_filter(AVFilterLink *link)
uint8_t * data
The data buffer.
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
void ff_avfilter_graph_update_heap(AVFilterGraph *graph, AVFilterLink *link)
Update the position of a link in the age heap.
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.
int av_samples_copy(uint8_t **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.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
const char av_filter_ffversion[]
Describe the class of an AVClass context structure.
int sample_rate
Sample rate of the audio data.
int av_frame_get_channels(const AVFrame *frame)
static const char *const var_names[]
rational number numerator/denominator
struct AVFilter * next
Used by the filter registration system.
This struct describes a set or pool of "hardware" frames (i.e.
int(* func)(AVBPrint *dst, const char *in, const char *arg)
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
refcounted data buffer API
const char * name
Filter name.
const char * avfilter_configuration(void)
Return the libavfilter build-time configuration.
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
const char * avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx)
Get the name of an AVFilterPad.
AVFilterLink ** outputs
array of pointers to output links
void * av_calloc(size_t nmemb, size_t size)
Allocate a block of nmemb * size bytes with alignment suitable for all memory accesses (including vec...
static int64_t pts
Global timestamp for the audio frames.
static const int8_t filt[NUMTAPS]
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.
AVFilterInternal * internal
An opaque struct for libavfilter internal use.
static int default_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
enum AVMediaType type
filter media type
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options)
Initialize a filter with the supplied dictionary of options.
struct AVFilterGraph * graph
Graph the filter belongs to.
void av_opt_free(void *obj)
Free all allocated objects in obj.
static int set_enable_expr(AVFilterContext *ctx, const char *expr)
common internal and external API header
static int ref[MAX_W *MAX_W]
#define AVFILTER_FLAG_SUPPORT_TIMELINE
Handy mask to test whether the filter supports or no the timeline feature (internally or generically)...
struct AVFilterCommand * command_queue
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
#define AV_OPT_SEARCH_FAKE_OBJ
The obj passed to av_opt_find() is fake – only a double pointer to AVClass instead of a required poin...
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
uint64_t channel_layout
channel layout of current buffer (see libavutil/channel_layout.h)
int channels
Number of channels.
avfilter_execute_func * execute
void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter)
Remove a filter from a graph;.
avfilter_execute_func * thread_execute
#define AVERROR_OPTION_NOT_FOUND
Option not found.
int avfilter_register(AVFilter *filter)
Register a filter.
int top_field_first
If the content is interlaced, is top field displayed first.
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.
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression.
AVFilterContext * dst
dest filter
int64_t av_frame_get_pkt_pos(const AVFrame *frame)
void * enable
parsed expression (AVExpr*)
const AVClass * av_class
needed for av_log() and filters common options
static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
int key_frame
1 -> keyframe, 0-> not
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 avfilter_pad_count(const AVFilterPad *pads)
Get the number of elements in a NULL-terminated array of AVFilterPads (e.g.
static void * av_mallocz_array(size_t nmemb, size_t size)
AVFilterPad * srcpad
output pad on the source filter
const AVFilterPad * outputs
List of outputs, terminated by a zeroed element.
int ff_insert_pad(unsigned idx, unsigned *count, size_t padidx_off, AVFilterPad **pads, AVFilterLink ***links, AVFilterPad *newpad)
Insert a new pad.
int(* config_props)(AVFilterLink *link)
Link configuration callback.
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string.
#define av_malloc_array(a, b)
double time
time expressed in seconds
int ff_request_frame(AVFilterLink *link)
Request an input frame from the filter at the other end of the 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.
static const AVClass * filter_child_class_next(const AVClass *prev)
uint8_t ** extended_data
pointers to the data planes/channels.
int ff_poll_frame(AVFilterLink *link)
Poll a frame from the filter chain.
void avfilter_link_free(AVFilterLink **link)
Free the link in *link, and set its pointer to NULL.
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
int nb_samples
number of audio samples (per channel) described by this frame
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
const AVFilter * filter
the AVFilter of which this is an instance
int64_t current_pts
Current timestamp of the link, as defined by the most recent frame(s), in link time_base units...
int64_t frame_count
Number of past frames sent through the link.
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
#define AV_NOPTS_VALUE
Undefined timestamp value.
AVFilterFormats * out_formats
static int process_options(AVFilterContext *ctx, AVDictionary **options, const char *args)
simple arithmetic expression evaluator
char * arg
optional argument for the command
#define LIBAVFILTER_VERSION_MICRO