libavformat/matroskadec.c File Reference

Matroska file demuxer. More...

#include <stdio.h>
#include "avformat.h"
#include "internal.h"
#include "avio_internal.h"
#include "riff.h"
#include "isom.h"
#include "rm.h"
#include "matroska.h"
#include "libavcodec/bytestream.h"
#include "libavcodec/mpeg4audio.h"
#include "libavutil/intfloat.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/avstring.h"
#include "libavutil/lzo.h"
#include "libavutil/dict.h"

Go to the source code of this file.

Data Structures

struct  EbmlSyntax
struct  EbmlList
struct  EbmlBin
struct  Ebml
struct  MatroskaTrackCompression
struct  MatroskaTrackEncoding
struct  MatroskaTrackVideo
struct  MatroskaTrackAudio
struct  MatroskaTrackPlane
struct  MatroskaTrackOperation
struct  MatroskaTrack
struct  MatroskaAttachement
struct  MatroskaChapter
struct  MatroskaIndexPos
struct  MatroskaIndex
struct  MatroskaTag
struct  MatroskaTagTarget
struct  MatroskaTags
struct  MatroskaSeekhead
struct  MatroskaLevel
struct  MatroskaCluster
struct  MatroskaDemuxContext
struct  MatroskaBlock

Enumerations

enum  EbmlType {
  EBML_NONE, EBML_UINT, EBML_FLOAT, EBML_STR,
  EBML_UTF8, EBML_BIN, EBML_NEST, EBML_PASS,
  EBML_STOP, EBML_TYPE_COUNT
}

Functions

static int matroska_resync (MatroskaDemuxContext *matroska, int64_t last_pos)
static int ebml_level_end (MatroskaDemuxContext *matroska)
static int ebml_read_num (MatroskaDemuxContext *matroska, AVIOContext *pb, int max_size, uint64_t *number)
static int ebml_read_length (MatroskaDemuxContext *matroska, AVIOContext *pb, uint64_t *number)
 Read a EBML length value.
