72 #define EBML_UNKNOWN_LENGTH UINT64_MAX
73 #define NEEDS_CHECKING 2
77 #define SKIP_THRESHOLD 1024 * 1024
80 #define UNKNOWN_EQUIV 50 * 1024
136 typedef struct Ebml {
412 #define CHILD_OF(parent) { .def = { .n = parent } }
832 "Seek to desired resync point failed. Seeking to "
833 "earliest point available instead.\n");
835 last_pos + 1), SEEK_SET);
871 int max_size, uint64_t *number,
int eof_forbidden)
885 if (!total || read > max_size) {
889 "0x00 at pos %"PRId64
" (0x%"PRIx64
") invalid as first byte "
890 "of an EBML number\n",
pos,
pos);
893 "Length %d indicated by an EBML number's first byte 0x%02x "
894 "at pos %"PRId64
" (0x%"PRIx64
") exceeds max length %d.\n",
903 total = (total << 8) |
avio_r8(pb);
918 "Read error at pos. %"PRIu64
" (0x%"PRIx64
")\n",
924 "at pos. %"PRIu64
" (0x%"PRIx64
")\n",
pos,
pos);
939 if (res > 0 && *number + 1 == 1ULL << (7 * res))
949 uint64_t default_value, uint64_t *num)
954 *num = default_value;
960 *num = (*num << 8) |
avio_r8(pb);
975 *num = default_value;
982 *num = ((uint64_t)*num << 8) |
avio_r8(pb);
993 double default_value,
double *num)
996 *num = default_value;
998 }
else if (
size == 4) {
1000 }
else if (
size == 8) {
1013 const char *default_value,
char **
str)
1018 if (
size == 0 && default_value) {
1084 level->length = length;
1104 *num = unum - ((1LL << (7 * res - 1)) - 1);
1118 for (
i = 0; syntax[
i].
id;
i++)
1119 if (
id == syntax[
i].
id)
1131 for (
int i = 0; syntax[
i].
id;
i++) {
1132 void *dst = (
char *)
data + syntax[
i].data_offset;
1133 switch (syntax[
i].
type) {
1135 *(uint64_t *)dst = syntax[
i].def.
u;
1141 *(
double *) dst = syntax[
i].def.
f;
1146 if (syntax[
i].def.
s) {
1174 return id && (
bits + 7) / 8 == (8 -
bits % 8);
1254 "at pos. %"PRIu64
" (0x%"PRIx64
")\n",
pos,
pos);
1261 pos_alt =
pos + res;
1274 while (syntax->
def.
n) {
1284 "%"PRId64
"\n",
id,
pos);
1301 list->
elem = newelem;
1318 uint64_t elem_end = pos_alt + length,
1321 if (elem_end < level_end) {
1323 }
else if (elem_end == level_end) {
1327 "Element at 0x%"PRIx64
" ending at 0x%"PRIx64
" exceeds "
1328 "containing master element ending at 0x%"PRIx64
"\n",
1329 pos, elem_end, level_end);
1336 "at 0x%"PRIx64
" inside parent with finite size\n",
pos);
1346 "Found unknown-length element 0x%"PRIX32
" other than "
1347 "a cluster at 0x%"PRIx64
". Spec-incompliant, but "
1348 "parsing will nevertheless be attempted.\n",
id,
pos);
1355 if (max_lengths[syntax->
type] && length > max_lengths[syntax->
type]) {
1358 "Invalid length 0x%"PRIx64
" > 0x%"PRIx64
" for element "
1359 "with ID 0x%"PRIX32
" at 0x%"PRIx64
"\n",
1360 length, max_lengths[syntax->
type],
id,
pos);
1363 "Element with ID 0x%"PRIX32
" at pos. 0x%"PRIx64
" has "
1364 "unknown length, yet the length of an element of its "
1365 "type must be known.\n",
id,
pos);
1368 "Found unknown-length element with ID 0x%"PRIX32
" at "
1369 "pos. 0x%"PRIx64
" for which no syntax for parsing is "
1370 "available.\n",
id,
pos);
1407 "Unknown element %"PRIX32
" at pos. 0x%"PRIx64
" with "
1408 "length 0x%"PRIx64
" considered as invalid data. Last "
1409 "known good position 0x%"PRIx64
", %d unknown elements"
1428 switch (syntax->
type) {
1455 if (!level1_elem->
pos) {
1458 }
else if (level1_elem->
pos !=
pos)
1476 if ((res2 =
avio_skip(pb, length - 1)) >= 0) {
1515 if (elem->
count != UINT_MAX)
1537 for (
i = 0; syntax[
i].
id;
i++) {
1538 void *data_off = (
char *)
data + syntax[
i].data_offset;
1539 switch (syntax[
i].
type) {
1549 if (syntax[
i].list_elem_size) {
1551 char *ptr = list->
elem;
1552 for (j = 0; j < list->
nb_elem;
1572 int len_mask = 0x80,
size = 1, n = 1,
i;
1580 while (
size <= 8 && !(total & len_mask)) {
1586 total &= (len_mask - 1);
1588 total = (total << 8) | p->
buf[4 + n++];
1590 if (total + 1 == 1ULL << (7 *
size)){
1605 if (total < probelen)
1607 for (n = 4 +
size; n <= 4 +
size + total - probelen; n++)
1623 if (tracks[
i].num == num)
1635 int isize = *buf_size;
1638 int pkt_size = isize;
1642 if (pkt_size >= 10000000U)
1645 switch (encodings[0].compression.algo) {
1651 if (header_size && !
header) {
1659 pkt_size = isize + header_size;
1664 memcpy(pkt_data,
header, header_size);
1665 memcpy(pkt_data + header_size,
data, isize);
1672 olen = pkt_size *= 3;
1679 pkt_data = newpktdata;
1692 z_stream zstream = { 0 };
1693 if (!pkt_size || inflateInit(&zstream) != Z_OK)
1695 zstream.next_in =
data;
1696 zstream.avail_in = isize;
1701 inflateEnd(&zstream);
1705 pkt_data = newpktdata;
1706 zstream.avail_out = pkt_size - zstream.total_out;
1707 zstream.next_out = pkt_data + zstream.total_out;
1708 result =
inflate(&zstream, Z_NO_FLUSH);
1709 }
while (result == Z_OK && pkt_size < 10000000);
1710 pkt_size = zstream.total_out;
1711 inflateEnd(&zstream);
1712 if (result != Z_STREAM_END) {
1713 if (result == Z_MEM_ERROR)
1725 bz_stream bzstream = { 0 };
1726 if (!pkt_size || BZ2_bzDecompressInit(&bzstream, 0, 0) != BZ_OK)
1728 bzstream.next_in =
data;
1729 bzstream.avail_in = isize;
1734 BZ2_bzDecompressEnd(&bzstream);
1738 pkt_data = newpktdata;
1739 bzstream.avail_out = pkt_size - bzstream.total_out_lo32;
1740 bzstream.next_out = pkt_data + bzstream.total_out_lo32;
1741 result = BZ2_bzDecompress(&bzstream);
1742 }
while (result == BZ_OK && pkt_size < 10000000);
1743 pkt_size = bzstream.total_out_lo32;
1744 BZ2_bzDecompressEnd(&bzstream);
1745 if (result != BZ_STREAM_END) {
1746 if (result == BZ_MEM_ERROR)
1762 *buf_size = pkt_size;
1778 const char *lang = tags[
i].
lang &&
1779 strcmp(tags[
i].lang,
"und") ? tags[
i].
lang :
NULL;
1781 if (!tags[
i].
name) {
1789 if (tags[
i].def || !lang) {
1791 if (tags[
i].
sub.nb_elem)
1798 if (tags[
i].
sub.nb_elem)
1812 if (tags[
i].target.attachuid) {
1816 if (attachment[j].
uid == tags[
i].target.attachuid &&
1817 attachment[j].stream) {
1819 &attachment[j].stream->metadata,
NULL);
1825 "The tags at index %d refer to a "
1826 "non-existent attachment %"PRId64
".\n",
1827 i, tags[
i].target.attachuid);
1829 }
else if (tags[
i].target.chapteruid) {
1833 if (chapter[j].
uid == tags[
i].target.chapteruid &&
1834 chapter[j].chapter) {
1836 &chapter[j].chapter->metadata,
NULL);
1842 "The tags at index %d refer to a non-existent chapter "
1844 i, tags[
i].target.chapteruid);
1846 }
else if (tags[
i].target.trackuid) {
1850 if (track[j].
uid == tags[
i].target.trackuid &&
1853 &track[j].stream->metadata,
NULL);
1859 "The tags at index %d refer to a non-existent track "
1861 i, tags[
i].target.trackuid);
1865 tags[
i].target.type);
1884 "Max EBML element depth (%d) reached, "
1917 for (
i = 0;
i < seekhead_list->
nb_elem;
i++) {
1919 uint32_t
id = seekheads[
i].
id;
1927 if (!elem || elem->
parsed)
1950 uint64_t index_scale = 1;
1956 index_list = &matroska->
index;
1967 for (j = 0; j < pos_list->
nb_elem; j++) {
1970 if (track && track->
stream)
2000 static const char *
const aac_profiles[] = {
"MAIN",
"LC",
"SSR" };
2046 int block_last, block_type, block_size;
2052 if (block_size >
size)
2061 chmask =
av_dict_get(dict,
"WAVEFORMATEXTENSIBLE_CHANNEL_MASK",
NULL, 0);
2066 "Invalid value of WAVEFORMATEXTENSIBLE_CHANNEL_MASK\n");
2082 int minor, micro, bttb = 0;
2087 bttb = (
minor >= 36 && minor <= 51 && micro >= 100);
2089 switch (field_order) {
2108 int *h_width,
int *h_height)
2110 switch (stereo_mode) {
2135 int has_mastering_primaries, has_mastering_luminance;
2140 mastering_meta = &
color->mastering_meta;
2142 has_mastering_primaries =
2143 mastering_meta->
r_x > 0 && mastering_meta->
r_y > 0 &&
2144 mastering_meta->
g_x > 0 && mastering_meta->
g_y > 0 &&
2145 mastering_meta->
b_x > 0 && mastering_meta->
b_y > 0 &&
2169 (
color->chroma_siting_vert - 1) << 7);
2187 if (has_mastering_primaries || has_mastering_luminance) {
2196 if (has_mastering_primaries) {
2207 if (has_mastering_luminance) {
2223 size_t spherical_size;
2224 uint32_t l = 0, t = 0,
r = 0,
b = 0;
2225 uint32_t padding = 0;
2228 if (mkv_projection->
private.
size && priv_data[0] != 0) {
2241 if (
b >= UINT_MAX - t ||
r >= UINT_MAX - l) {
2243 "Invalid bounding rectangle coordinates "
2244 "%"PRIu32
",%"PRIu32
",%"PRIu32
",%"PRIu32
"\n",
2253 if (l || t ||
r ||
b)
2266 "Unknown spherical cubemap layout %"PRIu32
"\n",
layout);
2270 padding =
AV_RB32(priv_data + 8);
2281 "Unknown spherical metadata type %"PRIu64
"\n",
2355 int extradata_size = 0;
2356 int extradata_offset = 0;
2359 char* key_id_base64 =
NULL;
2368 "Unknown or unsupported track type %"PRIu64
"\n",
2387 "Invalid sample rate %f, defaulting to 8000 instead.\n",
2395 if (default_duration > UINT64_MAX || default_duration < 0) {
2397 "Invalid frame rate %e. Cannot calculate default duration.\n",
2413 if (encodings_list->
nb_elem > 1) {
2415 "Multiple combined encodings not supported");
2416 }
else if (encodings_list->
nb_elem == 1) {
2417 if (encodings[0].
type) {
2418 if (encodings[0].encryption.key_id.size > 0) {
2421 const int b64_size =
AV_BASE64_SIZE(encodings[0].encryption.key_id.size);
2423 if (key_id_base64 ==
NULL)
2427 encodings[0].encryption.key_id.data,
2428 encodings[0].encryption.key_id.size);
2430 encodings[0].
scope = 0;
2432 "Unsupported encoding type");
2445 encodings[0].
scope = 0;
2447 "Unsupported encoding type");
2457 "Failed to decode codec private data\n");
2476 encodings[0].
scope & 1 &&
2494 if (key_id_base64) {
2500 if (!strcmp(track->
codec_id,
"V_MS/VFW/FOURCC") &&
2511 extradata_offset = 40;
2512 }
else if (!strcmp(track->
codec_id,
"A_MS/ACM") &&
2525 }
else if (!strcmp(track->
codec_id,
"A_QUICKTIME")
2529 uint16_t sample_size;
2535 if (sample_size == 8) {
2538 }
else if (sample_size == 16) {
2547 }
else if (!strcmp(track->
codec_id,
"V_QUICKTIME") &&
2603 extradata[0] = (
profile << 3) | ((sri & 0x0E) >> 1);
2604 extradata[1] = ((sri & 0x01) << 7) | (track->
audio.
channels << 3);
2605 if (strstr(track->
codec_id,
"SBR")) {
2607 extradata[2] = 0x56;
2608 extradata[3] = 0xE5;
2609 extradata[4] = 0x80 | (sri << 3);
2622 AV_WB32(extradata, extradata_size);
2623 memcpy(&extradata[4],
"alac", 4);
2632 "Too large audio channel number %"PRIu64
2633 " or bitdepth %"PRIu64
". Skipping track.\n",
2642 extradata_size = 22;
2647 bytestream_put_be32(&ptr,
AV_RB32(
"TTA1"));
2648 bytestream_put_le16(&ptr, 1);
2659 extradata_offset = 26;
2693 static const int sipr_bit_rate[4] = { 6504, 8496, 5000, 16000 };
2702 extradata_offset = 78;
2714 "in absence of valid CodecPrivate.\n");
2729 extradata_offset = 4;
2735 "Unknown/unsupported AVCodecID %s.\n", track->
codec_id);
2739 "Track TimestampScale too small %f, assuming 1.0.\n",
2748 1000 * 1000 * 1000);
2757 if (strcmp(track->
language,
"und"))
2790 int display_width_mul = 1;
2791 int display_height_mul = 1;
2825 #if FF_API_R_FRAME_RATE
2845 snprintf(buf,
sizeof(buf),
"%s_%d",
2848 if (
planes[j].
uid == tracks[k].
uid && tracks[k].stream) {
2850 "stereo_mode", buf, 0);
2884 (
AVRational){1, st->codecpar->codec_id == AV_CODEC_ID_OPUS ?
2885 48000 : st->codecpar->sample_rate});
2895 if (!strcmp(track->
codec_id,
"D_WEBVTT/CAPTIONS")) {
2897 }
else if (!strcmp(track->
codec_id,
"D_WEBVTT/DESCRIPTIONS")) {
2899 }
else if (!strcmp(track->
codec_id,
"D_WEBVTT/METADATA")) {
2920 uint64_t max_start = 0;
2935 ebml.
max_size >
sizeof(uint64_t) ||
2939 "EBML version %"PRIu64
", doctype %s, doc version %"PRIu64,
2945 "EBML header using unsupported features\n"
2946 "(EBML version %"PRIu64
", doctype %s, doc version %"PRIu64
")\n",
3000 attachments = attachments_list->
elem;
3001 for (j = 0; j < attachments_list->
nb_elem; j++) {
3002 if (!(attachments[j].filename && attachments[j].mime &&
3003 attachments[j].bin.data && attachments[j].bin.size > 0)) {
3011 if (attachments[j].description)
3022 attachments[j].
stream = st;
3042 attachments[j].bin.size);
3054 chapters = chapters_list->
elem;
3057 (max_start == 0 || chapters[
i].start > max_start)) {
3063 max_start = chapters[
i].
start;
3083 if (matroska->
queue) {
3114 uint32_t lace_size[256],
int *laces)
3121 lace_size[0] =
size;
3137 for (n = 0; n < *laces - 1; n++) {
3145 lace_size[n] +=
temp;
3148 }
while (
temp == 0xff);
3153 lace_size[n] =
size - total;
3158 if (
size % (*laces))
3160 for (n = 0; n < *laces; n++)
3161 lace_size[n] =
size / *laces;
3178 total = lace_size[0] = num;
3180 for (n = 1; n < *laces - 1; n++) {
3186 if (lace_size[n - 1] + snum > (uint64_t)INT_MAX)
3189 lace_size[n] = lace_size[n - 1] + snum;
3190 total += lace_size[n];
3198 lace_size[*laces - 1] =
size - total;
3225 if (
size < cfs *
h / 2) {
3227 "Corrupt int4 RM-style audio packet size\n");
3230 for (x = 0; x <
h / 2; x++)
3231 memcpy(track->
audio.
buf + x * 2 *
w + y * cfs,
3232 data + x * cfs, cfs);
3236 "Corrupt sipr RM-style audio packet size\n");
3243 "Corrupt generic RM-style audio packet size\n");
3246 for (x = 0; x <
w /
sps; x++)
3248 sps * (
h * x + ((
h + 1) / 2) * (y & 1) + (y >> 1)),
3307 while (srclen >= 8) {
3317 multiblock = (
flags & 0x1800) != 0x1800;
3329 if (blocksize > srclen) {
3340 dstlen += blocksize + 32;
3351 memcpy(dst +
offset + 32,
src, blocksize);
3354 srclen -= blocksize;
3355 offset += blocksize + 32;
3374 int dstlen = *
size + 8;
3382 memcpy(dst + 8, *
data, dstlen - 8);
3401 int id_len, settings_len, text_len;
3409 q =
data + data_len;
3414 if (*p ==
'\r' || *p ==
'\n') {
3423 if (p >= q || *p !=
'\n')
3430 if (*p ==
'\r' || *p ==
'\n') {
3431 settings_len = p - settings;
3439 if (p >= q || *p !=
'\n')
3445 while (text_len > 0) {
3446 const int len = text_len - 1;
3448 if (
c !=
'\r' &&
c !=
'\n')
3461 memcpy(
pkt->
data, text, text_len);
3471 memcpy(buf,
id, id_len);
3474 if (settings_len > 0) {
3482 memcpy(buf, settings, settings_len);
3509 uint64_t timecode, uint64_t lace_duration,
3511 uint8_t *additional, uint64_t additional_id,
int additional_size,
3522 "Error parsing a wavpack block.\n");
3535 "Error parsing a prores block.\n");
3543 if (!pkt_size && !additional_size)
3563 if (additional_size > 0) {
3566 additional_size + 8);
3571 AV_WB64(side_data, additional_id);
3572 memcpy(side_data + 8, additional, additional_size);
3575 if (discard_padding) {
3586 if (discard_padding > 0) {
3587 AV_WL32(side_data + 4, discard_padding);
3589 AV_WL32(side_data, -discard_padding);
3600 #if FF_API_CONVERGENCE_DURATION
3603 pkt->convergence_duration = lace_duration;
3626 uint8_t *additional, uint64_t additional_id,
int additional_size,
3635 uint32_t lace_size[256];
3636 int n,
flags, laces = 0;
3638 int trust_default_duration;
3648 if (!track ||
size < 3)
3651 if (!(st = track->
stream)) {
3653 "No stream associated to TrackNumber %"PRIu64
". "
3654 "Ignoring Block with this TrackNumber.\n", num);
3660 if (block_duration > INT64_MAX)
3661 block_duration = INT64_MAX;
3670 if (cluster_time != (uint64_t) -1 &&
3671 (block_time >= 0 || cluster_time >= -block_time)) {
3672 uint64_t timecode_cluster_in_track_tb = (double) cluster_time / track->
time_scale;
3675 timecode < track->end_timecode)
3700 &pb, lace_size, &laces);
3711 trust_default_duration = 0;
3715 if (!block_duration && trust_default_duration)
3718 if (cluster_time != (uint64_t)-1 && (block_time >= 0 || cluster_time >= -block_time))
3722 for (n = 0; n < laces; n++) {
3723 int64_t lace_duration = block_duration*(n+1) / laces - block_duration*n / laces;
3749 timecode, lace_duration,
3759 additional, additional_id, additional_size,
3766 timecode = lace_duration ? timecode + lace_duration :
AV_NOPTS_VALUE;
3798 if (res >= 0 &&
block->bin.size > 0) {
3807 block->additional.size, cluster->
pos,
3808 block->discard_padding);
3818 "end of segment.\n");
3854 AVStream *st =
s->streams[stream_index];
3945 int nb_index_entries =
s->streams[0]->nb_index_entries;
3949 return (
CueDesc) {-1, -1, -1, -1};
3950 for (
i = 1;
i < nb_index_entries;
i++) {
3951 if (index_entries[
i - 1].timestamp * matroska->
time_scale <= ts &&
3952 index_entries[
i].timestamp * matroska->
time_scale > ts) {
3959 if (
i != nb_index_entries - 1) {
3976 int64_t cluster_pos, before_pos;
3978 if (
s->streams[0]->nb_index_entries <= 0)
return 0;
3981 if (
index < 0)
return 0;
3982 cluster_pos =
s->streams[0]->index_entries[
index].pos;
3985 uint64_t cluster_id, cluster_length;
3991 if (read < 0 || cluster_id != 0xF43B675)
4005 cluster_pos += 4 + read + cluster_length;
4019 double min_buffer,
double*
buffer,
4023 double nano_seconds_per_second = 1000000000.0;
4024 double time_sec = time_ns / nano_seconds_per_second;
4026 int64_t time_to_search_ns = (
int64_t)(search_sec * nano_seconds_per_second);
4027 int64_t end_time_ns = time_ns + time_to_search_ns;
4028 double sec_downloaded = 0.0;
4032 *sec_to_download = 0.0;
4039 double timeToDownload = (cueBytes * 8.0) /
bps;
4041 sec_downloaded += (cue_nano / nano_seconds_per_second) - timeToDownload;
4042 *sec_to_download += timeToDownload;
4046 double desc_end_time_sec = desc_curr.
end_time_ns / nano_seconds_per_second;
4047 double percent_to_sub = search_sec / (desc_end_time_sec - time_sec);
4048 sec_downloaded = percent_to_sub * sec_downloaded;
4049 *sec_to_download = percent_to_sub * *sec_to_download;
4052 if ((sec_downloaded + *
buffer) <= min_buffer) {
4063 double desc_sec = desc_ns / nano_seconds_per_second;
4064 double bits = (desc_bytes * 8.0);
4065 double time_to_download =
bits /
bps;
4067 sec_downloaded += desc_sec - time_to_download;
4068 *sec_to_download += time_to_download;
4071 double desc_end_time_sec = desc_curr.
end_time_ns / nano_seconds_per_second;
4072 double percent_to_sub = search_sec / (desc_end_time_sec - time_sec);
4073 sec_downloaded = percent_to_sub * sec_downloaded;
4074 *sec_to_download = percent_to_sub * *sec_to_download;
4076 if ((sec_downloaded + *
buffer) <= min_buffer)
4081 if ((sec_downloaded + *
buffer) <= min_buffer) {
4103 double bandwidth = 0.0;
4107 int64_t prebuffer_ns = 1000000000;
4109 double nano_seconds_per_second = 1000000000.0;
4111 double prebuffer_bytes = 0.0;
4112 int64_t temp_prebuffer_ns = prebuffer_ns;
4114 double pre_sec, prebuffer, bits_per_second;
4119 if (time_ns > INT64_MAX - prebuffer_ns)
4121 prebuffered_ns = time_ns + prebuffer_ns;
4135 bits_per_second = 0.0;
4144 pre_sec = pre_ns / nano_seconds_per_second;
4146 pre_bytes * ((temp_prebuffer_ns / nano_seconds_per_second) / pre_sec);
4148 prebuffer = prebuffer_ns / nano_seconds_per_second;
4151 bits_per_second = 0.0;
4155 double desc_sec, calc_bits_per_second, percent, mod_bits_per_second;
4156 if (desc_bytes <= 0 || desc_bytes > INT64_MAX/8)
4159 desc_sec = desc_ns / nano_seconds_per_second;
4160 calc_bits_per_second = (desc_bytes * 8) / desc_sec;
4163 percent = (desc_bytes - prebuffer_bytes) / desc_bytes;
4164 mod_bits_per_second = calc_bits_per_second * percent;
4166 if (prebuffer < desc_sec) {
4173 const double min_buffer = 0.0;
4174 double buffer = prebuffer;
4175 double sec_to_download = 0.0;
4178 min_buffer, &
buffer, &sec_to_download,
4182 }
else if (
rv == 0) {
4183 bits_per_second = (double)(
bps);
4191 if (bandwidth < bits_per_second) bandwidth = bits_per_second;
4202 int64_t cues_start = -1, cues_end = -1, before_pos, bandwidth;
4211 if (
i >= seekhead_list->
nb_elem)
return -1;
4215 if (
avio_seek(matroska->
ctx->
pb, cues_start, SEEK_SET) == cues_start) {
4219 uint64_t cues_length, cues_id;
4227 cues_end = cues_start + 4 + bytes_read + cues_length - 1;
4230 if (cues_start == -1 || cues_end == -1)
return -1;
4243 if (cues_start <= init_range)
4248 if (bandwidth < 0)
return -1;
4257 if (!buf)
return -1;
4259 for (
i = 0;
i <
s->streams[0]->nb_index_entries;
i++) {
4261 "%" PRId64
"%s",
s->streams[0]->index_entries[
i].timestamp,
4262 i !=
s->streams[0]->nb_index_entries - 1 ?
"," :
"");
4263 if (ret <= 0 || (ret == 20 &&
i ==
s->streams[0]->nb_index_entries - 1)) {
4309 buf = strrchr(
s->url,
'/');
4341 #define OFFSET(x) offsetof(MatroskaDemuxContext, x)
4356 .
name =
"matroska,webm",
4358 .extensions =
"mkv,mk3d,mka,mks,webm",
4365 .mime_type =
"audio/webm,audio/x-matroska,video/webm,video/x-matroska"
4369 .
name =
"webm_dash_manifest",
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AV_EF_EXPLODE
abort decoding on minor error detection
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
uint64_t avio_rb64(AVIOContext *s)
unsigned int avio_rb16(AVIOContext *s)
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
unsigned int avio_rb32(AVIOContext *s)
int avio_r8(AVIOContext *s)
int ffio_init_context(AVIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
int ffio_limit(AVIOContext *s, int size)
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
void avpriv_packet_list_free(PacketList **pkt_buf, PacketList **pkt_buf_end)
Wipe the list and unref all the packets in it.
int avpriv_packet_list_get(PacketList **pkt_buffer, PacketList **pkt_buffer_end, AVPacket *pkt)
Remove the oldest AVPacket in the list and return it.
int avpriv_packet_list_put(PacketList **packet_buffer, PacketList **plast_pktl, AVPacket *pkt, int(*copy)(AVPacket *dst, const AVPacket *src), int flags)
Append an AVPacket to the list.
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, buffer_size_t size)
char * av_asprintf(const char *fmt,...)
#define flags(name, subs,...)
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
#define MKTAG(a, b, c, d)
#define MKBETAG(a, b, c, d)
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 float sub(float src0, float src1)
static int read_header(FFV1Context *f)
FLAC (Free Lossless Audio Codec) decoder/demuxer common functions.
static av_always_inline void flac_parse_block_header(const uint8_t *block_header, int *last, int *type, int *size)
Parse the metadata block parameters from the header.
@ FLAC_METADATA_TYPE_VORBIS_COMMENT
#define FLAC_STREAMINFO_SIZE
AVCodecID
Identify the syntax and semantics of the bitstream.
@ AV_CODEC_ID_TEXT
raw UTF-8 text
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos)
Converts swscale x/y chroma position to AVChromaLocation.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
@ AVDISCARD_ALL
discard all
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
@ AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL
Data found in BlockAdditional element of matroska container.
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
@ AV_PKT_DATA_WEBVTT_SETTINGS
The optional settings (rendering instructions) that immediately follow the timestamp specifier of a W...
@ AV_PKT_DATA_PALETTE
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette.
@ AV_PKT_DATA_WEBVTT_IDENTIFIER
The optional first identifier line of a WebVTT cue.
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
uint8_t * av_stream_new_side_data(AVStream *stream, enum AVPacketSideDataType type, size_t size)
Allocate new information from stream.
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.
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
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 av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags)
Get the index for a specific timestamp.
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
AVBufferRef * av_buffer_create(uint8_t *data, buffer_size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
int av_buffer_realloc(AVBufferRef **pbuf, buffer_size_t size)
Reallocate a given buffer.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set that converts the value to a string and stores it.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AVERROR_EOF
End of file.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
#define AV_LZO_OUTPUT_FULL
decoded data did not fit into output buffer
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
Decodes LZO 1x compressed data.
#define AV_LZO_OUTPUT_PADDING
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
AVRational av_d2q(double d, int max)
Convert a double precision floating point number to a rational.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
char * av_strdup(const char *s)
Duplicate a string.
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 av_fourcc2str(fourcc)
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes,...
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
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.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_TIME_BASE
Internal time base represented as integer.
#define LIBAVUTIL_VERSION_INT
AVSphericalProjection
Projection of the video surface(s) on a sphere.
AVSphericalMapping * av_spherical_alloc(size_t *size)
Allocate a AVSphericalVideo structure and initialize its fields to default values.
@ AV_SPHERICAL_EQUIRECTANGULAR
Video represents a sphere mapped on a flat surface using equirectangular projection.
@ AV_SPHERICAL_EQUIRECTANGULAR_TILE
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection.
@ AV_SPHERICAL_CUBEMAP
Video frame is split into 6 faces of a cube, and arranged on a 3x2 layout.
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
static av_always_inline double av_int2double(uint64_t i)
Reinterpret a 64-bit integer as a double.
const uint8_t ff_log2_tab[256]
const AVCodecTag ff_codec_movaudio_tags[]
const AVCodecTag ff_codec_movvideo_tags[]
static const struct TransferCharacteristics transfer_characteristics[AVCOL_TRC_NB]
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define FF_DISABLE_DEPRECATION_WARNINGS
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
#define FF_ENABLE_DEPRECATION_WARNINGS
static av_cold int read_close(AVFormatContext *ctx)
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
static int is_keyframe(NalUnitType naltype)
static const struct @322 planes[]
static const uint16_t mask[17]
static av_const int sign_extend(int val, unsigned bits)
int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
const char *const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT]
const char *const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB]
const CodecTags ff_mkv_codec_tags[]
const AVMetadataConv ff_mkv_metadata_conv[]
#define MATROSKA_ID_VIDEOPROJECTIONPOSEROLL
#define MATROSKA_ID_FILEMIMETYPE
#define MATROSKA_ID_DISCARDPADDING
#define MATROSKA_ID_TRACKFLAGLACING
#define MATROSKA_ID_TRACKTIMECODESCALE
#define MATROSKA_ID_TAGTARGETS
#define MATROSKA_ID_CHAPTERFLAGENABLED
#define MATROSKA_ID_TRACKAUDIO
#define MATROSKA_ID_TRACKUID
#define MATROSKA_ID_CUERELATIVEPOSITION
#define MATROSKA_ID_CHAPCOUNTRY
#define MATROSKA_ID_CHAPSTRING
#define MATROSKA_ID_ENCODINGTYPE
#define MATROSKA_ID_TAGTARGETS_TYPEVALUE
#define MATROSKA_ID_CODECDOWNLOADURL
#define MATROSKA_ID_TRACKOPERATION
#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED
#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS
#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN
#define MATROSKA_ID_ENCODINGSIGALGO
@ MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_NB
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM
@ MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_MONO
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR
#define MATROSKA_ID_VIDEOSTEREOMODE
#define MATROSKA_ID_EDITIONFLAGORDERED
#define MATROSKA_ID_ENCODINGENCAESSETTINGS
#define MATROSKA_ID_CHAPTERS
#define MATROSKA_ID_SIMPLETAG
#define MATROSKA_ID_TRACKPLANE
#define MATROSKA_ID_TRACKMINCACHE
#define MATROSKA_ID_TIMECODESCALE
#define EBML_ID_EBMLVERSION
#define MATROSKA_ID_VIDEOCOLORCBSUBVERT
#define MATROSKA_ID_VIDEOPIXELWIDTH
#define MATROSKA_ID_CLUSTERPOSITION
#define EBML_ID_DOCTYPEVERSION
#define MATROSKA_ID_ENCODINGENCKEYID
#define MATROSKA_ID_ATTACHMENTS
#define MATROSKA_ID_CODECDECODEALL
#define MATROSKA_ID_BLOCKDURATION
#define MATROSKA_ID_TRACKPLANEUID
#define MATROSKA_ID_TITLE
#define MATROSKA_ID_TRACKLANGUAGE
#define MATROSKA_ID_SEEKID
#define MATROSKA_ID_VIDEOCOLORMAXFALL
#define MATROSKA_ID_TAGTARGETS_TYPE
#define MATROSKA_ID_VIDEOCOLOR_GY
#define MATROSKA_ID_CHAPTERATOM
#define MATROSKA_ID_VIDEOFIELDORDER
#define MATROSKA_ID_VIDEOPROJECTIONTYPE
#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ
#define MATROSKA_ID_CODECDELAY
#define MATROSKA_ID_VIDEOALPHAMODE
#define MATROSKA_ID_TRACKNAME
#define MATROSKA_ID_CHAPTERTIMESTART
#define MATROSKA_ID_MUXINGAPP
#define MATROSKA_ID_SEEKHEAD
#define MATROSKA_ID_CUETIME
#define MATROSKA_ID_FILEUID
#define MATROSKA_ID_CLUSTERPREVSIZE
#define MATROSKA_ID_VIDEOCOLORSPACE
#define MATROSKA_ID_VIDEOCOLOR_BY
@ MATROSKA_TRACK_ENCODING_COMP_LZO
@ MATROSKA_TRACK_ENCODING_COMP_ZLIB
@ MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP
@ MATROSKA_TRACK_ENCODING_COMP_BZLIB
#define MATROSKA_ID_VIDEOCOLOR_RY
#define MATROSKA_ID_VIDEOCOLORCBSUBHORZ
#define MATROSKA_ID_EDITIONFLAGDEFAULT
#define MATROSKA_ID_TRACKCOMBINEPLANES
#define MATROSKA_ID_SEEKPREROLL
#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS
#define MATROSKA_ID_AUDIOCHANNELS
#define MATROSKA_ID_VIDEOCOLOR_BX
#define MATROSKA_ID_FILEDESC
#define MATROSKA_ID_VIDEODISPLAYUNIT
#define MATROSKA_ID_SIMPLEBLOCK
#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ
#define MATROSKA_ID_BLOCKGROUP
#define MATROSKA_ID_TRACKFLAGENABLED
#define MATROSKA_ID_AUDIOBITDEPTH
#define MATROSKA_ID_VIDEOPIXELHEIGHT
@ MATROSKA_COLOUR_CHROMASITINGHORZ_NB
@ MATROSKA_COLOUR_CHROMASITINGHORZ_UNDETERMINED
#define MATROSKA_VIDEO_STEREO_PLANE_COUNT
#define MATROSKA_ID_ENCODINGSIGKEYID
#define MATROSKA_ID_DATEUTC
#define MATROSKA_ID_ENCODINGSIGHASHALGO
#define MATROSKA_ID_TRACKPLANETYPE
#define MATROSKA_ID_VIDEOPIXELCROPL
#define MATROSKA_ID_CUETRACK
@ MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED
@ MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE
@ MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED
#define MATROSKA_ID_TRACKNUMBER
#define MATROSKA_ID_TAGDEFAULT_BUG
#define MATROSKA_ID_POINTENTRY
#define MATROSKA_ID_VIDEOPROJECTIONPRIVATE
#define MATROSKA_ID_CHAPTERPHYSEQUIV
#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT
#define MATROSKA_ID_TRACKFLAGORIGINAL
#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA
#define MATROSKA_ID_VIDEOCOLORCHROMASUBHORZ
@ MATROSKA_VIDEO_FIELDORDER_TB
@ MATROSKA_VIDEO_FIELDORDER_PROGRESSIVE
@ MATROSKA_VIDEO_FIELDORDER_BT
@ MATROSKA_VIDEO_FIELDORDER_BB
@ MATROSKA_VIDEO_FIELDORDER_UNDETERMINED
@ MATROSKA_VIDEO_FIELDORDER_TT
#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX
#define MATROSKA_ID_BLOCK
#define MATROSKA_ID_TAGLANG
#define MATROSKA_ID_CHAPTERFLAGHIDDEN
#define MATROSKA_ID_TAGSTRING
#define MATROSKA_ID_CLUSTER
#define MATROSKA_ID_VIDEOCOLORBITSPERCHANNEL
#define MATROSKA_ID_CODECINFOURL
#define MATROSKA_ID_TRACKCONTENTENCODING
#define MATROSKA_ID_BLOCKREFERENCE
#define MATROSKA_ID_CHAPTERTIMEEND
#define MATROSKA_ID_CODECSTATE
#define MATROSKA_ID_VIDEODISPLAYHEIGHT
#define MATROSKA_ID_ATTACHEDFILE
#define MATROSKA_ID_TRACKTYPE
#define MATROSKA_ID_TRACKENTRY
#define MATROSKA_ID_SEGMENTUID
#define MATROSKA_ID_ENCODINGENCRYPTION
#define MATROSKA_ID_ENCODINGENCALGO
#define EBML_ID_DOCTYPEREADVERSION
#define MATROSKA_ID_TRACKCONTENTENCODINGS
#define MATROSKA_ID_TRACKDEFAULTDURATION
#define MATROSKA_ID_VIDEOFRAMERATE
#define MATROSKA_ID_ENCODINGCOMPRESSION
@ MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP
@ MATROSKA_VIDEO_PROJECTION_TYPE_RECTANGULAR
@ MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR
#define MATROSKA_ID_TRACKS
#define MATROSKA_ID_VIDEOFLAGINTERLACED
#define MATROSKA_ID_VIDEOCOLORCHROMASUBVERT
#define MATROSKA_ID_ENCODINGORDER
#define MATROSKA_ID_FILENAME
#define MATROSKA_ID_TRACKFLAGFORCED
#define MATROSKA_ID_TRACKVIDEO
#define MATROSKA_ID_TAGTARGETS_CHAPTERUID
#define MATROSKA_ID_VIDEOCOLORRANGE
#define MATROSKA_ID_FILEDATA
#define MATROSKA_ID_TRACKMAXBLKADDID
#define MATROSKA_ID_VIDEOCOLOR_RX
#define MATROSKA_ID_BLOCKADDITIONAL
#define MATROSKA_ID_TRACKMAXCACHE
#define MATROSKA_ID_TAGTARGETS_TRACKUID
#define MATROSKA_ID_ENCODINGCOMPALGO
#define MATROSKA_ID_CUEDURATION
#define EBML_ID_EBMLMAXIDLENGTH
#define MATROSKA_ID_TRACKFLAGDEFAULT
#define MATROSKA_ID_VIDEOASPECTRATIO
#define MATROSKA_ID_SEEKENTRY
#define MATROSKA_ID_VIDEOCOLOR_WHITEY
#define MATROSKA_ID_VIDEOCOLORMAXCLL
@ MATROSKA_TRACK_TYPE_VIDEO
@ MATROSKA_TRACK_TYPE_METADATA
@ MATROSKA_TRACK_TYPE_SUBTITLE
@ MATROSKA_TRACK_TYPE_AUDIO
#define MATROSKA_ID_VIDEOCOLORPRIMARIES
#define MATROSKA_ID_BLOCKADDID
#define MATROSKA_ID_VIDEOCOLOR_WHITEX
#define EBML_ID_EBMLMAXSIZELENGTH
#define MATROSKA_ID_SEEKPOSITION
#define MATROSKA_ID_CODECPRIVATE
#define MATROSKA_ID_TAGNAME
#define MATROSKA_ID_DURATION
#define MATROSKA_ID_CHAPTERUID
#define MATROSKA_ID_CODECID
#define MATROSKA_ID_BLOCKMORE
#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED
#define MATROSKA_ID_CUEBLOCKNUMBER
#define MATROSKA_ID_ENCODINGCOMPSETTINGS
#define MATROSKA_ID_TRACKFLAGCOMMENTARY
#define MATROSKA_ID_CUECLUSTERPOSITION
#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW
#define MATROSKA_ID_ENCODINGSIGNATURE
#define MATROSKA_ID_VIDEOPIXELCROPB
#define MATROSKA_ID_CUETRACKPOSITION
#define MATROSKA_ID_ENCODINGSCOPE
#define MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH
#define MATROSKA_ID_EDITIONENTRY
#define MATROSKA_ID_CLUSTERTIMECODE
#define MATROSKA_ID_EDITIONUID
#define MATROSKA_ID_VIDEOCOLOR
#define MATROSKA_ID_VIDEODISPLAYWIDTH
#define MATROSKA_ID_CHAPTERDISPLAY
#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF
#define MATROSKA_ID_TAGDEFAULT
#define INITIALIZATION_RANGE
#define MATROSKA_ID_CODECNAME
#define MATROSKA_ID_CHAPLANG
#define MATROSKA_ID_VIDEOPROJECTION
@ MATROSKA_COLOUR_CHROMASITINGVERT_UNDETERMINED
@ MATROSKA_COLOUR_CHROMASITINGVERT_NB
#define MATROSKA_ID_AUDIOSAMPLINGFREQ
#define MATROSKA_ID_VIDEOPIXELCROPT
#define EBML_ID_EBMLREADVERSION
@ MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN
@ MATROSKA_VIDEO_DISPLAYUNIT_PIXELS
#define MATROSKA_ID_BLOCKADDITIONS
#define MATROSKA_ID_EDITIONFLAGHIDDEN
#define MATROSKA_ID_WRITINGAPP
#define MATROSKA_ID_TAGTARGETS_ATTACHUID
#define MATROSKA_ID_SEGMENT
#define MATROSKA_ID_VIDEOCOLOR_GX
#define MATROSKA_ID_VIDEOPIXELCROPR
static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, uint8_t *data, int size, uint64_t timecode, int64_t pos)
static int webm_dash_manifest_read_header(AVFormatContext *s)
static EbmlSyntax matroska_index_entry[3]
static EbmlSyntax matroska_tagtargets[]
static const AVClass webm_dash_class
static EbmlSyntax matroska_track_combine_planes[2]
static const char *const matroska_doctypes[]
static int ebml_read_num(MatroskaDemuxContext *matroska, AVIOContext *pb, int max_size, uint64_t *number, int eof_forbidden)
static EbmlSyntax matroska_cluster_enter[]
static EbmlSyntax matroska_attachments[2]
static int is_ebml_id_valid(uint32_t id)
static EbmlSyntax * ebml_parse_id(EbmlSyntax *syntax, uint32_t id)
static int webm_dash_manifest_cues(AVFormatContext *s, int64_t init_range)
static EbmlSyntax matroska_segments[]
static MatroskaTrack * matroska_find_track_by_num(MatroskaDemuxContext *matroska, uint64_t num)
static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, uint64_t block_duration, int is_keyframe, uint8_t *additional, uint64_t additional_id, int additional_size, int64_t cluster_pos, int64_t discard_padding)
static EbmlSyntax matroska_simpletag[]
static int matroska_parse_laces(MatroskaDemuxContext *matroska, uint8_t **buf, int size, int type, AVIOContext *pb, uint32_t lace_size[256], int *laces)
static int webm_dash_manifest_read_packet(AVFormatContext *s, AVPacket *pkt)
static EbmlSyntax matroska_chapters[2]
static EbmlSyntax matroska_track_encoding_compression[]
static const AVOption options[]
static int ebml_read_uint(AVIOContext *pb, int size, uint64_t default_value, uint64_t *num)
static int ebml_read_ascii(AVIOContext *pb, int size, const char *default_value, char **str)
static void ebml_free(EbmlSyntax *syntax, void *data)
static int matroska_ebmlnum_sint(MatroskaDemuxContext *matroska, AVIOContext *pb, int64_t *num)
static EbmlSyntax matroska_track_encoding[6]
static int matroska_read_close(AVFormatContext *s)
static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum AVCodecID *codec_id)
static const CodecMime mkv_image_mime_tags[]
static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
static int64_t webm_dash_manifest_compute_bandwidth(AVFormatContext *s, int64_t cues_start)
static EbmlSyntax matroska_track_plane[]
static EbmlSyntax matroska_seekhead_entry[]
static int matroska_aac_sri(int samplerate)
static int ebml_read_master(MatroskaDemuxContext *matroska, uint64_t length, int64_t pos)
static void matroska_convert_tags(AVFormatContext *s)
static void matroska_convert_tag(AVFormatContext *s, EbmlList *list, AVDictionary **metadata, char *prefix)
static int ebml_read_sint(AVIOContext *pb, int size, int64_t default_value, int64_t *num)
static EbmlSyntax matroska_chapter[6]
static EbmlSyntax matroska_info[]
static EbmlSyntax matroska_track_video[19]
static EbmlSyntax matroska_track_operation[2]
static EbmlSyntax matroska_chapter_entry[9]
static EbmlSyntax matroska_mastering_meta[]
static int ebml_parse_nest(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
static void mkv_stereo_mode_display_mul(int stereo_mode, int *h_width, int *h_height)
static EbmlSyntax matroska_track[32]
static int ebml_read_float(AVIOContext *pb, int size, double default_value, double *num)
static int webm_clusters_start_with_keyframe(AVFormatContext *s)
static EbmlSyntax matroska_index[2]
static EbmlSyntax matroska_blockmore[]
static void matroska_clear_queue(MatroskaDemuxContext *matroska)
static int matroska_resync(MatroskaDemuxContext *matroska, int64_t last_pos)
static EbmlSyntax matroska_segment[9]
static int ebml_parse(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
static int matroska_reset_status(MatroskaDemuxContext *matroska, uint32_t id, int64_t position)
static void matroska_parse_cues(MatroskaDemuxContext *matroska)
static EbmlSyntax matroska_tags[2]
static int matroska_parse_wavpack(MatroskaTrack *track, uint8_t **data, int *size)
static EbmlSyntax matroska_tag[3]
static int matroska_read_header(AVFormatContext *s)
static EbmlSyntax ebml_syntax[3]
static EbmlSyntax matroska_track_video_projection[]
static MatroskaLevel1Element * matroska_find_level1_elem(MatroskaDemuxContext *matroska, uint32_t id, int64_t pos)
static EbmlSyntax matroska_chapter_display[]
static int matroska_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
static void matroska_add_index_entries(MatroskaDemuxContext *matroska)
static int matroska_parse_tracks(AVFormatContext *s)
static void matroska_metadata_creation_time(AVDictionary **metadata, int64_t date_utc)
static EbmlSyntax matroska_track_encoding_encryption[]
static EbmlSyntax ebml_header[]
static int matroska_probe(const AVProbeData *p)
static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, uint8_t *data, int data_len, uint64_t timecode, uint64_t duration, int64_t pos)
static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, void *logctx)
static int ebml_read_length(MatroskaDemuxContext *matroska, AVIOContext *pb, uint64_t *number)
Read a EBML length value.
static int matroska_decode_buffer(uint8_t **buf, int *buf_size, MatroskaTrack *track)
static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track)
static int matroska_deliver_packet(MatroskaDemuxContext *matroska, AVPacket *pkt)
static EbmlSyntax matroska_seekhead[2]
static EbmlSyntax matroska_track_encodings[2]
static EbmlSyntax matroska_tracks[2]
static EbmlSyntax matroska_blockadditions[2]
AVInputFormat ff_webm_dash_manifest_demuxer
static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska, int64_t pos)
static EbmlSyntax matroska_track_audio[]
static int ebml_read_binary(AVIOContext *pb, int length, int64_t pos, EbmlBin *bin)
static int matroska_aac_profile(char *codec_id)
static int mkv_field_order(MatroskaDemuxContext *matroska, int64_t field_order)
static int buffer_size_after_time_downloaded(int64_t time_ns, double search_sec, int64_t bps, double min_buffer, double *buffer, double *sec_to_download, AVFormatContext *s, int64_t cues_start)
static int matroska_parse_flac(AVFormatContext *s, MatroskaTrack *track, int *offset)
static EbmlSyntax matroska_track_video_color[15]
static EbmlSyntax matroska_cluster_parsing[8]
static int matroska_parse_frame(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, AVBufferRef *buf, uint8_t *data, int pkt_size, uint64_t timecode, uint64_t lace_duration, int64_t pos, int is_keyframe, uint8_t *additional, uint64_t additional_id, int additional_size, int64_t discard_padding)
static EbmlSyntax matroska_index_pos[]
static CueDesc get_cue_desc(AVFormatContext *s, int64_t ts, int64_t cues_start)
AVInputFormat ff_matroska_demuxer
#define EBML_UNKNOWN_LENGTH
static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
static EbmlSyntax matroska_attachment[]
static int matroska_parse_prores(MatroskaTrack *track, uint8_t **data, int *size)
static const CodecMime mkv_mime_tags[]
static EbmlSyntax matroska_blockgroup[8]
static void matroska_execute_seekhead(MatroskaDemuxContext *matroska)
const int avpriv_mpeg4audio_sample_rates[16]
int ff_vorbis_comment(AVFormatContext *ms, AVDictionary **m, const uint8_t *buf, int size, int parse_picture)
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
@ AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_JPEG
Full range content.
int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
Retrieve the palette (or "color table" in QuickTime terms), either from the video sample description,...
const AVCodecTag ff_codec_bmp_tags[]
internal header for RIFF based (de)muxers do NOT include this in end user applications
int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int size, int big_endian)
void ff_rm_reorder_sipr_data(uint8_t *buf, int sub_packet_h, int framesize)
Perform 4-bit block reordering for SIPR data.
const unsigned char ff_sipr_subpk_size[4]
static const uint8_t header[24]
static int segment_start(AVFormatContext *s, int write_header)
#define FF_ARRAY_ELEMS(a)
A reference to a data buffer.
uint8_t * data
The data buffer.
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
enum AVColorSpace color_space
int extradata_size
Size of the extradata content in bytes.
int frame_size
Audio only.
enum AVFieldOrder field_order
Video only.
uint64_t channel_layout
Audio only.
int bits_per_coded_sample
The number of bits per sample in the codedwords.
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
int seek_preroll
Audio only.
enum AVMediaType codec_type
General type of the encoded data.
int block_align
Audio only.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
enum AVColorPrimaries color_primaries
int sample_rate
Audio only.
enum AVColorTransferCharacteristic color_trc
int initial_padding
Audio only.
enum AVChromaLocation chroma_location
enum AVColorRange color_range
Video only.
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
unsigned MaxFALL
Max average light level per frame (cd/m^2).
unsigned MaxCLL
Max content light level (cd/m^2).
AVIOContext * pb
I/O context.
int flags
Flags modifying the (de)muxer behaviour.
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
int error_recognition
Error recognition; higher values will detect more errors but may misdetect some more or less valid pa...
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
unsigned char * buf_ptr
Current position in the buffer.
unsigned char * buffer
Start of the buffer.
int eof_reached
true if was unable to read due to error or eof
int error
contains the error code or 0 if no error happened
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
This structure stores compressed data.
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
int flags
A combination of AV_PKT_FLAG values.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
int64_t pos
byte position in stream, -1 if unknown
This structure contains the data a format has to probe a file.
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.
Rational number (pair of numerator and denominator).
This structure describes how to handle spherical videos, outlining information about projection,...
uint32_t bound_left
Distance from the left edge.
enum AVSphericalProjection projection
Projection type.
uint32_t bound_top
Distance from the top edge.
uint32_t bound_bottom
Distance from the bottom edge.
uint32_t bound_right
Distance from the right edge.
int32_t pitch
Rotation around the right vector [-90, 90].
int32_t roll
Rotation around the forward vector [-180, 180].
int32_t yaw
Rotation around the up vector [-180, 180].
uint32_t padding
Number of pixels to pad from the edge of each cube face.
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
int index
stream index in AVFormatContext
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
AVRational avg_frame_rate
Average framerate.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
enum AVStreamParseType need_parsing
AVRational r_frame_rate
Real base framerate of the stream.
AVStreamInternal * internal
An opaque field for libavformat internal usage.
int disposition
AV_DISPOSITION_* bit field.
union CountedElement::@263 el
unsigned int alloc_elem_size
union EbmlSyntax::@264 def
const struct EbmlSyntax * n
MatroskaLevel levels[EBML_MAX_DEPTH]
int cues_parsing_deferred
MatroskaLevel1Element level1_elems[64]
uint64_t skip_to_timecode
MatroskaCluster current_cluster
MatroskaTrackCompression compression
MatroskaTrackEncryption encryption
uint64_t transfer_characteristics
uint64_t chroma_siting_horz
uint64_t chroma_siting_vert
uint64_t matrix_coefficients
uint64_t bits_per_channel
MatroskaMasteringMeta mastering_meta
MatroskaTrackVideoProjection projection
uint64_t flag_hearingimpaired
uint64_t flag_textdescriptions
uint64_t max_block_additional_id
uint64_t codec_delay_in_track_tb
uint64_t flag_visualimpaired
uint32_t palette[AVPALETTE_COUNT]
CountedElement flag_original
MatroskaTrackOperation operation
uint64_t default_duration
#define av_malloc_array(a, b)
static void inflate(uint8_t *dst, const uint8_t *p1, int width, int threshold, const uint8_t *coordinates[], int coord, int maxc)
static const uint8_t offset[127][2]
#define update_pos(td, mb_y, mb_x)