32#include "config_components.h"
83#define EBML_UNKNOWN_LENGTH UINT64_MAX
84#define NEEDS_CHECKING 2
88#define SKIP_THRESHOLD 1024 * 1024
91#define UNKNOWN_EQUIV 50 * 1024
444#define CHILD_OF(parent) { .def = { .n = parent } }
876 "Seek to desired resync point failed. Seeking to "
877 "earliest point available instead.\n");
879 last_pos + 1), SEEK_SET);
915 int max_size, uint64_t *number,
int eof_forbidden)
929 if (!total ||
read > max_size) {
933 "0x00 at pos %"PRId64
" (0x%"PRIx64
") invalid as first byte "
934 "of an EBML number\n",
pos,
pos);
937 "Length %d indicated by an EBML number's first byte 0x%02x "
938 "at pos %"PRId64
" (0x%"PRIx64
") exceeds max length %d.\n",
947 total = (total << 8) |
avio_r8(pb);
962 "Read error at pos. %"PRIu64
" (0x%"PRIx64
")\n",
968 "at pos. %"PRIu64
" (0x%"PRIx64
")\n",
pos,
pos);
983 if (res > 0 && *number + 1 == 1ULL << (7 * res))
993 uint64_t default_value, uint64_t *num)
998 *num = default_value;
1004 *num = (*num << 8) |
avio_r8(pb);
1019 *num = default_value;
1026 *num = ((uint64_t)*num << 8) |
avio_r8(pb);
1037 double default_value,
double *num)
1040 *num = default_value;
1042 }
else if (
size == 4) {
1044 }
else if (
size == 8) {
1057 const char *default_value,
char **str)
1062 if (
size == 0 && default_value) {
1128 level->length = length;
1148 *num = unum - ((1LL << (7 * res - 1)) - 1);
1218 return id && (
bits + 7) / 8 == (8 -
bits % 8);
1298 "at pos. %"PRIu64
" (0x%"PRIx64
")\n",
pos,
pos);
1305 pos_alt =
pos + res;
1330 "%"PRId64
"\n",
id,
pos);
1336 if (
syntax->list_elem_size) {
1340 if ((
unsigned)list->
nb_elem + 1 >= UINT_MAX /
syntax->list_elem_size)
1345 "Number of tracks exceeds max_streams (%d)\n",
1354 list->
elem = newelem;
1371 uint64_t elem_end = pos_alt + length,
1374 if (elem_end < level_end) {
1376 }
else if (elem_end == level_end) {
1380 "Element at 0x%"PRIx64
" ending at 0x%"PRIx64
" exceeds "
1381 "containing master element ending at 0x%"PRIx64
"\n",
1382 pos, elem_end, level_end);
1389 "at 0x%"PRIx64
" inside parent with finite size\n",
pos);
1399 "Found unknown-length element 0x%"PRIX32
" other than "
1400 "a cluster at 0x%"PRIx64
". Spec-incompliant, but "
1401 "parsing will nevertheless be attempted.\n",
id,
pos);
1408 if (max_lengths[
syntax->type] && length > max_lengths[
syntax->type]) {
1411 "Invalid length 0x%"PRIx64
" > 0x%"PRIx64
" for element "
1412 "with ID 0x%"PRIX32
" at 0x%"PRIx64
"\n",
1413 length, max_lengths[
syntax->type],
id,
pos);
1416 "Element with ID 0x%"PRIX32
" at pos. 0x%"PRIx64
" has "
1417 "unknown length, yet the length of an element of its "
1418 "type must be known.\n",
id,
pos);
1421 "Found unknown-length element with ID 0x%"PRIX32
" at "
1422 "pos. 0x%"PRIx64
" for which no syntax for parsing is "
1423 "available.\n",
id,
pos);
1460 "Unknown element %"PRIX32
" at pos. 0x%"PRIx64
" with "
1461 "length 0x%"PRIx64
" considered as invalid data. Last "
1462 "known good position 0x%"PRIx64
", %d unknown elements"
1508 if (!level1_elem->
pos) {
1511 }
else if (level1_elem->
pos !=
pos)
1529 if ((res2 =
avio_skip(pb, length - 1)) >= 0) {
1568 if (elem->
count != UINT_MAX)
1591 void *data_off = (
char *)
data +
syntax[
i].data_offset;
1602 if (
syntax[
i].list_elem_size) {
1604 char *ptr = list->
elem;
1605 for (j = 0; j < list->
nb_elem;
1606 j++, ptr +=
syntax[
i].list_elem_size)
1626 int len_mask = 0x80,
size = 1, n = 1,
i;
1634 while (
size <= 8 && !(total & len_mask)) {
1640 total &= (len_mask - 1);
1642 total = (total << 8) |
p->buf[4 + n++];
1644 if (total + 1 == 1ULL << (7 *
size)){
1646 total =
p->buf_size - 4 -
size;
1649 if (
p->buf_size < 4 +
size + total)
1659 if (total < probelen)
1661 for (n = 4 +
size; n <= 4 +
size + total - probelen; n++)
1677 if (tracks[
i].num == num)
1688 uint8_t *
data = *buf;
1689 int isize = *buf_size;
1690 uint8_t *pkt_data =
NULL;
1692 int pkt_size = isize;
1696 if (pkt_size >= 10000000U)
1699 switch (encodings[0].compression.algo) {
1705 if (header_size && !
header) {
1713 pkt_size = isize + header_size;
1718 memcpy(pkt_data,
header, header_size);
1719 memcpy(pkt_data + header_size,
data, isize);
1725 olen = pkt_size *= 3;
1732 pkt_data = newpktdata;
1744 z_stream zstream = { 0 };
1745 if (!pkt_size || inflateInit(&zstream) != Z_OK)
1747 zstream.next_in =
data;
1748 zstream.avail_in = isize;
1753 inflateEnd(&zstream);
1757 pkt_data = newpktdata;
1758 zstream.avail_out = pkt_size - zstream.total_out;
1759 zstream.next_out = pkt_data + zstream.total_out;
1760 result =
inflate(&zstream, Z_NO_FLUSH);
1761 }
while (result == Z_OK && pkt_size < 10000000);
1762 pkt_size = zstream.total_out;
1763 inflateEnd(&zstream);
1764 if (result != Z_STREAM_END) {
1765 if (result == Z_MEM_ERROR)
1777 bz_stream bzstream = { 0 };
1778 if (!pkt_size || BZ2_bzDecompressInit(&bzstream, 0, 0) != BZ_OK)
1780 bzstream.next_in =
data;
1781 bzstream.avail_in = isize;
1786 BZ2_bzDecompressEnd(&bzstream);
1790 pkt_data = newpktdata;
1791 bzstream.avail_out = pkt_size - bzstream.total_out_lo32;
1792 bzstream.next_out = pkt_data + bzstream.total_out_lo32;
1793 result = BZ2_bzDecompress(&bzstream);
1794 }
while (result == BZ_OK && pkt_size < 10000000);
1795 pkt_size = bzstream.total_out_lo32;
1796 BZ2_bzDecompressEnd(&bzstream);
1797 if (result != BZ_STREAM_END) {
1798 if (result == BZ_MEM_ERROR)
1814 *buf_size = pkt_size;
1830 const char *lang = tags[
i].
lang &&
1831 strcmp(tags[
i].lang,
"und") ? tags[
i].
lang :
NULL;
1833 if (!tags[
i].
name) {
1841 if (tags[
i].def || !lang) {
1843 if (tags[
i].sub.nb_elem)
1850 if (tags[
i].sub.nb_elem)
1864 if (tags[
i].target.attachuid) {
1868 if (attachment[j].
uid == tags[
i].target.attachuid &&
1869 attachment[j].stream) {
1871 &attachment[j].stream->metadata,
NULL);
1877 "The tags at index %d refer to a "
1878 "non-existent attachment %"PRId64
".\n",
1879 i, tags[
i].target.attachuid);
1881 }
else if (tags[
i].target.chapteruid) {
1885 if (chapter[j].
uid == tags[
i].target.chapteruid &&
1886 chapter[j].chapter) {
1888 &chapter[j].chapter->metadata,
NULL);
1894 "The tags at index %d refer to a non-existent chapter "
1896 i, tags[
i].target.chapteruid);
1898 }
else if (tags[
i].target.trackuid) {
1902 if (track[j].
uid == tags[
i].target.trackuid &&
1905 &track[j].stream->metadata,
NULL);
1911 "The tags at index %d refer to a non-existent track "
1913 i, tags[
i].target.trackuid);
1917 tags[
i].target.type);
1936 "Max EBML element depth (%d) reached, "
1969 for (
i = 0;
i < seekhead_list->
nb_elem;
i++) {
1971 uint32_t
id = seekheads[
i].
id;
1979 if (!elem || elem->
parsed)
2002 uint64_t index_scale = 1;
2008 index_list = &matroska->
index;
2019 for (j = 0; j < pos_list->
nb_elem; j++) {
2022 if (track && track->
stream)
2051 unsigned nb_encodings,
2053 char **key_id_base64,
void *logctx)
2055 if (nb_encodings > 1) {
2057 "Multiple combined encodings not supported\n");
2062 if (encodings->
type) {
2068 if (!*key_id_base64)
2075 encodings->
scope = 0;
2087 encodings->
scope = 0;
2098 "Failed to decode codec private data\n");
2116 encodings->
scope & 1 &&
2126 static const char *
const aac_profiles[] = {
"MAIN",
"LC",
"SSR" };
2172 int block_last, block_type, block_size;
2178 if (block_size >
size)
2187 chmask =
av_dict_get(dict,
"WAVEFORMATEXTENSIBLE_CHANNEL_MASK",
NULL, 0);
2192 "Invalid value of WAVEFORMATEXTENSIBLE_CHANNEL_MASK\n");
2208 int minor, micro, bttb = 0;
2212 if (matroska->
muxingapp && sscanf(matroska->
muxingapp,
"Lavf57.%d.%d", &minor, µ) == 2)
2213 bttb = (minor >= 36 && minor <= 51 && micro >= 100);
2215 switch (field_order) {
2234 int *h_width,
int *h_height)
2236 switch (stereo_mode) {
2260 static const struct {
2263 } stereo_mode_conv [] = {
2264#define STEREO_MODE_CONV(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \
2265 [(STEREOMODETYPE)] = { .type = (STEREO3DTYPE), .flags = (FLAGS) },
2266#define NOTHING(STEREOMODETYPE, WDIV, HDIV, WEBM)
2276 stereo->
type = stereo_mode_conv[stereo_mode].type;
2277 stereo->
flags = stereo_mode_conv[stereo_mode].flags;
2291 int has_mastering_primaries, has_mastering_luminance;
2296 mastering_meta = &
color->mastering_meta;
2298 has_mastering_primaries =
2299 mastering_meta->
r_x > 0 && mastering_meta->
r_y > 0 &&
2300 mastering_meta->
g_x > 0 && mastering_meta->
g_y > 0 &&
2301 mastering_meta->
b_x > 0 && mastering_meta->
b_y > 0 &&
2325 (
color->chroma_siting_vert - 1) << 7);
2341 if (has_mastering_primaries || has_mastering_luminance) {
2351 if (has_mastering_primaries) {
2362 if (has_mastering_luminance) {
2376 double pitch = proj->
pitch, yaw = proj->
yaw, roll = proj->
roll;
2380 if (pitch == 0.0 && yaw == 0.0 && roll == 0.0)
2385 if (pitch != 0.0 || (yaw != 0.0 && yaw != 180.0 && yaw != -180.0) ||
2388 "projection in stream %u (yaw %f, pitch %f, roll %f)\n",
2389 st->
index, yaw, pitch, roll);
2418 const uint8_t *priv_data = mkv_projection->
private.
data;
2420 size_t spherical_size;
2421 uint32_t l = 0, t = 0,
r = 0,
b = 0;
2422 uint32_t padding = 0;
2424 if (mkv_projection->
private.
size && priv_data[0] != 0) {
2439 if (
b >= UINT_MAX - t ||
r >= UINT_MAX - l) {
2441 "Invalid bounding rectangle coordinates "
2442 "%"PRIu32
",%"PRIu32
",%"PRIu32
",%"PRIu32
"\n",
2451 if (l || t ||
r ||
b)
2464 "Unknown spherical cubemap layout %"PRIu32
"\n",
layout);
2468 padding =
AV_RB32(priv_data + 8);
2476 "Unknown spherical metadata type %"PRIu64
"\n",
2517 if (bin->
size < 23) {
2539 for (
int i = 0;
i < mappings_list->
nb_elem;
i++) {
2543 switch (mapping->
type) {
2546 "Explicit block Addition Mapping type \"Use BlockAddIDValue\", value %"PRIu64
","
2547 " name \"%s\" found.\n", mapping->
value, mapping->
name ? mapping->
name :
"");
2555 "Invalid Block Addition Value 0x%"PRIx64
" for Block Addition Mapping Type "
2556 "0x%"PRIx64
", name \"%s\"\n", mapping->
value, mapping->
type,
2557 mapping->
name ? mapping->
name :
"");
2575 "Unknown Block Addition Mapping type 0x%"PRIx64
", value %"PRIu64
", name \"%s\"\n",
2577 if (mapping->
value < 2) {
2580 "Invalid Block Addition value 0x%"PRIu64
" for unknown Block Addition Mapping "
2581 "type %"PRIx64
", name \"%s\"\n", mapping->
value, mapping->
type,
2582 mapping->
name ? mapping->
name :
"");
2628#define AAC_MAX_EXTRADATA_SIZE 5
2629#define TTA_EXTRADATA_SIZE 22
2630#define WAVPACK_EXTRADATA_SIZE 2
2639 int extradata_size = 0;
2642 if (!strcmp(track->
codec_id,
"A_MS/ACM") &&
2653 }
else if (!strcmp(track->
codec_id,
"A_QUICKTIME") &&
2658 uint16_t sample_size;
2665 if (sample_size == 8) {
2668 }
else if (sample_size == 16) {
2674 fourcc ==
MKTAG(
's',
'o',
'w',
't')) && sample_size == 8)
2717 extradata[0] = (
profile << 3) | ((sri & 0x0E) >> 1);
2718 extradata[1] = ((sri & 0x01) << 7) | (track->
audio.
channels << 3);
2719 if (strstr(track->
codec_id,
"SBR")) {
2721 extradata[2] = 0x56;
2722 extradata[3] = 0xE5;
2723 extradata[4] = 0x80 | (sri << 3);
2750 "Too large audio channel number %"PRIu64
2751 " or bitdepth %"PRIu64
". Skipping track.\n",
2762 bytestream_put_be32(&ptr,
AV_RB32(
"TTA1"));
2763 bytestream_put_le16(&ptr, 1);
2790 flavor = bytestream_get_be16(&ptr);
2809 static const int sipr_bit_rate[4] = { 6504, 8496, 5000, 16000 };
2813 par->
bit_rate = sipr_bit_rate[flavor];
2818 *extradata_offset = 78;
2848 "in absence of valid CodecPrivate.\n");
2855 if (extradata_size > 0) {
2859 memcpy(par->
extradata, extradata, extradata_size);
2875 s, extradata_offset);
2899 (
AVRational){1, par->codec_id == AV_CODEC_ID_OPUS ?
2900 48000 : par->sample_rate});
2915 int *extradata_offset)
2917 if (!strcmp(track->
codec_id,
"V_MS/VFW/FOURCC") &&
2932 *extradata_offset = 40;
2934 }
else if (!strcmp(track->
codec_id,
"V_QUICKTIME") &&
2969 *extradata_offset = 26;
2989 int *extradata_offset)
2993 int display_width_mul = 1;
2994 int display_height_mul = 1;
3016 &display_width_mul, &display_height_mul);
3035 sizeof(uint32_t) * 4, 0);
3039 cropping = sd->
data;
3052#if FF_API_R_FRAME_RATE
3074 snprintf(buf,
sizeof(buf),
"%s_%d",
3077 if (
planes[j].
uid == tracks[k].
uid && tracks[k].stream) {
3079 "stereo_mode", buf, 0);
3113 switch (data_component_id) {
3117 if (component_tag >= 0x30 && component_tag <= 0x37) {
3124 if (component_tag == 0x87) {
3134 "Unknown ARIB caption profile utilized: %02x / %04x\n",
3135 component_tag, data_component_id);
3141 if (!strcmp(track->
codec_id,
"D_WEBVTT/CAPTIONS")) {
3143 }
else if (!strcmp(track->
codec_id,
"D_WEBVTT/DESCRIPTIONS")) {
3145 }
else if (!strcmp(track->
codec_id,
"D_WEBVTT/METADATA")) {
3165 int extradata_offset = 0;
3167 char* key_id_base64 =
NULL;
3175 "Unknown or unsupported track type %"PRIu64
"\n",
3194 "Invalid sample rate %f, defaulting to 8000 instead.\n",
3202 if (default_duration > UINT64_MAX || default_duration < 0) {
3204 "Invalid frame rate %e. Cannot calculate default duration.\n",
3218 "Invalid coded dimensions %"PRId64
"x%"PRId64
" [%"PRId64
", %"PRId64
", %"PRId64
", %"PRId64
"].\n",
3240 track, &key_id_base64, matroska->
ctx);
3274 if (key_id_base64) {
3280 if (strcmp(track->
language,
"und"))
3286 "Track TimestampScale too small %f, assuming 1.0.\n",
3295 1000 * 1000 * 1000);
3308 s, &extradata_offset);
3332 "Unknown/unsupported AVCodecID %s.\n", track->
codec_id);
3362 if (
s->nb_streams <= 1)
3365 for (
int i = 0;
i <
s->nb_streams;
i++) {
3396 if (!el_st || !bl_st)
3403 stg->
id = el_st->id;
3428 uint64_t max_start = 0;
3443 ebml.
max_size >
sizeof(uint64_t) ||
3447 "EBML version %"PRIu64
", doctype %s, doc version %"PRIu64,
3453 "EBML header using unsupported features\n"
3454 "(EBML version %"PRIu64
", doctype %s, doc version %"PRIu64
")\n",
3508 attachments = attachments_list->
elem;
3509 for (j = 0; j < attachments_list->
nb_elem; j++) {
3510 if (!(attachments[j].filename && attachments[j].mime &&
3511 attachments[j].bin.
data && attachments[j].bin.size > 0)) {
3519 if (attachments[j].description)
3530 attachments[j].
stream = st;
3541 attachments[j].bin.size);
3553 chapters = chapters_list->
elem;
3556 (max_start == 0 || chapters[
i].start > max_start)) {
3562 max_start = chapters[
i].
start;
3588 track = &tracks[
pkt->stream_index];
3614 uint32_t lace_size[256],
int *laces)
3617 uint8_t *
data = *buf;
3621 lace_size[0] =
size;
3637 for (n = 0; n < *laces - 1; n++) {
3645 lace_size[n] +=
temp;
3648 }
while (
temp == 0xff);
3653 lace_size[n] =
size - total;
3658 if (
size % (*laces))
3660 for (n = 0; n < *laces; n++)
3661 lace_size[n] =
size / *laces;
3678 total = lace_size[0] = num;
3680 for (n = 1; n < *laces - 1; n++) {
3686 if (lace_size[n - 1] + snum > (uint64_t)INT_MAX)
3689 lace_size[n] = lace_size[n - 1] + snum;
3690 total += lace_size[n];
3698 lace_size[*laces - 1] =
size - total;
3710 uint8_t *
data,
int size, uint64_t timecode,
3725 if (
size < cfs *
h / 2) {
3727 "Corrupt int4 RM-style audio packet size\n");
3730 for (x = 0; x <
h / 2; x++)
3731 memcpy(track->
audio.
buf + x * 2 *
w + y * cfs,
3732 data + x * cfs, cfs);
3736 "Corrupt sipr RM-style audio packet size\n");
3743 "Corrupt generic RM-style audio packet size\n");
3746 for (x = 0; x <
w /
sps; x++)
3748 sps * (
h * x + ((
h + 1) / 2) * (y & 1) + (y >> 1)),
3807 while (srclen >= 8) {
3817 multiblock = (
flags & 0x1800) != 0x1800;
3829 if (blocksize > srclen) {
3840 dstlen += blocksize + 32;
3854 srclen -= blocksize;
3855 offset += blocksize + 32;
3874 int dstlen = *
size + 8;
3882 memcpy(
dst + 8, *
data, dstlen - 8);
3894 uint8_t *
data,
int data_len,
3900 uint8_t *
id, *settings, *text, *buf;
3901 int id_len, settings_len, text_len;
3909 q =
data + data_len;
3914 if (*
p ==
'\r' || *
p ==
'\n') {
3923 if (p >= q || *p !=
'\n')
3930 if (*p ==
'\r' || *p ==
'\n') {
3931 settings_len =
p - settings;
3939 if (p >= q || *p !=
'\n')
3945 while (text_len > 0) {
3946 const int len = text_len - 1;
3947 const uint8_t
c =
p[
len];
3948 if (
c !=
'\r' &&
c !=
'\n')
3958 memcpy(
pkt->data, text, text_len);
3968 memcpy(buf,
id, id_len);
3971 if (settings_len > 0) {
3979 memcpy(buf, settings, settings_len);
3986 pkt->pts = timecode;
4005 const uint8_t *
data,
int size, uint64_t
id)
4015 "BlockAddID %"PRIu64
" is higher than the reported MaxBlockAdditionID %"PRIu64
" "
4022 for (
int i = 0;
i < mappings_list->
nb_elem;
i++) {
4023 if (
id != mappings[
i].
value)
4025 mapping = &mappings[
i];
4029 if (
id != 1 && !matroska->
is_webm && !mapping) {
4034 if (mapping && mapping->
type)
4040 int country_code, provider_code;
4041 int provider_oriented_code, application_identifier;
4042 size_t hdrplus_size;
4051 country_code = bytestream2_get_byteu(&bc);
4052 switch (country_code) {
4054 provider_code = bytestream2_get_be16u(&bc);
4056 switch (provider_code) {
4058 provider_oriented_code = bytestream2_get_be16u(&bc);
4059 application_identifier = bytestream2_get_byteu(&bc);
4061 if (provider_oriented_code != 1 || application_identifier != 4)
4071 (uint8_t *)hdrplus, hdrplus_size)) < 0) {
4080 size_t hdr_smpte_2094_app5_size;
4082 provider_oriented_code = bytestream2_get_be16u(&bc);
4083 if (provider_oriented_code != 1)
4087 if (!hdr_smpte_2094_app5)
4095 (uint8_t *)hdr_smpte_2094_app5,
4096 hdr_smpte_2094_app5_size)) < 0) {
4112 provider_code = bytestream2_get_be16u(&bc);
4114 switch (provider_code) {
4155 uint64_t timecode, uint64_t lace_duration,
4160 uint8_t *pkt_data =
data;
4168 "Error parsing a wavpack block.\n");
4181 "Error parsing a prores block.\n");
4189 if (!pkt_size && !nb_blockmore)
4195 "Unexpected BlockAdditions found in a Block from Track with TrackNumber %"PRIu64
" "
4196 "where MaxBlockAdditionID is 0\n", track->
num);
4214 pkt->data = pkt_data;
4215 pkt->size = pkt_size;
4219 for (
int i = 0;
i < nb_blockmore;
i++) {
4233 if (discard_padding) {
4244 if (discard_padding > 0) {
4245 AV_WL32A(side_data + 4, discard_padding);
4247 AV_WL32A(side_data, -discard_padding);
4252 pkt->dts = timecode;
4254 pkt->pts = timecode;
4256 pkt->duration = lace_duration;
4285 uint32_t lace_size[256];
4286 int n,
flags, laces = 0;
4288 int trust_default_duration;
4300 if (!track ||
size < 3)
4303 if (!(st = track->
stream)) {
4305 "No stream associated to TrackNumber %"PRIu64
". "
4306 "Ignoring Block with this TrackNumber.\n", num);
4312 if (block_duration > INT64_MAX)
4313 block_duration = INT64_MAX;
4322 if (cluster_time != (uint64_t) -1 &&
4323 (block_time >= 0 || cluster_time >= -block_time)) {
4324 uint64_t timecode_cluster_in_track_tb = (
double) cluster_time / track->
time_scale;
4327 timecode < track->end_timecode)
4345 else if (!
ffstream(st)->skip_to_keyframe) {
4352 &pb.
pub, lace_size, &laces);
4363 trust_default_duration = 0;
4367 if (!block_duration && trust_default_duration)
4372 if (cluster_time != (uint64_t)-1 && (block_time >= 0 || cluster_time >= -block_time))
4376 for (n = 0; n < laces; n++) {
4377 int64_t lace_duration = block_duration*(n+1) / laces - block_duration*n / laces;
4378 uint8_t *out_data =
data;
4403 timecode, lace_duration,
4413 blockmore, nb_blockmore,
4420 timecode = lace_duration ? timecode + lace_duration :
AV_NOPTS_VALUE;
4452 if (res >= 0 &&
block->bin.size > 0) {
4459 block->blockmore.nb_elem, cluster->
pos,
4460 block->discard_padding);
4470 "end of segment.\n");
4506 AVStream *st =
s->streams[stream_index];
4585#if CONFIG_WEBM_DASH_MANIFEST_DEMUXER
4607 return (CueDesc) {-1, -1, -1, -1};
4608 for (
i = 1;
i < nb_index_entries;
i++) {
4609 if (index_entries[
i - 1].timestamp * matroska->
time_scale <= ts &&
4610 index_entries[
i].timestamp * matroska->
time_scale > ts) {
4615 if (index_entries[
i].timestamp > matroska->
duration)
4616 return (CueDesc) {-1, -1, -1, -1};
4619 if (
i != nb_index_entries - 1) {
4630 if (cue_desc.end_time_ns < cue_desc.start_time_ns ||
4631 cue_desc.end_time_ns - (uint64_t)cue_desc.start_time_ns > INT64_MAX)
4632 return (CueDesc) {-1, -1, -1, -1};
4643 int64_t cluster_pos, before_pos;
4656 uint64_t cluster_id, cluster_length;
4662 if (
read < 0 || cluster_id != 0xF43B675)
4676 cluster_pos += 4 +
read + cluster_length;
4689static int buffer_size_after_time_downloaded(
int64_t time_ns,
double search_sec,
int64_t bps,
4690 double min_buffer,
double*
buffer,
4694 double nano_seconds_per_second = 1000000000.0;
4695 double time_sec = time_ns / nano_seconds_per_second;
4697 int64_t time_to_search_ns = (
int64_t)(search_sec * nano_seconds_per_second);
4698 int64_t end_time_ns = time_ns + time_to_search_ns;
4699 double sec_downloaded = 0.0;
4700 CueDesc desc_curr = get_cue_desc(
s, time_ns, cues_start);
4701 if (desc_curr.start_time_ns == -1)
4703 *sec_to_download = 0.0;
4706 if (time_ns > desc_curr.start_time_ns) {
4707 int64_t cue_nano = desc_curr.end_time_ns - time_ns;
4708 double percent = (
double)(cue_nano) / (desc_curr.end_time_ns - desc_curr.start_time_ns);
4709 double cueBytes = (desc_curr.end_offset - desc_curr.start_offset) * percent;
4710 double timeToDownload = (cueBytes * 8.0) /
bps;
4712 sec_downloaded += (cue_nano / nano_seconds_per_second) - timeToDownload;
4713 *sec_to_download += timeToDownload;
4716 if (desc_curr.end_time_ns >= end_time_ns) {
4717 double desc_end_time_sec = desc_curr.end_time_ns / nano_seconds_per_second;
4718 double percent_to_sub = search_sec / (desc_end_time_sec - time_sec);
4719 sec_downloaded = percent_to_sub * sec_downloaded;
4720 *sec_to_download = percent_to_sub * *sec_to_download;
4723 if ((sec_downloaded + *
buffer) <= min_buffer) {
4728 desc_curr = get_cue_desc(
s, desc_curr.end_time_ns, cues_start);
4731 while (desc_curr.start_time_ns != -1) {
4732 int64_t desc_bytes = desc_curr.end_offset - desc_curr.start_offset;
4733 int64_t desc_ns = desc_curr.end_time_ns - desc_curr.start_time_ns;
4734 double desc_sec = desc_ns / nano_seconds_per_second;
4735 double bits = (desc_bytes * 8.0);
4736 double time_to_download =
bits /
bps;
4738 sec_downloaded += desc_sec - time_to_download;
4739 *sec_to_download += time_to_download;
4741 if (desc_curr.end_time_ns >= end_time_ns) {
4742 double desc_end_time_sec = desc_curr.end_time_ns / nano_seconds_per_second;
4743 double percent_to_sub = search_sec / (desc_end_time_sec - time_sec);
4744 sec_downloaded = percent_to_sub * sec_downloaded;
4745 *sec_to_download = percent_to_sub * *sec_to_download;
4747 if ((sec_downloaded + *
buffer) <= min_buffer)
4752 if ((sec_downloaded + *
buffer) <= min_buffer) {
4757 desc_curr = get_cue_desc(
s, desc_curr.end_time_ns, cues_start);
4775 double bandwidth = 0.0;
4778 int64_t prebuffer_ns = 1000000000;
4780 double nano_seconds_per_second = 1000000000.0;
4782 double prebuffer_bytes = 0.0;
4783 int64_t temp_prebuffer_ns = prebuffer_ns;
4785 double pre_sec, prebuffer, bits_per_second;
4786 CueDesc desc_beg = get_cue_desc(
s, time_ns, cues_start);
4788 CueDesc desc_end = desc_beg;
4790 if (time_ns > INT64_MAX - prebuffer_ns)
4792 prebuffered_ns = time_ns + prebuffer_ns;
4796 while (desc_end.start_time_ns != -1 && desc_end.end_time_ns < prebuffered_ns) {
4798 prebuffer_bytes += desc_end.end_offset - desc_end.start_offset;
4799 temp_prebuffer_ns -= desc_end.end_time_ns - desc_end.start_time_ns;
4800 desc_end = get_cue_desc(
s, desc_end.end_time_ns, cues_start);
4802 if (desc_end.start_time_ns == -1) {
4806 bits_per_second = 0.0;
4810 pre_bytes = desc_end.end_offset - desc_end.start_offset;
4811 if (desc_end.end_time_ns <= desc_end.start_time_ns ||
4812 desc_end.end_time_ns - (uint64_t)desc_end.start_time_ns > INT64_MAX)
4814 pre_ns = desc_end.end_time_ns - desc_end.start_time_ns;
4815 pre_sec = pre_ns / nano_seconds_per_second;
4817 pre_bytes * ((temp_prebuffer_ns / nano_seconds_per_second) / pre_sec);
4819 prebuffer = prebuffer_ns / nano_seconds_per_second;
4822 bits_per_second = 0.0;
4824 int64_t desc_bytes = desc_end.end_offset - desc_beg.start_offset;
4825 double desc_sec, calc_bits_per_second, percent, mod_bits_per_second;
4826 if (desc_bytes <= 0 || desc_bytes > INT64_MAX/8)
4828 if (desc_end.end_time_ns <= desc_beg.start_time_ns ||
4829 desc_end.end_time_ns - (uint64_t)desc_beg.start_time_ns > INT64_MAX)
4832 int64_t desc_ns = desc_end.end_time_ns - desc_beg.start_time_ns;
4833 desc_sec = desc_ns / nano_seconds_per_second;
4834 calc_bits_per_second = (desc_bytes * 8) / desc_sec;
4837 percent = (desc_bytes - prebuffer_bytes) / desc_bytes;
4838 mod_bits_per_second = calc_bits_per_second * percent;
4840 if (prebuffer < desc_sec) {
4847 const double min_buffer = 0.0;
4848 double buffer = prebuffer;
4849 double sec_to_download = 0.0;
4851 int rv = buffer_size_after_time_downloaded(prebuffered_ns, search_sec,
bps,
4852 min_buffer, &
buffer, &sec_to_download,
4856 }
else if (rv == 0) {
4862 desc_end = get_cue_desc(
s, desc_end.end_time_ns, cues_start);
4863 }
while (desc_end.start_time_ns != -1);
4865 if (bandwidth < bits_per_second) bandwidth = bits_per_second;
4879 int64_t cues_start = -1, cues_end = -1, before_pos, bandwidth;
4888 if (
i >= seekhead_list->
nb_elem)
return -1;
4892 if (
avio_seek(matroska->
ctx->
pb, cues_start, SEEK_SET) == cues_start) {
4896 uint64_t cues_length, cues_id;
4904 cues_end = cues_start + 4 + bytes_read + cues_length - 1;
4907 if (cues_start == -1 || cues_end == -1)
return -1;
4923 if (cues_start <= init_range)
4927 bandwidth = webm_dash_manifest_compute_bandwidth(
s, cues_start);
4928 if (bandwidth < 0)
return -1;
4944 bprint.str[--bprint.len] =
'\0';
4983 buf = strrchr(
s->url,
'/');
4992 ret = webm_dash_manifest_cues(
s, init_range);
5012#define OFFSET(x) offsetof(MatroskaDemuxContext, x)
5020 .class_name =
"WebM DASH Manifest demuxer",
5027 .p.name =
"webm_dash_manifest",
5039 .p.name =
"matroska,webm",
5041 .p.extensions =
"mkv,mk3d,mka,mks,webm",
5042 .p.mime_type =
"audio/webm,audio/x-matroska,video/webm,video/x-matroska",
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *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.
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)
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)
void ffio_init_read_context(FFIOContext *s, const uint8_t *buffer, int buffer_size)
Wrap a buffer in an AVIOContext for reading.
int ffio_limit(AVIOContext *s, int size)
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
char * av_asprintf(const char *fmt,...)
static void BS_FUNC skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
static uint32_t BS_FUNC read(BSCTX *bc, unsigned int n)
Return n bits from the buffer, n has to be in the 0-32 range.
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
#define AV_BPRINT_SIZE_UNLIMITED
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
static av_always_inline unsigned int bytestream2_get_bufferu(GetByteContext *g, uint8_t *dst, unsigned int size)
static av_always_inline int bytestream2_get_bytes_left(const GetByteContext *g)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
static int FUNC sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
static int read_probe(const AVProbeData *p)
static const ParseSyntax syntax[]
Misc types and constants that do not belong anywhere else.
#define AV_PROFILE_ARIB_PROFILE_A
#define AV_PROFILE_UNKNOWN
#define AV_PROFILE_ARIB_PROFILE_C
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
#define AV_EF_EXPLODE
abort decoding on minor error detection
@ AV_FIELD_TT
Top coded_first, top displayed first.
@ AV_FIELD_BB
Bottom coded first, bottom displayed first.
@ AV_FIELD_BT
Bottom coded first, top displayed first.
@ AV_FIELD_TB
Top coded first, bottom displayed first.
AVChapter * avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_base, int64_t start, int64_t end, const char *title)
Add a new chapter.
#define FF_INFMT_FLAG_INIT_CLEANUP
For an FFInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
void avpriv_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
Update cur_dts of all streams based on the given timestamp and AVStream.
int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb, AVBufferRef **buf, int size)
Add an attached pic to an AVStream.
void ff_reduce_index(AVFormatContext *s, int stream_index)
Ensure the index uses less memory than the maximum specified in AVFormatContext.max_index_size by dis...
int ff_isom_parse_dvcc_dvvc(void *logctx, AVStream *st, const uint8_t *buf_ptr, uint64_t size)
static const uint8_t bits[8]
static int read_header(FFV1Context *f, RangeCoder *c)
FLAC (Free Lossless Audio Codec) common stuff.
@ FLAC_METADATA_TYPE_VORBIS_COMMENT
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.
#define FLAC_STREAMINFO_SIZE
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
AVCodecID
Identify the syntax and semantics of the bitstream.
@ AV_CODEC_ID_ARIB_CAPTION
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
#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
AVPacketSideData * av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, size_t size, int flags)
Allocate a new packet side data.
AVPacketSideData * av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, void *data, size_t size, int flags)
Wrap existing data as packet side data.
const AVPacketSideData * av_packet_side_data_get(const AVPacketSideData *sd, int nb_sd, enum AVPacketSideDataType type)
Get side information from a side data array.
@ AV_PKT_DATA_HEVC_CONF
Dolby Vision enhancement-layer HEVC decoder configuration.
@ AV_PKT_DATA_SKIP_SAMPLES
Recommends skipping the specified number of samples.
@ AV_PKT_DATA_DYNAMIC_HDR10_PLUS
HDR10+ dynamic metadata associated with a video frame.
@ 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_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
@ AV_PKT_DATA_DYNAMIC_HDR_SMPTE_2094_APP5
HDR dynamic metadata associated with a video frame.
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
@ AV_PKT_DATA_WEBVTT_IDENTIFIER
The optional first identifier line of a WebVTT cue.
@ AV_PKT_DATA_FRAME_CROPPING
The number of pixels to discard from the top/bottom/left/right border of the decoded frame to obtain ...
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
@ AV_PKT_DATA_LCEVC
Raw LCEVC payload data, as a uint8_t array, with NAL emulation bytes intact.
@ AV_PKT_DATA_DOVI_CONF
DOVI configuration ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2....
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as a packet side data.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
AVStreamGroup * avformat_stream_group_create(AVFormatContext *s, enum AVStreamGroupParamsType type, AVDictionary **options)
Add a new empty stream group to a media file.
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
int avformat_stream_group_add_stream(AVStreamGroup *stg, AVStream *st)
Add an already allocated stream to a stream group.
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.
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
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.
int av_buffer_realloc(AVBufferRef **pbuf, size_t size)
Reallocate a given buffer.
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#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.
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_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
void av_display_rotation_set(int32_t matrix[9], double angle)
Initialize a transformation matrix describing a pure clockwise rotation by the specified angle (in de...
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip)
Flip the input matrix horizontally and/or vertically.
AVSphericalMapping * av_spherical_alloc(size_t *size)
Allocate a AVSphericalVideo structure and initialize its fields to default values.
AVSphericalProjection
Projection of the video surface(s) on a sphere.
@ 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.
AVStereo3D * av_stereo3d_alloc_size(size_t *size)
Allocate an AVStereo3D structure and set its fields to default values.
#define NOTHING(PROFILE, W, H, NUM_SLICES, TAB_W, TAB_H)
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[]
#define ITU_T_T35_PROVIDER_CODE_SMPTE
#define ITU_T_T35_PROVIDER_CODE_VNOVA
#define ITU_T_T35_COUNTRY_CODE_US
#define ITU_T_T35_COUNTRY_CODE_UK
#define ITU_T_T35_PROVIDER_CODE_SAMSUNG
static const struct TransferCharacteristics transfer_characteristics[]
Macro definitions for various function/variable attributes.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
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 @257111027162314367033347246032313251342043035002 planes[]
static const uint16_t mask[17]
#define MKTAG(a, b, c, d)
#define MKBETAG(a, b, c, d)
static av_const int sign_extend(int val, unsigned bits)
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[]
@ MATROSKA_BLOCK_ADD_ID_TYPE_DEFAULT
@ MATROSKA_BLOCK_ADD_ID_TYPE_OPAQUE
@ MATROSKA_BLOCK_ADD_ID_TYPE_DVCC
@ MATROSKA_BLOCK_ADD_ID_TYPE_HVCE
@ MATROSKA_BLOCK_ADD_ID_TYPE_DVVC
@ MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35
#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
MatroskaVideoStereoModeType
@ MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG
@ 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_BLKADDIDEXTRADATA
#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 STEREOMODE_STEREO3D_MAPPING(MAP, MKV_ONLY)
#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_TRACKBLKADDMAPPING
#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
#define MATROSKA_ID_BLKADDIDVALUE
@ 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_BLKADDIDNAME
#define MATROSKA_BLOCK_ADD_ID_OPAQUE
#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW
#define MATROSKA_ID_ENCODINGSIGNATURE
#define MATROSKA_ID_BLKADDIDTYPE
#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 EbmlSyntax matroska_index_entry[3]
static EbmlSyntax matroska_tagtargets[]
static EbmlSyntax matroska_track_combine_planes[2]
static EbmlSyntax matroska_block_addition_mapping[5]
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 matroska_segments[]
#define STEREO_MODE_CONV(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM)
#define AAC_MAX_EXTRADATA_SIZE
static EbmlSyntax matroska_simpletag[]
static MatroskaTrack * matroska_find_track_by_num(MatroskaDemuxContext *matroska, uint64_t num)
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 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, MatroskaBlockMore *blockmore, int nb_blockmore, int64_t cluster_pos, int64_t discard_padding)
static EbmlSyntax matroska_chapters[2]
static EbmlSyntax matroska_track_encoding_compression[]
static int mkv_parse_subtitle_codec(MatroskaTrack *track, AVStream *st, AVCodecParameters *par, const MatroskaDemuxContext *matroska)
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 int mkv_parse_video(MatroskaTrack *track, AVStream *st, AVCodecParameters *par, const MatroskaDemuxContext *matroska, int *extradata_offset)
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 int mka_parse_audio_codec(MatroskaTrack *track, AVCodecParameters *par, const MatroskaDemuxContext *matroska, AVFormatContext *s, int *extradata_offset)
static const CodecMime mkv_image_mime_tags[]
static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
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]
#define WAVPACK_EXTRADATA_SIZE
static EbmlSyntax matroska_info[]
static int matroska_parse_dovi_streams(AVFormatContext *s)
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 mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaTrack *track, EbmlBin *bin)
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 int ebml_read_float(AVIOContext *pb, int size, double default_value, double *num)
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 int matroska_parse_content_encodings(MatroskaTrackEncoding *encodings, unsigned nb_encodings, MatroskaTrack *track, char **key_id_base64, void *logctx)
static void matroska_parse_cues(MatroskaDemuxContext *matroska)
static EbmlSyntax matroska_tags[2]
static EbmlSyntax matroska_track[33]
static const char *const matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT]
static int matroska_parse_wavpack(MatroskaTrack *track, uint8_t **data, int *size)
static EbmlSyntax matroska_tag[3]
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, MatroskaBlockMore *blockmore, int nb_blockmore, int64_t discard_padding)
static int matroska_read_header(AVFormatContext *s)
static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVPacket *pkt, const uint8_t *data, int size, uint64_t id)
static EbmlSyntax ebml_syntax[3]
static EbmlSyntax matroska_track_video_projection[]
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 int mkv_create_display_matrix(AVStream *st, const MatroskaTrackVideoProjection *proj, void *logctx)
static EbmlSyntax matroska_track_encoding_encryption[]
static int mkv_parse_hvce(AVFormatContext *s, AVStream *st, EbmlBin *bin)
#define TTA_EXTRADATA_SIZE
static EbmlSyntax ebml_header[]
static int matroska_probe(const AVProbeData *p)
static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
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 mkv_parse_video_codec(MatroskaTrack *track, AVCodecParameters *par, const MatroskaDemuxContext *matroska, int *extradata_offset)
static int ebml_read_length(MatroskaDemuxContext *matroska, AVIOContext *pb, uint64_t *number)
Read a EBML length value.
static MatroskaLevel1Element * matroska_find_level1_elem(MatroskaDemuxContext *matroska, uint32_t id, int64_t pos)
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 int mkv_field_order(const MatroskaDemuxContext *matroska, uint64_t field_order)
static EbmlSyntax matroska_seekhead[2]
static EbmlSyntax matroska_track_encodings[2]
static EbmlSyntax matroska_tracks[2]
static EbmlSyntax matroska_blockadditions[2]
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 matroska_parse_flac(AVFormatContext *s, MatroskaTrack *track, int *offset)
static EbmlSyntax matroska_track_video_color[15]
static EbmlSyntax * ebml_parse_id(EbmlSyntax *syntax, uint32_t id)
static EbmlSyntax matroska_cluster_parsing[8]
static EbmlSyntax matroska_index_pos[]
#define EBML_UNKNOWN_LENGTH
static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, MatroskaTrack *track)
static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
static EbmlSyntax matroska_attachment[]
static int mka_parse_audio(MatroskaTrack *track, AVStream *st, AVCodecParameters *par, const MatroskaDemuxContext *matroska, AVFormatContext *s, int *extradata_offset)
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)
Memory handling functions.
const int ff_mpeg4audio_sample_rates[16]
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
int ff_vorbis_comment(AVFormatContext *ms, AVDictionary **m, const uint8_t *buf, int size, int parse_picture)
Parse Vorbis comments.
enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos)
Converts swscale x/y chroma position to AVChromaLocation.
@ AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_JPEG
Full range content.
@ AVCOL_SPC_RESERVED
reserved for future use by ITU-T and ISO/IEC just like 15-255 are
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.
enum AVChannelOrder order
Channel order used in this layout.
int nb_channels
Number of channels in this layout.
Describe the class of an AVClass context structure.
This struct describes the properties of an encoded stream.
enum AVColorSpace color_space
int extradata_size
Size of the extradata content in bytes.
int frame_size
Audio frame size, if known.
enum AVFieldOrder field_order
The order of the fields in interlaced video.
int height
The height of the video frame in pixels.
int nb_coded_side_data
Amount of entries in coded_side_data.
int bits_per_coded_sample
The number of bits per sample in the codedwords.
AVChannelLayout ch_layout
The channel layout and number of channels.
int width
The width of the video frame in pixels.
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
int seek_preroll
Number of audio samples to skip after a discontinuity.
enum AVMediaType codec_type
General type of the encoded data.
int profile
Codec-specific bitstream restrictions that the stream conforms to.
int block_align
The number of bytes per coded audio frame, required by some formats.
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
The number of audio samples per second.
enum AVColorTransferCharacteristic color_trc
int initial_padding
Number of padding audio samples at the start.
AVPacketSideData * coded_side_data
Additional data associated with the entire stream.
enum AVChromaLocation chroma_location
enum AVColorRange color_range
Additional colorspace characteristics.
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
This struct represents dynamic metadata for color volume transform - application 4 of SMPTE 2094-40:2...
This struct represents dynamic metadata for color volume transform as specified in the SMPTE 2094-50 ...
int max_streams
The maximum number of streams.
AVIOContext * pb
I/O context.
int flags
Flags modifying the (de)muxer behaviour.
int strict_std_compliance
Allow non-standard and experimental extension.
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 auxiliary information for decoding, presenting, or otherwise processing the cod...
This structure stores compressed data.
This structure contains the data a format has to probe a file.
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.
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
enum AVStereo3DType type
How views are packed within the video.
int flags
Additional information about the frame packing.
int height
Height of the final image for presentation.
unsigned int el_index
Index of the enhancement layer stream in AVStreamGroup.
int width
Width of the final stream for presentation.
union AVStreamGroup::@166361102046003066253145020066347265153020354020 params
Group type-specific parameters.
unsigned int nb_streams
Number of elements in AVStreamGroup.streams.
int64_t id
Group type-specific group ID.
struct AVStreamGroupLayeredVideo * layered_video
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
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.
AVRational r_frame_rate
Real base framerate of the stream.
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
union CountedElement::@351263321163071263317121305052270347243100257351 el
unsigned int alloc_elem_size
const struct EbmlSyntax * n
union EbmlSyntax::@115130361306161267241347045304327142075361315301 def
int64_t data_offset
offset of the first packet
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet.
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
enum AVStreamParseType need_parsing
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
EbmlList block_addition_mappings
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)
#define update_pos(td, mb_y, mb_x)
static const AVClass webm_dash_class