static int ebml_read_uint (AVIOContext *pb, int size, uint64_t *num)
static int ebml_read_float (AVIOContext *pb, int size, double *num)
static int ebml_read_ascii (AVIOContext *pb, int size, char **str)
static int ebml_read_binary (AVIOContext *pb, int length, EbmlBin *bin)
static int ebml_read_master (MatroskaDemuxContext *matroska, uint64_t length)
static int matroska_ebmlnum_uint (MatroskaDemuxContext *matroska, uint8_t *data, uint32_t size, uint64_t *num)
static int matroska_ebmlnum_sint (MatroskaDemuxContext *matroska, uint8_t *data, uint32_t size, int64_t *num)
static int ebml_parse_elem (MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
static int ebml_parse_id (MatroskaDemuxContext *matroska, EbmlSyntax *syntax, uint32_t id, void *data)
static int ebml_parse (MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
static int ebml_parse_nest (MatroskaDemuxContext *matroska, EbmlSyntax *syntax, void *data)
static void ebml_free (EbmlSyntax *syntax, void *data)
static int matroska_probe (AVProbeData *p)
static MatroskaTrackmatroska_find_track_by_num (MatroskaDemuxContext *matroska, int num)
static int matroska_decode_buffer (uint8_t **buf, int *buf_size, MatroskaTrack *track)
static void matroska_fix_ass_packet (MatroskaDemuxContext *matroska, AVPacket *pkt, uint64_t display_duration)
static int matroska_merge_packets (AVPacket *out, AVPacket *in)
static void matroska_convert_tag (AVFormatContext *s, EbmlList *list, AVDictionary **metadata, char *prefix)
static void matroska_convert_tags (AVFormatContext *s)
static int matroska_parse_seekhead_entry (MatroskaDemuxContext *matroska, int idx)
static void matroska_execute_seekhead (MatroskaDemuxContext *matroska)
static void matroska_add_index_entries (MatroskaDemuxContext *matroska)
static void matroska_parse_cues (MatroskaDemuxContext *matroska)
static int matroska_aac_profile (char *codec_id)
static int matroska_aac_sri (int samplerate)
static void matroska_metadata_creation_time (AVDictionary **metadata, int64_t date_utc)
static int matroska_read_header (AVFormatContext *s)
static int matroska_deliver_packet (MatroskaDemuxContext *matroska, AVPacket *pkt)
static void matroska_clear_queue (MatroskaDemuxContext *matroska)
static int matroska_parse_laces (MatroskaDemuxContext *matroska, uint8_t **buf, int size, int type, uint32_t **lace_buf, int *laces)
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 matroska_parse_frame (MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, uint8_t *data, int pkt_size, uint64_t timecode, uint64_t lace_duration, int64_t pos, int is_keyframe)
static int matroska_parse_block (MatroskaDemuxContext *matroska, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, uint64_t block_duration, int is_keyframe, int64_t cluster_pos)
static int matroska_parse_cluster_incremental (MatroskaDemuxContext *matroska)
static int matroska_parse_cluster (MatroskaDemuxContext *matroska)
static int matroska_read_packet (AVFormatContext *s, AVPacket *pkt)
static int matroska_read_seek (AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
static int matroska_read_close (AVFormatContext *s)

Variables

static EbmlSyntax ebml_header []
static EbmlSyntax ebml_syntax []
static EbmlSyntax matroska_info []
static EbmlSyntax matroska_track_video []
static EbmlSyntax matroska_track_audio []
static EbmlSyntax matroska_track_encoding_compression []
static EbmlSyntax matroska_track_encoding []
static EbmlSyntax matroska_track_encodings []
static EbmlSyntax matroska_track_plane []
static EbmlSyntax matroska_track_combine_planes []
static EbmlSyntax matroska_track_operation []
static EbmlSyntax matroska_track []
static EbmlSyntax matroska_tracks []
static EbmlSyntax matroska_attachment []
static EbmlSyntax matroska_attachments []
static EbmlSyntax matroska_chapter_display []
static EbmlSyntax matroska_chapter_entry []
static EbmlSyntax matroska_chapter []
static EbmlSyntax matroska_chapters []
static EbmlSyntax matroska_index_pos []
static EbmlSyntax matroska_index_entry []
static EbmlSyntax matroska_index []
static EbmlSyntax matroska_simpletag []
static EbmlSyntax matroska_tagtargets []
static EbmlSyntax matroska_tag []
static EbmlSyntax matroska_tags []
static EbmlSyntax matroska_seekhead_entry []
static EbmlSyntax matroska_seekhead []
static EbmlSyntax matroska_segment []
static EbmlSyntax matroska_segments []
static EbmlSyntax matroska_blockgroup []
static EbmlSyntax matroska_cluster []
static EbmlSyntax matroska_clusters []
static EbmlSyntax matroska_cluster_incremental_parsing []
static EbmlSyntax matroska_cluster_incremental []
static EbmlSyntax matroska_clusters_incremental []
static const char *const matroska_doctypes [] = { "matroska", "webm" }
AVInputFormat ff_matroska_demuxer


Detailed Description

Matroska file demuxer.

Author:
Ronald Bultje <rbultje@ronald.bitfreak.net>

with a little help from Moritz Bunkus <moritz@bunkus.org>

totally reworked by Aurelien Jacobs <aurel@gnuage.org>

See also:
specs available on the Matroska project page: http://www.matroska.org/

Definition in file matroskadec.c.


Enumeration Type Documentation

enum EbmlType

Enumerator:
EBML_NONE 
EBML_UINT 
EBML_FLOAT 
EBML_STR 
EBML_UTF8 
EBML_BIN 
EBML_NEST 
EBML_PASS 
EBML_STOP 
EBML_TYPE_COUNT 

Definition at line 54 of file matroskadec.c.


Function Documentation

static void ebml_free ( EbmlSyntax syntax,
void *  data 
) [static]

static int ebml_level_end ( MatroskaDemuxContext matroska  )  [static]

Definition at line 621 of file matroskadec.c.

Referenced by ebml_parse_nest(), and matroska_parse_cluster_incremental().

static int ebml_parse ( MatroskaDemuxContext matroska,
EbmlSyntax syntax,
void *  data 
) [static]

static int ebml_parse_elem ( MatroskaDemuxContext matroska,
EbmlSyntax syntax,
void *  data 
) [static]

Definition at line 893 of file matroskadec.c.

Referenced by ebml_parse_id().

static int ebml_parse_id ( MatroskaDemuxContext matroska,
EbmlSyntax syntax,
uint32_t  id,
void *  data 
) [static]

Definition at line 836 of file matroskadec.c.

Referenced by ebml_parse(), and ebml_parse_elem().

static int ebml_parse_nest ( MatroskaDemuxContext matroska,
EbmlSyntax syntax,
void *  data 
) [static]

Definition at line 868 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int ebml_read_ascii ( AVIOContext pb,
int  size,
char **  str 
) [static]

Definition at line 740 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int ebml_read_binary ( AVIOContext pb,
int  length,
EbmlBin bin 
) [static]

Definition at line 763 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int ebml_read_float ( AVIOContext pb,
int  size,
double *  num 
) [static]

Definition at line 722 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int ebml_read_length ( MatroskaDemuxContext matroska,
AVIOContext pb,
uint64_t number 
) [static]

Read a EBML length value.

This needs special handling for the "unknown length" case which has multiple encodings.

Definition at line 690 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int ebml_read_master ( MatroskaDemuxContext matroska,
uint64_t  length 
) [static]

Definition at line 784 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int ebml_read_num ( MatroskaDemuxContext matroska,
AVIOContext pb,
int  max_size,
uint64_t number 
) [static]

Definition at line 644 of file matroskadec.c.

Referenced by ebml_parse(), ebml_read_length(), and matroska_ebmlnum_uint().

static int ebml_read_uint ( AVIOContext pb,
int  size,
uint64_t num 
) [static]

Definition at line 703 of file matroskadec.c.

Referenced by ebml_parse_elem().

static int matroska_aac_profile ( char *  codec_id  )  [static]

Definition at line 1410 of file matroskadec.c.

Referenced by matroska_read_header().

static int matroska_aac_sri ( int  samplerate  )  [static]

Definition at line 1421 of file matroskadec.c.

Referenced by matroska_read_header().

static void matroska_add_index_entries ( MatroskaDemuxContext matroska  )  [static]

Definition at line 1368 of file matroskadec.c.

Referenced by matroska_parse_cues(), and matroska_read_header().

static void matroska_clear_queue ( MatroskaDemuxContext matroska  )  [static]

Definition at line 1874 of file matroskadec.c.

Referenced by matroska_read_close(), and matroska_read_seek().

static void matroska_convert_tag ( AVFormatContext s,
EbmlList list,
AVDictionary **  metadata,
char *  prefix 
) [static]

Definition at line 1221 of file matroskadec.c.

Referenced by matroska_convert_tags().

static void matroska_convert_tags ( AVFormatContext s  )  [static]

Definition at line 1253 of file matroskadec.c.

Referenced by matroska_read_header().

static int matroska_decode_buffer ( uint8_t **  buf,
int buf_size,
MatroskaTrack track 
) [static]

Definition at line 1044 of file matroskadec.c.

Referenced by matroska_parse_frame(), and matroska_read_header().

static int matroska_deliver_packet ( MatroskaDemuxContext matroska,
AVPacket pkt 
) [static]

Definition at line 1846 of file matroskadec.c.

Referenced by matroska_read_packet().

static int matroska_ebmlnum_sint ( MatroskaDemuxContext matroska,
uint8_t data,
uint32_t  size,
int64_t *  num 
) [static]

Definition at line 817 of file matroskadec.c.

Referenced by matroska_parse_laces().

static int matroska_ebmlnum_uint ( MatroskaDemuxContext matroska,
uint8_t data,
uint32_t  size,
uint64_t num 
) [static]

static void matroska_execute_seekhead ( MatroskaDemuxContext matroska  )  [static]

Definition at line 1338 of file matroskadec.c.

Referenced by matroska_read_header().

static MatroskaTrack* matroska_find_track_by_num ( MatroskaDemuxContext matroska,
int  num 
) [static]

Definition at line 1030 of file matroskadec.c.

Referenced by matroska_add_index_entries(), and matroska_parse_block().

static void matroska_fix_ass_packet ( MatroskaDemuxContext matroska,
AVPacket pkt,
uint64_t  display_duration 
) [static]

Definition at line 1178 of file matroskadec.c.

Referenced by matroska_parse_frame().

static int matroska_merge_packets ( AVPacket out,
AVPacket in 
) [static]

Definition at line 1210 of file matroskadec.c.

Referenced by matroska_parse_frame().

static void matroska_metadata_creation_time ( AVDictionary **  metadata,
int64_t  date_utc 
) [static]

Definition at line 1431 of file matroskadec.c.

Referenced by matroska_read_header().

static int matroska_parse_block ( MatroskaDemuxContext matroska,
uint8_t data,
int  size,
int64_t  pos,
uint64_t  cluster_time,
uint64_t  block_duration,
int  is_keyframe,
int64_t  cluster_pos 
) [static]

Definition at line 2147 of file matroskadec.c.

Referenced by matroska_parse_cluster(), and matroska_parse_cluster_incremental().

static int matroska_parse_cluster ( MatroskaDemuxContext matroska  )  [static]

Definition at line 2314 of file matroskadec.c.

Referenced by matroska_read_packet(), and matroska_read_seek().

static int matroska_parse_cluster_incremental ( MatroskaDemuxContext matroska  )  [static]

Definition at line 2259 of file matroskadec.c.

Referenced by matroska_parse_cluster().

static void matroska_parse_cues ( MatroskaDemuxContext matroska  )  [static]

Definition at line 1395 of file matroskadec.c.

Referenced by matroska_read_seek().

static int matroska_parse_frame ( MatroskaDemuxContext matroska,
MatroskaTrack track,
AVStream st,
uint8_t data,
int  pkt_size,
uint64_t  timecode,
uint64_t  lace_duration,
int64_t  pos,
int  is_keyframe 
) [static]

Definition at line 2059 of file matroskadec.c.

Referenced by matroska_parse_block().

static int matroska_parse_laces ( MatroskaDemuxContext matroska,
uint8_t **  buf,
int  size,
int  type,
uint32_t **  lace_buf,
int laces 
) [static]

Definition at line 1887 of file matroskadec.c.

Referenced by matroska_parse_block().

static int matroska_parse_rm_audio ( MatroskaDemuxContext matroska,
MatroskaTrack track,
AVStream st,
uint8_t data,
int  size,
uint64_t  timecode,
int64_t  pos 
) [static]

Definition at line 1993 of file matroskadec.c.

Referenced by matroska_parse_block().

static int matroska_parse_seekhead_entry ( MatroskaDemuxContext matroska,
int  idx 
) [static]

Definition at line 1287 of file matroskadec.c.

Referenced by matroska_execute_seekhead(), and matroska_parse_cues().

static int matroska_probe ( AVProbeData p  )  [static]

Definition at line 988 of file matroskadec.c.

static int matroska_read_close ( AVFormatContext s  )  [static]

Definition at line 2428 of file matroskadec.c.

static int matroska_read_header ( AVFormatContext s  )  [static]

Definition at line 1442 of file matroskadec.c.

static int matroska_read_packet ( AVFormatContext s,
AVPacket pkt 
) [static]

Definition at line 2343 of file matroskadec.c.

static int matroska_read_seek ( AVFormatContext s,
int  stream_index,
int64_t  timestamp,
int  flags 
) [static]

Definition at line 2358 of file matroskadec.c.

static int matroska_resync ( MatroskaDemuxContext matroska,
int64_t  last_pos 
) [static]

Definition at line 588 of file matroskadec.c.

Referenced by matroska_read_header(), and matroska_read_packet().


Variable Documentation

EbmlSyntax ebml_header[] [static]

Initial value:

 {
    { EBML_ID_EBMLREADVERSION,        EBML_UINT, 0, 0x42, {.u=EBML_VERSION} },
    { EBML_ID_EBMLMAXSIZELENGTH,      EBML_UINT, 0, 0x42, {.u=8} },
    { EBML_ID_EBMLMAXIDLENGTH,        EBML_UINT, 0, 0x42, {.u=4} },
    { EBML_ID_DOCTYPE,                EBML_STR,  0, 0x42, {.s="(none)"} },
    { EBML_ID_DOCTYPEREADVERSION,     EBML_UINT, 0, 0x42, {.u=1} },
    { EBML_ID_EBMLVERSION,            EBML_NONE },
    { EBML_ID_DOCTYPEVERSION,         EBML_NONE },
    { 0 }
}

Definition at line 284 of file matroskadec.c.

Referenced by mkv_write_header().

EbmlSyntax ebml_syntax[] [static]

Initial value:

 {
    { EBML_ID_HEADER,                 EBML_NEST, 0, 0, {.n=ebml_header} },
    { 0 }
}

Definition at line 295 of file matroskadec.c.

Initial value:

 {
    .name           = "matroska,webm",
    .long_name      = NULL_IF_CONFIG_SMALL("Matroska / WebM"),
    .priv_data_size = sizeof(MatroskaDemuxContext),
    .read_probe     = matroska_probe,
    .read_header    = matroska_read_header,
    .read_packet    = matroska_read_packet,
    .read_close     = matroska_read_close,
    .read_seek      = matroska_read_seek,
}

Definition at line 2445 of file matroskadec.c.

Initial value:

Definition at line 405 of file matroskadec.c.

Initial value:

Definition at line 414 of file matroskadec.c.

Initial value:

 {
    { MATROSKA_ID_BLOCK,          EBML_BIN,  0, 0x42 },
    { MATROSKA_ID_SIMPLEBLOCK,    EBML_BIN,  0, 0x42 },
    { MATROSKA_ID_BLOCKDURATION,  EBML_UINT, 0, 0x42 },
    { MATROSKA_ID_BLOCKREFERENCE, EBML_UINT, 0, 0x42 },
    { 1,                          EBML_UINT, 0, 0x42, {.u=1} },
    { 0 }
}

Definition at line 527 of file matroskadec.c.

Initial value:

Definition at line 419 of file matroskadec.c.

Initial value:

Definition at line 446 of file matroskadec.c.

const char* const matroska_doctypes[] = { "matroska", "webm" } [static]

Definition at line 586 of file matroskadec.c.

Referenced by matroska_probe(), and matroska_read_header().

Initial value:

Definition at line 464 of file matroskadec.c.

Initial value:

Definition at line 458 of file matroskadec.c.

Initial value:

Definition at line 451 of file matroskadec.c.

Initial value:

Definition at line 300 of file matroskadec.c.

Initial value:

Definition at line 505 of file matroskadec.c.

Initial value:

 {
    { MATROSKA_ID_SEEKID,             EBML_UINT, 0, 0x42 },
    { MATROSKA_ID_SEEKPOSITION,       EBML_UINT, 0, 0x42, {.u=-1} },
    { 0 }
}

Definition at line 499 of file matroskadec.c.

Initial value:

 {
    { MATROSKA_ID_SEGMENT,        EBML_NEST, 0, 0, {.n=matroska_segment    } },
    { 0 }
}

Definition at line 522 of file matroskadec.c.

Initial value:

Definition at line 469 of file matroskadec.c.

Initial value:

Definition at line 488 of file matroskadec.c.

Initial value:

 {
    { MATROSKA_ID_TAG,                EBML_NEST, sizeof(MatroskaTags), 0x42, {.n=matroska_tag} },
    { 0 }
}

Definition at line 494 of file matroskadec.c.

Initial value:

Definition at line 479 of file matroskadec.c.

Initial value:

Definition at line 329 of file matroskadec.c.

Initial value:

Definition at line 362 of file matroskadec.c.

Initial value:

Definition at line 343 of file matroskadec.c.

Initial value:

 {
    { MATROSKA_ID_ENCODINGCOMPALGO,   EBML_UINT, 0, 0x42, {.u=0} },
    { MATROSKA_ID_ENCODINGCOMPSETTINGS,EBML_BIN, 0, 0x42 },
    { 0 }
}

Definition at line 337 of file matroskadec.c.

Initial value:

Definition at line 351 of file matroskadec.c.

Initial value:

Definition at line 367 of file matroskadec.c.

Initial value:

Definition at line 356 of file matroskadec.c.

Initial value:

 {
    { MATROSKA_ID_TRACKENTRY,         EBML_NEST, sizeof(MatroskaTrack), 0x42, {.n=matroska_track} },
    { 0 }
}

Definition at line 400 of file matroskadec.c.


Generated on Fri Oct 26 02:50:10 2012 for FFmpeg by  doxygen 1.5.8