74 #define LICENSE_PREFIX "libavformat license: " 88 #define RELATIVE_TS_BASE (INT64_MAX - (1LL<<48)) 106 timestamp < st->pts_wrap_reference)
115 #if FF_API_FORMAT_GET_SET 117 #if FF_API_LAVF_FFSERVER 129 #if FF_API_OLD_OPEN_CALLBACKS 169 if ( (src-> codec_whitelist && !dst-> codec_whitelist)
170 || (src-> format_whitelist && !dst-> format_whitelist)
181 #if FF_API_LAVF_AVCTX 183 if (st->codec->codec)
184 return st->codec->codec;
207 #if CONFIG_H264_DECODER 222 if (probe_codec->
id == codec->
id &&
233 #if FF_API_FORMAT_GET_SET 241 #define SANE_CHUNK_SIZE (50000000) 247 if (remaining < size) {
250 s->
maxsize = newsize - !newsize;
252 remaining=
FFMAX(remaining, 0);
255 if (s->
maxsize>= 0 && remaining+1 < size) {
267 int orig_size = pkt->
size;
271 int prev_size = pkt->
size;
289 if (ret != read_size) {
301 return pkt->
size > orig_size ? pkt->
size - orig_size : ret;
331 static const struct {
359 "Probe with size=%d, packets=%d detected %s with score=%d\n",
362 for (i = 0; fmt_id_type[
i].name; i++) {
363 if (!strcmp(fmt->
name, fmt_id_type[i].name)) {
373 #if FF_API_LAVF_AVCTX 424 "will be ignored with AVFMT_NOFILE format.\n");
466 (*plast_pktl)->next = pktl;
468 *packet_buffer = pktl;
483 "Attached picture on stream %d has invalid size, " 518 #if FF_API_LAVF_AVCTX 544 av_log(
NULL,
AV_LOG_ERROR,
"Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
564 #if FF_API_FORMAT_FILENAME 566 av_strlcpy(s->filename, filename ? filename :
"",
sizeof(s->filename));
569 if ((ret =
init_input(s, filename, &tmp)) < 0)
638 if (id3v2_extra_meta) {
721 "Failed to reallocate probe buffer for stream %d\n",
734 "nothing to probe for stream %d\n", st->
index);
762 int i, pts_wrap_behavior;
763 int64_t pts_wrap_reference;
781 if (!first_program) {
808 program = first_program;
860 if (!pktl || ret ==
AVERROR(EAGAIN))
880 "Packet corrupt (stream = %d, dts = %s)",
891 "Invalid stream index.\n");
958 #if FF_API_LAVF_AVCTX 975 }
else if (codec_framerate.
den * 1000LL > codec_framerate.
num) {
1004 if (frame_size <= 0 || sample_rate <= 0)
1030 #if CONFIG_H264_DECODER 1061 int64_t best_score = INT64_MAX;
1062 for (i = 0; i<delay; i++) {
1065 if (score < best_score) {
1067 dts = pts_buffer[
i];
1072 for (i = 0; i<delay; i++) {
1074 int64_t
diff =
FFABS(pts_buffer[i] - dts)
1089 dts = pts_buffer[0];
1110 for (; pkt_buffer; pkt_buffer =
get_next_pkt(s, st, pkt_buffer)) {
1115 pts_buffer[0] = pkt_buffer->
pkt.
pts;
1116 for (i = 0; i<delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
1117 FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
1147 for (pktl_it = pktl; pktl_it; pktl_it =
get_next_pkt(s, st, pktl_it)) {
1151 pktl_it->
pkt.
pts += shift;
1154 pktl_it->
pkt.
dts += shift;
1177 int stream_index, int64_t
duration)
1197 av_log(s,
AV_LOG_DEBUG,
"first_dts %s not matching first dts %s (pts %s, duration %"PRId64
") in the queue\n",
1234 int64_t next_dts, int64_t next_pts)
1236 int num, den, presentation_delayed, delay,
i;
1251 "DTS %"PRIi64
" < %"PRIi64
" out of order\n",
1277 presentation_delayed = 0;
1283 presentation_delayed = 1;
1298 if (delay == 1 && pkt->
dts == pkt->
pts &&
1301 if ( strcmp(s->
iformat->
name,
"mov,mp4,m4a,3gp,3g2,mj2")
1336 presentation_delayed = 1;
1340 "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64
" delay:%d onein_oneout:%d\n",
1346 if ((delay == 0 || (delay == 1 && pc)) &&
1348 if (presentation_delayed) {
1366 ((uint64_t)st->
cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1367 next_dts != next_pts &&
1369 pkt->
pts = next_dts;
1371 if ((uint64_t)pkt->
duration <= INT32_MAX)
1415 #if FF_API_CONVERGENCE_DURATION 1434 *pkt_buf_end =
NULL;
1444 int stream_index,
int flush)
1450 int ret = 0, got_output =
flush;
1452 if (size || flush) {
1459 while (size > 0 || (flush && got_output)) {
1461 int64_t next_pts = pkt->
pts;
1462 int64_t next_dts = pkt->
dts;
1465 &out_pkt.
data, &out_pkt.
size, data, size,
1474 got_output = !!out_pkt.
size;
1508 (
AVRational) { 1, st->internal->avctx->sample_rate },
1561 *pkt_buffer = pktl->
next;
1563 *pkt_buffer_end =
NULL;
1575 int ret,
i, got_packet = 0;
1602 av_log(s,
AV_LOG_DEBUG,
"Demuxer context update while decoder is open, closing and trying to re-open\n");
1619 #if FF_API_LAVF_AVCTX 1637 "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1645 "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64
", flags=%d\n",
1655 "%s, packets or times may be invalid.\n",
1702 int discard_padding = 0;
1707 int64_t end_sample = sample +
duration;
1709 sample < st->last_discard_sample)
1718 AV_WL32(p + 4, discard_padding);
1738 memcpy(dst_data, src_sd->
data, src_sd->
size);
1752 #if FF_API_LAVF_AVCTX 1758 "read_frame_internal stream=%d, pts=%s, dts=%s, " 1759 "size=%d, duration=%"PRId64
", flags=%d\n",
1811 last_dts = pktl->
pkt.
dts;
1839 if (pktl && ret !=
AVERROR(EAGAIN)) {
1890 int best_stream = 0;
1891 int best_score = INT_MIN;
1915 if (score > best_score) {
1987 int *nb_index_entries,
1988 unsigned int *index_entries_allocated_size,
1989 int64_t
pos, int64_t timestamp,
1995 if ((
unsigned) *nb_index_entries + 1 >= UINT_MAX /
sizeof(
AVIndexEntry))
2001 if (size < 0 || size > 0x3FFFFFFF)
2008 index_entries_allocated_size,
2009 (*nb_index_entries + 1) *
2014 *index_entries = entries;
2020 index = (*nb_index_entries)++;
2021 ie = &entries[
index];
2022 av_assert0(index == 0 || ie[-1].timestamp < timestamp);
2024 ie = &entries[
index];
2028 memmove(entries + index + 1, entries + index,
2030 (*nb_index_entries)++;
2031 }
else if (ie->
pos == pos && distance < ie->min_distance)
2051 timestamp, size, distance, flags);
2055 int64_t wanted_timestamp,
int flags)
2064 if (b && entries[b - 1].timestamp < wanted_timestamp)
2073 if (m == b && entries[m].timestamp >= wanted_timestamp) {
2080 if (timestamp >= wanted_timestamp)
2082 if (timestamp <= wanted_timestamp)
2088 while (m >= 0 && m < nb_entries &&
2092 if (m == nb_entries)
2100 int64_t pos_delta = 0;
2109 "Protocol name not provided, cannot determine if input is local or " 2110 "a network protocol, buffers and access patterns cannot be configured " 2111 "optimally without knowing the protocol\n");
2114 if (proto && !(strcmp(proto,
"file") && strcmp(proto,
"pipe") && strcmp(proto,
"cache")))
2117 for (ist1 = 0; ist1 < s->
nb_streams; ist1++) {
2119 for (ist2 = 0; ist2 < s->
nb_streams; ist2++) {
2134 if (e2_pts < e1_pts || e2_pts - (uint64_t)e1_pts < time_tolerance)
2145 if (s->
pb->
buffer_size < pos_delta && pos_delta < (1<<24)) {
2157 if (skip < (1<<23)) {
2165 wanted_timestamp, flags);
2169 int64_t (*read_timestamp)(
struct AVFormatContext *,
int , int64_t *, int64_t ))
2171 int64_t ts = read_timestamp(s, stream_index, ppos, pos_limit);
2172 if (stream_index >= 0)
2178 int64_t target_ts,
int flags)
2182 int64_t ts_min, ts_max, ts;
2187 if (stream_index < 0)
2196 st = s->
streams[stream_index];
2204 index =
FFMAX(index, 0);
2226 " dts_max=%s\n", pos_max, pos_limit,
av_ts2str(ts_max));
2230 pos =
ff_gen_search(s, stream_index, target_ts, pos_min, pos_max, pos_limit,
2246 int64_t (*read_timestamp)(
struct AVFormatContext *,
int , int64_t *, int64_t ))
2248 int64_t step = 1024;
2249 int64_t limit, ts_max;
2251 int64_t pos_max = filesize - 1;
2254 pos_max =
FFMAX(0, (pos_max) - step);
2256 &pos_max, limit, read_timestamp);
2263 int64_t tmp_pos = pos_max + 1;
2265 &tmp_pos, INT64_MAX, read_timestamp);
2271 if (tmp_pos >= filesize)
2284 int64_t pos_min, int64_t pos_max, int64_t pos_limit,
2285 int64_t ts_min, int64_t ts_max,
2286 int flags, int64_t *ts_ret,
2288 int64_t *, int64_t))
2299 ts_min =
ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2304 if (ts_min >= target_ts) {
2310 if ((ret =
ff_find_last_ts(s, stream_index, &ts_max, &pos_max, read_timestamp)) < 0)
2312 pos_limit = pos_max;
2315 if (ts_max <= target_ts) {
2323 while (pos_min < pos_limit) {
2325 "pos_min=0x%"PRIx64
" pos_max=0x%"PRIx64
" dts_min=%s dts_max=%s\n",
2329 if (no_change == 0) {
2330 int64_t approximate_keyframe_distance = pos_max - pos_limit;
2332 pos =
av_rescale(target_ts - ts_min, pos_max - pos_min,
2334 pos_min - approximate_keyframe_distance;
2335 }
else if (no_change == 1) {
2337 pos = (pos_min + pos_limit) >> 1;
2345 else if (pos > pos_limit)
2356 " target:%s limit:%"PRId64
" start:%"PRId64
" noc:%d\n",
2357 pos_min, pos, pos_max,
2359 pos_limit, start_pos, no_change);
2364 if (target_ts <= ts) {
2365 pos_limit = start_pos - 1;
2369 if (target_ts >= ts) {
2379 ts_min =
ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2381 ts_max =
ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2390 int64_t pos,
int flags)
2392 int64_t pos_min, pos_max;
2399 else if (pos > pos_max)
2410 int64_t timestamp,
int flags)
2417 st = s->
streams[stream_index];
2421 if (index < 0 && st->nb_index_entries &&
2422 timestamp < st->index_entries[0].timestamp)
2425 if (index < 0 || index == st->nb_index_entries - 1) {
2443 }
while (read_status ==
AVERROR(EAGAIN));
2444 if (read_status < 0)
2452 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);
2477 int64_t timestamp,
int flags)
2489 if (stream_index < 0) {
2491 if (stream_index < 0)
2494 st = s->
streams[stream_index];
2521 int64_t timestamp,
int flags)
2526 int64_t min_ts = INT64_MIN, max_ts = INT64_MAX;
2532 flags & ~AVSEEK_FLAG_BACKWARD);
2544 int64_t ts, int64_t max_ts,
int flags)
2546 if (min_ts > ts || max_ts < ts)
2548 if (stream_index < -1 || stream_index >= (
int)s->
nb_streams)
2559 if (stream_index == -1 && s->
nb_streams == 1) {
2566 time_base.
num * (int64_t)AV_TIME_BASE,
2588 if (ret<0 && ts != min_ts && max_ts != ts) {
2589 ret =
av_seek_frame(s, stream_index, dir ? max_ts : min_ts, flags | dir);
2635 int64_t
start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
2636 int64_t
duration, duration1, duration_text, filesize;
2640 start_time = INT64_MAX;
2641 start_time_text = INT64_MAX;
2642 end_time = INT64_MIN;
2643 end_time_text = INT64_MIN;
2644 duration = INT64_MIN;
2645 duration_text = INT64_MIN;
2655 start_time_text =
FFMIN(start_time_text, start_time1);
2657 start_time =
FFMIN(start_time, start_time1);
2661 if (end_time1 !=
AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
2662 end_time1 += start_time1;
2664 end_time_text =
FFMAX(end_time_text, end_time1);
2666 end_time =
FFMAX(end_time, end_time1);
2679 duration_text =
FFMAX(duration_text, duration1);
2681 duration =
FFMAX(duration, duration1);
2684 if (start_time == INT64_MAX || (start_time > start_time_text && start_time - (uint64_t)start_time_text <
AV_TIME_BASE))
2685 start_time = start_time_text;
2686 else if (start_time > start_time_text)
2689 if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time < AV_TIME_BASE))
2690 end_time = end_time_text;
2691 else if (end_time < end_time_text)
2692 av_log(ic,
AV_LOG_VERBOSE,
"Ignoring outlier non primary stream endtime %f\n", end_time_text / (
float)AV_TIME_BASE);
2694 if (duration == INT64_MIN || (duration < duration_text && duration_text - duration < AV_TIME_BASE))
2695 duration = duration_text;
2696 else if (duration < duration_text)
2697 av_log(ic,
AV_LOG_VERBOSE,
"Ignoring outlier non primary stream duration %f\n", duration_text / (
float)AV_TIME_BASE);
2699 if (start_time != INT64_MAX) {
2701 if (end_time != INT64_MIN) {
2710 }
else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
2711 duration =
FFMAX(duration, end_time - start_time);
2720 double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
2722 if (bitrate >= 0 && bitrate <= INT64_MAX)
2749 int i, show_warning = 0;
2754 int64_t bit_rate = 0;
2796 "Estimating duration from bitrate, this may be inaccurate\n");
2799 #define DURATION_MAX_READ_SIZE 250000LL 2800 #define DURATION_MAX_RETRY 6 2807 int num, den, read_size,
i, ret;
2808 int found_duration = 0;
2822 "start time for stream %d is not set in estimate_timings_from_pts\n", i);
2831 av_log(ic,
AV_LOG_INFO,
"Skipping duration calculation in estimate_timings_from_pts\n");
2832 goto skip_duration_calc;
2840 is_end = found_duration;
2853 }
while (ret ==
AVERROR(EAGAIN));
2856 read_size += pkt->
size;
2944 return duration_name[method];
2956 file_size =
FFMAX(0, file_size);
2986 if (st->time_base.den)
2992 "format: start_time: %s duration: %s (estimate from %s) bitrate=%"PRId64
" kb/s\n",
3004 #define FAIL(errmsg) do { \ 3006 *errmsg_ptr = errmsg; \ 3012 FAIL(
"unknown codec");
3016 FAIL(
"unspecified frame size");
3019 FAIL(
"unspecified sample format");
3021 FAIL(
"unspecified sample rate");
3023 FAIL(
"unspecified number of channels");
3025 FAIL(
"no decodable DTS frames");
3029 FAIL(
"unspecified size");
3031 FAIL(
"unspecified pixel format");
3034 FAIL(
"no frame in rv30/40 and no sar");
3038 FAIL(
"unspecified size");
3053 int got_picture = 1, ret = 0;
3057 int do_skip_frame = 0;
3078 av_dict_set(options ? options : &thread_opt,
"threads",
"1", 0);
3081 ret =
avcodec_open2(avctx, codec, options ? options : &thread_opt);
3103 while ((pkt.
size > 0 || (!pkt.
data && got_picture)) &&
3123 &got_picture, &pkt);
3136 if (!pkt.
data && !got_picture)
3140 if (do_skip_frame) {
3162 if (tag == tags[i].tag)
3172 if (bps <= 0 || bps > 64)
3187 if (sflags & (1 << (bps - 1))) {
3231 for (i = 0; tags && tags[
i]; i++) {
3234 if (codec_tags->
id ==
id) {
3235 *tag = codec_tags->
tag;
3247 for (i = 0; tags && tags[
i]; i++) {
3258 int64_t max_time = 0;
3275 if (j != i && next_start > ch->
start && next_start < end)
3278 ch->
end = (end == INT64_MAX || end < ch->
start) ? ch->
start : end;
3285 return (i + 1) * 1001;
3289 return (i + 31) * 1001 * 12;
3293 return ((
const int[]) { 80, 120, 240})[i] * 1001 * 12;
3297 return ((
const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
3361 && ts - (uint64_t)last < INT64_MAX) {
3375 double sdts = dts*framerate/(1001*12);
3376 for (j= 0; j<2; j++) {
3377 int64_t ticks =
llrint(sdts+j*0.5);
3378 double error= sdts - ticks + j*0.5;
3397 if (error0 > 0.04 && error1 > 0.04) {
3432 double best_error= 0.01;
3447 for (k= 0; k<2; k++) {
3452 if (error < best_error && best_error> 0.000000001) {
3461 if (num && (!ref_rate.
num || (
double)num/(12*1001) < 1.01 *
av_q2d(ref_rate)))
3610 memcpy(dst_data, sd_src->
data, sd_src->
size);
3617 int i, count = 0, ret = 0, j;
3627 int64_t max_stream_analyze_duration;
3628 int64_t max_subtitle_analyze_duration;
3630 int eof_reached = 0;
3633 flush_codecs = probesize > 0;
3637 max_stream_analyze_duration = max_analyze_duration;
3638 max_subtitle_analyze_duration = max_analyze_duration;
3639 if (!max_analyze_duration) {
3640 max_stream_analyze_duration =
3650 av_log(ic,
AV_LOG_DEBUG,
"Before avformat_find_stream_info() pos: %"PRId64
" bytes read:%"PRId64
" seeks:%d nb_streams:%d\n",
3668 #if FF_API_LAVF_AVCTX 3688 "%s, packets or times may be invalid.\n",
3698 goto find_stream_info_err;
3706 av_dict_set(options ? &options[i] : &thread_opt,
"threads",
"1", 0);
3713 && codec && !avctx->
codec) {
3714 if (
avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
3716 "Failed to open codec in %s\n",__FUNCTION__);
3721 if (codec && !avctx->
codec)
3722 if (
avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
3724 "Failed to open codec in %s\n",__FUNCTION__);
3731 #if FF_API_R_FRAME_RATE 3741 int analyzed_all_streams;
3750 int fps_analyze_framecount = 20;
3760 fps_analyze_framecount *= 2;
3762 fps_analyze_framecount = 0;
3766 fps_analyze_framecount = 0;
3773 if (count < fps_analyze_framecount)
3792 analyzed_all_streams = 0;
3793 if (!missing_streams || !*missing_streams)
3795 analyzed_all_streams = 1;
3807 if (read_size >= probesize) {
3810 "Probe buffer size limit of %"PRId64
" bytes reached\n", probesize);
3817 "Stream #%d: not enough frames to estimate rate; " 3818 "consider increasing probesize\n", i);
3839 goto unref_then_goto_end;
3848 read_size += pkt->
size;
3854 goto unref_then_goto_end;
3863 "Non-increasing DTS in stream %d: packet %d with DTS " 3864 "%"PRId64
", packet %d with DTS %"PRId64
"\n",
3880 "DTS discontinuity in stream %d: packet %d with DTS " 3881 "%"PRId64
", packet %d with DTS %"PRId64
"\n",
3912 if (analyzed_all_streams) limit = max_analyze_duration;
3914 else limit = max_stream_analyze_duration;
3917 av_log(ic,
AV_LOG_VERBOSE,
"max_analyze_duration %"PRId64
" reached at %"PRId64
" microseconds st:%d\n",
3933 #if FF_API_R_FRAME_RATE 3942 goto unref_then_goto_end;
3955 (options && i < orig_nb_streams) ? &options[i] :
NULL);
3966 for (stream_index = 0; stream_index < ic->
nb_streams; stream_index++) {
3967 st = ic->
streams[stream_index];
3971 if (codec && !avctx->
codec) {
3975 if (
avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
3977 "Failed to open codec in %s\n",__FUNCTION__);
4003 (options && i < orig_nb_streams)
4004 ? &options[i] :
NULL);
4009 "decoding for stream %d failed\n", st->
index);
4032 double best_error = 0.01;
4050 if (error < best_error) {
4052 best_fps = std_fps.
num;
4056 error = fabs(
av_q2d(codec_frame_rate) /
4058 if (error < best_error) {
4060 best_fps = std_fps.
num;
4066 best_fps, 12 * 1001, INT_MAX);
4128 goto find_stream_info_err;
4134 "Could not find codec parameters for stream %d (%s): %s\n" 4135 "Consider increasing the value for the 'analyzeduration' and 'probesize' options\n",
4153 goto find_stream_info_err;
4156 goto find_stream_info_err;
4166 #if FF_API_LAVF_AVCTX 4170 goto find_stream_info_err;
4182 if (st->codec->codec_tag !=
MKTAG(
't',
'm',
'c',
'd')) {
4190 if (!st->codec->subtitle_header)
4191 goto find_stream_info_err;
4194 st->codec->subtitle_header_size);
4207 find_stream_info_err:
4218 av_log(ic,
AV_LOG_DEBUG,
"After avformat_find_stream_info() pos: %"PRId64
" bytes read:%"PRId64
" seeks:%d frames:%d\n",
4222 unref_then_goto_end:
4224 goto find_stream_info_err;
4245 int wanted_stream_nb,
int related_stream,
4246 AVCodec **decoder_ret,
int flags)
4250 int best_count = -1, best_multiframe = -1, best_disposition = -1;
4251 int count, multiframe, disposition;
4252 int64_t best_bitrate = -1;
4254 unsigned *program =
NULL;
4257 if (related_stream >= 0 && wanted_stream_nb < 0) {
4265 int real_stream_index = program ? program[
i] :
i;
4270 if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
4286 multiframe =
FFMIN(5, count);
4287 if ((best_disposition > disposition) ||
4288 (best_disposition == disposition && best_multiframe > multiframe) ||
4289 (best_disposition == disposition && best_multiframe == multiframe && best_bitrate > bitrate) ||
4290 (best_disposition == disposition && best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
4292 best_disposition = disposition;
4295 best_multiframe = multiframe;
4296 ret = real_stream_index;
4298 if (program && i == nb_streams - 1 && ret < 0) {
4306 *decoder_ret = (
AVCodec*)best_decoder;
4376 #if FF_API_LAVF_FFSERVER 4378 av_freep(&dst->recommended_encoder_configuration);
4379 if (src->recommended_encoder_configuration) {
4380 const char *conf_str = src->recommended_encoder_configuration;
4381 dst->recommended_encoder_configuration =
av_strdup(conf_str);
4382 if (!dst->recommended_encoder_configuration)
4422 #if FF_API_LAVF_AVCTX 4431 #if FF_API_LAVF_FFSERVER 4433 av_freep(&st->recommended_encoder_configuration);
4527 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);
4544 #if FF_API_LAVF_AVCTX 4568 #if FF_API_LAVF_AVCTX 4571 st->codec->bit_rate = 0;
4601 #if FF_API_R_FRAME_RATE 4648 int64_t start, int64_t
end,
const char *title)
4654 av_log(s,
AV_LOG_ERROR,
"Chapter end time %"PRId64
" before start %"PRId64
"\n", end, start);
4671 chapter->
start = start;
4712 uint64_t ntp_ts, frac_part, sec;
4716 sec = ntp_time_us / 1000000;
4717 usec = ntp_time_us % 1000000;
4720 frac_part = usec * 0xFFFFFFFFULL;
4721 frac_part /= 1000000;
4723 if (sec > 0xFFFFFFFFULL)
4727 ntp_ts |= frac_part;
4735 char *q, buf1[20],
c;
4736 int nd,
len, percentd_found;
4749 nd = nd * 10 + *p++ -
'0';
4762 snprintf(buf1,
sizeof(buf1),
"%0*d", nd, number);
4764 if ((q - buf + len) > buf_size - 1)
4766 memcpy(q, buf1, len);
4774 if ((q - buf) < buf_size - 1)
4778 if (!percentd_found)
4793 char *authorization,
int authorization_size,
4794 char *hostname,
int hostname_size,
4795 int *port_ptr,
char *path,
int path_size,
const char *url)
4797 const char *p, *ls, *at, *at2, *col, *brk;
4803 if (authorization_size > 0)
4804 authorization[0] = 0;
4805 if (hostname_size > 0)
4811 if ((p = strchr(url,
':'))) {
4825 ls = p + strcspn(p,
"/?#");
4832 while ((at = strchr(p,
'@')) && at < ls) {
4834 FFMIN(authorization_size, at + 1 - at2));
4838 if (*p ==
'[' && (brk = strchr(p,
']')) && brk < ls) {
4841 FFMIN(hostname_size, brk - p));
4842 if (brk[1] ==
':' && port_ptr)
4843 *port_ptr = atoi(brk + 2);
4844 }
else if ((col = strchr(p,
':')) && col < ls) {
4846 FFMIN(col + 1 - p, hostname_size));
4848 *port_ptr = atoi(col + 1);
4851 FFMIN(ls + 1 - p, hostname_size));
4862 if (!path || !temp) {
4872 for ( ; *pos !=
'\0'; ++
pos) {
4873 if (*pos ==
'/' || *pos ==
'\\') {
4876 ret = mkdir(temp, 0755);
4881 if ((*(pos - 1) !=
'/') || (*(pos - 1) !=
'\\')) {
4882 ret = mkdir(temp, 0755);
4892 static const char hex_table_uc[16] = {
'0',
'1',
'2',
'3',
4895 'C',
'D',
'E',
'F' };
4896 static const char hex_table_lc[16] = {
'0',
'1',
'2',
'3',
4899 'c',
'd',
'e',
'f' };
4900 const char *hex_table = lowercase ? hex_table_lc : hex_table_uc;
4902 for (i = 0; i <
s; i++) {
4903 buff[i * 2] = hex_table[src[
i] >> 4];
4904 buff[i * 2 + 1] = hex_table[src[
i] & 0xF];
4921 if (c >=
'0' && c <=
'9')
4923 else if (c >=
'A' && c <=
'F')
4939 unsigned int pts_num,
unsigned int pts_den)
4943 if (new_tb.
num != pts_num)
4945 "st:%d removing common factor %d from timebase\n",
4949 "st:%d has too large timebase, reducing\n", s->
index);
4951 if (new_tb.
num <= 0 || new_tb.
den <= 0) {
4953 "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
4959 #if FF_API_LAVF_AVCTX 4961 s->codec->pkt_timebase = new_tb;
4971 const char *ptr =
str;
4976 char *dest =
NULL, *dest_end;
4977 int key_len, dest_len = 0;
4980 while (*ptr && (
av_isspace(*ptr) || *ptr ==
','))
4987 if (!(ptr = strchr(key,
'=')))
4990 key_len = ptr -
key;
4992 callback_get_buf(context, key, key_len, &dest, &dest_len);
4993 dest_end = dest + dest_len - 1;
4997 while (*ptr && *ptr !=
'\"') {
5001 if (dest && dest < dest_end)
5005 if (dest && dest < dest_end)
5013 for (; *ptr && !(
av_isspace(*ptr) || *ptr ==
','); ptr++)
5014 if (dest && dest < dest_end)
5035 unsigned int codec_tag;
5037 return ofmt->
query_codec(codec_id, std_compliance);
5083 if (channel_layout) {
5091 if (width || height) {
5098 bytestream_put_le32(&data, flags);
5100 bytestream_put_le32(&data, channels);
5102 bytestream_put_le64(&data, channel_layout);
5104 bytestream_put_le32(&data, sample_rate);
5105 if (width || height) {
5106 bytestream_put_le32(&data, width);
5107 bytestream_put_le32(&data, height);
5119 av_reduce(&stream_sample_aspect_ratio.
num, &stream_sample_aspect_ratio.
den,
5120 stream_sample_aspect_ratio.
num, stream_sample_aspect_ratio.
den, INT_MAX);
5121 if (stream_sample_aspect_ratio.
num <= 0 || stream_sample_aspect_ratio.
den <= 0)
5122 stream_sample_aspect_ratio = undef;
5124 av_reduce(&frame_sample_aspect_ratio.
num, &frame_sample_aspect_ratio.
den,
5125 frame_sample_aspect_ratio.
num, frame_sample_aspect_ratio.
den, INT_MAX);
5126 if (frame_sample_aspect_ratio.
num <= 0 || frame_sample_aspect_ratio.
den <= 0)
5127 frame_sample_aspect_ratio = undef;
5129 if (stream_sample_aspect_ratio.
num)
5130 return stream_sample_aspect_ratio;
5132 return frame_sample_aspect_ratio;
5141 if (avg_fr.
num > 0 && avg_fr.
den > 0 && fr.
num > 0 && fr.
den > 0 &&
5148 if ( codec_fr.
num > 0 && codec_fr.
den > 0 &&
5166 const char *spec,
const char **indexptr,
AVProgram **p)
5170 if (*spec <= '9' && *spec >=
'0') {
5174 }
else if (*spec ==
'v' || *spec ==
'a' || *spec ==
's' || *spec ==
'd' ||
5175 *spec ==
't' || *spec ==
'V') {
5188 if (*spec && *spec++ !=
':')
5191 #if FF_API_LAVF_AVCTX 5203 }
else if (*spec ==
'p' && *(spec + 1) ==
':') {
5208 prog_id = strtol(spec, &endptr, 0);
5210 if (spec == endptr || (*endptr && *endptr++ !=
':'))
5231 }
else if (*spec ==
'#' ||
5232 (*spec ==
'i' && *(spec + 1) ==
':')) {
5235 spec += 1 + (*spec ==
'i');
5236 stream_id = strtol(spec, &endptr, 0);
5237 if (spec == endptr || *endptr)
5239 return match && (stream_id == st->
id);
5240 }
else if (*spec ==
'm' && *(spec + 1) ==
':') {
5247 val = strchr(spec,
':');
5255 if (!val || !strcmp(tag->
value, val + 1))
5264 return match && ret;
5265 }
else if (*spec ==
'u' && *(spec + 1) ==
'\0') {
5267 #if FF_API_LAVF_AVCTX 5276 #if FF_API_LAVF_AVCTX 5277 val = val || (codec->sample_rate && codec->channels);
5288 #if FF_API_LAVF_AVCTX 5289 val = val || (codec->width && codec->height);
5305 #if FF_API_LAVF_AVCTX 5324 const char *indexptr =
NULL;
5335 index = strtol(indexptr, &endptr, 0);
5342 if (spec == indexptr)
5343 return (index == st->
index);
5347 for (
int i = 0; i < nb_streams && index >= 0;
i++) {
5352 if (ret > 0 && index-- == 0 && st == candidate)
5365 static const uint8_t avci100_1080p_extradata[] = {
5367 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
5368 0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
5369 0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
5370 0x18, 0x21, 0x02, 0x56, 0xb9, 0x3d, 0x7d, 0x7e,
5371 0x4f, 0xe3, 0x3f, 0x11, 0xf1, 0x9e, 0x08, 0xb8,
5372 0x8c, 0x54, 0x43, 0xc0, 0x78, 0x02, 0x27, 0xe2,
5373 0x70, 0x1e, 0x30, 0x10, 0x10, 0x14, 0x00, 0x00,
5374 0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xca,
5375 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5377 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
5380 static const uint8_t avci100_1080i_extradata[] = {
5382 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
5383 0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
5384 0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
5385 0x18, 0x21, 0x03, 0x3a, 0x46, 0x65, 0x6a, 0x65,
5386 0x24, 0xad, 0xe9, 0x12, 0x32, 0x14, 0x1a, 0x26,
5387 0x34, 0xad, 0xa4, 0x41, 0x82, 0x23, 0x01, 0x50,
5388 0x2b, 0x1a, 0x24, 0x69, 0x48, 0x30, 0x40, 0x2e,
5389 0x11, 0x12, 0x08, 0xc6, 0x8c, 0x04, 0x41, 0x28,
5390 0x4c, 0x34, 0xf0, 0x1e, 0x01, 0x13, 0xf2, 0xe0,
5391 0x3c, 0x60, 0x20, 0x20, 0x28, 0x00, 0x00, 0x03,
5392 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x94, 0x20,
5394 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
5397 static const uint8_t avci50_1080p_extradata[] = {
5399 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
5400 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
5401 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
5402 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
5403 0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
5404 0x6e, 0x6c, 0xd3, 0x3c, 0x05, 0xa0, 0x22, 0x7e,
5405 0x5f, 0xfc, 0x00, 0x0c, 0x00, 0x13, 0x8c, 0x04,
5406 0x04, 0x05, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
5407 0x00, 0x03, 0x00, 0x32, 0x84, 0x00, 0x00, 0x00,
5409 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
5412 static const uint8_t avci50_1080i_extradata[] = {
5414 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
5415 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
5416 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
5417 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6e, 0x61,
5418 0x87, 0x3e, 0x73, 0x4d, 0x98, 0x0c, 0x03, 0x06,
5419 0x9c, 0x0b, 0x73, 0xe6, 0xc0, 0xb5, 0x18, 0x63,
5420 0x0d, 0x39, 0xe0, 0x5b, 0x02, 0xd4, 0xc6, 0x19,
5421 0x1a, 0x79, 0x8c, 0x32, 0x34, 0x24, 0xf0, 0x16,
5422 0x81, 0x13, 0xf7, 0xff, 0x80, 0x02, 0x00, 0x01,
5423 0xf1, 0x80, 0x80, 0x80, 0xa0, 0x00, 0x00, 0x03,
5424 0x00, 0x20, 0x00, 0x00, 0x06, 0x50, 0x80, 0x00,
5426 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
5429 static const uint8_t avci100_720p_extradata[] = {
5431 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
5432 0xb6, 0xd4, 0x20, 0x2a, 0x33, 0x1d, 0xc7, 0x62,
5433 0xa1, 0x08, 0x40, 0x54, 0x66, 0x3b, 0x8e, 0xc5,
5434 0x42, 0x02, 0x10, 0x25, 0x64, 0x2c, 0x89, 0xe8,
5435 0x85, 0xe4, 0x21, 0x4b, 0x90, 0x83, 0x06, 0x95,
5436 0xd1, 0x06, 0x46, 0x97, 0x20, 0xc8, 0xd7, 0x43,
5437 0x08, 0x11, 0xc2, 0x1e, 0x4c, 0x91, 0x0f, 0x01,
5438 0x40, 0x16, 0xec, 0x07, 0x8c, 0x04, 0x04, 0x05,
5439 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x03,
5440 0x00, 0x64, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
5442 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x31, 0x12,
5445 static const uint8_t avci50_720p_extradata[] = {
5447 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x20,
5448 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
5449 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
5450 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
5451 0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
5452 0x6e, 0x6c, 0xd3, 0x3c, 0x0f, 0x01, 0x6e, 0xff,
5453 0xc0, 0x00, 0xc0, 0x01, 0x38, 0xc0, 0x40, 0x40,
5454 0x50, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00,
5455 0x06, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
5457 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
5466 data = avci100_1080p_extradata;
5467 size =
sizeof(avci100_1080p_extradata);
5469 data = avci100_1080i_extradata;
5470 size =
sizeof(avci100_1080i_extradata);
5474 data = avci50_1080p_extradata;
5475 size =
sizeof(avci50_1080p_extradata);
5477 data = avci50_1080i_extradata;
5478 size =
sizeof(avci50_1080i_extradata);
5481 data = avci100_720p_extradata;
5482 size =
sizeof(avci100_720p_extradata);
5484 data = avci50_720p_extradata;
5485 size =
sizeof(avci50_720p_extradata);
5524 if (sd->
type == type) {
5593 const char * shorthand[2] = {
NULL};
5596 shorthand[0] = opt->
name;
5612 "Automatically inserted bitstream filter '%s'; args='%s'\n",
5613 name, args ? args :
"");
5631 memset(pkt, 0,
sizeof(*pkt));
5634 if(a == 0 && new_pkt.
data != pkt->
data) {
5637 memcpy(t, new_pkt.
data, new_pkt.
size);
5660 "Failed to open bitstream filter %s for stream %d with codec %s",
5700 int64_t parsed_timestamp;
5704 *timestamp = return_seconds ? parsed_timestamp / 1000000 : parsed_timestamp;
5785 if (!strcmp(ofmt->
name,
"avi")) {
5786 #if FF_API_R_FRAME_RATE 5792 || copy_tb == AVFMT_TBCF_R_FRAMERATE) {
5836 #if FF_API_LAVF_AVCTX 5850 #if FF_API_FORMAT_FILENAME 5852 av_strlcpy(s->filename, url,
sizeof(s->filename));
unsigned int nb_chapters
Number of chapters in AVChapter array.
unsigned int max_index_size
Maximum amount of memory in bytes to use for the index of each stream.
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.
int64_t probesize
Maximum size of the data read from input for determining the input container format.
int(* io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options)
A callback for opening new IO streams.
int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val)
int64_t first_dts
Timestamp corresponding to the last dts sync point.
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta *extra_meta)
Add metadata for all PRIV tags in the ID3v2 header.
const struct AVCodec * codec
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
enum AVFieldOrder field_order
Video only.
AVBSFContext * bsfc
bitstream filter to run on stream
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
const AVClass * priv_class
A class for the private data, used to declare bitstream filter private AVOptions. ...
int64_t avio_size(AVIOContext *s)
Get the filesize.
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
static int shift(int a, int b)
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
static const char * format[]
static av_const int av_isdigit(int c)
Locale-independent conversion of ASCII isdigit.
int av_demuxer_open(AVFormatContext *ic)
This structure describes decoded (raw) audio or video data.
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
static void flush(AVCodecContext *avctx)
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.
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
int coded_width
Bitstream width / height, may be different from width/height e.g.
enum AVDurationEstimationMethod duration_estimation_method
The duration field can be estimated through various ways, and this field can be used to know how the ...
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 ...
#define AV_LOG_WARNING
Something somehow does not look correct.
int64_t bit_rate
the average bitrate
int64_t pos
byte position in stream, -1 if unknown
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding.
int64_t pts_buffer[MAX_REORDER_DELAY+1]
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
int probe_packets
Number of packets to buffer for codec probing.
AVRational sample_aspect_ratio
Video only.
int width
Dimensions of the decoded video intended for presentation.
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...
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
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)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
const struct AVBitStreamFilter * filter
The bitstream filter this context is an instance of.
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
The bitstream filter state.
static int ff_mutex_lock(AVMutex *mutex)
int index
stream index in AVFormatContext
#define ID3v2_DEFAULT_MAGIC
Default magic bytes for ID3v2 header: "ID3".
int avio_flags
avio flags, used to force AVIO_FLAG_DIRECT.
int av_codec_is_decoder(const AVCodec *codec)
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define AVIO_FLAG_READ
read-only
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
AVFormatInternal * internal
An opaque field for libavformat internal usage.
#define AVIO_FLAG_WRITE
write-only
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
int av_strncasecmp(const char *a, const char *b, size_t n)
Locale-independent case-insensitive compare.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
void ff_network_close(void)
int event_flags
Flags for the user to detect events happening on the file.
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
int avformat_open_input(AVFormatContext **ps, const char *filename, ff_const59 AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
int duration
Duration of the current frame.
AVPacketSideData * side_data
An array of side data that applies to the whole stream (i.e.
static void error(const char *err)
int ctx_flags
Flags signalling stream properties.
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
Decode a subtitle message.
int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags)
int64_t maxsize
max filesize, used to limit allocations This field is internal to libavformat and access from outside...
void * priv_data
Opaque filter-specific private data.
enum AVCodecID subtitle_codec_id
Forced subtitle codec_id.
const AVCodec * av_codec_iterate(void **opaque)
Iterate over all registered codecs.
This struct describes the properties of an encoded stream.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
int ffio_realloc_buf(AVIOContext *s, int buf_size)
Reallocate a given buffer for AVIOContext.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
enum AVDiscard skip_frame
Skip decoding for selected frames.
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
Guess the frame rate, based on both the container and codec information.
unsigned int nb_stream_indexes
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.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp)
Set a dictionary value to an ISO-8601 compliant timestamp string.
static int64_t start_time
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
enum AVSampleFormat sample_fmt
audio sample format
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Opaque data information usually continuous.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
int ff_network_init(void)
timestamp utils, mostly useful for debugging/logging purposes
unsigned avformat_version(void)
Return the LIBAVFORMAT_VERSION_INT constant.
const char * avformat_license(void)
Return the libavformat license.
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.
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, or 0 if no associated fourCC code can be found.
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
static av_cold int end(AVCodecContext *avctx)
int id
unique ID to identify the chapter
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int id
Format-specific stream ID.
enum AVStreamParseType need_parsing
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.
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
int nb_side_data
The number of elements in the AVStream.side_data array.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
uint8_t * av_stream_get_side_data(const AVStream *st, enum AVPacketSideDataType type, int *size)
Get side information from stream.
AVStream ** streams
A list of all streams in the file.
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
int inject_global_side_data
Internal data to inject global side data.
const char * avformat_configuration(void)
Return the libavformat build-time configuration.
int64_t bytes_read
Bytes read statistic This field is internal to libavformat and access from outside is not allowed...
int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta *extra_meta)
Create chapters for all CHAP tags found in the ID3v2 header.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int flags
Flags modifying the (de)muxer behaviour.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
AVProgram * av_new_program(AVFormatContext *ac, int id)
char * protocol_whitelist
',' separated list of allowed protocols.
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
int avformat_network_init(void)
Do global initialization of network libraries.
int fps_probe_size
The number of frames used for determining the framerate in avformat_find_stream_info().
struct AVStreamInternal::@256 extract_extradata
#define AVERROR_EOF
End of file.
#define AV_LOG_VERBOSE
Detailed information.
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
enum AVDiscard discard
selects which program to discard and which to feed to the caller
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate, or free an array.
struct AVBitStreamFilterContext * next
unsigned int * stream_index
enum AVCodecID video_codec_id
Forced video codec_id.
uint64_t channel_layout
Audio only.
int64_t rfps_duration_sum
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
unsigned int correct_ts_overflow
Correct single timestamp overflows.
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
void av_buffer_default_free(void *opaque, uint8_t *data)
Default free callback, which calls av_free() on the buffer data.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
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.
av_cold int avcodec_close(AVCodecContext *avctx)
Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext its...
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
AVRational av_stream_get_codec_timebase(const AVStream *st)
Get the internal codec timebase from a stream.
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
ff_const59 AVInputFormat * av_probe_input_format2(ff_const59 AVProbeData *pd, int is_opened, int *score_max)
Guess the file format.
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
int format_probesize
number of bytes to read maximally to identify format.
#define i(width, name, range_min, range_max)
AVCodecID
Identify the syntax and semantics of the bitstream.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
int has_b_frames
Size of the frame reordering buffer in the decoder.
AVDictionary * metadata
Metadata that applies to the whole file.
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette...
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
int64_t pos
Byte position of currently parsed frame in stream.
void * av_opt_ptr(const AVClass *class, void *obj, const char *name)
Gets a pointer to the requested field in a struct.
int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp, int flags)
Get the index for a specific timestamp.
#define MAKE_ACCESSORS(str, name, type, field)
int64_t pts_wrap_reference
reference dts for wrap detection
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
enum AVCodecID * codec_ids
A list of codec ids supported by the filter, terminated by AV_CODEC_ID_NONE.
unsigned int avpriv_toupper4(unsigned int x)
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
ff_const59 struct AVInputFormat * iformat
The input container format.
int avcodec_is_open(AVCodecContext *s)
char * url
input or output URL.
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
int capabilities
Codec capabilities.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int av_read_play(AVFormatContext *s)
Start playing a network-based stream (e.g.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
preferred ID for decoding MPEG audio layer 1, 2 or 3
enum AVMediaType codec_type
General type of the encoded data.
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta)
Free memory allocated parsing special (non-text) metadata.
Round to nearest and halfway cases away from zero.
AVRational time_base_in
The timebase used for the timestamps of the input packets.
simple assert() macros that are a bit more flexible than ISO C assert().
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
const char * protocol_whitelist
',' separated list of allowed protocols.
enum AVPacketSideDataType type
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * name
Name of the codec implementation.
int av_match_name(const char *name, const char *names)
Match instances of a name in a comma-separated list of names.
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.
#define AV_FRAME_FILENAME_FLAGS_MULTIPLE
Allow multiple d.
int skip_estimate_duration_from_pts
Skip duration calcuation in estimate_timings_from_pts.
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet. ...
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
AVRational avg_frame_rate
Average framerate.
New fields can be added to the end with minor version bumps.
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/(UINT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(UINT64_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 *(UINT64_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 *(UINT64_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 &&HAVE_MMX) 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_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...
int min_distance
Minimum distance between this and the previous keyframe, used to avoid unneeded searching.
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.
const char * protocol_blacklist
',' separated list of disallowed protocols.
AVCodec * audio_codec
Forced audio codec.
static int ff_mutex_unlock(AVMutex *mutex)
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
int flags
A combination of AV_PKT_FLAG values.
uint64_t channel_layout
Audio channel layout.
int extradata_size
Size of the extradata content in bytes.
int seek_count
seek statistic This field is internal to libavformat and access from outside is not allowed...
char * format_whitelist
',' separated list of allowed demuxers.
int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance)
Test if the given container can store a codec.
static float distance(float x, float y, int band)
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
int buf_size
Size of buf except extra allocated bytes.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
common internal API header
#define FF_MAX_EXTRADATA_SIZE
Maximum size in bytes of extradata.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int64_t fps_first_dts
Those are used for average framerate estimation.
int av_read_pause(AVFormatContext *s)
Pause a network-based stream (e.g.
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
#define AV_MUTEX_INITIALIZER
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
#define AV_TIME_BASE
Internal time base represented as integer.
AVPacketSideData * coded_side_data
Additional data associated with the entire coded stream.
enum AVCodecID audio_codec_id
Forced audio codec_id.
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_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
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.
static const chunk_decoder decoder[8]
int max_streams
The maximum number of streams.
int width
picture width / height.
int64_t offset
byte offset from starting packet start
int av_find_default_stream_index(AVFormatContext *s)
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
void av_parser_close(AVCodecParserContext *s)
ff_const59 AVInputFormat * av_probe_input_format3(ff_const59 AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
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.
#define AVERROR_BSF_NOT_FOUND
Bitstream filter not found.
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
uint8_t * av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, int size)
Allocate new information from stream.
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
int probe_score
format probing score.
Usually treated as AVMEDIA_TYPE_DATA.
Opaque data information usually sparse.
int64_t skip_initial_bytes
Skip initial bytes when opening stream.
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc)
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 buffer_size
Maximum buffer size.
preferred ID for MPEG-1/2 video decoding
int64_t max_analyze_duration
Maximum duration (in AV_TIME_BASE units) of the data read from input in avformat_find_stream_info().
int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
ff_const59 struct AVOutputFormat * oformat
The output container format.
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]
int64_t av_gettime(void)
Get the current time in microseconds.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int64_t end
chapter start/end time in time_base units
int avformat_queue_attached_pictures(AVFormatContext *s)
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
int avformat_network_deinit(void)
Undo the initialization done by avformat_network_init.
int frame_size
Number of samples per channel in an audio frame.
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
#define AV_LOG_INFO
Standard information.
int64_t pts_reorder_error[MAX_REORDER_DELAY+1]
Internal data to generate dts from pts.
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
AVCodecParserContext * av_parser_init(int codec_id)
char * av_strdup(const char *s)
Duplicate a string.
AVStreamInternal * internal
An opaque field for libavformat internal usage.
enum AVMediaType codec_type
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
int debug
Flags to enable debugging.
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer...
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
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.
int sample_rate
samples per second
AVIOContext * pb
I/O context.
main external API structure.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
int io_repositioned
IO repositioned flag.
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
void(* io_close)(struct AVFormatContext *s, AVIOContext *pb)
A callback for closing the streams opened with AVFormatContext.io_open().
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.
int pts_wrap_behavior
behavior on wrap detection
double(* duration_error)[2][MAX_STD_TIMEBASES]
int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta *extra_meta)
Create a stream for each APIC (attached picture) extracted from the ID3v2 header. ...
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Describe the class of an AVClass context structure.
static av_const int av_toupper(int c)
Locale-independent conversion of ASCII characters to uppercase.
Rational number (pair of numerator and denominator).
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
Recommmends skipping the specified number of samples.
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar) ...
const AVClass * av_class
A class for logging and AVOptions.
int max_probe_packets
Maximum number of packets that can be probed.
int short_seek_threshold
Threshold to favor readahead over seek.
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
int found_decoder
0 -> decoder has not been searched for yet.
struct AVStream::@240 * info
Stream information used internally by avformat_find_stream_info()
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
int error
contains the error code or 0 if no error happened
This structure contains the data a format has to probe a file.
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
int avio_pause(AVIOContext *h, int pause)
Pause and resume playing - only meaningful if using a network streaming protocol (e.g.
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.
attribute_deprecated int64_t convergence_duration
This struct describes the properties of a single codec described by an AVCodecID. ...
int seek2any
Force seeking to any (also non key) frames.
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
int64_t codec_info_duration
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds. ...
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Seek to the keyframe at timestamp.
int64_t duration
Decoding: duration of the stream, in stream time base.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int sample_rate
Audio only.
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
void av_opt_free(void *obj)
Free all allocated objects in obj.
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
const OptionDef options[]
#define FF_DISABLE_DEPRECATION_WARNINGS
common internal api header.
struct AVPacketList * next
static int ref[MAX_W *MAX_W]
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc)
Add a value to a timestamp.
AVCodec * video_codec
Forced video codec.
static AVCodecContext * dec_ctx
int disposition
AV_DISPOSITION_* bit field.
enum AVCodecID orig_codec_id
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
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
#define PARSER_FLAG_COMPLETE_FRAMES
int av_grow_packet(AVPacket *pkt, int grow_by)
Increase packet size, correctly zeroing padding.
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
unsigned properties
Properties of the stream that gets decoded.
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
int64_t nb_frames
number of frames in this stream if known or 0
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
void avformat_close_input(AVFormatContext **ps)
Close an opened input AVFormatContext.
#define FFMPEG_CONFIGURATION
int64_t codec_info_duration_fields
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
unsigned int index_entries_allocated_size
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
static av_always_inline int diff(const uint32_t a, const uint32_t b)
enum AVCodecID data_codec_id
Forced Data codec_id.
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.
AVCodec * subtitle_codec
Forced subtitle codec.
#define FF_ENABLE_DEPRECATION_WARNINGS
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
int channels
number of audio channels
char * codec_whitelist
',' separated list of allowed decoders.
struct AVCodecParserContext * parser
int format
The format of the coded data, corresponds to enum AVPixelFormat for video and for enum AVSampleFormat...
void * priv_data
Format private data.
int codec_info_nb_frames
Number of frames that have been demuxed during avformat_find_stream_info()
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
const struct PixelFormatTag * avpriv_get_raw_pix_fmt_tags(void)
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
#define AVERROR_STREAM_NOT_FOUND
Stream not found.
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
const struct AVBitStreamFilter * filter
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
char * protocol_blacklist
',' separated list of disallowed protocols.
int repeat_pict
This field is used for proper frame duration computation in lavf.
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
int avformat_flush(AVFormatContext *s)
Discard all internally buffered data.
unbuffered private I/O API
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
AVCodecParameters * codecpar
Codec parameters associated with this stream.
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.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
#define FFSWAP(type, a, b)
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
#define MKTAG(a, b, c, d)
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
AVRational r_frame_rate
Real base framerate of the stream.
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
int use_wallclock_as_timestamps
forces the use of wallclock timestamps as pts/dts of packets This has undefined results in the presen...
static double val(void *priv, double ch)
This structure stores compressed data.
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
AVCodecParameters * par_in
Parameters of the input stream.
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
char * av_strndup(const char *s, size_t len)
Duplicate a substring of a string.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define PARSER_FLAG_USE_CODEC_TS
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.
void * av_mallocz_array(size_t nmemb, size_t size)
Allocate a memory block for an array with av_mallocz().
uint8_t * subtitle_header
Header containing style information for text subtitles.