FFmpeg
Loading...
Searching...
No Matches
lavfi.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 Stefano Sabatini
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21/**
22 * @file
23 * libavfilter virtual input device
24 */
25
26/* #define DEBUG */
27
28#include <float.h> /* DBL_MIN, DBL_MAX */
29
30#include "libavutil/bprint.h"
32#include "libavutil/file.h"
33#include "libavutil/imgutils.h"
34#include "libavutil/internal.h"
35#include "libavutil/log.h"
36#include "libavutil/mem.h"
37#include "libavutil/opt.h"
39#include "libavutil/pixdesc.h"
42#include "libavformat/demux.h"
44#include "avdevice.h"
45
60
62{
63 LavfiContext *lavfi = avctx->priv_data;
64
66 av_freep(&lavfi->sink_eof);
69 av_freep(&lavfi->sinks);
71
72 return 0;
73}
74
76{
77 LavfiContext *lavfi = avctx->priv_data;
78 AVStream *st;
79 int stream_idx, sink_idx;
80 AVRational *time_base;
81
82 for (stream_idx = 0; stream_idx < lavfi->nb_sinks; stream_idx++) {
83 sink_idx = lavfi->stream_sink_map[stream_idx];
84 if (lavfi->sink_stream_subcc_map[sink_idx]) {
85 lavfi->sink_stream_subcc_map[sink_idx] = avctx->nb_streams;
86 if (!(st = avformat_new_stream(avctx, NULL)))
87 return AVERROR(ENOMEM);
90 time_base = &avctx->streams[stream_idx]->time_base;
91 st->time_base.num = time_base->num;
92 st->time_base.den = time_base->den;
93 } else {
94 lavfi->sink_stream_subcc_map[sink_idx] = -1;
95 }
96 }
97 return 0;
98}
99
101{
102 LavfiContext *lavfi = avctx->priv_data;
103 AVFilterInOut *input_links = NULL, *output_links = NULL, *inout;
104 const AVFilter *buffersink, *abuffersink;
105 enum AVMediaType type;
106 int ret = 0, i, n;
107
108#define FAIL(ERR) { ret = ERR; goto end; }
109
110 buffersink = avfilter_get_by_name("buffersink");
111 abuffersink = avfilter_get_by_name("abuffersink");
112
113 if (lavfi->graph_filename && lavfi->graph_str) {
114 av_log(avctx, AV_LOG_ERROR,
115 "Only one of the graph or graph_file options must be specified\n");
116 FAIL(AVERROR(EINVAL));
117 }
118
119 if (lavfi->graph_filename) {
120 AVBPrint graph_file_pb;
121 AVIOContext *avio = NULL;
123 if (avctx->protocol_whitelist && (ret = av_dict_set(&options, "protocol_whitelist", avctx->protocol_whitelist, 0)) < 0)
124 goto end;
125 ret = avio_open2(&avio, lavfi->graph_filename, AVIO_FLAG_READ, &avctx->interrupt_callback, &options);
127 if (ret < 0)
128 goto end;
129 av_bprint_init(&graph_file_pb, 0, AV_BPRINT_SIZE_UNLIMITED);
130 ret = avio_read_to_bprint(avio, &graph_file_pb, INT_MAX);
131 avio_closep(&avio);
132 if (ret) {
133 av_bprint_finalize(&graph_file_pb, NULL);
134 goto end;
135 }
136 if ((ret = av_bprint_finalize(&graph_file_pb, &lavfi->graph_str)))
137 goto end;
138 }
139
140 if (!lavfi->graph_str)
141 lavfi->graph_str = av_strdup(avctx->url);
142
143 /* parse the graph, create a stream for each open output */
144 if (!(lavfi->graph = avfilter_graph_alloc()))
145 FAIL(AVERROR(ENOMEM));
146
147 if ((ret = avfilter_graph_parse_ptr(lavfi->graph, lavfi->graph_str,
148 &input_links, &output_links, avctx)) < 0)
149 goto end;
150
151 if (input_links) {
152 av_log(avctx, AV_LOG_ERROR,
153 "Open inputs in the filtergraph are not acceptable\n");
154 FAIL(AVERROR(EINVAL));
155 }
156
157 /* count the outputs */
158 for (n = 0, inout = output_links; inout; n++, inout = inout->next);
159 lavfi->nb_sinks = n;
160
161 if (!(lavfi->sink_stream_map = av_malloc(sizeof(int) * n)))
162 FAIL(AVERROR(ENOMEM));
163 if (!(lavfi->sink_eof = av_mallocz(sizeof(int) * n)))
164 FAIL(AVERROR(ENOMEM));
165 if (!(lavfi->stream_sink_map = av_malloc(sizeof(int) * n)))
166 FAIL(AVERROR(ENOMEM));
167 if (!(lavfi->sink_stream_subcc_map = av_malloc(sizeof(int) * n)))
168 FAIL(AVERROR(ENOMEM));
169
170 for (i = 0; i < n; i++)
171 lavfi->stream_sink_map[i] = -1;
172
173 /* parse the output link names - they need to be of the form out0, out1, ...
174 * create a mapping between them and the streams */
175 for (i = 0, inout = output_links; inout; i++, inout = inout->next) {
176 int stream_idx = 0, suffix = 0, use_subcc = 0;
177 if (!inout->name) {
178 av_log(avctx, AV_LOG_ERROR, "Missing %d outpad name\n", i);
179 FAIL(AVERROR(EINVAL));
180 }
181 sscanf(inout->name, "out%n%d%n", &suffix, &stream_idx, &suffix);
182 if (!suffix) {
183 av_log(avctx, AV_LOG_ERROR,
184 "Invalid outpad name '%s'\n", inout->name);
185 FAIL(AVERROR(EINVAL));
186 }
187 if (inout->name[suffix]) {
188 if (!strcmp(inout->name + suffix, "+subcc")) {
189 use_subcc = 1;
190 } else {
191 av_log(avctx, AV_LOG_ERROR,
192 "Invalid outpad suffix '%s'\n", inout->name);
193 FAIL(AVERROR(EINVAL));
194 }
195 }
196
197 if ((unsigned)stream_idx >= n) {
198 av_log(avctx, AV_LOG_ERROR,
199 "Invalid index was specified in output '%s', "
200 "must be a non-negative value < %d\n",
201 inout->name, n);
202 FAIL(AVERROR(EINVAL));
203 }
204
205 if (lavfi->stream_sink_map[stream_idx] != -1) {
206 av_log(avctx, AV_LOG_ERROR,
207 "An output with stream index %d was already specified\n",
208 stream_idx);
209 FAIL(AVERROR(EINVAL));
210 }
211 lavfi->sink_stream_map[i] = stream_idx;
212 lavfi->stream_sink_map[stream_idx] = i;
213 lavfi->sink_stream_subcc_map[i] = !!use_subcc;
214 }
215
216 /* for each open output create a corresponding stream */
217 for (i = 0, inout = output_links; inout; i++, inout = inout->next) {
218 AVStream *st;
219 if (!(st = avformat_new_stream(avctx, NULL)))
220 FAIL(AVERROR(ENOMEM));
221 st->id = i;
222 }
223
224 /* create a sink for each output and connect them to the graph */
225 lavfi->sinks = av_malloc_array(lavfi->nb_sinks, sizeof(AVFilterContext *));
226 if (!lavfi->sinks)
227 FAIL(AVERROR(ENOMEM));
228
229 for (i = 0, inout = output_links; inout; i++, inout = inout->next) {
230 AVFilterContext *sink;
231
232 type = avfilter_pad_get_type(inout->filter_ctx->output_pads, inout->pad_idx);
233
234 if (type == AVMEDIA_TYPE_VIDEO && ! buffersink ||
235 type == AVMEDIA_TYPE_AUDIO && ! abuffersink) {
236 av_log(avctx, AV_LOG_ERROR, "Missing required buffersink filter, aborting.\n");
238 }
239
240 if (type == AVMEDIA_TYPE_VIDEO) {
241 ret = avfilter_graph_create_filter(&sink, buffersink,
242 inout->name, NULL,
243 NULL, lavfi->graph);
244 if (ret < 0)
245 goto end;
246 } else if (type == AVMEDIA_TYPE_AUDIO) {
247 static const enum AVSampleFormat sample_fmts[] = {
250 };
251
252 sink = avfilter_graph_alloc_filter(lavfi->graph, abuffersink, inout->name);
253 if (!sink) {
254 ret = AVERROR(ENOMEM);
255 goto end;
256 }
257
258 ret = av_opt_set_array(sink, "sample_formats", AV_OPT_SEARCH_CHILDREN, 0,
261 if (ret < 0)
262 goto end;
263
264 ret = avfilter_init_dict(sink, NULL);
265 if (ret < 0)
266 goto end;
267 } else {
268 av_log(avctx, AV_LOG_ERROR,
269 "Output '%s' is not a video or audio output, not yet supported\n", inout->name);
270 FAIL(AVERROR(EINVAL));
271 }
272
273 lavfi->sinks[i] = sink;
274 if ((ret = avfilter_link(inout->filter_ctx, inout->pad_idx, sink, 0)) < 0)
275 goto end;
276 }
277
278 /* configure the graph */
279 if ((ret = avfilter_graph_config(lavfi->graph, avctx)) < 0)
280 goto end;
281
282 if (lavfi->dump_graph) {
283 char *dump = avfilter_graph_dump(lavfi->graph, lavfi->dump_graph);
284 if (dump != NULL) {
285 fputs(dump, stderr);
286 fflush(stderr);
287 av_free(dump);
288 } else {
289 FAIL(AVERROR(ENOMEM));
290 }
291 }
292
293 /* fill each stream with the information in the corresponding sink */
294 for (i = 0; i < lavfi->nb_sinks; i++) {
295 AVFilterContext *sink = lavfi->sinks[lavfi->stream_sink_map[i]];
296 AVRational time_base = av_buffersink_get_time_base(sink);
297 AVRational frame_rate = av_buffersink_get_frame_rate(sink);
298 AVStream *st = avctx->streams[i];
299 AVCodecParameters *const par = st->codecpar;
300 avpriv_set_pts_info(st, 64, time_base.num, time_base.den);
302 if (par->codec_type == AVMEDIA_TYPE_VIDEO) {
304 par->format = av_buffersink_get_format(sink);
305 par->width = av_buffersink_get_w(sink);
306 par->height = av_buffersink_get_h(sink);
307 avctx->probesize = FFMAX(avctx->probesize, sizeof(AVFrame) * 30);
310 if (frame_rate.num > 0 && frame_rate.den > 0) {
311 st->avg_frame_rate = frame_rate;
312 st->r_frame_rate = frame_rate;
313 }
314 } else if (par->codec_type == AVMEDIA_TYPE_AUDIO) {
316 ret = av_buffersink_get_ch_layout(sink, &par->ch_layout);
317 if (ret < 0)
318 goto end;
319 par->format = av_buffersink_get_format(sink);
320 par->codec_id = av_get_pcm_codec(par->format, -1);
321 if (par->codec_id == AV_CODEC_ID_NONE)
322 av_log(avctx, AV_LOG_ERROR,
323 "Could not find PCM codec for sample format %s.\n",
325 }
326 }
327
328 if ((ret = create_subcc_streams(avctx)) < 0)
329 goto end;
330
331end:
332 avfilter_inout_free(&input_links);
333 avfilter_inout_free(&output_links);
334 return ret;
335}
336
338 int sink_idx)
339{
340 LavfiContext *lavfi = avctx->priv_data;
341 AVFrameSideData *sd;
342 int stream_idx, ret;
343
344 if ((stream_idx = lavfi->sink_stream_subcc_map[sink_idx]) < 0)
345 return 0;
347 return 0;
348 if ((ret = av_new_packet(&lavfi->subcc_packet, sd->size)) < 0)
349 return ret;
350 memcpy(lavfi->subcc_packet.data, sd->data, sd->size);
351 lavfi->subcc_packet.stream_index = stream_idx;
352 lavfi->subcc_packet.pts = frame->pts;
353 return 0;
354}
355
356static void lavfi_free_frame(void *opaque, uint8_t *data)
357{
360}
361
363{
364 LavfiContext *lavfi = avctx->priv_data;
365 double min_pts = DBL_MAX;
366 int stream_idx, min_pts_sink_idx = 0;
367 AVFrame *frame, *frame_to_free;
368 AVDictionary *frame_metadata;
369 int ret, i;
370 AVStream *st;
371
372 if (lavfi->subcc_packet.size) {
374 return pkt->size;
375 }
376
378 if (!frame)
379 return AVERROR(ENOMEM);
380 frame_to_free = frame;
381
382 /* iterate through all the graph sinks. Select the sink with the
383 * minimum PTS */
384 for (i = 0; i < lavfi->nb_sinks; i++) {
386 double d;
387
388 if (lavfi->sink_eof[i])
389 continue;
390
393 if (ret == AVERROR_EOF) {
394 ff_dlog(avctx, "EOF sink_idx:%d\n", i);
395 lavfi->sink_eof[i] = 1;
396 continue;
397 } else if (ret < 0)
398 goto fail;
400 ff_dlog(avctx, "sink_idx:%d time:%f\n", i, d);
402
403 if (d < min_pts) {
404 min_pts = d;
405 min_pts_sink_idx = i;
406 }
407 }
408 if (min_pts == DBL_MAX) {
409 ret = AVERROR_EOF;
410 goto fail;
411 }
412
413 ff_dlog(avctx, "min_pts_sink_idx:%i\n", min_pts_sink_idx);
414
415 av_buffersink_get_frame_flags(lavfi->sinks[min_pts_sink_idx], frame, 0);
416 stream_idx = lavfi->sink_stream_map[min_pts_sink_idx];
417 st = avctx->streams[stream_idx];
418
420 pkt->buf = av_buffer_create((uint8_t*)frame, sizeof(*frame),
422 if (!pkt->buf) {
423 ret = AVERROR(ENOMEM);
424 goto fail;
425 }
426 frame_to_free = NULL;
427
428 pkt->data = pkt->buf->data;
429 pkt->size = pkt->buf->size;
430 pkt->flags |= AV_PKT_FLAG_TRUSTED;
431 } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
432 int size = frame->nb_samples * av_get_bytes_per_sample(frame->format) *
433 frame->ch_layout.nb_channels;
434 if ((ret = av_new_packet(pkt, size)) < 0)
435 goto fail;
436 memcpy(pkt->data, frame->data[0], size);
437 }
438
439 frame_metadata = frame->metadata;
440 if (frame_metadata) {
441 size_t size;
442 uint8_t *metadata = av_packet_pack_dictionary(frame_metadata, &size);
443
444 if (!metadata) {
445 ret = AVERROR(ENOMEM);
446 goto fail;
447 }
449 metadata, size)) < 0) {
451 goto fail;
452 }
453 }
454
455 if ((ret = create_subcc_packet(avctx, frame, min_pts_sink_idx)) < 0) {
456 goto fail;
457 }
458
459 pkt->stream_index = stream_idx;
460 pkt->pts = frame->pts;
461
462 av_frame_free(&frame_to_free);
463
464 return pkt->size;
465fail:
466 av_frame_free(&frame_to_free);
467 return ret;
468
469}
470
471#define OFFSET(x) offsetof(LavfiContext, x)
472
473#define DEC AV_OPT_FLAG_DECODING_PARAM
474
475static const AVOption options[] = {
476 { "graph", "set libavfilter graph", OFFSET(graph_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
477 { "graph_file","set libavfilter graph filename", OFFSET(graph_filename), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC},
478 { "dumpgraph", "dump graph to stderr", OFFSET(dump_graph), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
479 { NULL },
480};
481
482static const AVClass lavfi_class = {
483 .class_name = "lavfi indev",
484 .item_name = av_default_item_name,
485 .option = options,
486 .version = LIBAVUTIL_VERSION_INT,
488};
489
491 .p.name = "lavfi",
492 .p.long_name = NULL_IF_CONFIG_SMALL("Libavfilter virtual input device"),
493 .p.flags = AVFMT_NOFILE,
494 .p.priv_class = &lavfi_class,
495 .priv_data_size = sizeof(LavfiContext),
499 .flags_internal = FF_INFMT_FLAG_INIT_CLEANUP,
500};
static enum AVSampleFormat sample_fmts[]
Definition adpcmenc.c:933
const FFInputFormat ff_lavfi_demuxer
Definition lavfi.c:490
Main libavdevice API header.
Main libavfilter public API header.
void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition avformat.c:834
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:488
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
Definition avio.c:717
int avio_open2(AVIOContext **s, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
Definition avio.c:559
#define AVIO_FLAG_READ
read-only
Definition avio.h:617
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.
Definition aviobuf.c:1254
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition bprint.c:69
AVBPrint public header.
#define AV_BPRINT_SIZE_UNLIMITED
memory buffer sink API for audio and video
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
Public libavutil channel layout APIs header.
#define NULL
Definition coverity.c:32
#define FF_INFMT_FLAG_INIT_CLEANUP
For an FFInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
Definition demux.h:35
static AVPacket * pkt
static AVFrame * frame
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
Misc file utilities.
#define fail
Definition test.h:479
@ AV_OPT_TYPE_SAMPLE_FMT
Underlying C type is enum AVSampleFormat.
Definition opt.h:310
@ 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...
Definition opt.h:275
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
Return the PCM codec associated with a sample format.
Definition utils.c:534
@ AV_CODEC_ID_WRAPPED_AVFRAME
Passthrough codec, AVFrames wrapped in AVPacket.
Definition codec_id.h:621
@ AV_CODEC_ID_NONE
Definition codec_id.h:48
@ AV_CODEC_ID_EIA_608
Definition codec_id.h:576
@ AV_PKT_DATA_STRINGS_METADATA
A list of zero terminated key/value strings.
Definition packet.h:169
#define AV_PKT_FLAG_TRUSTED
The packet comes from a trusted source.
Definition packet.h:664
uint8_t * av_packet_pack_dictionary(const AVDictionary *dict, size_t *size)
Pack a dictionary for use in side_data.
Definition packet.c:319
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.
Definition packet.c:197
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
Definition packet.c:491
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
Definition packet.c:98
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
enum AVMediaType av_buffersink_get_type(const AVFilterContext *ctx)
int av_buffersink_get_sample_rate(const AVFilterContext *ctx)
int av_buffersink_get_format(const AVFilterContext *ctx)
AVRational av_buffersink_get_frame_rate(const AVFilterContext *ctx)
Definition buffersink.c:254
int av_buffersink_get_h(const AVFilterContext *ctx)
AVRational av_buffersink_get_sample_aspect_ratio(const AVFilterContext *ctx)
int av_buffersink_get_ch_layout(const AVFilterContext *ctx, AVChannelLayout *out)
Definition buffersink.c:274
AVRational av_buffersink_get_time_base(const AVFilterContext *ctx)
int av_buffersink_get_w(const AVFilterContext *ctx)
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.
Definition buffersink.c:135
#define AV_BUFFERSINK_FLAG_PEEK
Tell av_buffersink_get_buffer_ref() to read video/samples buffer reference, but not remove it from th...
Definition buffersink.h:85
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx)
Check validity and configure all the links and formats in the graph.
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
Definition allfilters.c:654
char * avfilter_graph_dump(AVFilterGraph *graph, const char *options)
Dump a graph into a human-readable string representation.
Definition graphdump.c:156
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL.
Definition graphparser.c:76
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
Definition avfilter.c:993
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.
AVFilterContext * avfilter_graph_alloc_filter(AVFilterGraph *graph, const AVFilter *filter, const char *name)
Create a new filter instance in a filter graph.
void avfilter_graph_free(AVFilterGraph **graph)
Free a graph, destroy its links, and set *graph to NULL.
int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options)
Initialize a filter with the supplied dictionary of options.
Definition avfilter.c:919
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together.
Definition avfilter.c:149
int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx)
A convenience wrapper that allocates and initializes a filter in a single step.
AVFilterGraph * avfilter_graph_alloc(void)
Allocate a filter graph.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition bprint.c:235
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition buffer.c:55
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition dict.c:233
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition dict.c:86
#define AVERROR_FILTER_NOT_FOUND
Filter not found.
Definition error.h:60
#define AVERROR_EOF
End of file.
Definition error.h:57
#define AVERROR(e)
Definition error.h:45
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition frame.c:496
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition frame.c:659
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition frame.c:52
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition frame.h:59
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
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.
@ AV_ROUND_PASS_MINMAX
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
@ AV_ROUND_NEAR_INF
Round to nearest and halfway cases away from zero.
AVMediaType
Definition avutil.h:198
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_SUBTITLE
Definition avutil.h:203
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
Definition samplefmt.c:108
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.
Definition samplefmt.c:51
AVSampleFormat
Audio sample formats.
Definition samplefmt.h:55
@ AV_SAMPLE_FMT_FLT
float
Definition samplefmt.h:60
@ AV_SAMPLE_FMT_S32
signed 32 bits
Definition samplefmt.h:59
@ AV_SAMPLE_FMT_U8
unsigned 8 bits
Definition samplefmt.h:57
@ AV_SAMPLE_FMT_DBL
double
Definition samplefmt.h:61
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition samplefmt.h:58
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition avutil.h:263
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition opt.h:604
int av_opt_set_array(void *obj, const char *name, int search_flags, unsigned int start_elem, unsigned int nb_elems, enum AVOptionType val_type, const void *val)
Add, replace, or remove elements for an array option.
Definition opt.c:2347
cl_device_type type
misc image utilities
static int create_subcc_streams(AVFormatContext *avctx)
Definition lavfi.c:75
static void lavfi_free_frame(void *opaque, uint8_t *data)
Definition lavfi.c:356
static av_cold int lavfi_read_close(AVFormatContext *avctx)
Definition lavfi.c:61
static av_cold int lavfi_read_header(AVFormatContext *avctx)
Definition lavfi.c:100
static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
Definition lavfi.c:362
static int create_subcc_packet(AVFormatContext *avctx, AVFrame *frame, int sink_idx)
Definition lavfi.c:337
#define FAIL(ERR)
#define OFFSET(x)
Definition lavfi.c:471
static const AVClass lavfi_class
Definition lavfi.c:482
#define av_cold
Definition attributes.h:117
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static av_cold int read_close(AVFormatContext *ctx)
Definition libcdio.c:143
#define DEC
Definition librsvgdec.c:149
@ AV_CLASS_CATEGORY_DEVICE_INPUT
Definition log.h:46
#define FFMAX(a, b)
Definition macros.h:47
Memory handling functions.
const char data[16]
Definition mxf.c:149
#define av_strdup(s)
Definition ops_static.c:55
#define av_malloc(s)
Definition ops_static.c:52
AVOptions.
misc parsing utilities
#define FF_ARRAY_ELEMS(a)
Describe the class of an AVClass context structure.
Definition log.h:76
This struct describes the properties of an encoded stream.
Definition codec_par.h:49
int height
The height of the video frame in pixels.
Definition codec_par.h:150
AVChannelLayout ch_layout
The channel layout and number of channels.
Definition codec_par.h:207
int width
The width of the video frame in pixels.
Definition codec_par.h:143
enum AVMediaType codec_type
General type of the encoded data.
Definition codec_par.h:53
AVRational sample_aspect_ratio
The aspect ratio (width/height) which a single pixel should have when displayed.
Definition codec_par.h:161
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition codec_par.h:57
int sample_rate
The number of audio samples per second.
Definition codec_par.h:213
An instance of a filter.
Definition avfilter.h:273
A linked-list of the inputs/outputs of the filter chain.
Definition avfilter.h:718
Filter definition.
Definition avfilter.h:215
const char * name
Filter name.
Definition avfilter.h:219
Format I/O context.
Definition avformat.h:1333
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition avformat.h:1389
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition avformat.h:1618
char * url
input or output URL.
Definition avformat.h:1449
void * priv_data
Format private data.
Definition avformat.h:1361
int64_t probesize
Maximum number of bytes read from input in order to determine stream properties.
Definition avformat.h:1532
AVStream ** streams
A list of all streams in the file.
Definition avformat.h:1401
char * protocol_whitelist
',' separated list of allowed protocols.
Definition avformat.h:1852
Structure to hold side data for an AVFrame.
Definition frame.h:327
size_t size
Definition frame.h:330
uint8_t * data
Definition frame.h:329
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
Bytestream IO Context.
Definition avio.h:160
AVOption.
Definition opt.h:428
This structure stores compressed data.
Definition packet.h:580
int stream_index
Definition packet.h:605
int size
Definition packet.h:604
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition packet.h:596
uint8_t * data
Definition packet.h:603
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
Stream structure.
Definition avformat.h:766
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition avformat.h:789
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition avformat.h:844
int id
Format-specific stream ID.
Definition avformat.h:778
AVRational avg_frame_rate
Average framerate.
Definition avformat.h:855
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition avformat.h:805
AVRational r_frame_rate
Real base framerate of the stream.
Definition avformat.h:900
char * graph_str
Definition lavfi.c:48
AVFilterContext ** sinks
Definition lavfi.c:52
AVPacket subcc_packet
Definition lavfi.c:58
AVFilterGraph * graph
Definition lavfi.c:51
int * sink_eof
Definition lavfi.c:54
int nb_sinks
Definition lavfi.c:57
char * graph_filename
Definition lavfi.c:49
char * dump_graph
Definition lavfi.c:50
int * sink_stream_map
Definition lavfi.c:53
int * sink_stream_subcc_map
Definition lavfi.c:56
int * stream_sink_map
Definition lavfi.c:55
#define av_free(p)
#define av_malloc_array(a, b)
#define av_mallocz(s)
#define ff_dlog(a,...)
#define av_freep(p)
#define av_log(a,...)
int size