Go to the documentation of this file.
36 #define DEFAULT_SLAVE_FAILURE_POLICY ON_SLAVE_FAILURE_ABORT
66 #define OFFSET(x) offsetof(TeeContext, x)
68 {
"use_fifo",
"Use fifo pseudo-muxer to separate actual muxers from encoder",
70 {
"fifo_options",
"fifo pseudo-muxer options",
OFFSET(fifo_options_str),
100 const char *fifo_options,
TeeSlave *tee_slave)
107 if (
av_match_name(use_fifo,
"true,y,yes,enable,enabled,on,1")) {
109 }
else if (
av_match_name(use_fifo,
"false,n,no,disable,disabled,off,0")) {
128 avf = tee_slave->
avf;
135 if (tee_slave->
bsfs) {
166 char *use_fifo =
NULL, *fifo_options_str =
NULL;
171 char *subselect =
NULL, *next_subselect =
NULL, *first_subselect =
NULL, *tmp_select =
NULL;
176 #define STEAL_OPTION(option, field) do { \
177 if ((entry = av_dict_get(options, option, NULL, 0))) { \
178 field = entry->value; \
179 entry->value = NULL; \
180 av_dict_set(&options, option, NULL, 0); \
193 "Invalid onfail option value, valid options are 'abort' and 'ignore'\n");
206 char *format_options_str =
NULL;
232 tee_slave->
avf = avf2;
257 first_subselect = tmp_select;
258 next_subselect =
NULL;
260 first_subselect =
NULL;
265 "Invalid stream specifier '%s' for output '%s'\n",
308 if (!tee_slave->
bsfs) {
315 const char *spec = entry->
key + strlen(
"bsfs");
319 "Specifier separator in '%s' is '%c', but only characters '%s' "
331 "Invalid stream specifier '%s' in bsfs option '%s' for slave "
332 "output '%s'\n", spec, entry->
key, filename);
338 "output '%s'\n", spec, entry->
value,
i, filename);
339 if (tee_slave->
bsfs[
i]) {
341 "Duplicate bsfs specification associated to stream %d of slave "
342 "output '%s', filters will be ignored\n",
i, filename);
348 "Error parsing bitstream filter sequence '%s' associated to "
349 "stream %d of slave output '%s'\n", entry->
value,
i, filename);
360 if (target_stream < 0)
363 if (!tee_slave->
bsfs[target_stream]) {
368 "Failed to create pass-through bitstream filter: %s\n",
383 "Failed to initialize bitstream filter(s): %s\n",
409 av_log(log_ctx, log_level,
"filename:'%s' format:%s\n",
414 const char *bsf_name;
416 av_log(log_ctx, log_level,
" stream:%d codec:%s type:%s",
422 av_log(log_ctx, log_level,
" bsfs: %s\n", bsf_name);
442 av_log(avf,
AV_LOG_ERROR,
"Slave muxer #%u failed: %s, continuing with %u/%u slaves.\n",
451 unsigned nb_slaves = 0,
i;
452 const char *filename = avf->
url;
453 char **slaves =
NULL;
483 for (
i = 0;
i < nb_slaves;
i++) {
507 "to any slave.\n",
i);
513 for (
i = 0;
i < nb_slaves;
i++)
523 int ret_all = 0,
ret;
529 if (!ret_all &&
ret < 0)
543 int ret_all = 0,
ret;
556 if (!ret_all &&
ret < 0)
581 if (!ret_all &&
ret < 0)
590 }
else if (
ret < 0) {
603 if (!ret_all &&
ret < 0)
AVCodecParameters * par_in
Parameters of the input stream.
#define AV_LOG_WARNING
Something somehow does not look correct.
@ ON_SLAVE_FAILURE_IGNORE
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
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
AVBSFContext ** bsfs
bitstream filters per stream
enum AVMediaType codec_type
General type of the encoded data.
int * stream_map
map from input to output streams indexes, disabled output streams are set to -1
char * av_get_token(const char **buf, const char *term)
Unescape the given string until a non escaped terminating char, and return the token corresponding to...
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
static av_cold int end(AVCodecContext *avctx)
AVStream ** streams
A list of all streams in the file.
int strict_std_compliance
Allow non-standard and experimental extension.
int ff_tee_parse_slave_options(void *log, char *slave, AVDictionary **options, char **filename)
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
void * av_mallocz_array(size_t nmemb, size_t size)
#define AV_LOG_VERBOSE
Detailed information.
static int tee_write_trailer(AVFormatContext *avf)
static int tee_write_packet(AVFormatContext *avf, AVPacket *pkt)
The bitstream filter state.
int av_bsf_get_null_filter(AVBSFContext **bsf)
Get null/pass-through bitstream filter.
#define STEAL_OPTION(option, field)
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
#define AVERROR_OPTION_NOT_FOUND
Option not found.
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVDictionary * metadata
Metadata that applies to the whole file.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
static const AVClass tee_muxer_class
int flags
Flags modifying the (de)muxer behaviour.
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 format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
static const char *const slave_bsfs_spec_sep
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok().
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
AVRational time_base_in
The timebase used for the timestamps of the input packets.
AVDictionary * fifo_options
static const char *const slave_select_sep
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
void av_bsf_free(AVBSFContext **ctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
static int tee_process_slave_failure(AVFormatContext *avf, unsigned slave_idx, int err_n)
av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
static int parse_slave_fifo_options(const char *use_fifo, const char *fifo_options, TeeSlave *tee_slave)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
static int write_trailer(AVFormatContext *s1)
const char * av_default_item_name(void *ptr)
Return the context name.
static int close_slave(TeeSlave *tee_slave)
AVIOContext * pb
I/O context.
const AVClass * priv_class
A class for the private data, used to declare bitstream filter private AVOptions.
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
ff_const59 struct AVOutputFormat * oformat
The output container format.
SlaveFailurePolicy on_fail
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the stream st contained in s is matched by the stream specifier spec.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
AVOutputFormat ff_tee_muxer
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf)
Parse string describing list of bitstream filters and create single AVBSFContext describing the whole...
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
char * url
input or output URL.
static void close_slaves(AVFormatContext *avf)
AVDictionary * fifo_options
#define DEFAULT_SLAVE_FAILURE_POLICY
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
static const AVOption options[]
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst)
Convert valid timing fields (timestamps / durations) in a packet from one timebase to another.
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
#define i(width, name, range_min, range_max)
AVRational time_base_out
The timebase used for the timestamps of the output packets.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static int parse_slave_failure_policy_option(const char *opt, TeeSlave *tee_slave)
static void log_slave(TeeSlave *slave, void *log_ctx, int log_level)
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
void * av_calloc(size_t nmemb, size_t size)
Non-inlined equivalent of av_mallocz_array().
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
static int tee_write_header(AVFormatContext *avf)
int av_match_name(const char *name, const char *names)
Match instances of a name in a comma-separated list of names.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags)
Parse the key/value pairs list and add the parsed entries to a dictionary.
void(* io_close)(struct AVFormatContext *s, AVIOContext *pb)
A callback for closing the streams opened with AVFormatContext.io_open().
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
int(* io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options)
A callback for opening new IO streams.
static const char *const slave_delim
const struct AVBitStreamFilter * filter
The bitstream filter this context is an instance of.
char * av_strdup(const char *s)
Duplicate a string.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure stores compressed data.
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file ensuring correct interleaving.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
int av_dict_get_string(const AVDictionary *m, char **buffer, const char key_val_sep, const char pairs_sep)
Get dictionary entries as a string.
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
#define flags(name, subs,...)
const char *(* item_name)(void *ctx)
A pointer to a function which returns the name of a context instance ctx associated with the class.
static void write_header(FFV1Context *f)
void * priv_data
Format private data.
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.