64 int i, j, *fmts,
count = 0;
66 for (i = 0; i < n; i++) {
74 for (j = 0, i = 0; i < n; i++) {
102 int stream_idx, sink_idx;
104 for (stream_idx = 0; stream_idx < lavfi->
nb_sinks; stream_idx++) {
123 const AVFilter *buffersink, *abuffersink;
128 #define FAIL(ERR) { ret = ERR; goto end; } 138 "Only one of the graph or graph_file options must be specified\n");
143 AVBPrint graph_file_pb;
174 &input_links, &output_links, avctx)) < 0)
179 "Open inputs in the filtergraph are not acceptable\n");
184 for (n = 0, inout = output_links; inout; n++, inout = inout->next);
196 for (
i = 0;
i < n;
i++)
201 for (
i = 0, inout = output_links; inout;
i++, inout = inout->next) {
202 int stream_idx = 0,
suffix = 0, use_subcc = 0;
203 sscanf(inout->name,
"out%n%d%n", &
suffix, &stream_idx, &
suffix);
206 "Invalid outpad name '%s'\n", inout->name);
209 if (inout->name[
suffix]) {
210 if (!strcmp(inout->name +
suffix,
"+subcc")) {
214 "Invalid outpad suffix '%s'\n", inout->name);
219 if ((
unsigned)stream_idx >= n) {
221 "Invalid index was specified in output '%s', " 222 "must be a non-negative value < %d\n",
229 "An output with stream index %d was already specified\n",
239 for (
i = 0, inout = output_links; inout;
i++, inout = inout->next) {
251 for (
i = 0, inout = output_links; inout;
i++, inout = inout->next) {
290 "Output '%s' is not a video or audio output, not yet supported\n", inout->name);
295 if ((ret =
avfilter_link(inout->filter_ctx, inout->pad_idx, sink, 0)) < 0)
340 "Could not find PCM codec for sample format %s.\n",
383 double min_pts = DBL_MAX;
384 int stream_idx, min_pts_sink_idx = 0;
398 for (i = 0; i < lavfi->
nb_sinks; i++) {
409 ff_dlog(avctx,
"EOF sink_idx:%d\n", i);
415 ff_dlog(avctx,
"sink_idx:%d time:%f\n", i, d);
420 min_pts_sink_idx =
i;
423 if (min_pts == DBL_MAX)
426 ff_dlog(avctx,
"min_pts_sink_idx:%i\n", min_pts_sink_idx);
430 st = avctx->
streams[stream_idx];
444 memcpy(pkt->
data, frame->
data[0], size);
448 if (frame_metadata) {
457 metadata, size)) < 0) {
478 #define OFFSET(x) offsetof(LavfiContext, x) 480 #define DEC AV_OPT_FLAG_DECODING_PARAM 505 .priv_class = &lavfi_class,
int64_t probesize
Maximum size of the data read from input for determining the input container format.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
int av_image_copy_to_buffer(uint8_t *dst, int dst_size, const uint8_t *const src_data[4], const int src_linesize[4], enum AVPixelFormat pix_fmt, int width, int height, int align)
Copy image data from an image into a buffer.
int64_t pkt_pos
reordered pos from the last AVPacket that has been input into the decoder
AVFilterGraph * avfilter_graph_alloc(void)
Allocate a filter graph.
#define LIBAVUTIL_VERSION_INT
Main libavfilter public API header.
Memory handling functions.
int64_t pos
byte position in stream, -1 if unknown
static av_cold int lavfi_read_close(AVFormatContext *avctx)
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx)
Check validity and configure all the links and formats in the graph.
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL.
AVRational sample_aspect_ratio
Video only.
#define av_opt_set_int_list(obj, name, val, term, flags)
Set a binary option to an integer list.
int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size)
Read contents of h into print buffer, up to max_size bytes, or up to EOF.
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
const char * av_default_item_name(void *ptr)
Return the context name.
#define AVIO_FLAG_READ
read-only
void avfilter_graph_free(AVFilterGraph **graph)
Free a graph, destroy its links, and set *graph to NULL.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
memory buffer sink API for audio and video
AVInputFormat ff_lavfi_demuxer
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
int av_buffersink_get_sample_rate(const AVFilterContext *ctx)
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
int id
Format-specific stream ID.
static const AVClass lavfi_class
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
AVStream ** streams
A list of all streams in the file.
int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx)
Create and add a filter instance into an existing graph.
Structure to hold side data for an AVFrame.
char * protocol_whitelist
',' separated list of allowed protocols.
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
#define AVERROR_EOF
End of file.
static av_cold int read_close(AVFormatContext *ctx)
AVDictionary * metadata
metadata.
int av_buffersink_get_h(const AVFilterContext *ctx)
int av_buffersink_get_format(const AVFilterContext *ctx)
uint64_t channel_layout
Audio only.
Main libavdevice API header.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align)
Return the size in bytes of the amount of data required to store an image with the given parameters...
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AV_BPRINT_SIZE_UNLIMITED
static int create_subcc_streams(AVFormatContext *avctx)
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
char * url
input or output URL.
int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel for the pixel format described by pixdesc, including any padding ...
ATSC A53 Part 4 Closed Captions.
enum AVMediaType codec_type
General type of the encoded data.
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Round to nearest and halfway cases away from zero.
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
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.
int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
Get a frame with filtered data from sink and put it in frame.
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
common internal API header
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
static av_cold int lavfi_read_header(AVFormatContext *avctx)
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int channels
number of audio channels, only used for audio.
audio channel layout utility functions
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
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
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
static int read_header(FFV1Context *f)
A linked-list of the inputs/outputs of the filter chain.
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
AVRational av_buffersink_get_sample_aspect_ratio(const AVFilterContext *ctx)
char * av_strdup(const char *s)
Duplicate a string.
A list of zero terminated key/value strings.
AVSampleFormat
Audio sample formats.
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
Return the PCM codec associated with a sample format.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
uint64_t av_buffersink_get_channel_layout(const AVFilterContext *ctx)
uint8_t * av_packet_pack_dictionary(AVDictionary *dict, int *size)
Pack a dictionary for use in side_data.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Describe the class of an AVClass context structure.
enum AVMediaType av_buffersink_get_type(const AVFilterContext *ctx)
Rational number (pair of numerator and denominator).
static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
FF_ENABLE_DEPRECATION_WARNINGS int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as a packet side data.
int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
const char * name
Filter name.
int av_buffersink_get_w(const AVFilterContext *ctx)
static enum AVPixelFormat pix_fmts[]
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
#define flags(name, subs,...)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define AVERROR_FILTER_NOT_FOUND
Filter not found.
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
int sample_rate
Audio only.
static int create_subcc_packet(AVFormatContext *avctx, AVFrame *frame, int sink_idx)
char * avfilter_graph_dump(AVFilterGraph *graph, const char *options)
Dump a graph into a human-readable string representation.
static const AVOption options[]
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
#define AV_BUFFERSINK_FLAG_PEEK
Tell av_buffersink_get_buffer_ref() to read video/samples buffer reference, but not remove it from th...
int av_buffersink_get_channels(const AVFilterContext *ctx)
void * priv_data
Format private data.
int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs, void *log_ctx)
Add a graph described by a string to a graph.
number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of...
static enum AVSampleFormat sample_fmts[]
AVCodecParameters * codecpar
Codec parameters associated with this stream.
#define av_malloc_array(a, b)
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd)
Rescale a 64-bit integer by 2 rational numbers with specified rounding.
static int * create_all_formats(int n)
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
int * sink_stream_subcc_map
This structure stores compressed data.
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
AVRational av_buffersink_get_time_base(const AVFilterContext *ctx)
int nb_samples
number of audio samples (per channel) described by this frame
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.