Go to the documentation of this file.
73 return memcmp(
probe->buf,
"ffconcat version 1.0", 20) ?
90 const char *start =
f;
94 if (!((
unsigned)((*
f | 32) -
'a') < 26 ||
95 (
unsigned)(*
f -
'0') < 10 || *
f ==
'_' || *
f ==
'-')) {
107 #define FAIL(retcode) do { ret = (retcode); goto fail; } while(0)
110 unsigned *nb_files_alloc)
116 size_t url_len, proto_len;
125 proto_len = proto ? strlen(proto) : 0;
126 if (proto && !memcmp(filename, proto, proto_len) &&
127 (filename[proto_len] ==
':' || filename[proto_len] ==
',')) {
131 url_len = strlen(avf->
url) + strlen(filename) + 16;
138 if (
cat->nb_files >= *nb_files_alloc) {
139 size_t n =
FFMAX(*nb_files_alloc * 2, 16);
141 if (n <= cat->nb_files || n > SIZE_MAX /
sizeof(*
cat->files) ||
144 cat->files = new_files;
209 "Auto-inserting h264_mp4toannexb bitstream filter\n");
213 "required for H.264 streams\n");
251 cat->cur_file->streams[
i].out_stream_index =
i;
263 st =
cat->avf->streams[
i];
267 "Match slave stream #%d with stream #%d id 0x%x\n",
271 cat->cur_file->streams[
i].out_stream_index = j;
284 if (
cat->cur_file->nb_streams >=
cat->avf->nb_streams)
287 cat->avf->nb_streams *
sizeof(*
map));
290 cat->cur_file->streams =
map;
291 memset(
map +
cat->cur_file->nb_streams, 0,
292 (
cat->avf->nb_streams -
cat->cur_file->nb_streams) *
sizeof(*
map));
295 map[
i].out_stream_index = -1;
299 switch (
cat->stream_match_mode) {
311 cat->cur_file->nb_streams =
cat->avf->nb_streams;
318 return file->user_duration;
320 return file->outpoint -
file->file_inpoint;
324 return file->next_dts -
file->file_inpoint;
354 file->start_time = !fileno ? 0 :
355 cat->files[fileno - 1].start_time +
356 cat->files[fileno - 1].duration;
361 if (
cat->segment_time_metadata) {
381 for (
i = 0;
i <
cat->nb_files;
i++) {
383 for (j = 0; j <
cat->files[
i].nb_streams; j++) {
384 if (
cat->files[
i].streams[j].bsf)
402 unsigned nb_files_alloc = 0;
404 int64_t
ret, time = 0;
412 if (!*keyword || *keyword ==
'#')
415 if (!strcmp(keyword,
"file")) {
423 }
else if (!strcmp(keyword,
"duration") || !strcmp(keyword,
"inpoint") || !strcmp(keyword,
"outpoint")) {
433 line, keyword, dur_str);
436 if (!strcmp(keyword,
"duration"))
437 file->user_duration = dur;
438 else if (!strcmp(keyword,
"inpoint"))
440 else if (!strcmp(keyword,
"outpoint"))
441 file->outpoint = dur;
442 }
else if (!strcmp(keyword,
"file_packet_metadata")) {
460 }
else if (!strcmp(keyword,
"stream")) {
463 }
else if (!strcmp(keyword,
"exact_stream_id")) {
471 }
else if (!strcmp(keyword,
"ffconcat")) {
474 if (strcmp(ver_kw,
"version") || strcmp(ver_val,
"1.0")) {
491 for (
i = 0;
i <
cat->nb_files;
i++) {
493 cat->files[
i].start_time = time;
495 time =
cat->files[
i].start_time;
499 cat->files[
i].user_duration =
cat->files[
i].outpoint -
cat->files[
i].inpoint;
501 cat->files[
i].duration =
cat->files[
i].user_duration;
502 time +=
cat->files[
i].user_duration;
504 if (
i ==
cat->nb_files) {
525 unsigned fileno =
cat->cur_file -
cat->files;
529 if (++fileno >=
cat->nb_files) {
544 "failed to send input packet\n");
553 "failed to receive output packet\n");
628 if (
cat->cur_file->metadata) {
631 if (!packed_metadata)
634 packed_metadata, metadata_len);
644 cat->cur_file->next_dts = next_dts;
653 int64_t *min_ts, int64_t *ts, int64_t *max_ts)
663 int64_t min_ts, int64_t ts, int64_t max_ts,
int flags)
666 int64_t
t0 =
cat->cur_file->start_time -
cat->cur_file->file_inpoint;
669 min_ts = min_ts == INT64_MIN ? INT64_MIN : min_ts -
t0;
670 max_ts = max_ts == INT64_MAX ? INT64_MAX : max_ts -
t0;
672 if (stream >=
cat->avf->nb_streams)
675 &min_ts, &ts, &max_ts);
690 &min_ts, &ts, &max_ts);
694 right =
cat->nb_files;
699 else if (!
cat->seekable)
702 while (right -
left > 1) {
703 int mid = (
left + right) / 2;
719 left < cat->nb_files - 1 &&
720 cat->files[
left + 1].start_time < max_ts) {
731 int64_t min_ts, int64_t ts, int64_t max_ts,
int flags)
741 if ((
ret =
real_seek(avf, stream, min_ts, ts, max_ts,
flags, cur_avf_saved)) < 0) {
742 if (
cat->cur_file != cur_file_saved) {
746 cat->avf = cur_avf_saved;
747 cat->cur_file = cur_file_saved;
749 if (
cat->cur_file != cur_file_saved) {
757 #define OFFSET(x) offsetof(ConcatContext, x)
758 #define DEC AV_OPT_FLAG_DECODING_PARAM
761 {
"safe",
"enable safe mode",
763 {
"auto_convert",
"automatically convert bitstream format",
765 {
"segment_time_metadata",
"output file segment start time and duration as packet metadata",
static int add_file(AVFormatContext *avf, char *filename, ConcatFile **rfile, unsigned *nb_files_alloc)
static int real_seek(AVFormatContext *avf, int stream, int64_t min_ts, int64_t ts, int64_t max_ts, int flags, AVFormatContext *cur_avf)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
AVCodecParameters * par_in
Parameters of the input stream.
#define AV_BPRINT_SIZE_UNLIMITED
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
static int packet_after_outpoint(ConcatContext *cat, AVPacket *pkt)
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.
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
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 segment_time_metadata
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
#define AVERROR_EOF
End of file.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
static int64_t get_best_effort_duration(ConcatFile *file, AVFormatContext *avf)
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
AVStream ** streams
A list of all streams in the file.
AVRational avg_frame_rate
Average framerate.
ConcatMatchMode stream_match_mode
static int open_next_file(AVFormatContext *avf)
#define AV_LOG_VERBOSE
Detailed information.
static int concat_probe(const AVProbeData *probe)
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 av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
The bitstream filter state.
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
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.
uint8_t * av_packet_pack_dictionary(AVDictionary *dict, int *size)
Pack a dictionary for use in side_data.
static int concat_read_header(AVFormatContext *avf)
static int match_streams_exact_id(AVFormatContext *avf)
static int filter_packet(AVFormatContext *avf, ConcatStream *cs, AVPacket *pkt)
static av_cold int read_close(AVFormatContext *ctx)
@ AV_ROUND_UP
Round toward +infinity.
AVCodecParameters * par_out
Parameters of the output stream.
static int concat_read_packet(AVFormatContext *avf, AVPacket *pkt)
@ AV_PKT_DATA_STRINGS_METADATA
A list of zero terminated key/value strings.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static char * get_keyword(uint8_t **cursor)
static int copy_stream_props(AVStream *st, AVStream *source_st)
int flags
Flags modifying the (de)muxer behaviour.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
AVInputFormat ff_concat_demuxer
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample files
static const AVOption options[]
AVCodecParameters * codecpar
Codec parameters associated with this stream.
static int open_file(AVFormatContext *avf, unsigned fileno)
#define LIBAVUTIL_VERSION_INT
static int read_header(FFV1Context *f)
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.
Rational number (pair of numerator and denominator).
const char * av_default_item_name(void *ptr)
Return the context name.
AVIOContext * pb
I/O context.
#define AVERROR_BSF_NOT_FOUND
Bitstream filter not found.
This structure contains the data a format has to probe a file.
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
int extradata_size
Size of the extradata content in bytes.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp)
Read a whole line of text from AVIOContext to an AVBPrint buffer overwriting its contents.
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
static int try_seek(AVFormatContext *avf, int stream, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
static int64_t start_time
char * url
input or output URL.
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Seek to timestamp ts.
#define AV_NOPTS_VALUE
Undefined timestamp value.
static int match_streams_one_to_one(AVFormatContext *avf)
static const AVClass concat_class
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
#define AV_LOG_INFO
Standard information.
static int safe_filename(const char *f)
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
#define i(width, name, range_min, range_max)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
@ AV_ROUND_DOWN
Round toward -infinity.
int id
Format-specific stream ID.
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
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_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
void ff_make_absolute_url(char *buf, int size, const char *base, const char *rel)
Convert a relative url into an absolute url, given a base url.
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration file
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
static int probe(const AVProbeData *p)
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.
AVRational r_frame_rate
Real base framerate of the stream.
static void rescale_interval(AVRational tb_in, AVRational tb_out, int64_t *min_ts, int64_t *ts, int64_t *max_ts)
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set that converts the value to a string and stores it.
static int detect_stream_specific(AVFormatContext *avf, int idx)
const VDPAUPixFmtMap * map
@ AV_ROUND_PASS_MINMAX
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure stores compressed data.
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
#define flags(name, subs,...)
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
static int concat_seek(AVFormatContext *avf, int stream, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
static int match_streams(AVFormatContext *avf)
void * priv_data
Format private data.
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.
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
static int concat_read_close(AVFormatContext *avf)