Go to the documentation of this file.
132 av_assert0(
s->stream_groups[
s->nb_stream_groups - 1 ] == stg);
163 if (
s->iformat &&
s->iformat->priv_class &&
s->priv_data)
165 if (
s->oformat &&
s->oformat->priv_class &&
s->priv_data)
168 for (
unsigned i = 0;
i <
s->nb_streams;
i++)
170 for (
unsigned i = 0;
i <
s->nb_stream_groups;
i++)
172 s->nb_stream_groups = 0;
175 for (
unsigned i = 0;
i <
s->nb_programs;
i++) {
184 while (
s->nb_chapters--) {
216 dst->time_base =
src->time_base;
217 dst->start_time =
src->start_time;
218 dst->duration =
src->duration;
219 dst->nb_frames =
src->nb_frames;
220 dst->disposition =
src->disposition;
221 dst->discard =
src->discard;
222 dst->sample_aspect_ratio =
src->sample_aspect_ratio;
223 dst->avg_frame_rate =
src->avg_frame_rate;
224 dst->event_flags =
src->event_flags;
225 dst->r_frame_rate =
src->r_frame_rate;
226 dst->pts_wrap_bits =
src->pts_wrap_bits;
238 if (
src->attached_pic.data) {
323 for (
unsigned j = 0; j <
program->nb_stream_indexes; j++)
324 if (
program->stream_index[j] == idx)
349 int ret, idx = -1, match = -1;
359 for (
unsigned i = 0;
i <
src->nb_programs;
i++) {
360 if (
src->programs[
i]->id == progid) {
362 av_log(
dst,
AV_LOG_ERROR,
"multiple programs found in source with same id 0x%04x. Not copying.\n", progid);
365 src_prog =
src->programs[
i];
375 for (
unsigned i = 0;
i <
dst->nb_programs;
i++) {
376 if (
dst->programs[
i]->id == progid) {
378 av_log(
dst,
AV_LOG_ERROR,
"multiple programs found in target with same id 0x%04x. Not copying.\n", progid);
386 if (idx >= 0 && !overwrite)
392 dst_prog =
dst->programs[idx];
403 dst_prog->
id = src_prog->
id;
411 if (match == -1 &&
src->nb_streams) {
413 for (
unsigned i = 0;
i <
src->nb_streams && !match;
i++) {
414 int src_id =
src->streams[
i]->id;
419 for (
unsigned j=
i+1; j <
src->nb_streams; j++) {
420 int sib_id =
src->streams[j]->id;
421 if (src_id == sib_id) {
429 for (
unsigned i = 0;
i <
dst->nb_streams;
i++) {
430 int dst_val = match ?
i :
dst->streams[
i]->id;
435 if (dst_val == src_val) {
468 int best_score = INT_MIN;
470 if (
s->nb_streams <= 0)
472 for (
unsigned i = 0;
i <
s->nb_streams;
i++) {
493 if (score > best_score) {
502 int wanted_stream_nb,
int related_stream,
507 int best_count = -1, best_multiframe = -1, best_disposition = -1;
508 int count, multiframe, disposition;
514 if (related_stream >= 0 && wanted_stream_nb < 0) {
527 if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
543 multiframe =
FFMIN(5, count);
544 if ((best_disposition > disposition) ||
545 (best_disposition == disposition && best_multiframe > multiframe) ||
546 (best_disposition == disposition && best_multiframe == multiframe && best_bitrate >
bitrate) ||
547 (best_disposition == disposition && best_multiframe == multiframe && best_bitrate ==
bitrate && best_count >= count))
549 best_disposition = disposition;
552 best_multiframe = multiframe;
553 ret = real_stream_index;
563 *decoder_ret = best_decoder;
577 const char *spec,
const char **indexptr,
582 if (*spec <= '9' && *spec >=
'0') {
586 }
else if (*spec ==
'v' || *spec ==
'a' || *spec ==
's' || *spec ==
'd' ||
587 *spec ==
't' || *spec ==
'V') {
600 if (*spec && *spec++ !=
':')
607 }
else if (*spec ==
'g' && *(spec + 1) ==
':') {
608 int64_t group_idx = -1, group_id = -1;
612 if (*spec ==
'#' || (*spec ==
'i' && *(spec + 1) ==
':')) {
613 spec += 1 + (*spec ==
'i');
614 group_id = strtol(spec, &endptr, 0);
615 if (spec == endptr || (*endptr && *endptr++ !=
':'))
619 group_idx = strtol(spec, &endptr, 0);
621 if (spec == endptr || (*endptr && *endptr++ !=
':'))
627 for (
unsigned i = 0;
i <
s->nb_stream_groups;
i++) {
628 if (group_id ==
s->stream_groups[
i]->id) {
634 if (group_idx < 0 || group_idx >=
s->nb_stream_groups)
636 for (
unsigned j = 0; j <
s->stream_groups[group_idx]->nb_streams; j++) {
637 if (st->
index ==
s->stream_groups[group_idx]->streams[j]->index) {
640 *
g =
s->stream_groups[group_idx];
647 }
else if (*spec ==
'p' && *(spec + 1) ==
':') {
652 prog_id = strtol(spec, &endptr, 0);
654 if (spec == endptr || (*endptr && *endptr++ !=
':'))
658 for (
unsigned i = 0;
i <
s->nb_programs;
i++) {
659 if (
s->programs[
i]->id != prog_id)
662 for (
unsigned j = 0; j <
s->programs[
i]->nb_stream_indexes; j++) {
663 if (st->
index ==
s->programs[
i]->stream_index[j]) {
675 }
else if (*spec ==
'#' ||
676 (*spec ==
'i' && *(spec + 1) ==
':')) {
679 spec += 1 + (*spec ==
'i');
680 stream_id = strtol(spec, &endptr, 0);
681 if (spec == endptr || *endptr)
683 return match && (stream_id == st->
id);
684 }
else if (*spec ==
'm' && *(spec + 1) ==
':') {
691 val = strchr(spec,
':');
699 if (!
val || !strcmp(
tag->value,
val + 1))
709 }
else if (*spec ==
'u' && *(spec + 1) ==
'\0') {
744 const char *indexptr =
NULL;
756 index = strtol(indexptr, &endptr, 0);
763 if (spec == indexptr)
767 nb_streams =
g ?
g->nb_streams : (
p ?
p->nb_stream_indexes :
s->nb_streams);
768 for (
int i = 0; i < nb_streams && index >= 0;
i++) {
769 unsigned idx =
g ?
g->streams[
i]->index : (
p ?
p->stream_index[
i] :
i);
770 const AVStream *candidate =
s->streams[idx];
774 if (
ret > 0 &&
index-- == 0 && st == candidate)
790 AVRational frame_sample_aspect_ratio =
frame ?
frame->sample_aspect_ratio : codec_sample_aspect_ratio;
792 av_reduce(&stream_sample_aspect_ratio.
num, &stream_sample_aspect_ratio.
den,
793 stream_sample_aspect_ratio.
num, stream_sample_aspect_ratio.
den, INT_MAX);
794 if (stream_sample_aspect_ratio.
num <= 0 || stream_sample_aspect_ratio.
den <= 0)
795 stream_sample_aspect_ratio = undef;
797 av_reduce(&frame_sample_aspect_ratio.
num, &frame_sample_aspect_ratio.
den,
798 frame_sample_aspect_ratio.
num, frame_sample_aspect_ratio.
den, INT_MAX);
799 if (frame_sample_aspect_ratio.
num <= 0 || frame_sample_aspect_ratio.
den <= 0)
800 frame_sample_aspect_ratio = undef;
802 if (stream_sample_aspect_ratio.
num)
803 return stream_sample_aspect_ratio;
805 return frame_sample_aspect_ratio;
814 if (avg_fr.
num > 0 && avg_fr.
den > 0 && fr.
num > 0 && fr.
den > 0 &&
823 if ( codec_fr.
num > 0 && codec_fr.
den > 0 &&
831 #if FF_API_INTERNAL_TIMING
832 int avformat_transfer_internal_stream_timing_info(
const AVOutputFormat *ofmt,
851 if (!strcmp(ofmt->
name,
"avi")) {
852 #if FF_API_R_FRAME_RATE
858 ||
copy_tb == AVFMT_TBCF_R_FRAMERATE) {
863 if (
copy_tb == AVFMT_TBCF_AUTO && dec_ctx_framerate.
num &&
866 || (
copy_tb == AVFMT_TBCF_DECODER &&
873 if (
copy_tb == AVFMT_TBCF_AUTO && dec_ctx_framerate.
num
876 || (
copy_tb == AVFMT_TBCF_DECODER &&
883 && dec_ctx_tb.
num < dec_ctx_tb.
den
884 && dec_ctx_tb.
num > 0
885 && 121LL*dec_ctx_tb.
num > dec_ctx_tb.
den) {
891 enc_tb.num, enc_tb.den, INT_MAX);
903 unsigned int pts_num,
unsigned int pts_den)
908 if (new_tb.
num != pts_num)
910 "st:%d removing common factor %d from timebase\n",
914 "st:%d has too large timebase, reducing\n", st->
index);
916 if (new_tb.
num <= 0 || new_tb.
den <= 0) {
918 "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
934 if (
s->video_codec)
return s->video_codec;
937 if (
s->audio_codec)
return s->audio_codec;
940 if (
s->subtitle_codec)
return s->subtitle_codec;
949 #define OFF(field) offsetof(AVFormatContext, field)
950 static const unsigned offsets[] = {
951 OFF(codec_whitelist),
OFF(format_whitelist),
952 OFF(protocol_whitelist),
OFF(protocol_blacklist),
956 !
dst->format_whitelist &&
957 !
dst->protocol_whitelist &&
958 !
dst->protocol_blacklist);
960 const char *src_str = *(
char *
const*)((
const char*)
src +
offsets[
i]);
1004 if (
s->protocol_whitelist &&
av_match_list(proto,
s->protocol_whitelist,
',') <= 0) {
1005 av_log(
s,
AV_LOG_ERROR,
"Protocol '%s' not on whitelist '%s'!\n", proto,
s->protocol_whitelist);
1009 if (
s->protocol_blacklist &&
av_match_list(proto,
s->protocol_blacklist,
',') > 0) {
1028 ret =
s->io_close2(
s, *pb);
static void error(const char *err)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
#define AV_LOG_WARNING
Something somehow does not look correct.
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C program
static AVCodecContext * dec_ctx
union AVStreamGroup::@450 params
Group type-specific parameters.
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
enum AVMediaType codec_type
General type of the encoded data.
struct AVStreamGroupTileGrid * tile_grid
unsigned int nb_stream_indexes
struct AVBSFContext * bsfc
bitstream filter to run on stream
This struct describes the properties of an encoded stream.
struct AVBSFContext * bsf
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
This structure describes decoded (raw) audio or video data.
AVStream ** streams
A list of all streams in the file.
AVRational avg_frame_rate
Average framerate.
void av_iamf_mix_presentation_free(AVIAMFMixPresentation **pmix_presentation)
Free an AVIAMFMixPresentation and all its contents.
static unsigned int nb_streams
struct AVStreamGroupTREF * tref
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
int nb_channels
Number of channels in this layout.
enum AVMediaType codec_type
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
const struct AVCodecDescriptor * codec_desc
#define AVFMT_PROGCOPY_OVERWRITE
overwrite pre-existing program having same ID
static const chunk_decoder decoder[8]
const char * avformat_stream_group_name(enum AVStreamGroupParamsType type)
void av_iamf_audio_element_free(AVIAMFAudioElement **paudio_element)
Free an AVIAMFAudioElement and all its contents.
enum AVDiscard discard
selects which program to discard and which to feed to the caller
void av_opt_free(void *obj)
Free all allocated objects in obj.
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
@ AVDISCARD_NONE
discard nothing
static double val(void *priv, double ch)
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 type
AVProgram * av_new_program(AVFormatContext *ac, int id)
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
#define AVFMT_PROGCOPY_MATCH_BY_INDEX
match streams using stream index
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
This struct describes the properties of a single codec described by an AVCodecID.
PacketList packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
static const int offsets[]
struct FFStream::@480 extract_extradata
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
AVRational sample_aspect_ratio
The aspect ratio (width/height) which a single pixel should have when displayed.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
int width
The width of the video frame in pixels.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
Guess the sample aspect ratio of a frame, based on both the stream and the frame aspect ratio.
int codec_info_nb_frames
Number of frames that have been demuxed during avformat_find_stream_info()
static const FFOutputFormat * ffofmt(const AVOutputFormat *fmt)
int av_program_copy(AVFormatContext *dst, const AVFormatContext *src, int progid, int flags)
Copy an AVProgram from one AVFormatContext to another.
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
void av_packet_side_data_free(AVPacketSideData **psd, int *pnb_sd)
Convenience function to free all the side data stored in an array, and the array itself.
struct AVStreamGroupLayeredVideo * layered_video
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
void avpriv_packet_list_free(PacketList *pkt_buf)
Wipe the list and unref all the packets in it.
@ AVDISCARD_ALL
discard all
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
static __device__ float fabs(float a)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
New swscale design to change SwsGraph is what coordinates multiple passes These can include cascaded scaling error diffusion and so on Or we could have separate passes for the vertical and horizontal scaling In between each SwsPass lies a fully allocated image buffer Graph passes may have different levels of e g we can have a single threaded error diffusion pass following a multi threaded scaling pass SwsGraph is internally recreated whenever the image format
AVPacketSideData * coded_side_data
Additional data associated with the grid.
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
Rational number (pair of numerator and denominator).
unsigned int * stream_index
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
AVChannelLayout ch_layout
The channel layout and number of channels.
#define AVFMT_PROGCOPY_MATCH_BY_ID
match streams using stream id
int sample_rate
The number of audio samples per second.
AVCodecID
Identify the syntax and semantics of the bitstream.
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
int raw_packet_buffer_size
Sum of the size of packets in raw_packet_buffer, in bytes.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
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.
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define i(width, name, range_min, range_max)
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_CODEC_PROP_FIELDS
Video codec supports separate coding of fields in interlaced frames.
struct AVIAMFAudioElement * iamf_audio_element
struct AVStreamGroupTileGrid::@449 * offsets
An nb_tiles sized array of offsets in pixels from the topleft edge of the canvas, indicating where ea...
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
AVStream ** streams
A list of streams in the group.
struct AVIAMFMixPresentation * iamf_mix_presentation
double(* duration_error)[2][MAX_STD_TIMEBASES]
int nb_coded_side_data
Amount of entries in coded_side_data.
int height
The height of the video frame in pixels.
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
int av_find_default_stream_index(AVFormatContext *s)
New fields can be added to the end with minor version bumps.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
int id
Format-specific stream ID.
AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
Guess the frame rate, based on both the container and codec information.
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
AVDictionary * metadata
Metadata that applies to the whole group.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
void avcodec_parameters_free(AVCodecParameters **par)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
const char * scheme
possibly including lavf-specific options
main external API structure.
int index
stream index in AVFormatContext
#define AVERROR_STREAM_NOT_FOUND
Stream not found.
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.
AVRational r_frame_rate
Real base framerate of the stream.
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
enum AVStreamGroupParamsType type
Group type.
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
struct AVCodecParserContext * parser
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
char * av_strndup(const char *s, size_t len)
Duplicate a substring of a string.
int pts_wrap_bits
Number of bits in timestamps.
int ff_url_decompose(URLComponents *uc, const char *url, const char *end)
Parse an URL to find the components.
PacketList parse_queue
Packets split by the parser get queued here.
int initialized
Whether or not avformat_init_output has already been called.
void av_parser_close(AVCodecParserContext *s)