summaryrefslogtreecommitdiff
path: root/src/demuxers/matroska.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/demuxers/matroska.h')
-rw-r--r--src/demuxers/matroska.h270
1 files changed, 270 insertions, 0 deletions
diff --git a/src/demuxers/matroska.h b/src/demuxers/matroska.h
new file mode 100644
index 000000000..c8f2f4b31
--- /dev/null
+++ b/src/demuxers/matroska.h
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2000-2003 the xine project
+ *
+ * This file is part of xine, a free video player.
+ *
+ * xine is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * xine is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ *
+ * $Id: matroska.h,v 1.1 2004/01/05 00:40:54 tmattern Exp $
+ *
+ */
+#ifndef MATROSKA_H
+#define MATROSKA_H
+
+#include "ebml.h"
+
+/*
+ * Matroska Element IDs
+ */
+
+/* Segment */
+#define MATROSKA_ID_SEGMENT 0x18538067
+
+/* Meta Seek Information */
+#define MATROSKA_ID_SEEKHEAD 0x114D9B74
+#define MATROSKA_ID_S_ENTRY 0x4DBB
+#define MATROSKA_ID_S_ID 0x53AB
+#define MATROSKA_ID_S_POSITION 0x53AC
+
+/* Segment Information */
+#define MATROSKA_ID_INFO 0x1549A966
+#define MATROSKA_ID_I_SEGMENTUID 0x73A4
+#define MATROSKA_ID_I_FILENAME 0x7384
+#define MATROSKA_ID_I_PREVUID 0x3CB923
+#define MATROSKA_ID_I_PREVFILENAME 0x3C83AB
+#define MATROSKA_ID_I_NEXTUID 0x3EB923
+#define MATROSKA_ID_I_NEXTFILENAME 0x3E83BB
+#define MATROSKA_ID_I_TIMECODESCALE 0x2AD7B1
+#define MATROSKA_ID_I_DURATION 0x4489
+#define MATROSKA_ID_I_DATEUTC 0x4461
+#define MATROSKA_ID_I_TITLE 0x7BA9
+#define MATROSKA_ID_I_MUXINGAPP 0x4D80
+#define MATROSKA_ID_I_WRITINGAPP 0x5741
+
+/* Cluster */
+#define MATROSKA_ID_CLUSTER 0x1F43B675
+#define MATROSKA_ID_CL_TIMECODE 0xE7
+#define MATROSKA_ID_CL_POSITION 0xA7
+#define MATROSKA_ID_CL_PREVSIZE 0xAB
+#define MATROSKA_ID_CL_BLOCKGROUP 0xA0
+#define MATROSKA_ID_CL_BLOCK 0xA1
+#define MATROSKA_ID_CL_BLOCKVIRTUAL 0xA2
+#define MATROSKA_ID_CL_BLOCKADDITIONS 0x75A1
+#define MATROSKA_ID_CL_BLOCKMORE 0xA6
+#define MATROSKA_ID_CL_BLOCKADDID 0xEE
+#define MATROSKA_ID_CL_BLOCKADDITIONAL 0xA5
+#define MATROSKA_ID_CL_BLOCKDURATION 0x9B
+#define MATROSKA_ID_CL_REFERENCEPRIORITY 0xFA
+#define MATROSKA_ID_CL_REFERENCEBLOCK 0xFB
+#define MATROSKA_ID_CL_REFERENCEVIRTUAL 0xFD
+#define MATROSKA_ID_CL_CODECSTATE 0xA4
+#define MATROSKA_ID_CL_SLICES 0x8E
+#define MATROSKA_ID_CL_TIMESLICE 0xE8
+#define MATROSKA_ID_CL_LACENUMBER 0xCC
+#define MATROSKA_ID_CL_FRAMENUMBER 0xCD
+#define MATROSKA_ID_CL_BLOCKADDITIONID 0xCB
+#define MATROSKA_ID_CL_DELAY 0xCE
+#define MATROSKA_ID_CL_DURATION 0xCF
+
+/* Track */
+#define MATROSKA_ID_TRACKS 0x1654AE6B
+#define MATROSKA_ID_TR_ENTRY 0xAE
+#define MATROSKA_ID_TR_NUMBER 0xD7
+#define MATROSKA_ID_TR_UID 0x73C5
+#define MATROSKA_ID_TR_TYPE 0x83
+#define MATROSKA_ID_TR_FLAGENABLED 0xB9
+#define MATROSKA_ID_TR_FLAGDEFAULT 0x88
+#define MATROSKA_ID_TR_FLAGLACING 0x9C
+#define MATROSKA_ID_TR_MINCACHE 0x6DE7
+#define MATROSKA_ID_TR_MAXCACHE 0x6DF8
+#define MATROSKA_ID_TR_DEFAULTDURATION 0x23E383
+#define MATROSKA_ID_TR_TIMECODESCALE 0x23314F
+#define MATROSKA_ID_TR_NAME 0x536E
+#define MATROSKA_ID_TR_LANGUAGE 0x22B59C
+#define MATROSKA_ID_TR_CODECID 0x86
+#define MATROSKA_ID_TR_CODECPRIVATE 0x63A2
+#define MATROSKA_ID_TR_CODECNAME 0x258688
+#define MATROSKA_ID_TR_CODECSETTINGS 0x3A9697
+#define MATROSKA_ID_TR_CODECINFOURL 0x3B4040
+#define MATROSKA_ID_TR_CODECDOWNLOADURL 0x26B240
+#define MATROSKA_ID_TR_CODECDECODEALL 0xAA
+#define MATROSKA_ID_TR_OVERLAY 0x6FAB
+
+/* Video */
+#define MATROSKA_ID_TV 0xE0
+#define MATROSKA_ID_TV_FLAGINTERLACED 0x9A
+#define MATROSKA_ID_TV_STEREOMODE 0x53B9
+#define MATROSKA_ID_TV_PIXELWIDTH 0xB0
+#define MATROSKA_ID_TV_PIXELHEIGHT 0xBA
+#define MATROSKA_ID_TV_VIDEODISPLAYWIDTH 0x54B0
+#define MATROSKA_ID_TV_VIDEODISPLAYHEIGHT 0x54BA
+#define MATROSKA_ID_TV_VIDEOUNIT 0x54B2
+#define MATROSKA_ID_TV_ASPECTRATIOTYPE 0x54B3
+#define MATROSKA_ID_TV_COLOURSPACE 0x2EB524
+#define MATROSKA_ID_TV_GAMMAVALUE 0x2FB523
+
+/* Audio */
+#define MATROSKA_ID_TA 0xE1
+#define MATROSKA_ID_TA_SAMPLINGFREQUENCY 0xB5
+#define MATROSKA_ID_TA_OUTPUTSAMPLINGFREQUENCY 0x78B5
+#define MATROSKA_ID_TA_CHANNELS 0x9F
+#define MATROSKA_ID_TA_CHANNELPOSITIONS 0x9F
+#define MATROSKA_ID_TA_BITDEPTH 0x6264
+
+/* Content Encoding */
+#define MATROSKA_ID_CONTENTENCODINGS 0x6D80
+#define MATROSKA_ID_CONTENTENCODING 0x6240
+#define MATROSKA_ID_CE_ORDER 0x5031
+#define MATROSKA_ID_CE_SCOPE 0x5032
+#define MATROSKA_ID_CE_TYPE 0x5033
+#define MATROSKA_ID_CE_COMPRESSION 0x5034
+#define MATROSKA_ID_CE_COMPALGO 0x4254
+#define MATROSKA_ID_CE_COMPSETTINGS 0x4255
+#define MATROSKA_ID_CE_ENCRYPTION 0x5035
+#define MATROSKA_ID_CE_ENCALGO 0x47E1
+#define MATROSKA_ID_CE_ENCKEYID 0x47E2
+#define MATROSKA_ID_CE_SIGNATURE 0x47E3
+#define MATROSKA_ID_CE_SIGKEYID 0x47E4
+#define MATROSKA_ID_CE_SIGALGO 0x47E5
+#define MATROSKA_ID_CE_SIGHASHALGO 0x47E6
+
+/* Cueing Data */
+#define MATROSKA_ID_CUES 0x1C53BB6B
+#define MATROSKA_ID_CU_POINT 0xBB
+#define MATROSKA_ID_CU_TIME 0xB3
+#define MATROSKA_ID_CU_TRACKPOSITION 0xB7
+#define MATROSKA_ID_CU_TRACK 0xF7
+#define MATROSKA_ID_CU_CLUSTERPOSITION 0xF1
+#define MATROSKA_ID_CU_BLOCKNUMBER 0x5387
+#define MATROSKA_ID_CU_CODECSTATE 0xEA
+#define MATROSKA_ID_CU_REFERENCE 0xDB
+#define MATROSKA_ID_CU_REFTIME 0x96
+#define MATROSKA_ID_CU_REFCLUSTER 0x97
+#define MATROSKA_ID_CU_REFNUMBER 0x535F
+#define MATROSKA_ID_CU_REFCODECSTATE 0xEB
+
+/* Attachements */
+#define MATROSKA_ID_ATTACHMENTS 0x1941A469
+#define MATROSKA_ID_AT_FILE 0x61A7
+#define MATROSKA_ID_AT_FILEDESCRIPTION 0x467E
+#define MATROSKA_ID_AT_FILENAME 0x466E
+#define MATROSKA_ID_AT_FILEMIMETYPE 0x4660
+#define MATROSKA_ID_AT_FILEDATA 0x465C
+#define MATROSKA_ID_AT_FILEUID 0x46AE
+
+/* Chapters */
+#define MATROSKA_ID_CHAPTERS 0x1043A770
+#define MATROSKA_ID_CH_EDITIONENTRY 0x45B9
+#define MATROSKA_ID_CH_ATOM 0xB6
+#define MATROSKA_ID_CH_UID 0x73C4
+#define MATROSKA_ID_CH_TIMESTART 0x91
+#define MATROSKA_ID_CH_TIMEEND 0x92
+#define MATROSKA_ID_CH_TRACK 0x8F
+#define MATROSKA_ID_CH_TRACKNUMBER 0x89
+#define MATROSKA_ID_CH_DISPLAY 0x80
+#define MATROSKA_ID_CH_STRING 0x85
+#define MATROSKA_ID_CH_LANGUAGE 0x437C
+#define MATROSKA_ID_CH_COUNTRY 0x437E
+
+/* Tags */
+#define MATROSKA_ID_TAGS 0x1254C367
+
+/* Matroska Track */
+typedef struct {
+ int flag_interlaced;
+ int pixel_witdh;
+ int pixel_height;
+} matroska_video_track_t;
+
+typedef struct {
+ int sampling_freq;
+ int output_sampling_freq;
+ int channels;
+ int bits_per_sample;
+} matroska_audio_track_t;
+
+typedef struct {
+ int track_num;
+
+ uint32_t track_type;
+ uint64_t default_duration;
+ char *language;
+ char *codec_id;
+ uint8_t *codec_private;
+ uint32_t codec_private_len;
+ int default_flag;
+
+ uint32_t buf_type;
+ fifo_buffer_t *fifo;
+
+ matroska_video_track_t *video_track;
+ matroska_audio_track_t *audio_track;
+
+} matroska_track_t;
+
+/* IDs in the tags master */
+
+/*
+ * Matroska Codec IDs. Strings.
+ */
+
+#define MATROSKA_CODEC_ID_V_VFW_FOURCC "V_MS/VFW/FOURCC"
+#define MATROSKA_CODEC_ID_V_UNCOMPRESSED "V_UNCOMPRESSED"
+#define MATROSKA_CODEC_ID_V_MPEG4_SP "V_MPEG4/ISO/SP"
+#define MATROSKA_CODEC_ID_V_MPEG4_ASP "V_MPEG4/ISO/ASP"
+#define MATROSKA_CODEC_ID_V_MPEG4_AP "V_MPEG4/ISO/AP"
+#define MATROSKA_CODEC_ID_V_MSMPEG4V3 "V_MPEG4/MS/V3"
+#define MATROSKA_CODEC_ID_V_MPEG1 "V_MPEG1"
+#define MATROSKA_CODEC_ID_V_MPEG2 "V_MPEG2"
+#define MATROSKA_CODEC_ID_V_MPEG2 "V_MPEG2"
+#define MATROSKA_CODEC_ID_V_REAL_RV10 "V_REAL/RV10"
+#define MATROSKA_CODEC_ID_V_REAL_RV20 "V_REAL/RV20"
+#define MATROSKA_CODEC_ID_V_REAL_RV30 "V_REAL/RV30"
+#define MATROSKA_CODEC_ID_V_REAL_RV40 "V_REAL/RV40"
+#define MATROSKA_CODEC_ID_V_MJPEG "V_MJPEG"
+
+#define MATROSKA_CODEC_ID_A_MPEG1_L1 "A_MPEG/L1"
+#define MATROSKA_CODEC_ID_A_MPEG1_L2 "A_MPEG/L2"
+#define MATROSKA_CODEC_ID_A_MPEG1_L3 "A_MPEG/L3"
+#define MATROSKA_CODEC_ID_A_PCM_INT_BE "A_PCM/INT/BIG"
+#define MATROSKA_CODEC_ID_A_PCM_INT_LE "A_PCM/INT/LIT"
+#define MATROSKA_CODEC_ID_A_PCM_FLOAT "A_PCM/FLOAT/IEEE"
+#define MATROSKA_CODEC_ID_A_AC3 "A_AC3"
+#define MATROSKA_CODEC_ID_A_DTS "A_DTS"
+#define MATROSKA_CODEC_ID_A_VORBIS "A_VORBIS"
+#define MATROSKA_CODEC_ID_A_ACM "A_MS/ACM"
+#define MATROSKA_CODEC_ID_A_AAC "A_AAC/"
+#define MATROSKA_CODEC_ID_A_REAL_14_4 "A_REAL/14_4"
+#define MATROSKA_CODEC_ID_A_REAL_28_8 "A_REAL/28_8"
+#define MATROSKA_CODEC_ID_A_REAL_COOK "A_REAL/COOK"
+#define MATROSKA_CODEC_ID_A_REAL_SIPR "A_REAL/SIPR"
+#define MATROSKA_CODEC_ID_A_REAL_RALF "A_REAL/RALF"
+#define MATROSKA_CODEC_ID_A_REAL_ATRC "A_REAL/ATRC"
+
+/* block lacing */
+#define MATROSKA_NO_LACING 0x0
+#define MATROSKA_XIPH_LACING 0x1
+#define MATROSKA_FIXED_SIZE_LACING 0x2
+#define MATROSKA_EBML_LACING 0x3
+
+/* track types */
+#define MATROSKA_TRACK_VIDEO 0x01
+#define MATROSKA_TRACK_AUDIO 0x02
+#define MATROSKA_TRACK_COMPLEX 0x03
+#define MATROSKA_TRACK_LOGO 0x10
+#define MATROSKA_TRACK_SUBTITLE 0x11
+#define MATROSKA_TRACK_CONTROL 0x20
+
+#endif /* MATROSKA_H */