37 #define FF_INTERNAL_FIELDS 1 46 #include "libavutil/ffversion.h" 53 "ref[%p buf:%p data:%p linesize[%d, %d, %d, %d] pts:%"PRId64
" pos:%"PRId64,
59 ff_tlog(ctx,
" a:%d/%d s:%dx%d i:%c iskey:%d type:%c",
68 ff_tlog(ctx,
" cl:%"PRId64
"d n:%d r:%d",
74 ff_tlog(ctx,
"]%s", end ?
"\n" :
"");
85 return FFMPEG_CONFIGURATION;
90 #define LICENSE_PREFIX "libavfilter license: " 111 idx =
FFMIN(idx, *count);
119 if (!newpads || !newlinks)
122 memmove(*pads + idx + 1, *pads + idx,
sizeof(
AVFilterPad) * (*count - idx));
123 memmove(*links + idx + 1, *links + idx,
sizeof(
AVFilterLink*) * (*count - idx));
125 (*links)[idx] =
NULL;
128 for (i = idx + 1; i < *
count; i++)
130 (*(
unsigned *)((
uint8_t *) (*links)[
i] + padidx_off))++;
150 "Media type mismatch between the '%s' filter output pad %d (%s) and the '%s' filter input pad %d (%s)\n",
186 #if FF_API_FILTER_GET_SET 207 filter->
outputs[i]->frame_blocked_in = 0;
213 if (link->status_in == status)
217 link->status_in_pts =
pts;
219 link->frame_blocked_in = 0;
228 link->status_out =
status;
241 unsigned filt_srcpad_idx,
unsigned filt_dstpad_idx)
247 "between the filter '%s' and the filter '%s'\n",
251 if ((ret =
avfilter_link(filt, filt_dstpad_idx, link->
dst, dstpad_idx)) < 0) {
283 for (i = 0; i < filter->
nb_inputs; i ++) {
288 if (!link->
src || !link->
dst) {
290 "Not all input and output are properly linked (%d).\n", i);
301 case AVLINK_STARTINIT:
313 "with more than one input " 314 "must set config_props() " 315 "callbacks on all outputs\n");
318 }
else if ((ret = config_link(link)) < 0) {
320 "Failed to configure output pad on %s\n",
325 switch (link->
type) {
341 }
else if (!link->
w || !link->
h) {
343 "Video source filters must set their output link's " 344 "width and height\n");
362 "should not be set by non-hwframe-aware filter");
369 if ((ret = config_link(link)) < 0) {
371 "Failed to configure input pad on %s\n",
387 "link[%p s:%dx%d fmt:%s %s->%s]%s",
388 link, link->
w, link->
h,
398 "link[%p r:%d cl:%s fmt:%s %s->%s]%s",
412 if (link->status_out)
413 return link->status_out;
414 if (link->status_in) {
424 return link->status_out;
435 int64_t
r = INT64_MAX;
438 if (ctx->
inputs[i]->status_out == status)
456 link->frame_blocked_in = 1;
462 if (ret !=
AVERROR(EAGAIN) && ret != link->status_in)
516 "Error when evaluating the expression '%s' for enable\n",
541 if(!strcmp(cmd,
"ping")){
542 char local_res[256] = {0};
546 res_len =
sizeof(local_res);
549 if (res == local_res)
552 }
else if(!strcmp(cmd,
"enable")) {
567 for (count = 0; pads->
name; count++)
586 #if FF_API_CHILD_CLASS_NEXT 587 static const AVClass *filter_child_class_next(
const AVClass *prev)
621 #define OFFSET(x) offsetof(AVFilterContext, x) 622 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM 623 #define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM 630 { .i64 = 0 }, 0, INT_MAX,
FLAGS },
631 {
"extra_hw_frames",
"Number of extra hardware frames to allocate for the user",
642 #if FF_API_CHILD_CLASS_NEXT 643 .child_class_next = filter_child_class_next,
650 int *
ret,
int nb_jobs)
654 for (i = 0; i < nb_jobs; i++) {
655 int r =
func(ctx, arg, i, nb_jobs);
772 for (i = 0; i < filter->
nb_inputs; i++) {
821 const char *shorthand =
NULL;
833 &parsed_key, &
value);
882 const char *
arg,
char *res,
int res_len,
int flags)
946 "options, but options were provided: %s.\n", args);
950 #if FF_API_OLD_FILTER_OPTS_ERROR 951 if ( !strcmp(filter->
filter->
name,
"format") ||
954 !strcmp(filter->
filter->
name,
"frei0r_src") ||
971 if (!strcmp(filter->
filter->
name,
"frei0r") ||
974 else if (!strcmp(filter->
filter->
name,
"frei0r_src"))
977 while (nb_leading--) {
980 p = copy + strlen(copy);
986 deprecated = strchr(p,
':') !=
NULL;
988 if (!strcmp(filter->
filter->
name,
"aevalsrc")) {
990 while ((p = strchr(p,
':')) && p[1] !=
':') {
991 const char *epos = strchr(p + 1,
'=');
992 const char *spos = strchr(p + 1,
':');
993 const int next_token_is_opt = epos && (!spos || epos < spos);
994 if (next_token_is_opt) {
1002 if (p && *p ==
':') {
1004 memmove(p, p + 1, strlen(p));
1007 while ((p = strchr(p,
':')))
1012 "'|' to separate the list items ('%s' instead of '%s')\n",
1049 return pads[pad_idx].
name;
1054 return pads[pad_idx].
type;
1155 unsigned nb_samples, nb_frames,
i, p;
1170 if (nb_samples < min)
1192 for (i = 0; i < nb_frames; i++) {
1199 if (p < nb_samples) {
1200 unsigned n = nb_samples - p;
1233 if (ret < 0 && ret != link->status_out) {
1245 unsigned out = 0, progress = 0;
1253 while (!in->status_out) {
1254 if (!filter->
outputs[out]->status_in) {
1279 for (i = 0; i < filter->
nb_inputs; i++) {
1284 for (i = 0; i < filter->
nb_inputs; i++) {
1285 if (filter->
inputs[i]->status_in && !filter->
inputs[i]->status_out) {
1292 !filter->
outputs[i]->frame_blocked_in) {
1450 return *rstatus = 0;
1451 if (link->status_out)
1452 return *rstatus = link->status_out;
1453 if (!link->status_in)
1454 return *rstatus = 0;
1455 *rstatus = link->status_out = link->status_in;
1480 return samples >= min || (link->status_in &&
samples);
1499 if (link->fifo.samples_skipped) {
1520 if (link->status_in)
1545 switch (link->
type) {
1564 switch (link->
type) {
1590 "Processing command time:%f command:%s arg:%s\n",
1602 int64_t
pts = frame->
pts;
1627 if (link->status_out)
1630 link->frame_blocked_in = 0;
1636 if (!link->status_in)
1637 link->status_in =
status;
1642 return link->status_in;
1651 int default_pool_size)
int64_t frame_count_in
Number of past frames sent through the link.
double * var_values
variable values for the enable expression
int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe)
Take a frame from the link's FIFO and update the link's stats.
int frame_wanted_out
True if a frame is currently wanted on the output of this filter.
Accept to parse a value without a key; the key will then be returned as NULL.
#define FF_FILTER_FLAG_HWFRAME_AWARE
The filter is aware of hardware frames, and any hardware frame context should not be automatically pr...
void ff_tlog_ref(void *ctx, AVFrame *ref, int end)
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
static void copy(const float *p1, float *p2, const int length)
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)
static int ff_filter_activate_default(AVFilterContext *filter)
void avfilter_free(AVFilterContext *filter)
Free a filter context.
int64_t pkt_pos
reordered pos from the last AVPacket that has been input into the decoder
#define AV_LOG_WARNING
Something somehow does not look correct.
#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 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.
void ff_framequeue_skip_samples(FFFrameQueue *fq, size_t samples, AVRational time_base)
Skip samples from the first frame in the queue.
AVBufferRef * hw_device_ctx
For filters which will create hardware frames, sets the device the filter should create them in...
enum AVMediaType type
AVFilterPad type.
#define LIBAVFILTER_VERSION_INT
int(* activate)(AVFilterContext *ctx)
Filter activation function.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
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.
AVFilterFormatsConfig outcfg
Lists of supported formats / etc.
int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min)
Test if enough samples are available on the link.
AVFilterPad * dstpad
input pad on the dest filter
static void error(const char *err)
int thread_type
Type of multithreading being allowed/used.
if it could not because there are no more frames
void(* uninit)(AVFilterContext *ctx)
Filter uninitialization function.
int is_disabled
the enabled state from the last expression evaluation
void ff_inlink_request_frame(AVFilterLink *link)
Mark that a frame is wanted on the link.
int nb_threads
Max number of threads allowed in this filter instance.
void * av_calloc(size_t nmemb, size_t size)
Non-inlined equivalent of av_mallocz_array().
#define AVFILTER_THREAD_SLICE
Process multiple parts of the frame concurrently.
static const AVClass * filter_child_class_iterate(void **iter)
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...
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...
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.
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
void ff_frame_pool_uninit(FFFramePool **pool)
Deallocate the frame pool.
const char * avfilter_license(void)
Return the libavfilter license.
unsigned ready
Ready status of the filter.
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
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
const struct AVOption * option
a pointer to the first option specified in the class if any or NULL
GLsizei GLboolean const GLfloat * value
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
int flags
A combination of AVFILTER_FLAG_*.
void ff_command_queue_pop(AVFilterContext *filter)
static void filter_unblock(AVFilterContext *filter)
Clear frame_blocked_in on all outputs.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
int nb_threads
Maximum number of threads used by filters in this graph.
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.
#define AVERROR_EOF
End of file.
#define AV_LOG_VERBOSE
Detailed information.
int interlaced_frame
The content of the picture is interlaced.
int(* preinit)(AVFilterContext *ctx)
Filter pre-initialization function.
static void free_link(AVFilterLink *link)
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
int ff_framequeue_add(FFFrameQueue *fq, AVFrame *frame)
Add a frame.
int extra_hw_frames
Sets the number of extra hardware frames which the filter will allocate on its output links for use i...
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.
int ff_inlink_evaluate_timeline_at_frame(AVFilterLink *link, const AVFrame *frame)
Evaluate the timeline expression of the link for the time and properties of the frame.
A link between two filters.
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.
AVFilterPad * input_pads
array of input pads
static int forward_status_change(AVFilterContext *filter, AVFilterLink *in)
static void consume_update(AVFilterLink *link, const AVFrame *frame)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
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.
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering
static __device__ float fabs(float a)
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...
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...
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.
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. ...
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
simple assert() macros that are a bit more flexible than ISO C assert().
#define FF_TPRINTF_START(ctx, func)
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
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.
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 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.
void ff_framequeue_free(FFFrameQueue *fq)
Free the queue and all queued frames.
common internal API header
static void * filter_child_next(void *obj, void *prev)
int initial_pool_size
Initial size of the frame pool.
#define AV_OPT_FLAG_RUNTIME_PARAM
a generic parameter which can be set by the user at runtime
void avfilter_link_set_closed(AVFilterLink *link, int closed)
Set the closed field of a link.
int(* config_props)(AVFilterLink *link)
Link configuration callback.
int channels
number of audio channels, only used for audio.
audio channel layout utility functions
static int request_frame(AVFilterLink *outlink)
enum AVPictureType pict_type
Picture type of the frame.
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
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.
struct AVFilterCommand * next
static const AVOption avfilter_options[]
int ff_inlink_queued_samples(AVFilterLink *link)
AVFrame * ff_framequeue_take(FFFrameQueue *fq)
Take the first frame in the queue.
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
int(* init)(AVFilterContext *ctx)
Filter initialization function.
static int ff_request_frame_to_filter(AVFilterLink *link)
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...
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
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
int flags_internal
Additional flags for avfilter internal use only.
AVFilterContext * src
source filter
static int ff_filter_frame_to_filter(AVFilterLink *link)
int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)
Make sure a frame is writable.
int age_index
Index in the age array.
enum AVFilterLink::@200 init_state
stage of the initialization of the link properties (dimensions, etc)
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
AVFrame * ff_inlink_peek_frame(AVFilterLink *link, size_t idx)
Access a frame in the link fifo without consuming it.
int format
agreed upon media format
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 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.
char * av_strdup(const char *s)
Duplicate a string.
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)
int(* process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags)
Make the filter instance process a command.
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.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
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.
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[]
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
int ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame)
Process the commands queued in the link up to the time of the frame.
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Describe the class of an AVClass context structure.
int sample_rate
Sample rate of the audio data.
static int take_samples(AVFilterLink *link, unsigned min, unsigned max, AVFrame **rframe)
static const char *const var_names[]
int ff_outlink_get_status(AVFilterLink *link)
Get the status on an output link.
Rational number (pair of numerator and denominator).
const AVFilter * av_filter_iterate(void **opaque)
Iterate over all registered filters.
they must not be accessed directly The fifo field contains the frames that are queued in the input for processing by the filter The status_in and status_out fields contains the queued status(EOF or error) of the link
This struct describes a set or pool of "hardware" frames (i.e.
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.
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
static uint64_t ff_framequeue_queued_samples(const FFFrameQueue *fq)
Get the number of queued samples.
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
size_t ff_inlink_queued_frames(AVFilterLink *link)
Get the number of frames available on the link.
const char * avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx)
Get the name of an AVFilterPad.
AVFrame * ff_framequeue_peek(FFFrameQueue *fq, size_t idx)
Access a frame in the queue, without removing it.
AVFilterLink ** outputs
array of pointers to output links
int avfilter_link_get_channels(AVFilterLink *link)
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.
#define flags(name, subs,...)
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)
int(* filter_frame)(AVFilterLink *link, AVFrame *frame)
Filtering callback.
enum AVMediaType type
filter media type
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int(* init_opaque)(AVFilterContext *ctx, void *opaque)
Filter initialization function, alternative to the init() callback.
int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options)
Initialize a filter with the supplied dictionary of options.
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
struct AVFilterGraph * graph
Graph the filter belongs to.
void av_opt_free(void *obj)
Free all allocated objects in obj.
const OptionDef options[]
static int set_enable_expr(AVFilterContext *ctx, const char *expr)
static size_t ff_framequeue_queued_frames(const FFFrameQueue *fq)
Get the number of queued frames.
static const int8_t filt[NUMTAPS *2]
common internal and external API header
static int ref[MAX_W *MAX_W]
Utilties for rational number calculation.
#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.
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.
#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 poi...
uint64_t channel_layout
channel layout of current buffer (see libavutil/channel_layout.h)
int channels
Number of channels.
AVFilterFormatsConfig incfg
Lists of supported formats / etc.
avfilter_execute_func * execute
static int samples_ready(AVFilterLink *link, unsigned min)
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 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
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(* request_frame)(AVFilterLink *link)
Frame request callback.
int avfilter_pad_count(const AVFilterPad *pads)
Get the number of elements in a NULL-terminated array of AVFilterPads (e.g.
AVFilterPad * srcpad
output pad on the source filter
const AVFilterPad * outputs
List of outputs, terminated by a zeroed element.
Filter the word “frame” indicates either a video frame or a group of audio samples
int ff_insert_pad(unsigned idx, unsigned *count, size_t padidx_off, AVFilterPad **pads, AVFilterLink ***links, AVFilterPad *newpad)
Insert a new pad.
#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.
FFFrameQueueGlobal frame_queues
#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 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.
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.
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
void ff_framequeue_init(FFFrameQueue *fq, FFFrameQueueGlobal *fqg)
Init a frame queue and attach it to a global structure.
int ff_filter_activate(AVFilterContext *filter)
uint8_t ** extended_data
pointers to the data planes/channels.
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
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...
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.
static int process_options(AVFilterContext *ctx, AVDictionary **options, const char *args)
simple arithmetic expression evaluator
void * av_mallocz_array(size_t nmemb, size_t size)
char * arg
optional argument for the command
#define LIBAVFILTER_VERSION_MICRO