Go to the documentation of this file.
56 #include "libavutil/ffversion.h"
74 return FFMPEG_CONFIGURATION;
79 #define LICENSE_PREFIX "libavformat license: "
93 #define RELATIVE_TS_BASE (INT64_MAX - (1LL<<48))
111 timestamp < st->pts_wrap_reference)
120 #if FF_API_FORMAT_GET_SET
122 #if FF_API_LAVF_FFSERVER
134 #if FF_API_OLD_OPEN_CALLBACKS
157 s->internal->inject_global_side_data = 1;
158 for (
i = 0;
i <
s->nb_streams;
i++) {
170 dst-> codec_whitelist =
av_strdup(
src->codec_whitelist);
174 if ( (
src-> codec_whitelist && !dst-> codec_whitelist)
175 || (
src-> format_whitelist && !dst-> format_whitelist)
186 #if FF_API_LAVF_AVCTX
188 if (st->codec->codec)
189 return st->codec->codec;
195 if (
s->video_codec)
return s->video_codec;
198 if (
s->audio_codec)
return s->audio_codec;
201 if (
s->subtitle_codec)
return s->subtitle_codec;
212 #if CONFIG_H264_DECODER
237 #if FF_API_FORMAT_GET_SET
240 return s->probe_score;
245 #define SANE_CHUNK_SIZE (50000000)
249 if (
s->maxsize>= 0) {
251 int64_t remaining=
s->maxsize -
pos;
252 if (remaining <
size) {
254 if (!
s->maxsize ||
s->maxsize<newsize)
255 s->maxsize = newsize - !newsize;
256 if (
pos >
s->maxsize &&
s->maxsize >= 0)
259 remaining =
s->maxsize -
pos;
262 if (
s->maxsize>= 0 && remaining+1 <
size) {
274 int64_t orig_pos =
pkt->
pos;
297 if (
ret != read_size) {
340 static const struct {
368 "Probe with size=%d, packets=%d detected %s with score=%d\n",
371 for (
i = 0; fmt_id_type[
i].name;
i++) {
372 if (!strcmp(
fmt->name, fmt_id_type[
i].name)) {
382 #if FF_API_LAVF_AVCTX
430 s, 0,
s->format_probesize);
433 "will be ignored with AVFMT_NOFILE format.\n");
447 s, 0,
s->format_probesize);
473 (*plast_pktl)->next = pktl;
475 *packet_buffer = pktl;
485 for (
i = 0;
i <
s->nb_streams;
i++)
488 if (
s->streams[
i]->attached_pic.size <= 0) {
490 "Attached picture on stream %d has invalid size, "
496 &
s->internal->raw_packet_buffer_end,
497 &
s->streams[
i]->attached_pic,
508 for (
i = 0;
i <
s->nb_streams;
i++) {
525 #if FF_API_LAVF_AVCTX
551 av_log(
NULL,
AV_LOG_ERROR,
"Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
566 if (!(
s->url =
av_strdup(filename ? filename :
""))) {
571 #if FF_API_FORMAT_FILENAME
573 av_strlcpy(
s->filename, filename ? filename :
"",
sizeof(
s->filename));
578 s->probe_score =
ret;
580 if (!
s->protocol_whitelist &&
s->pb &&
s->pb->protocol_whitelist) {
581 s->protocol_whitelist =
av_strdup(
s->pb->protocol_whitelist);
582 if (!
s->protocol_whitelist) {
588 if (!
s->protocol_blacklist &&
s->pb &&
s->pb->protocol_blacklist) {
589 s->protocol_blacklist =
av_strdup(
s->pb->protocol_blacklist);
590 if (!
s->protocol_blacklist) {
596 if (
s->format_whitelist &&
av_match_list(
s->iformat->name,
s->format_whitelist,
',') <= 0) {
615 if (
s->iformat->priv_data_size > 0) {
616 if (!(
s->priv_data =
av_mallocz(
s->iformat->priv_data_size))) {
620 if (
s->iformat->priv_class) {
621 *(
const AVClass **)
s->priv_data =
s->iformat->priv_class;
634 if ((
ret =
s->iformat->read_header(
s)) < 0)
638 s->metadata =
s->internal->id3v2_meta;
639 s->internal->id3v2_meta =
NULL;
640 }
else if (
s->internal->id3v2_meta) {
644 av_log(
s,
level,
"Discarding ID3 tags because more suitable tags were found.\n");
652 if (id3v2_extra_meta) {
653 if (!strcmp(
s->iformat->name,
"mp3") || !strcmp(
s->iformat->name,
"aac") ||
654 !strcmp(
s->iformat->name,
"tta") || !strcmp(
s->iformat->name,
"wav")) {
676 for (
i = 0;
i <
s->nb_streams;
i++)
677 s->streams[
i]->internal->orig_codec_id =
s->streams[
i]->codecpar->codec_id;
687 if (
s->iformat->read_close)
688 s->iformat->read_close(
s);
705 if (
s->video_codec_id)
709 if (
s->audio_codec_id)
713 if (
s->subtitle_codec_id)
717 if (
s->data_codec_id)
735 "Failed to reallocate probe buffer for stream %d\n",
748 "nothing to probe for stream %d\n", st->
index);
752 end=
s->internal->raw_packet_buffer_remaining_size <= 0
776 int i, pts_wrap_behavior;
777 int64_t pts_wrap_reference;
795 if (!first_program) {
797 if (
s->streams[default_stream_index]->pts_wrap_reference ==
AV_NOPTS_VALUE) {
798 for (
i = 0;
i <
s->nb_streams;
i++) {
801 s->streams[
i]->pts_wrap_reference = pts_wrap_reference;
802 s->streams[
i]->pts_wrap_behavior = pts_wrap_behavior;
814 pts_wrap_reference =
program->pts_wrap_reference;
815 pts_wrap_behavior =
program->pts_wrap_behavior;
824 if (
program->pts_wrap_reference != pts_wrap_reference) {
825 for (
i = 0;
i<
program->nb_stream_indexes;
i++) {
826 s->streams[
program->stream_index[
i]]->pts_wrap_reference = pts_wrap_reference;
827 s->streams[
program->stream_index[
i]]->pts_wrap_behavior = pts_wrap_behavior;
830 program->pts_wrap_reference = pts_wrap_reference;
831 program->pts_wrap_behavior = pts_wrap_behavior;
850 if (
s->internal->raw_packet_buffer_remaining_size <= 0)
854 s->internal->raw_packet_buffer = pktl->
next;
855 s->internal->raw_packet_buffer_remaining_size +=
pkt->
size;
864 ret =
s->iformat->read_packet(
s,
pkt);
873 for (
i = 0;
i <
s->nb_streams;
i++) {
892 "Dropped corrupted packet (stream = %d)\n",
921 if (
s->use_wallclock_as_timestamps)
928 &
s->internal->raw_packet_buffer_end,
934 s->internal->raw_packet_buffer_remaining_size -=
pkt->
size;
967 #if FF_API_LAVF_AVCTX
984 }
else if (codec_framerate.
den * 1000LL > codec_framerate.
num) {
1038 #if CONFIG_H264_DECODER
1055 if (pktl ==
s->internal->packet_buffer_end)
1056 return s->internal->parse_queue;
1069 int64_t best_score = INT64_MAX;
1070 for (
i = 0;
i<delay;
i++) {
1073 if (score < best_score) {
1075 dts = pts_buffer[
i];
1080 for (
i = 0;
i<delay;
i++) {
1097 dts = pts_buffer[0];
1109 AVStream *st =
s->streams[stream_index];
1118 for (; pkt_buffer; pkt_buffer =
get_next_pkt(
s, st, pkt_buffer)) {
1123 pts_buffer[0] = pkt_buffer->
pkt.
pts;
1124 for (
i = 0; i<delay && pts_buffer[i] > pts_buffer[
i + 1];
i++)
1125 FFSWAP(int64_t, pts_buffer[
i], pts_buffer[
i + 1]);
1135 AVStream *st =
s->streams[stream_index];
1136 AVPacketList *pktl =
s->internal->packet_buffer ?
s->internal->packet_buffer :
s->internal->parse_queue;
1156 for (pktl_it = pktl; pktl_it; pktl_it =
get_next_pkt(
s, st, pktl_it)) {
1188 AVPacketList *pktl =
s->internal->packet_buffer ?
s->internal->packet_buffer :
s->internal->parse_queue;
1206 av_log(
s,
AV_LOG_DEBUG,
"first_dts %s not matching first dts %s (pts %s, duration %"PRId64
") in the queue\n",
1214 pktl =
s->internal->packet_buffer ?
s->internal->packet_buffer :
s->internal->parse_queue;
1243 int64_t next_dts, int64_t next_pts)
1245 int num, den, presentation_delayed, delay,
i;
1260 "DTS %"PRIi64
" < %"PRIi64
" out of order\n",
1286 presentation_delayed = 0;
1292 presentation_delayed = 1;
1310 if ( strcmp(
s->iformat->name,
"mov,mp4,m4a,3gp,3g2,mj2")
1311 && strcmp(
s->iformat->name,
"flv"))
1327 if (
pkt->
duration != 0 && (
s->internal->packet_buffer ||
s->internal->parse_queue))
1345 presentation_delayed = 1;
1349 "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64
" delay:%d onein_oneout:%d\n",
1355 if ((delay == 0 || (delay == 1 && pc)) &&
1357 if (presentation_delayed) {
1375 ((uint64_t)st->
cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1376 next_dts != next_pts &&
1424 #if FF_API_CONVERGENCE_DURATION
1443 *pkt_buf_end =
NULL;
1454 AVStream *st =
s->streams[stream_index];
1457 int ret = 0, got_output = 0;
1470 int64_t next_pts =
pkt->
pts;
1471 int64_t next_dts =
pkt->
dts;
1484 got_output = !!out_pkt.
size;
1518 (
AVRational) { 1, st->internal->avctx->sample_rate },
1544 &
s->internal->parse_queue_end,
1571 *pkt_buffer = pktl->
next;
1573 *pkt_buffer_end =
NULL;
1585 int ret = 0,
i, got_packet = 0;
1590 while (!got_packet && !
s->internal->parse_queue) {
1600 for (
i = 0;
i <
s->nb_streams;
i++) {
1615 av_log(
s,
AV_LOG_DEBUG,
"Demuxer context update while decoder is open, closing and trying to re-open\n");
1632 #if FF_API_LAVF_AVCTX
1648 cur_pkt.
pts < cur_pkt.
dts) {
1650 "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1658 "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64
", flags=%d\n",
1668 "%s, packets or times may be invalid.\n",
1714 if (!got_packet &&
s->internal->parse_queue)
1719 int discard_padding = 0;
1726 sample < st->last_discard_sample)
1735 AV_WL32(p + 4, discard_padding);
1755 memcpy(dst_data, src_sd->
data, src_sd->
size);
1769 #if FF_API_LAVF_AVCTX
1775 "read_frame_internal stream=%d, pts=%s, dts=%s, "
1776 "size=%d, duration=%"PRId64
", flags=%d\n",
1793 ret =
s->internal->packet_buffer
1795 &
s->internal->packet_buffer_end,
pkt)
1809 int wrap_bits =
s->streams[next_pkt->
stream_index]->pts_wrap_bits;
1812 int64_t last_dts = next_pkt->
dts;
1823 last_dts = pktl->
pkt.
dts;
1836 pktl =
s->internal->packet_buffer;
1844 &
s->internal->packet_buffer_end,
pkt);
1859 &
s->internal->packet_buffer_end,
1901 int best_stream = 0;
1902 int best_score = INT_MIN;
1904 if (
s->nb_streams <= 0)
1906 for (
i = 0;
i <
s->nb_streams;
i++) {
1926 if (score > best_score) {
1943 for (
i = 0;
i <
s->nb_streams;
i++) {
1963 if (
s->internal->inject_global_side_data)
1974 for (
i = 0;
i <
s->nb_streams;
i++) {
1986 AVStream *st =
s->streams[stream_index];
1987 unsigned int max_entries =
s->max_index_size /
sizeof(
AVIndexEntry);
1998 int *nb_index_entries,
1999 unsigned int *index_entries_allocated_size,
2000 int64_t pos, int64_t timestamp,
2006 if ((
unsigned) *nb_index_entries + 1 >= UINT_MAX /
sizeof(
AVIndexEntry))
2012 if (size < 0 || size > 0x3FFFFFFF)
2019 index_entries_allocated_size,
2020 (*nb_index_entries + 1) *
2025 *index_entries = entries;
2031 index = (*nb_index_entries)++;
2032 ie = &entries[
index];
2035 ie = &entries[
index];
2039 memmove(entries +
index + 1, entries +
index,
2041 (*nb_index_entries)++;
2042 }
else if (ie->
pos == pos && distance < ie->min_distance)
2066 int64_t wanted_timestamp,
int flags)
2075 if (
b && entries[
b - 1].timestamp < wanted_timestamp)
2084 if (m ==
b && entries[m].timestamp >= wanted_timestamp) {
2091 if (timestamp >= wanted_timestamp)
2093 if (timestamp <= wanted_timestamp)
2099 while (m >= 0 && m < nb_entries &&
2103 if (m == nb_entries)
2111 int64_t pos_delta = 0;
2120 "Protocol name not provided, cannot determine if input is local or "
2121 "a network protocol, buffers and access patterns cannot be configured "
2122 "optimally without knowing the protocol\n");
2125 if (proto && !(strcmp(proto,
"file") && strcmp(proto,
"pipe") && strcmp(proto,
"cache")))
2128 for (ist1 = 0; ist1 <
s->nb_streams; ist1++) {
2130 for (ist2 = 0; ist2 <
s->nb_streams; ist2++) {
2145 if (e2_pts < e1_pts || e2_pts - (uint64_t)e1_pts < time_tolerance)
2156 if (
s->pb->buffer_size < pos_delta && pos_delta < (1<<24)) {
2159 s->pb->short_seek_threshold =
FFMAX(
s->pb->short_seek_threshold, pos_delta/2);
2162 if (skip < (1<<23)) {
2163 s->pb->short_seek_threshold =
FFMAX(
s->pb->short_seek_threshold, skip);
2170 wanted_timestamp,
flags);
2174 int64_t (*read_timestamp)(
struct AVFormatContext *,
int , int64_t *, int64_t ))
2176 int64_t ts = read_timestamp(
s, stream_index, ppos, pos_limit);
2177 if (stream_index >= 0)
2183 int64_t target_ts,
int flags)
2187 int64_t ts_min, ts_max, ts;
2192 if (stream_index < 0)
2201 st =
s->streams[stream_index];
2231 " dts_max=%s\n", pos_max, pos_limit,
av_ts2str(ts_max));
2235 pos =
ff_gen_search(
s, stream_index, target_ts, pos_min, pos_max, pos_limit,
2251 int64_t (*read_timestamp)(
struct AVFormatContext *,
int , int64_t *, int64_t ))
2253 int64_t
step = 1024;
2254 int64_t limit, ts_max;
2256 int64_t pos_max = filesize - 1;
2261 &pos_max, limit, read_timestamp);
2268 int64_t tmp_pos = pos_max + 1;
2270 &tmp_pos, INT64_MAX, read_timestamp);
2276 if (tmp_pos >= filesize)
2289 int64_t pos_min, int64_t pos_max, int64_t pos_limit,
2290 int64_t ts_min, int64_t ts_max,
2291 int flags, int64_t *ts_ret,
2293 int64_t *, int64_t))
2303 pos_min =
s->internal->data_offset;
2309 if (ts_min >= target_ts) {
2317 pos_limit = pos_max;
2320 if (ts_max <= target_ts) {
2328 while (pos_min < pos_limit) {
2330 "pos_min=0x%"PRIx64
" pos_max=0x%"PRIx64
" dts_min=%s dts_max=%s\n",
2334 if (no_change == 0) {
2335 int64_t approximate_keyframe_distance = pos_max - pos_limit;
2337 pos =
av_rescale(target_ts - ts_min, pos_max - pos_min,
2339 pos_min - approximate_keyframe_distance;
2340 }
else if (no_change == 1) {
2342 pos = (pos_min + pos_limit) >> 1;
2350 else if (pos > pos_limit)
2361 " target:%s limit:%"PRId64
" start:%"PRId64
" noc:%d\n",
2362 pos_min, pos, pos_max,
2364 pos_limit, start_pos, no_change);
2369 if (target_ts <= ts) {
2370 pos_limit = start_pos - 1;
2374 if (target_ts >= ts) {
2395 int64_t pos,
int flags)
2397 int64_t pos_min, pos_max;
2399 pos_min =
s->internal->data_offset;
2404 else if (pos > pos_max)
2409 s->io_repositioned = 1;
2415 int64_t timestamp,
int flags)
2422 st =
s->streams[stream_index];
2426 if (index < 0 && st->nb_index_entries &&
2427 timestamp < st->index_entries[0].timestamp)
2430 if (index < 0 || index == st->nb_index_entries - 1) {
2441 if ((
ret =
avio_seek(
s->pb,
s->internal->data_offset, SEEK_SET)) < 0)
2448 }
while (read_status ==
AVERROR(EAGAIN));
2449 if (read_status < 0)
2457 av_log(
s,
AV_LOG_ERROR,
"seek_frame_generic failed as this stream seems to contain no keyframes after the target timestamp, %d non keyframes found\n", nonkey);
2470 if (
s->iformat->read_seek)
2471 if (
s->iformat->read_seek(
s, stream_index, timestamp,
flags) >= 0)
2482 int64_t timestamp,
int flags)
2494 if (stream_index < 0) {
2496 if (stream_index < 0)
2499 st =
s->streams[stream_index];
2506 if (
s->iformat->read_seek) {
2508 ret =
s->iformat->read_seek(
s, stream_index, timestamp,
flags);
2514 if (
s->iformat->read_timestamp &&
2526 int64_t timestamp,
int flags)
2530 if (
s->iformat->read_seek2 && !
s->iformat->read_seek) {
2531 int64_t min_ts = INT64_MIN, max_ts = INT64_MAX;
2549 int64_t ts, int64_t max_ts,
int flags)
2551 if (min_ts > ts || max_ts < ts)
2553 if (stream_index < -1 || stream_index >= (
int)
s->nb_streams)
2560 if (
s->iformat->read_seek2) {
2564 if (stream_index == -1 &&
s->nb_streams == 1) {
2576 ret =
s->iformat->read_seek2(
s, stream_index, min_ts,
2584 if (
s->iformat->read_timestamp) {
2590 if (
s->iformat->read_seek || 1) {
2593 if (
ret<0 && ts != min_ts && max_ts != ts) {
2640 int64_t
start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
2641 int64_t
duration, duration1, duration_text, filesize;
2646 start_time_text = INT64_MAX;
2647 end_time = INT64_MIN;
2648 end_time_text = INT64_MIN;
2650 duration_text = INT64_MIN;
2660 start_time_text =
FFMIN(start_time_text, start_time1);
2666 if (end_time1 !=
AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
2667 end_time1 += start_time1;
2669 end_time_text =
FFMAX(end_time_text, end_time1);
2671 end_time =
FFMAX(end_time, end_time1);
2684 duration_text =
FFMAX(duration_text, duration1);
2694 if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time <
AV_TIME_BASE))
2695 end_time = end_time_text;
2696 else if (end_time < end_time_text)
2706 if (end_time != INT64_MIN) {
2754 int i, show_warning = 0;
2759 int64_t bit_rate = 0;
2801 "Estimating duration from bitrate, this may be inaccurate\n");
2804 #define DURATION_MAX_READ_SIZE 250000LL
2805 #define DURATION_MAX_RETRY 6
2812 int num, den, read_size,
i,
ret;
2813 int found_duration = 0;
2827 "start time for stream %d is not set in estimate_timings_from_pts\n",
i);
2836 av_log(ic,
AV_LOG_INFO,
"Skipping duration calculation in estimate_timings_from_pts\n");
2837 goto skip_duration_calc;
2845 is_end = found_duration;
2918 av_log(ic,
AV_LOG_DEBUG,
"stream %d : no PTS found at end of file, duration not set\n",
i);
2920 av_log(ic,
AV_LOG_DEBUG,
"stream %d : no TS found at start of file, duration not set\n",
i);
2949 file_size =
FFMAX(0, file_size);
2975 if (st->time_base.den)
2977 (
double) st->start_time *
av_q2d(st->time_base),
2978 (
double) st->duration *
av_q2d(st->time_base));
2981 "format: start_time: %0.3f duration: %0.3f bitrate=%"PRId64
" kb/s\n",
2992 #define FAIL(errmsg) do { \
2994 *errmsg_ptr = errmsg; \
3000 FAIL(
"unknown codec");
3004 FAIL(
"unspecified frame size");
3007 FAIL(
"unspecified sample format");
3009 FAIL(
"unspecified sample rate");
3011 FAIL(
"unspecified number of channels");
3013 FAIL(
"no decodable DTS frames");
3017 FAIL(
"unspecified size");
3019 FAIL(
"unspecified pixel format");
3022 FAIL(
"no frame in rv30/40 and no sar");
3026 FAIL(
"unspecified size");
3041 int got_picture = 1,
ret = 0;
3045 int do_skip_frame = 0;
3067 if (
s->codec_whitelist)
3111 &got_picture, &
pkt);
3124 if (!
pkt.
data && !got_picture)
3128 if (do_skip_frame) {
3160 if (bps <= 0 || bps > 64)
3175 if (sflags & (1 << (
bps - 1))) {
3219 for (
i = 0; tags && tags[
i];
i++) {
3222 if (codec_tags->
id ==
id) {
3235 for (
i = 0; tags && tags[
i];
i++) {
3246 int64_t max_time = 0;
3248 if (
s->duration > 0 &&
s->start_time < INT64_MAX -
s->duration)
3249 max_time =
s->duration +
3252 for (
i = 0;
i <
s->nb_chapters;
i++)
3259 for (j = 0; j <
s->nb_chapters; j++) {
3263 if (j !=
i && next_start >
ch->start && next_start <
end)
3273 return (
i + 1) * 1001;
3277 return (
i + 31) * 1001 * 12;
3281 return ((
const int[]) { 80, 120, 240})[
i] * 1001 * 12;
3285 return ((
const int[]) { 24, 30, 60, 12, 15, 48 })[
i] * 1000 * 12;
3296 if (
c->time_base.den >= 101LL *
c->time_base.num ||
3297 c->time_base.den < 5LL *
c->time_base.num ||
3349 && ts - (uint64_t)last < INT64_MAX) {
3364 for (j= 0; j<2; j++) {
3365 int64_t ticks =
llrint(sdts+j*0.5);
3366 double error= sdts - ticks + j*0.5;
3385 if (error0 > 0.04 && error1 > 0.04) {
3420 double best_error= 0.01;
3435 for (k= 0; k<2; k++) {
3440 if (error < best_error && best_error> 0.000000001) {
3449 if (num && (!ref_rate.
num || (
double)num/(12*1001) < 1.01 *
av_q2d(ref_rate)))
3600 int64_t max_stream_analyze_duration;
3601 int64_t max_subtitle_analyze_duration;
3603 int eof_reached = 0;
3606 flush_codecs = probesize > 0;
3610 max_stream_analyze_duration = max_analyze_duration;
3611 max_subtitle_analyze_duration = max_analyze_duration;
3612 if (!max_analyze_duration) {
3613 max_stream_analyze_duration =
3623 av_log(ic,
AV_LOG_DEBUG,
"Before avformat_find_stream_info() pos: %"PRId64
" bytes read:%"PRId64
" seeks:%d nb_streams:%d\n",
3641 #if FF_API_LAVF_AVCTX
3661 "%s, packets or times may be invalid.\n",
3671 goto find_stream_info_err;
3686 && codec && !avctx->
codec) {
3689 "Failed to open codec in %s\n",__FUNCTION__);
3694 if (codec && !avctx->
codec)
3697 "Failed to open codec in %s\n",__FUNCTION__);
3704 #if FF_API_R_FRAME_RATE
3713 int analyzed_all_streams;
3722 int fps_analyze_framecount = 20;
3732 fps_analyze_framecount *= 2;
3734 fps_analyze_framecount = 0;
3738 fps_analyze_framecount = 0;
3745 if (
count < fps_analyze_framecount)
3764 analyzed_all_streams = 0;
3765 if (!missing_streams || !*missing_streams)
3767 analyzed_all_streams = 1;
3779 if (read_size >= probesize) {
3782 "Probe buffer size limit of %"PRId64
" bytes reached\n", probesize);
3789 "Stream #%d: not enough frames to estimate rate; "
3790 "consider increasing probesize\n",
i);
3813 goto find_stream_info_err;
3824 goto find_stream_info_err;
3833 "Non-increasing DTS in stream %d: packet %d with DTS "
3834 "%"PRId64
", packet %d with DTS %"PRId64
"\n",
3850 "DTS discontinuity in stream %d: packet %d with DTS "
3851 "%"PRId64
", packet %d with DTS %"PRId64
"\n",
3882 if (analyzed_all_streams) limit = max_analyze_duration;
3884 else limit = max_stream_analyze_duration;
3887 av_log(ic,
AV_LOG_VERBOSE,
"max_analyze_duration %"PRId64
" reached at %"PRId64
" microseconds st:%d\n",
3903 #if FF_API_R_FRAME_RATE
3912 goto find_stream_info_err;
3936 for (stream_index = 0; stream_index < ic->
nb_streams; stream_index++) {
3937 st = ic->
streams[stream_index];
3941 if (codec && !avctx->
codec) {
3947 "Failed to open codec in %s\n",__FUNCTION__);
3979 "decoding for stream %d failed\n", st->
index);
4002 double best_error = 0.01;
4020 if (
error < best_error) {
4022 best_fps = std_fps.
num;
4028 if (
error < best_error) {
4030 best_fps = std_fps.
num;
4036 best_fps, 12 * 1001, INT_MAX);
4098 goto find_stream_info_err;
4104 "Could not find codec parameters for stream %d (%s): %s\n"
4105 "Consider increasing the value for the 'analyzeduration' and 'probesize' options\n",
4123 goto find_stream_info_err;
4133 #if FF_API_LAVF_AVCTX
4137 goto find_stream_info_err;
4149 if (st->codec->codec_tag !=
MKTAG(
't',
'm',
'c',
'd')) {
4157 if (!st->codec->subtitle_header)
4158 goto find_stream_info_err;
4161 st->codec->subtitle_header_size);
4174 find_stream_info_err:
4185 av_log(ic,
AV_LOG_DEBUG,
"After avformat_find_stream_info() pos: %"PRId64
" bytes read:%"PRId64
" seeks:%d frames:%d\n",
4208 int wanted_stream_nb,
int related_stream,
4213 int best_count = -1, best_multiframe = -1, best_disposition = -1;
4214 int count, multiframe, disposition;
4215 int64_t best_bitrate = -1;
4220 if (related_stream >= 0 && wanted_stream_nb < 0) {
4233 if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
4250 if ((best_disposition > disposition) ||
4251 (best_disposition == disposition && best_multiframe > multiframe) ||
4252 (best_disposition == disposition && best_multiframe == multiframe && best_bitrate >
bitrate) ||
4253 (best_disposition == disposition && best_multiframe == multiframe && best_bitrate ==
bitrate && best_count >=
count))
4255 best_disposition = disposition;
4258 best_multiframe = multiframe;
4259 ret = real_stream_index;
4269 *decoder_ret = (
AVCodec*)best_decoder;
4277 if (
s->iformat->read_play)
4278 return s->iformat->read_play(
s);
4286 if (
s->iformat->read_pause)
4287 return s->iformat->read_pause(
s);
4321 if (
src->nb_side_data) {
4328 for (
i = 0;
i <
src->nb_side_data;
i++) {
4330 src->side_data[
i].size);
4339 #if FF_API_LAVF_FFSERVER
4341 av_freep(&dst->recommended_encoder_configuration);
4342 if (
src->recommended_encoder_configuration) {
4343 const char *conf_str =
src->recommended_encoder_configuration;
4344 dst->recommended_encoder_configuration =
av_strdup(conf_str);
4345 if (!dst->recommended_encoder_configuration)
4388 #if FF_API_LAVF_AVCTX
4397 #if FF_API_LAVF_FFSERVER
4399 av_freep(&st->recommended_encoder_configuration);
4422 if (
s->iformat &&
s->iformat->priv_class &&
s->priv_data)
4424 if (
s->oformat &&
s->oformat->priv_class &&
s->priv_data)
4427 for (
i =
s->nb_streams - 1;
i >= 0;
i--)
4431 for (
i =
s->nb_programs - 1;
i >= 0;
i--) {
4438 while (
s->nb_chapters--) {
4463 if ((
s->iformat && strcmp(
s->iformat->name,
"image2") &&
s->iformat->flags &
AVFMT_NOFILE) ||
4470 if (
s->iformat->read_close)
4471 s->iformat->read_close(
s);
4486 if (
s->nb_streams >=
FFMIN(
s->max_streams, INT_MAX/
sizeof(*streams))) {
4487 if (
s->max_streams < INT_MAX/
sizeof(*streams))
4488 av_log(
s,
AV_LOG_ERROR,
"Number of streams exceeds max_streams parameter (%d), see the documentation if you wish to increase it\n",
s->max_streams);
4494 s->streams = streams;
4505 #if FF_API_LAVF_AVCTX
4529 #if FF_API_LAVF_AVCTX
4532 st->codec->bit_rate = 0;
4547 st->
index =
s->nb_streams;
4562 #if FF_API_R_FRAME_RATE
4572 s->streams[
s->nb_streams++] = st;
4609 int64_t
start, int64_t
end,
const char *title)
4619 for (
i = 0;
i <
s->nb_chapters;
i++)
4620 if (
s->chapters[
i]->id ==
id)
4621 chapter =
s->chapters[
i];
4653 for (j = 0; j <
program->nb_stream_indexes; j++)
4654 if (
program->stream_index[j] == idx)
4673 uint64_t ntp_ts, frac_part, sec;
4677 sec = ntp_time_us / 1000000;
4678 usec = ntp_time_us % 1000000;
4681 frac_part = usec * 0xFFFFFFFFULL;
4682 frac_part /= 1000000;
4684 if (sec > 0xFFFFFFFFULL)
4688 ntp_ts |= frac_part;
4696 char *q, buf1[20],
c;
4697 int nd,
len, percentd_found;
4710 if (nd >= INT_MAX / 10 - 255)
4712 nd = nd * 10 + *p++ -
'0';
4726 snprintf(buf1,
sizeof(buf1),
"%0*d", nd, number);
4728 if ((q -
buf +
len) > buf_size - 1)
4730 memcpy(q, buf1,
len);
4738 if ((q -
buf) < buf_size - 1)
4742 if (!percentd_found)
4757 char *authorization,
int authorization_size,
4758 char *hostname,
int hostname_size,
4759 int *port_ptr,
char *path,
int path_size,
const char *url)
4761 const char *p, *ls, *ls2, *at, *at2, *col, *brk;
4767 if (authorization_size > 0)
4768 authorization[0] = 0;
4769 if (hostname_size > 0)
4775 if ((p = strchr(url,
':'))) {
4789 ls = strchr(p,
'/');
4790 ls2 = strchr(p,
'?');
4794 ls =
FFMIN(ls, ls2);
4804 while ((at = strchr(p,
'@')) && at < ls) {
4806 FFMIN(authorization_size, at + 1 - at2));
4810 if (*p ==
'[' && (brk = strchr(p,
']')) && brk < ls) {
4813 FFMIN(hostname_size, brk - p));
4814 if (brk[1] ==
':' && port_ptr)
4815 *port_ptr = atoi(brk + 2);
4816 }
else if ((col = strchr(p,
':')) && col < ls) {
4818 FFMIN(col + 1 - p, hostname_size));
4820 *port_ptr = atoi(col + 1);
4823 FFMIN(ls + 1 - p, hostname_size));
4834 if (!path || !
temp) {
4844 for ( ; *pos !=
'\0'; ++pos) {
4845 if (*pos ==
'/' || *pos ==
'\\') {
4853 if ((*(pos - 1) !=
'/') || (*(pos - 1) !=
'\\')) {
4864 static const char hex_table_uc[16] = {
'0',
'1',
'2',
'3',
4867 'C',
'D',
'E',
'F' };
4868 static const char hex_table_lc[16] = {
'0',
'1',
'2',
'3',
4871 'c',
'd',
'e',
'f' };
4872 const char *hex_table =
lowercase ? hex_table_lc : hex_table_uc;
4874 for (
i = 0;
i <
s;
i++) {
4875 buff[
i * 2] = hex_table[
src[
i] >> 4];
4876 buff[
i * 2 + 1] = hex_table[
src[
i] & 0xF];
4893 if (
c >=
'0' &&
c <=
'9')
4895 else if (
c >=
'A' &&
c <=
'F')
4911 unsigned int pts_num,
unsigned int pts_den)
4915 if (new_tb.
num != pts_num)
4917 "st:%d removing common factor %d from timebase\n",
4918 s->index, pts_num / new_tb.
num);
4921 "st:%d has too large timebase, reducing\n",
s->index);
4923 if (new_tb.
num <= 0 || new_tb.
den <= 0) {
4925 "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
4930 s->time_base = new_tb;
4931 #if FF_API_LAVF_AVCTX
4933 s->codec->pkt_timebase = new_tb;
4936 s->internal->avctx->pkt_timebase = new_tb;
4937 s->pts_wrap_bits = pts_wrap_bits;
4943 const char *ptr = str;
4948 char *dest =
NULL, *dest_end;
4949 int key_len, dest_len = 0;
4952 while (*ptr && (
av_isspace(*ptr) || *ptr ==
','))
4959 if (!(ptr = strchr(
key,
'=')))
4962 key_len = ptr -
key;
4964 callback_get_buf(
context,
key, key_len, &dest, &dest_len);
4965 dest_end = dest ? dest + dest_len - 1 :
NULL;
4969 while (*ptr && *ptr !=
'\"') {
4973 if (dest && dest < dest_end)
4977 if (dest && dest < dest_end)
4985 for (; *ptr && !(
av_isspace(*ptr) || *ptr ==
','); ptr++)
4986 if (dest && dest < dest_end)
4997 for (
i = 0;
i <
s->nb_streams;
i++)
4998 if (
s->streams[
i]->id ==
id)
5007 unsigned int codec_tag;
5055 if (channel_layout) {
5074 bytestream_put_le64(&
data, channel_layout);
5089 AVRational frame_sample_aspect_ratio =
frame ?
frame->sample_aspect_ratio : codec_sample_aspect_ratio;
5091 av_reduce(&stream_sample_aspect_ratio.
num, &stream_sample_aspect_ratio.
den,
5092 stream_sample_aspect_ratio.
num, stream_sample_aspect_ratio.
den, INT_MAX);
5093 if (stream_sample_aspect_ratio.
num <= 0 || stream_sample_aspect_ratio.
den <= 0)
5094 stream_sample_aspect_ratio = undef;
5096 av_reduce(&frame_sample_aspect_ratio.
num, &frame_sample_aspect_ratio.
den,
5097 frame_sample_aspect_ratio.
num, frame_sample_aspect_ratio.
den, INT_MAX);
5098 if (frame_sample_aspect_ratio.
num <= 0 || frame_sample_aspect_ratio.
den <= 0)
5099 frame_sample_aspect_ratio = undef;
5101 if (stream_sample_aspect_ratio.
num)
5102 return stream_sample_aspect_ratio;
5104 return frame_sample_aspect_ratio;
5113 if (avg_fr.
num > 0 && avg_fr.
den > 0 && fr.
num > 0 && fr.
den > 0 &&
5120 if ( codec_fr.
num > 0 && codec_fr.
den > 0 &&
5138 const char *spec,
const char **indexptr,
AVProgram **p)
5142 if (*spec <= '9' && *spec >=
'0') {
5146 }
else if (*spec ==
'v' || *spec ==
'a' || *spec ==
's' || *spec ==
'd' ||
5147 *spec ==
't' || *spec ==
'V') {
5160 if (*spec && *spec++ !=
':')
5163 #if FF_API_LAVF_AVCTX
5175 }
else if (*spec ==
'p' && *(spec + 1) ==
':') {
5180 prog_id = strtol(spec, &endptr, 0);
5182 if (spec == endptr || (*endptr && *endptr++ !=
':'))
5186 for (
i = 0;
i <
s->nb_programs;
i++) {
5187 if (
s->programs[
i]->id != prog_id)
5190 for (j = 0; j <
s->programs[
i]->nb_stream_indexes; j++) {
5191 if (st->
index ==
s->programs[
i]->stream_index[j]) {
5194 *p =
s->programs[
i];
5203 }
else if (*spec ==
'#' ||
5204 (*spec ==
'i' && *(spec + 1) ==
':')) {
5207 spec += 1 + (*spec ==
'i');
5208 stream_id = strtol(spec, &endptr, 0);
5209 if (spec == endptr || *endptr)
5211 return match && (stream_id == st->
id);
5212 }
else if (*spec ==
'm' && *(spec + 1) ==
':') {
5219 val = strchr(spec,
':');
5227 if (!
val || !strcmp(
tag->value,
val + 1))
5236 return match &&
ret;
5237 }
else if (*spec ==
'u' && *(spec + 1) ==
'\0') {
5239 #if FF_API_LAVF_AVCTX
5248 #if FF_API_LAVF_AVCTX
5249 val =
val || (codec->sample_rate && codec->channels);
5260 #if FF_API_LAVF_AVCTX
5261 val =
val || (codec->width && codec->height);
5277 #if FF_API_LAVF_AVCTX
5296 const char *indexptr =
NULL;
5307 index = strtol(indexptr, &endptr, 0);
5314 if (spec == indexptr)
5319 for (
int i = 0; i < nb_streams && index >= 0;
i++) {
5324 if (
ret > 0 &&
index-- == 0 && st == candidate)
5337 static const uint8_t avci100_1080p_extradata[] = {
5339 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
5340 0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
5341 0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
5342 0x18, 0x21, 0x02, 0x56, 0xb9, 0x3d, 0x7d, 0x7e,
5343 0x4f, 0xe3, 0x3f, 0x11, 0xf1, 0x9e, 0x08, 0xb8,
5344 0x8c, 0x54, 0x43, 0xc0, 0x78, 0x02, 0x27, 0xe2,
5345 0x70, 0x1e, 0x30, 0x10, 0x10, 0x14, 0x00, 0x00,
5346 0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xca,
5347 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5349 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
5352 static const uint8_t avci100_1080i_extradata[] = {
5354 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
5355 0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
5356 0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
5357 0x18, 0x21, 0x03, 0x3a, 0x46, 0x65, 0x6a, 0x65,
5358 0x24, 0xad, 0xe9, 0x12, 0x32, 0x14, 0x1a, 0x26,
5359 0x34, 0xad, 0xa4, 0x41, 0x82, 0x23, 0x01, 0x50,
5360 0x2b, 0x1a, 0x24, 0x69, 0x48, 0x30, 0x40, 0x2e,
5361 0x11, 0x12, 0x08, 0xc6, 0x8c, 0x04, 0x41, 0x28,
5362 0x4c, 0x34, 0xf0, 0x1e, 0x01, 0x13, 0xf2, 0xe0,
5363 0x3c, 0x60, 0x20, 0x20, 0x28, 0x00, 0x00, 0x03,
5364 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x94, 0x20,
5366 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
5369 static const uint8_t avci50_1080p_extradata[] = {
5371 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
5372 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
5373 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
5374 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
5375 0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
5376 0x6e, 0x6c, 0xd3, 0x3c, 0x05, 0xa0, 0x22, 0x7e,
5377 0x5f, 0xfc, 0x00, 0x0c, 0x00, 0x13, 0x8c, 0x04,
5378 0x04, 0x05, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
5379 0x00, 0x03, 0x00, 0x32, 0x84, 0x00, 0x00, 0x00,
5381 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
5384 static const uint8_t avci50_1080i_extradata[] = {
5386 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
5387 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
5388 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
5389 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6e, 0x61,
5390 0x87, 0x3e, 0x73, 0x4d, 0x98, 0x0c, 0x03, 0x06,
5391 0x9c, 0x0b, 0x73, 0xe6, 0xc0, 0xb5, 0x18, 0x63,
5392 0x0d, 0x39, 0xe0, 0x5b, 0x02, 0xd4, 0xc6, 0x19,
5393 0x1a, 0x79, 0x8c, 0x32, 0x34, 0x24, 0xf0, 0x16,
5394 0x81, 0x13, 0xf7, 0xff, 0x80, 0x02, 0x00, 0x01,
5395 0xf1, 0x80, 0x80, 0x80, 0xa0, 0x00, 0x00, 0x03,
5396 0x00, 0x20, 0x00, 0x00, 0x06, 0x50, 0x80, 0x00,
5398 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
5401 static const uint8_t avci100_720p_extradata[] = {
5403 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
5404 0xb6, 0xd4, 0x20, 0x2a, 0x33, 0x1d, 0xc7, 0x62,
5405 0xa1, 0x08, 0x40, 0x54, 0x66, 0x3b, 0x8e, 0xc5,
5406 0x42, 0x02, 0x10, 0x25, 0x64, 0x2c, 0x89, 0xe8,
5407 0x85, 0xe4, 0x21, 0x4b, 0x90, 0x83, 0x06, 0x95,
5408 0xd1, 0x06, 0x46, 0x97, 0x20, 0xc8, 0xd7, 0x43,
5409 0x08, 0x11, 0xc2, 0x1e, 0x4c, 0x91, 0x0f, 0x01,
5410 0x40, 0x16, 0xec, 0x07, 0x8c, 0x04, 0x04, 0x05,
5411 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x03,
5412 0x00, 0x64, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
5414 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x31, 0x12,
5417 static const uint8_t avci50_720p_extradata[] = {
5419 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x20,
5420 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
5421 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
5422 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
5423 0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
5424 0x6e, 0x6c, 0xd3, 0x3c, 0x0f, 0x01, 0x6e, 0xff,
5425 0xc0, 0x00, 0xc0, 0x01, 0x38, 0xc0, 0x40, 0x40,
5426 0x50, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00,
5427 0x06, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
5429 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
5438 data = avci100_1080p_extradata;
5439 size =
sizeof(avci100_1080p_extradata);
5441 data = avci100_1080i_extradata;
5442 size =
sizeof(avci100_1080i_extradata);
5446 data = avci50_1080p_extradata;
5447 size =
sizeof(avci50_1080p_extradata);
5449 data = avci50_1080i_extradata;
5450 size =
sizeof(avci50_1080i_extradata);
5453 data = avci100_720p_extradata;
5454 size =
sizeof(avci100_720p_extradata);
5456 data = avci50_720p_extradata;
5457 size =
sizeof(avci50_720p_extradata);
5570 const char * shorthand[2] = {
NULL};
5573 shorthand[0] = opt->
name;
5592 "Automatically inserted bitstream filter '%s'; args='%s'\n",
5611 memset(
pkt, 0,
sizeof(*
pkt));
5617 memcpy(t, new_pkt.
data, new_pkt.
size);
5640 "Failed to open bitstream filter %s for stream %d with codec %s",
5668 s->io_close(
s, *pb);
5680 int64_t parsed_timestamp;
5684 *timestamp = return_seconds ? parsed_timestamp / 1000000 : parsed_timestamp;
5765 if (!strcmp(ofmt->
name,
"avi")) {
5766 #if FF_API_R_FRAME_RATE
5772 ||
copy_tb == AVFMT_TBCF_R_FRAMERATE) {
5816 #if FF_API_LAVF_AVCTX
5830 #if FF_API_FORMAT_FILENAME
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
int64_t start_skip_samples
If not 0, the number of samples that should be skipped from the start of the stream (the samples are ...
av_cold int avcodec_close(AVCodecContext *avctx)
Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext its...
int frame_size
Number of samples per channel in an audio frame.
int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val)
int id
unique ID to identify the chapter
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
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 be(in the first position) for now. Options ------- Then comes the options array. This is what will define the user accessible options. For example
#define FF_ENABLE_DEPRECATION_WARNINGS
AVCodecParameters * par_in
Parameters of the input stream.
#define AV_LOG_WARNING
Something somehow does not look correct.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
attribute_deprecated int64_t convergence_duration
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
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_codec_is_decoder(const AVCodec *codec)
enum AVMediaType codec_type
General type of the encoded data.
const struct PixelFormatTag * avpriv_get_raw_pix_fmt_tags(void)
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
uint64_t channel_layout
Audio channel layout.
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
unsigned int nb_stream_indexes
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc)
Add a value to a timestamp.
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
int sample_rate
samples per second
#define FFSWAP(type, a, b)
AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
This struct describes the properties of an encoded stream.
@ AV_PKT_DATA_PARAM_CHANGE
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
int seek_count
seek statistic This field is internal to libavformat and access from outside is not allowed.
void * av_opt_ptr(const AVClass *class, void *obj, const char *name)
Gets a pointer to the requested field in a struct.
#define AVERROR_EOF
End of file.
#define MKTAG(a, b, c, d)
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.
int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta **extra_meta)
Add metadata for all PRIV tags in the ID3v2 header.
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
attribute_deprecated int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe)
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
char * protocol_blacklist
',' separated list of disallowed protocols.
int duration
Duration of the current frame.
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
unsigned int avpriv_toupper4(unsigned int x)
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi - 0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(INT64_C(1)<< 63))) #define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={ FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64), };static void cpy1(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, len);} static void cpy2(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 2 *len);} static void cpy4(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 4 *len);} static void cpy8(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 8 *len);} AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags) { AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;if(channels==1){ in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);} ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map) { switch(av_get_bytes_per_sample(in_fmt)){ case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;} } if(HAVE_X86ASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);return ctx;} void swri_audio_convert_free(AudioConvert **ctx) { av_freep(ctx);} int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len) { int ch;int off=0;const int os=(out->planar ? 1 :out->ch_count) *out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask) { int planes=in->planar ? in->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;} if(ctx->out_simd_align_mask) { int planes=out->planar ? out->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;} if(ctx->simd_f &&!ctx->ch_map &&!misaligned){ off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){ if(out->planar==in->planar){ int planes=out->planar ? out->ch_count :1;for(ch=0;ch< planes;ch++){ ctx->simd_f(out-> ch ch
int av_grow_packet(AVPacket *pkt, int grow_by)
Increase packet size, correctly zeroing padding.
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
struct AVPacketList * next
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
static av_cold int end(AVCodecContext *avctx)
This structure describes decoded (raw) audio or video data.
AVStream ** streams
A list of all streams in the file.
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
int capabilities
Codec capabilities.
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
Decode a subtitle message.
@ AV_CODEC_ID_DVB_TELETEXT
int av_get_frame_filename2(char *buf, int buf_size, const char *path, int number, int flags)
Return in 'buf' the path with 'd' replaced by a number.
AVStreamInternal * internal
An opaque field for libavformat internal usage.
@ AV_PKT_DATA_PALETTE
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette.
AVRational avg_frame_rate
Average framerate.
enum AVDurationEstimationMethod duration_estimation_method
The duration field can be estimated through various ways, and this field can be used to know how the ...
uint8_t * subtitle_header
Header containing style information for text subtitles.
const struct AVBitStreamFilter * filter
@ AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE
void * av_mallocz_array(size_t nmemb, size_t size)
#define AV_LOG_VERBOSE
Detailed information.
AVBufferRef * av_buffer_create(uint8_t *data, int size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
struct AVStream::@247 * info
Stream information used internally by avformat_find_stream_info()
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
int buf_size
Size of buf except extra allocated bytes.
void ff_network_close(void)
int64_t probesize
Maximum size of the data read from input for determining the input container format.
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
@ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
int avcodec_is_open(AVCodecContext *s)
@ AV_CODEC_ID_HDMV_PGS_SUBTITLE
AVFormatInternal * internal
An opaque field for libavformat internal usage.
int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
int64_t avio_size(AVIOContext *s)
Get the filesize.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
The bitstream filter state.
int ff_network_init(void)
int av_demuxer_open(AVFormatContext *ic)
unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt)
Return a value representing the fourCC code associated to the pixel format pix_fmt,...
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
static int ff_mutex_unlock(AVMutex *mutex)
int avformat_queue_attached_pictures(AVFormatContext *s)
void avformat_close_input(AVFormatContext **ps)
Close an opened input AVFormatContext.
int64_t offset
byte offset from starting packet start
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
static const chunk_decoder decoder[8]
int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta **extra_meta)
Create a stream for each APIC (attached picture) extracted from the ID3v2 header.
ff_const59 struct AVInputFormat * iformat
The input container format.
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx)
Allocate a context for a given bitstream filter.
const struct AVCodec * codec
enum AVDiscard skip_frame
Skip decoding for selected frames.
attribute_deprecated int64_t convergence_duration
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding.
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add an index entry into a sorted list.
#define MAKE_ACCESSORS(str, name, type, field)
unsigned avformat_version(void)
Return the LIBAVFORMAT_VERSION_INT constant.
int64_t codec_info_duration
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
@ AVDISCARD_NONE
discard nothing
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
AVCodecParserContext * av_parser_init(int codec_id)
@ AV_ROUND_UP
Round toward +infinity.
struct AVBitStreamFilterContext * next
AVCodecParameters * par_out
Parameters of the output stream.
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
AVProgram * av_new_program(AVFormatContext *ac, int id)
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
int64_t duration
Decoding: duration of the stream, in stream time base.
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
int avformat_network_init(void)
Do global initialization of network libraries.
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
@ AV_CODEC_ID_DVB_SUBTITLE
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
char * format_whitelist
',' separated list of allowed demuxers.
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.
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
int ctx_flags
Flags signalling stream properties.
int64_t first_dts
Timestamp corresponding to the last dts sync point.
enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc)
uint8_t * av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, int size)
Allocate new information from stream.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance)
Test if the given container can store a codec.
int has_b_frames
Size of the frame reordering buffer in the decoder.
@ AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
int64_t end
chapter start/end time in time_base units
This struct describes the properties of a single codec described by an AVCodecID.
int64_t codec_info_duration_fields
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Seek to the keyframe at timestamp.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
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
AVRational sample_aspect_ratio
Video only.
@ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
double(* duration_error)[2][MAX_STD_TIMEBASES]
int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags)
void av_buffer_default_free(void *opaque, uint8_t *data)
Default free callback, which calls av_free() on the buffer data.
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AVIO_FLAG_WRITE
write-only
int av_read_play(AVFormatContext *s)
Start playing a network-based stream (e.g.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
enum AVStreamParseType need_parsing
AVRational time_base_in
The timebase used for the timestamps of the input packets.
struct AVCodecParserContext * parser
int avformat_flush(AVFormatContext *s)
Discard all internally buffered data.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
int min_distance
Minimum distance between this and the previous keyframe, used to avoid unneeded searching.
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...
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
int64_t max_analyze_duration
Maximum duration (in AV_TIME_BASE units) of the data read from input in avformat_find_stream_info().
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int repeat_pict
This field is used for proper frame duration computation in lavf.
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 default minimum maximum flags name is the option keep it simple and lowercase description are in without and describe what they for example set the foo of the bar offset is the offset of the field in your context
@ AVDISCARD_ALL
discard all
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
AVBSFContext ** bsfcs
bitstream filters to run on stream
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
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.
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
int fps_probe_size
The number of frames used for determining the framerate in avformat_find_stream_info().
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).
char * protocol_whitelist
',' separated list of allowed protocols.
int64_t bit_rate
the average bitrate
enum AVPacketSideDataType type
int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as stream side data.
int av_opt_set_from_string(void *ctx, const char *opts, const char *const *shorthand, const char *key_val_sep, const char *pairs_sep)
Parse the key-value pairs list in opts.
@ AV_PICTURE_TYPE_I
Intra.
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.
unsigned int * stream_index
const AVClass * priv_class
A class for the private data, used to declare bitstream filter private AVOptions.
@ AV_ROUND_NEAR_INF
Round to nearest and halfway cases away from zero.
int avio_pause(AVIOContext *h, int pause)
Pause and resume playing - only meaningful if using a network streaming protocol (e....
void av_opt_free(void *obj)
Free all allocated objects in obj.
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
int skip_estimate_duration_from_pts
Skip duration calcuation in estimate_timings_from_pts.
int64_t pts_reorder_error[MAX_REORDER_DELAY+1]
Internal data to generate dts from pts.
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
#define AV_EF_EXPLODE
abort decoding on minor error detection
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
int sample_rate
Audio only.
static void error(const char *err)
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
int64_t nb_frames
number of frames in this stream if known or 0
AVCodecID
Identify the syntax and semantics of the bitstream.
int extradata_size
Size of the extradata content in bytes.
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
int av_strncasecmp(const char *a, const char *b, size_t n)
Locale-independent case-insensitive compare.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd)
Rescale a 64-bit integer with specified rounding.
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
const OptionDef options[]
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
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.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
uint8_t * av_stream_get_side_data(const AVStream *st, enum AVPacketSideDataType type, int *size)
Get side information from stream.
static int64_t start_time
enum AVSampleFormat sample_fmt
audio sample format
#define AV_MUTEX_INITIALIZER
int probe_packets
Number of packets to buffer for codec probing.
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
int64_t pts_buffer[MAX_REORDER_DELAY+1]
#define ID3v2_DEFAULT_MAGIC
Default magic bytes for ID3v2 header: "ID3".
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.
AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
Guess the frame rate, based on both the container and codec information.
AVRational av_stream_get_codec_timebase(const AVStream *st)
Get the internal codec timebase from a stream.
int av_probe_input_buffer2(AVIOContext *pb, ff_const59 AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size)
Probe a bytestream to determine the input format.
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
@ AV_PICTURE_TYPE_NONE
Undefined.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
const char const char void * val
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
static av_const int av_isdigit(int c)
Locale-independent conversion of ASCII isdigit.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
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 offset
static int ff_mutex_lock(AVMutex *mutex)
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
int flags
A combination of AV_PKT_FLAG values.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
#define AV_FRAME_FILENAME_FLAGS_MULTIPLE
Allow multiple d.
#define AV_LOG_INFO
Standard information.
int channels
number of audio channels
AVPacketSideData * side_data
An array of side data that applies to the whole stream (i.e.
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
int ffio_set_buf_size(AVIOContext *s, int buf_size)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
int64_t bytes_read
Bytes read statistic This field is internal to libavformat and access from outside is not allowed.
int64_t pos
Byte position of currently parsed frame in stream.
#define PARSER_FLAG_COMPLETE_FRAMES
#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...
unsigned properties
Properties of the stream that gets decoded.
int avformat_open_input(AVFormatContext **ps, const char *filename, ff_const59 AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
AVCodec * av_codec_next(const AVCodec *c)
If c is NULL, returns the first registered codec, if c is non-NULL, returns the next registered codec...
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
@ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED
#define AV_TIME_BASE
Internal time base represented as integer.
void ff_id3v2_read_dict(AVIOContext *pb, AVDictionary **metadata, const char *magic, ID3v2ExtraMeta **extra_meta)
Read an ID3v2 tag into specified dictionary and retrieve supported extra metadata.
@ AV_AUDIO_SERVICE_TYPE_EFFECTS
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
char * codec_whitelist
',' separated list of allowed decoders.
@ AV_ROUND_DOWN
Round toward -infinity.
static av_const int av_toupper(int c)
Locale-independent conversion of ASCII characters to uppercase.
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
const char AVS_Value args
int av_find_default_stream_index(AVFormatContext *s)
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
New fields can be added to the end with minor version bumps.
const char * name
Name of the codec implementation.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
int av_read_pause(AVFormatContext *s)
Pause a network-based stream (e.g.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
AVRational time_base_out
The timebase used for the timestamps of the output packets.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
enum AVFieldOrder field_order
Video only.
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet.
void * priv_data
Opaque filter-specific private data.
int disposition
AV_DISPOSITION_* bit field.
int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod)
Compare the remainders of two integer operands divided by a common divisor.
int id
Format-specific stream ID.
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
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
int nb_side_data
The number of elements in the AVStream.side_data array.
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 default minimum maximum flags name is the option keep it simple and lowercase description are in lowercase
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
#define AV_INPUT_BUFFER_PADDING_SIZE
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
@ AV_AUDIO_SERVICE_TYPE_COMMENTARY
int inject_global_side_data
Internal data to inject global side data.
int avformat_network_deinit(void)
Undo the initialization done by avformat_network_init.
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
main external API structure.
int index
stream index in AVFormatContext
int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, AVStream *ost, const AVStream *ist, enum AVTimebaseSource copy_tb)
Transfer internal timing information from one stream to another.
int found_decoder
0 -> decoder has not been searched for yet.
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
@ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
#define AVERROR_STREAM_NOT_FOUND
Stream not found.
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
static AVPacket flush_pkt
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 display_aspect_ratio
display aspect ratio (0 if unknown)
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
#define PARSER_FLAG_USE_CODEC_TS
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
static int ref[MAX_W *MAX_W]
AVRational r_frame_rate
Real base framerate of the stream.
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
This function is the same as av_get_audio_frame_duration(), except it works with AVCodecParameters in...
int64_t rfps_duration_sum
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
ff_const59 AVInputFormat * av_probe_input_format2(ff_const59 AVProbeData *pd, int is_opened, int *score_max)
Guess the file format.
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
const char * avformat_license(void)
Return the libavformat license.
int64_t av_gettime(void)
Get the current time in microseconds.
static int shift(int a, int b)
#define FF_DISABLE_DEPRECATION_WARNINGS
const struct AVBitStreamFilter * filter
The bitstream filter this context is an instance of.
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
#define AVIO_FLAG_READ
read-only
int coded_width
Bitstream width / height, may be different from width/height e.g.
enum AVMediaType codec_type
char * av_strdup(const char *s)
Duplicate a string.
int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int64_t pts, int64_t dts, int64_t pos)
Parse a packet.
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
enum AVCodecID orig_codec_id
const char * avformat_configuration(void)
Return the libavformat build-time configuration.
static av_always_inline int diff(const uint32_t a, const uint32_t b)
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
#define FF_MAX_EXTRADATA_SIZE
Maximum size in bytes of extradata.
@ 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_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta)
Free memory allocated parsing special (non-text) metadata.
int64_t pos
byte position in stream, -1 if unknown
uint64_t channel_layout
Audio only.
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
int width
picture width / height.
static float distance(float x, float y, int band)
#define flags(name, subs,...)
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).
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds.
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
#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...
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta **extra_meta)
Create chapters for all CHAP tags found in the ID3v2 header.
char * av_strndup(const char *s, size_t len)
Duplicate a substring of a string.
int pts_wrap_bits
number of bits in pts (used for wrapping control)
AVRational time_base
time base in which the start/end timestamps are specified
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
int codec_info_nb_frames
Number of frames that have been demuxed during avformat_find_stream_info()
void * priv_data
Format private data.
int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp)
Set a dictionary value to an ISO-8601 compliant timestamp string.
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.
ff_const59 AVInputFormat * av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
unsigned int index_entries_allocated_size
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
int64_t fps_first_dts
Those are used for average framerate estimation.
static AVCodecContext * dec_ctx
void av_parser_close(AVCodecParserContext *s)
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp, int flags)
Get the index for a specific timestamp.
int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, AVCodec **decoder_ret, int flags)
Find the "best" stream in the file.
struct AVStreamInternal::@261 extract_extradata