546 int max_size, uint64_t *number)
559 "Read error at pos. %"PRIu64
" (0x%"PRIx64
")\n",
567 if (read > max_size) {
570 "Invalid EBML number size tag 0x%02x at pos %"PRIu64
" (0x%"PRIx64
")\n",
571 (uint8_t) total, pos, pos);
578 total = (total << 8) |
avio_r8(pb);
594 if (res > 0 && *number + 1 == 1ULL << (7 * res))
595 *number = 0xffffffffffffffULL;
613 *num = (*num << 8) |
avio_r8(pb);
626 }
else if (size == 4) {
628 }
else if (size == 8){
648 if (
avio_read(pb, (uint8_t *) res, size) != size) {
707 uint8_t *
data, uint32_t
size, uint64_t *num)
718 uint8_t *
data, uint32_t
size, int64_t *num)
728 *num = unum - ((1LL << (7*res - 1)) - 1);
737 uint32_t
id,
void *
data)
740 for (i=0; syntax[i].
id; i++)
741 if (
id == syntax[i].
id)
770 for (i=0; syntax[i].
id; i++)
771 switch (syntax[i].type) {
773 *(uint64_t *)((
char *)data+syntax[i].
data_offset) = syntax[i].def.
u;
776 *(
double *)((
char *)data+syntax[i].data_offset) = syntax[i].
def.
f;
804 uint32_t
id = syntax->
id;
815 list->
elem = newelem;
825 if (max_lengths[syntax->
type] && length > max_lengths[syntax->
type]) {
827 "Invalid length 0x%"PRIx64
" > 0x%"PRIx64
" for syntax element %i\n",
828 length, max_lengths[syntax->
type], syntax->
type);
833 switch (syntax->
type) {
858 for (i=0; syntax[i].
id; i++) {
859 void *data_off = (
char *)data + syntax[i].data_offset;
860 switch (syntax[i].type) {
865 if (syntax[i].list_elem_size) {
867 char *ptr = list->
elem;
885 int len_mask = 0x80,
size = 1, n = 1, i;
893 while (
size <= 8 && !(total & len_mask)) {
899 total &= (len_mask - 1);
901 total = (total << 8) | p->
buf[4 + n++];
913 if (total < probelen)
915 for (n = 4+
size; n <= 4+
size+total-probelen; n++)
931 if (tracks[i].num == num)
942 uint8_t*
data = *buf;
943 int isize = *buf_size;
944 uint8_t* pkt_data =
NULL;
946 int pkt_size = isize;
950 if (pkt_size >= 10000000)
953 switch (encodings[0].compression.algo) {
958 olen = pkt_size *= 3;
968 z_stream zstream = {0};
969 if (inflateInit(&zstream) != Z_OK)
971 zstream.next_in =
data;
972 zstream.avail_in = isize;
977 inflateEnd(&zstream);
980 pkt_data = newpktdata;
981 zstream.avail_out = pkt_size - zstream.total_out;
982 zstream.next_out = pkt_data + zstream.total_out;
983 result = inflate(&zstream, Z_NO_FLUSH);
984 }
while (result==Z_OK && pkt_size<10000000);
985 pkt_size = zstream.total_out;
986 inflateEnd(&zstream);
987 if (result != Z_STREAM_END)
994 bz_stream bzstream = {0};
995 if (BZ2_bzDecompressInit(&bzstream, 0, 0) != BZ_OK)
997 bzstream.next_in =
data;
998 bzstream.avail_in = isize;
1003 BZ2_bzDecompressEnd(&bzstream);
1006 pkt_data = newpktdata;
1007 bzstream.avail_out = pkt_size - bzstream.total_out_lo32;
1008 bzstream.next_out = pkt_data + bzstream.total_out_lo32;
1009 result = BZ2_bzDecompress(&bzstream);
1010 }
while (result==BZ_OK && pkt_size<10000000);
1011 pkt_size = bzstream.total_out_lo32;
1012 BZ2_bzDecompressEnd(&bzstream);
1013 if (result != BZ_STREAM_END)
1023 *buf_size = pkt_size;
1031 AVPacket *pkt, uint64_t display_duration)
1033 char *
line, *layer, *ptr = pkt->
data, *end = ptr+pkt->
size;
1034 for (; *ptr!=
',' && ptr<end-1; ptr++);
1037 for (; *ptr!=
',' && ptr<end-1; ptr++);
1039 int64_t end_pts = pkt->
pts + display_duration;
1041 int ec = matroska->
time_scale * end_pts / 10000000;
1042 int sh, sm, ss, eh, em, es,
len;
1043 sh = sc/360000; sc -= 360000*sh;
1044 sm = sc/ 6000; sc -= 6000*sm;
1045 ss = sc/ 100; sc -= 100*ss;
1046 eh = ec/360000; ec -= 360000*eh;
1047 em = ec/ 6000; ec -= 6000*em;
1048 es = ec/ 100; ec -= 100*es;
1053 snprintf(line,len,
"Dialogue: %s,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s\r\n",
1054 layer, sh, sm, ss, sc, eh, em, es, ec, ptr);
1057 pkt->
size = strlen(line);
1066 out->
data = newdata;
1081 for (i=0; i < list->
nb_elem; i++) {
1082 const char *lang = tags[i].
lang && strcmp(tags[i].lang,
"und") ?
1085 if (!tags[i].
name) {
1089 if (prefix) snprintf(key,
sizeof(key),
"%s/%s", prefix, tags[i].name);
1090 else av_strlcpy(key, tags[i].name,
sizeof(key));
1091 if (tags[i].def || !lang) {
1093 if (tags[i].sub.nb_elem)
1100 if (tags[i].sub.nb_elem)
1114 if (tags[i].target.attachuid) {
1117 if (attachment[j].uid == tags[i].target.attachuid
1120 &attachment[j].stream->metadata,
NULL);
1121 }
else if (tags[i].target.chapteruid) {
1124 if (chapter[j].uid == tags[i].target.chapteruid
1127 &chapter[j].chapter->metadata,
NULL);
1128 }
else if (tags[i].target.trackuid) {
1131 if (track[j].uid == tags[i].target.trackuid && track[j].
stream)
1133 &track[j].stream->metadata,
NULL);
1145 uint32_t level_up = matroska->
level_up;
1152 if (idx >= seekhead_list->
nb_elem
1164 "Max EBML element depth (%d) reached, "
1169 level.
length = (uint64_t)-1;
1174 ret =
ebml_parse(matroska, matroska_segment, matroska);
1179 if (length == (uint64_t)-1)
1203 for (i = 0; i < seekhead_list->
nb_elem; i++) {
1205 if (seekhead[i].pos <= before_pos)
1224 int index_scale = 1;
1227 for (i = 0; i < seekhead_list->
nb_elem; i++)
1230 assert(i <= seekhead_list->nb_elem);
1234 index_list = &matroska->
index;
1235 index = index_list->
elem;
1241 for (i = 0; i < index_list->
nb_elem; i++) {
1244 for (j = 0; j < pos_list->
nb_elem; j++) {
1246 if (track && track->stream)
1249 index[i].
time/index_scale, 0, 0,
1257 static const char *
const aac_profiles[] = {
"MAIN",
"LC",
"SSR" };
1261 if (strstr(codec_id, aac_profiles[profile]))
1284 uint64_t max_start = 0;
1296 "EBML header using unsupported features\n"
1297 "(EBML version %"PRIu64
", doctype %s, doc version %"PRIu64
")\n",
1311 if ((res =
ebml_parse(matroska, matroska_segments, matroska)) < 0)
1328 uint8_t *extradata =
NULL;
1329 int extradata_size = 0;
1330 int extradata_offset = 0;
1338 "Unknown or unsupported track type %"PRIu64
"\n",
1356 if (encodings_list->
nb_elem > 1) {
1358 "Multiple combined encodings not supported");
1359 }
else if (encodings_list->
nb_elem == 1) {
1360 if (encodings[0].type ||
1369 encodings[0].
scope = 0;
1371 "Unsupported encoding type");
1381 "Failed to decode codec private data\n");
1382 }
else if (offset > 0) {
1407 if (!strcmp(track->
codec_id,
"V_MS/VFW/FOURCC")
1413 extradata_offset = 40;
1414 }
else if (!strcmp(track->
codec_id,
"A_MS/ACM")
1425 }
else if (!strcmp(track->
codec_id,
"V_QUICKTIME")
1448 if (extradata ==
NULL)
1450 extradata[0] = (profile << 3) | ((sri&0x0E) >> 1);
1451 extradata[1] = ((sri&0x01) << 7) | (track->
audio.
channels<<3);
1452 if (strstr(track->
codec_id,
"SBR")) {
1454 extradata[2] = 0x56;
1455 extradata[3] = 0xE5;
1456 extradata[4] = 0x80 | (sri<<3);
1461 extradata_size = 30;
1463 if (extradata ==
NULL)
1475 extradata_offset = 26;
1491 if (flavor <= 0 || track->audio.coded_framesize <= 0 ||
1501 const int sipr_bit_rate[4] = { 6504, 8496, 5000, 16000 };
1506 extradata_offset = 78;
1513 "Unknown/unsupported CodecID %s.\n", track->
codec_id);
1521 if (strcmp(track->
language,
"und"))
1571 attachements = attachements_list->
elem;
1572 for (j=0; j<attachements_list->
nb_elem; j++) {
1573 if (!(attachements[j].filename && attachements[j].mime &&
1574 attachements[j].bin.data && attachements[j].
bin.
size > 0)) {
1597 attachements[j].
stream = st;
1601 chapters = chapters_list->
elem;
1602 for (i=0; i<chapters_list->
nb_elem; i++)
1604 && (max_start==0 || chapters[i].start > max_start)) {
1607 chapters[i].
start, chapters[i].
end,
1610 "title", chapters[i].
title, 0);
1611 max_start = chapters[i].
start;
1636 matroska->
packets = newpackets;
1664 int size, int64_t pos, uint64_t cluster_time,
1665 uint64_t
duration,
int is_keyframe,
1666 int64_t cluster_pos)
1674 uint32_t *lace_size =
NULL;
1675 int n,
flags, laces = 0;
1686 if (!track || !track->
stream) {
1688 "Invalid stream %"PRIu64
" or size %u\n", num, size);
1690 }
else if (size <= 3)
1702 if (is_keyframe == -1)
1705 if (cluster_time != (uint64_t)-1
1706 && (block_time >= 0 || cluster_time >= -block_time)) {
1707 timecode = cluster_time + block_time;
1709 && timecode < track->end_timecode)
1717 if (!is_keyframe || timecode < matroska->skip_to_timecode)
1722 switch ((flags & 0x06) >> 1) {
1726 lace_size[0] =
size;
1733 laces = (*data) + 1;
1738 switch ((flags & 0x06) >> 1) {
1742 for (n = 0; res == 0 && n < laces - 1; n++) {
1749 lace_size[n] += temp;
1755 total += lace_size[n];
1757 lace_size[n] = size - total;
1762 for (n = 0; n < laces; n++)
1763 lace_size[n] = size / laces;
1771 "EBML block data error\n");
1776 total = lace_size[0] = num;
1777 for (n = 1; res == 0 && n < laces - 1; n++) {
1783 "EBML block data error\n");
1788 lace_size[n] = lace_size[n - 1] + snum;
1789 total += lace_size[n];
1791 lace_size[laces - 1] = size - total;
1799 for (n = 0; n < laces; n++) {
1817 if (size < cfs * h / 2) {
1819 "Corrupt int4 RM-style audio packet size\n");
1822 for (x=0; x<h/2; x++)
1823 memcpy(track->
audio.
buf+x*2*w+y*cfs,
1828 "Corrupt sipr RM-style audio packet size\n");
1831 memcpy(track->
audio.
buf + y*w, data, w);
1833 if (size < sps * w / sps) {
1835 "Corrupt generic RM-style audio packet size\n");
1838 for (x=0; x<w/sps; x++)
1839 memcpy(track->
audio.
buf+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), data+x*sps, sps);
1862 int offset = 0, pkt_size = lace_size[n];
1863 uint8_t *pkt_data =
data;
1865 if (pkt_size > size) {
1870 if (encodings && encodings->
scope & 1) {
1885 memcpy (pkt->
data+offset, pkt_data, pkt_size);
1887 if (pkt_data != data)
1891 pkt->
flags = is_keyframe;
1895 pkt->
dts = timecode;
1897 pkt->
pts = timecode;
1921 data += lace_size[n];
1922 size -= lace_size[n];
1940 res =
ebml_parse(matroska, matroska_clusters, &cluster);
1941 blocks_list = &cluster.
blocks;
1942 blocks = blocks_list->
elem;
1943 for (i=0; i<blocks_list->
nb_elem && !res; i++)
1944 if (blocks[i].bin.size > 0 && blocks[i].
bin.
data) {
1946 if (!blocks[i].non_simple)
1949 blocks[i].bin.data, blocks[i].
bin.
size,
1955 if (res < 0) matroska->
done = 1;
1974 int64_t timestamp,
int flags)
1979 int i,
index, index_sub, index_min;
2018 index_min = index_sub;
2048 .
name =
"matroska,webm",
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
union EbmlSyntax::@79 def
static EbmlSyntax matroska_simpletag[]
#define MATROSKA_ID_TRACKDEFAULTDURATION
void avio_wl16(AVIOContext *s, unsigned int val)
static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska, int idx)
#define MATROSKA_ID_VIDEOFLAGINTERLACED
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
AV_WL32 AV_WL24 AV_WL16 AV_WB32 AV_WB24 AV_RB16
static void matroska_convert_tags(AVFormatContext *s)
#define MATROSKA_ID_DATEUTC
#define MATROSKA_ID_TRACKFLAGLACING
#define MATROSKA_ID_TRACKENTRY
static int matroska_deliver_packet(MatroskaDemuxContext *matroska, AVPacket *pkt)
#define MATROSKA_ID_VIDEODISPLAYHEIGHT
AV_WL32 AV_WL24 AV_WL16 AV_RB32
AVInputFormat ff_matroska_demuxer
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add an index entry into a sorted list.
#define MATROSKA_ID_CUETRACKPOSITION
#define MATROSKA_ID_CODECPRIVATE
#define MATROSKA_ID_TAGTARGETS_TYPE
static int ebml_level_end(MatroskaDemuxContext *matroska)
int64_t pos
byte position in stream, -1 if unknown
static int matroska_ebmlnum_sint(MatroskaDemuxContext *matroska, uint8_t *data, uint32_t size, int64_t *num)
#define MATROSKA_ID_ENCODINGTYPE
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define MATROSKA_ID_AUDIOBITDEPTH
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
#define MATROSKA_ID_TRACKFLAGDEFAULT
#define AV_LOG_WARNING
Something somehow does not look correct.
static EbmlSyntax matroska_segments[]
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
#define MATROSKA_ID_TAGTARGETS_ATTACHUID
int index
stream index in AVFormatContext
#define MATROSKA_ID_CLUSTERPOSITION
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define MATROSKA_ID_FILEDATA
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
#define EBML_ID_DOCTYPEREADVERSION
#define MATROSKA_ID_BLOCKREFERENCE
#define MATROSKA_ID_TRACKTYPE
#define MATROSKA_ID_TAGTARGETS_CHAPTERUID
#define MATROSKA_ID_VIDEOASPECTRATIO
#define MATROSKA_ID_MUXINGAPP
#define MATROSKA_ID_AUDIOCHANNELS
void * av_realloc(void *ptr, size_t size)
Allocate or reallocate a block of memory.
#define FF_ARRAY_ELEMS(a)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
const uint8_t ff_log2_tab[256]
MatroskaLevel levels[EBML_MAX_DEPTH]
static EbmlSyntax matroska_track_audio[]
#define MATROSKA_ID_CUECLUSTERPOSITION
unsigned int avio_rb16(AVIOContext *s)
const struct EbmlSyntax * n
#define MATROSKA_ID_EDITIONFLAGDEFAULT
#define MATROSKA_ID_CLUSTERTIMECODE
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
static EbmlSyntax matroska_tag[]
static EbmlSyntax matroska_attachment[]
#define MATROSKA_ID_CHAPTERTIMEEND
static EbmlSyntax matroska_track[]
#define MATROSKA_ID_TRACKCONTENTENCODINGS
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
#define AV_LZO_OUTPUT_FULL
decoded data did not fit into output buffer
#define MATROSKA_ID_FILEDESC
#define MATROSKA_ID_TRACKCONTENTENCODING
#define MATROSKA_ID_CODECDOWNLOADURL
void avio_wl32(AVIOContext *s, unsigned int val)
static av_always_inline double av_int2double(uint64_t i)
Reinterpret a 64-bit integer as a double.
#define MATROSKA_ID_CHAPLANG
#define MATROSKA_ID_EDITIONFLAGORDERED
#define MATROSKA_ID_TRACKLANGUAGE
MatroskaTrackCompression compression
unsigned int avio_rb32(AVIOContext *s)
#define MATROSKA_ID_VIDEOPIXELCROPT
#define MATROSKA_ID_TIMECODESCALE
static int matroska_aac_sri(int samplerate)
enum AVStreamParseType need_parsing
#define MATROSKA_ID_SIMPLEBLOCK
#define MATROSKA_ID_TAGTARGETS_TYPEVALUE
#define MATROSKA_ID_EDITIONFLAGHIDDEN
#define AV_LZO_OUTPUT_PADDING
static EbmlSyntax matroska_cluster[]
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
#define MATROSKA_ID_CODECNAME
#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ
static int read_header(FFV1Context *f)
#define MATROSKA_ID_VIDEODISPLAYWIDTH
#define MATROSKA_ID_EDITIONUID
void av_free_packet(AVPacket *pkt)
Free a packet.
static EbmlSyntax ebml_header[]
const unsigned char ff_sipr_subpk_size[4]
#define AVERROR_EOF
End of file.
#define MATROSKA_ID_CODECDECODEALL
static av_cold int read_close(AVFormatContext *ctx)
static void matroska_fix_ass_packet(MatroskaDemuxContext *matroska, AVPacket *pkt, uint64_t display_duration)
void av_destruct_packet(AVPacket *pkt)
Default packet destructor.
uint64_t avio_rb64(AVIOContext *s)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
#define MATROSKA_ID_TRACKNUMBER
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
enum CodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
#define MATROSKA_ID_SEGMENTUID
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
static EbmlSyntax matroska_tracks[]
static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
static int ebml_parse_nest(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
#define MATROSKA_ID_CUEBLOCKNUMBER
#define MATROSKA_ID_TRACKUID
static EbmlSyntax matroska_info[]
#define MATROSKA_ID_ENCODINGORDER
#define MATROSKA_ID_VIDEOSTEREOMODE
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
#define MATROSKA_ID_BLOCKDURATION
#define EBML_ID_EBMLREADVERSION
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags)
Get the index for a specific timestamp.
static int ebml_read_length(MatroskaDemuxContext *matroska, AVIOContext *pb, uint64_t *number)
Read a EBML length value.
static EbmlSyntax matroska_index[]
int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size)
#define MATROSKA_ID_CLUSTER
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define MATROSKA_ID_FILEMIMETYPE
static int matroska_ebmlnum_uint(MatroskaDemuxContext *matroska, uint8_t *data, uint32_t size, uint64_t *num)
int64_t convergence_duration
Time difference in AVStream->time_base units from the pts of this packet to the point at which the ou...
#define MATROSKA_ID_WRITINGAPP
#define MATROSKA_ID_TAGDEFAULT_BUG
int cues_parsing_deferred
static EbmlSyntax matroska_clusters[]
static EbmlSyntax matroska_chapter[]
#define MATROSKA_ID_VIDEOPIXELCROPR
void av_log(void *avcl, int level, const char *fmt,...)
AVStream * avformat_new_stream(AVFormatContext *s, AVCodec *c)
Add a new stream to a media file.
#define MATROSKA_ID_ENCODINGCOMPSETTINGS
#define EBML_ID_EBMLMAXIDLENGTH
#define MATROSKA_ID_CHAPTERFLAGHIDDEN
static AVDictionary * metadata
AVRational avg_frame_rate
Average framerate.
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.
static EbmlSyntax matroska_attachments[]
int flags
A combination of AV_PKT_FLAG values.
int avio_r8(AVIOContext *s)
AVCodecContext * codec
codec context
static void ebml_free(EbmlSyntax *syntax, void *data)
const CodecMime ff_mkv_mime_tags[]
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
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.
static EbmlSyntax matroska_chapters[]
uint64_t skip_to_timecode
static void matroska_parse_cues(MatroskaDemuxContext *matroska)
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
int bit_rate
the average bitrate
static void matroska_execute_seekhead(MatroskaDemuxContext *matroska)
AVRational av_d2q(double d, int max)
Convert a double precision floating point number to a rational.
#define EBML_ID_EBMLVERSION
#define AV_TIME_BASE
Internal time base represented as integer.
#define MATROSKA_ID_TAGTARGETS
const AVCodecTag ff_codec_bmp_tags[]
#define MATROSKA_ID_TAGNAME
#define MATROSKA_ID_TRACKTIMECODESCALE
static int ebml_parse_elem(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
static int ebml_read_num(MatroskaDemuxContext *matroska, AVIOContext *pb, int max_size, uint64_t *number)
int width
picture width / height.
#define MATROSKA_ID_CHAPTERFLAGENABLED
static EbmlSyntax matroska_track_encodings[]
static MatroskaTrack * matroska_find_track_by_num(MatroskaDemuxContext *matroska, int num)
static av_always_inline int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
#define MATROSKA_ID_SIMPLETAG
internal header for RIFF based (de)muxers do NOT include this in end user applications ...
static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
static EbmlSyntax matroska_track_encoding[]
#define MATROSKA_ID_TRACKMAXCACHE
static int read_probe(AVProbeData *p)
#define MATROSKA_ID_CHAPTERPHYSEQUIV
static int matroska_read_close(AVFormatContext *s)
static int ebml_read_ascii(AVIOContext *pb, int size, char **str)
static int matroska_decode_buffer(uint8_t **buf, int *buf_size, MatroskaTrack *track)
#define MATROSKA_ID_CHAPTERATOM
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
Decodes LZO 1x compressed data.
Opaque data information usually sparse.
#define MATROSKA_ID_VIDEOCOLORSPACE
static EbmlSyntax matroska_segment[]
#define MATROSKA_ID_CHAPTERS
static int matroska_probe(AVProbeData *p)
static void matroska_convert_tag(AVFormatContext *s, EbmlList *list, AVDictionary **metadata, char *prefix)
#define MATROSKA_ID_AUDIOSAMPLINGFREQ
#define MATROSKA_ID_TRACKMINCACHE
static int matroska_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
static EbmlSyntax matroska_seekhead[]
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
#define MATROSKA_ID_VIDEOPIXELCROPB
#define MATROSKA_ID_TRACKFLAGFORCED
enum AVMediaType codec_type
static int ebml_read_master(MatroskaDemuxContext *matroska, uint64_t length)
#define MATROSKA_ID_TAGDEFAULT
#define MATROSKA_ID_SEEKID
char * av_strdup(const char *s)
Duplicate the string s.
int sample_rate
samples per second
#define MATROSKA_ID_ENCODINGCOMPALGO
#define MATROSKA_ID_BLOCK
#define MATROSKA_ID_TAGTARGETS_TRACKUID
#define MATROSKA_ID_TAGLANG
static EbmlSyntax matroska_tags[]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
#define MATROSKA_ID_TRACKFLAGENABLED
#define MATROSKA_ID_TRACKS
#define MATROSKA_ID_TRACKNAME
static int read_packet(AVFormatContext *ctx, AVPacket *pkt)
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
#define MATROSKA_ID_SEEKENTRY
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
#define MATROSKA_ID_EDITIONENTRY
#define MATROSKA_ID_BLOCKGROUP
#define MATROSKA_ID_VIDEOPIXELHEIGHT
rational number numerator/denominator
#define MATROSKA_ID_CUETIME
static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
static EbmlSyntax matroska_blockgroup[]
static int ebml_parse(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
#define MATROSKA_ID_TITLE
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
#define MATROSKA_ID_TRACKVIDEO
This structure contains the data a format has to probe a file.
static int ebml_parse_id(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, uint32_t id, void *data)
static EbmlSyntax ebml_syntax[]
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...
#define MATROSKA_ID_VIDEOFRAMERATE
#define MATROSKA_ID_ATTACHMENTS
#define MATROSKA_ID_CHAPTERDISPLAY
static const char * matroska_doctypes[]
#define MATROSKA_ID_FILENAME
const int avpriv_mpeg4audio_sample_rates[16]
const AVMetadataConv ff_mkv_metadata_conv[]
#define MATROSKA_ID_CODECID
const struct EbmlSyntax EbmlSyntax
#define MATROSKA_ID_CUETRACK
static EbmlSyntax matroska_track_encoding_compression[]
#define MATROSKA_ID_SEEKPOSITION
#define MATROSKA_ID_CHAPTERTIMESTART
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))
int64_t start_time
Decoding: pts of the first frame of the stream, in stream time base.
int disposition
AV_DISPOSITION_* bit field.
static EbmlSyntax matroska_seekhead_entry[]
#define MATROSKA_ID_SEGMENT
static EbmlSyntax matroska_tagtargets[]
void ff_rm_reorder_sipr_data(uint8_t *buf, int sub_packet_h, int framesize)
Perform 4-bit block reordering for SIPR data.
CodecID
Identify the syntax and semantics of the bitstream.
#define MATROSKA_ID_SEEKHEAD
static AVRational frame_rate
#define MATROSKA_ID_ENCODINGCOMPRESSION
#define MATROSKA_ID_CLUSTERPREVSIZE
int eof_reached
true if eof reached
#define MATROSKA_ID_POINTENTRY
int channels
number of audio channels
#define MATROSKA_ID_FILEUID
#define MATROSKA_ID_VIDEOPIXELCROPL
void * priv_data
Format private data.
#define MATROSKA_ID_CHAPTERUID
static EbmlSyntax matroska_index_entry[]
static int ebml_read_binary(AVIOContext *pb, int length, EbmlBin *bin)
#define MATROSKA_ID_VIDEODISPLAYUNIT
static int ebml_read_uint(AVIOContext *pb, int size, uint64_t *num)
#define MATROSKA_ID_TRACKMAXBLKADDID
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
#define EBML_ID_EBMLMAXSIZELENGTH
int64_t duration
Decoding: duration of the stream, in AV_TIME_BASE fractional seconds.
#define MATROSKA_ID_CHAPSTRING
static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, uint64_t duration, int is_keyframe, int64_t cluster_pos)
static int matroska_merge_packets(AVPacket *out, AVPacket *in)
#define MATROSKA_ID_TAGSTRING
static EbmlSyntax matroska_index_pos[]
static int ebml_read_float(AVIOContext *pb, int size, double *num)
#define MATROSKA_ID_DURATION
static int matroska_aac_profile(char *codec_id)
#define EBML_ID_DOCTYPEVERSION
static void matroska_clear_queue(MatroskaDemuxContext *matroska)
static EbmlSyntax matroska_chapter_entry[]
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
#define MATROSKA_ID_ATTACHEDFILE
static EbmlSyntax matroska_chapter_display[]
uint64_t default_duration
#define MATROSKA_ID_CODECINFOURL
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
#define MATROSKA_ID_VIDEOPIXELWIDTH
const AVCodecTag codec_movvideo_tags[]
#define MATROSKA_ID_TRACKAUDIO
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define MATROSKA_ID_ENCODINGSCOPE
const CodecTags ff_mkv_codec_tags[]
static EbmlSyntax matroska_track_video[]