annotate ffmpeg/libavformat/matroska.h @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * Matroska constants
yading@11 3 * Copyright (c) 2003-2004 The ffmpeg Project
yading@11 4 *
yading@11 5 * This file is part of FFmpeg.
yading@11 6 *
yading@11 7 * FFmpeg is free software; you can redistribute it and/or
yading@11 8 * modify it under the terms of the GNU Lesser General Public
yading@11 9 * License as published by the Free Software Foundation; either
yading@11 10 * version 2.1 of the License, or (at your option) any later version.
yading@11 11 *
yading@11 12 * FFmpeg is distributed in the hope that it will be useful,
yading@11 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 15 * Lesser General Public License for more details.
yading@11 16 *
yading@11 17 * You should have received a copy of the GNU Lesser General Public
yading@11 18 * License along with FFmpeg; if not, write to the Free Software
yading@11 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 20 */
yading@11 21
yading@11 22 #ifndef AVFORMAT_MATROSKA_H
yading@11 23 #define AVFORMAT_MATROSKA_H
yading@11 24
yading@11 25 #include "libavcodec/avcodec.h"
yading@11 26 #include "metadata.h"
yading@11 27 #include "internal.h"
yading@11 28
yading@11 29 /* EBML version supported */
yading@11 30 #define EBML_VERSION 1
yading@11 31
yading@11 32 /* top-level master-IDs */
yading@11 33 #define EBML_ID_HEADER 0x1A45DFA3
yading@11 34
yading@11 35 /* IDs in the HEADER master */
yading@11 36 #define EBML_ID_EBMLVERSION 0x4286
yading@11 37 #define EBML_ID_EBMLREADVERSION 0x42F7
yading@11 38 #define EBML_ID_EBMLMAXIDLENGTH 0x42F2
yading@11 39 #define EBML_ID_EBMLMAXSIZELENGTH 0x42F3
yading@11 40 #define EBML_ID_DOCTYPE 0x4282
yading@11 41 #define EBML_ID_DOCTYPEVERSION 0x4287
yading@11 42 #define EBML_ID_DOCTYPEREADVERSION 0x4285
yading@11 43
yading@11 44 /* general EBML types */
yading@11 45 #define EBML_ID_VOID 0xEC
yading@11 46 #define EBML_ID_CRC32 0xBF
yading@11 47
yading@11 48 /*
yading@11 49 * Matroska element IDs, max. 32 bits
yading@11 50 */
yading@11 51
yading@11 52 /* toplevel segment */
yading@11 53 #define MATROSKA_ID_SEGMENT 0x18538067
yading@11 54
yading@11 55 /* Matroska top-level master IDs */
yading@11 56 #define MATROSKA_ID_INFO 0x1549A966
yading@11 57 #define MATROSKA_ID_TRACKS 0x1654AE6B
yading@11 58 #define MATROSKA_ID_CUES 0x1C53BB6B
yading@11 59 #define MATROSKA_ID_TAGS 0x1254C367
yading@11 60 #define MATROSKA_ID_SEEKHEAD 0x114D9B74
yading@11 61 #define MATROSKA_ID_ATTACHMENTS 0x1941A469
yading@11 62 #define MATROSKA_ID_CLUSTER 0x1F43B675
yading@11 63 #define MATROSKA_ID_CHAPTERS 0x1043A770
yading@11 64
yading@11 65 /* IDs in the info master */
yading@11 66 #define MATROSKA_ID_TIMECODESCALE 0x2AD7B1
yading@11 67 #define MATROSKA_ID_DURATION 0x4489
yading@11 68 #define MATROSKA_ID_TITLE 0x7BA9
yading@11 69 #define MATROSKA_ID_WRITINGAPP 0x5741
yading@11 70 #define MATROSKA_ID_MUXINGAPP 0x4D80
yading@11 71 #define MATROSKA_ID_DATEUTC 0x4461
yading@11 72 #define MATROSKA_ID_SEGMENTUID 0x73A4
yading@11 73
yading@11 74 /* ID in the tracks master */
yading@11 75 #define MATROSKA_ID_TRACKENTRY 0xAE
yading@11 76
yading@11 77 /* IDs in the trackentry master */
yading@11 78 #define MATROSKA_ID_TRACKNUMBER 0xD7
yading@11 79 #define MATROSKA_ID_TRACKUID 0x73C5
yading@11 80 #define MATROSKA_ID_TRACKTYPE 0x83
yading@11 81 #define MATROSKA_ID_TRACKVIDEO 0xE0
yading@11 82 #define MATROSKA_ID_TRACKAUDIO 0xE1
yading@11 83 #define MATROSKA_ID_TRACKOPERATION 0xE2
yading@11 84 #define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3
yading@11 85 #define MATROSKA_ID_TRACKPLANE 0xE4
yading@11 86 #define MATROSKA_ID_TRACKPLANEUID 0xE5
yading@11 87 #define MATROSKA_ID_TRACKPLANETYPE 0xE6
yading@11 88 #define MATROSKA_ID_CODECID 0x86
yading@11 89 #define MATROSKA_ID_CODECPRIVATE 0x63A2
yading@11 90 #define MATROSKA_ID_CODECNAME 0x258688
yading@11 91 #define MATROSKA_ID_CODECINFOURL 0x3B4040
yading@11 92 #define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
yading@11 93 #define MATROSKA_ID_CODECDECODEALL 0xAA
yading@11 94 #define MATROSKA_ID_TRACKNAME 0x536E
yading@11 95 #define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
yading@11 96 #define MATROSKA_ID_TRACKFLAGENABLED 0xB9
yading@11 97 #define MATROSKA_ID_TRACKFLAGDEFAULT 0x88
yading@11 98 #define MATROSKA_ID_TRACKFLAGFORCED 0x55AA
yading@11 99 #define MATROSKA_ID_TRACKFLAGLACING 0x9C
yading@11 100 #define MATROSKA_ID_TRACKMINCACHE 0x6DE7
yading@11 101 #define MATROSKA_ID_TRACKMAXCACHE 0x6DF8
yading@11 102 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
yading@11 103 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
yading@11 104 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
yading@11 105 #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
yading@11 106 #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE
yading@11 107
yading@11 108 /* IDs in the trackvideo master */
yading@11 109 #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
yading@11 110 #define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0
yading@11 111 #define MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA
yading@11 112 #define MATROSKA_ID_VIDEOPIXELWIDTH 0xB0
yading@11 113 #define MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA
yading@11 114 #define MATROSKA_ID_VIDEOPIXELCROPB 0x54AA
yading@11 115 #define MATROSKA_ID_VIDEOPIXELCROPT 0x54BB
yading@11 116 #define MATROSKA_ID_VIDEOPIXELCROPL 0x54CC
yading@11 117 #define MATROSKA_ID_VIDEOPIXELCROPR 0x54DD
yading@11 118 #define MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2
yading@11 119 #define MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A
yading@11 120 #define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
yading@11 121 #define MATROSKA_ID_VIDEOALPHAMODE 0x53C0
yading@11 122 #define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3
yading@11 123 #define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524
yading@11 124
yading@11 125 /* IDs in the trackaudio master */
yading@11 126 #define MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5
yading@11 127 #define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ 0x78B5
yading@11 128
yading@11 129 #define MATROSKA_ID_AUDIOBITDEPTH 0x6264
yading@11 130 #define MATROSKA_ID_AUDIOCHANNELS 0x9F
yading@11 131
yading@11 132 /* IDs in the content encoding master */
yading@11 133 #define MATROSKA_ID_ENCODINGORDER 0x5031
yading@11 134 #define MATROSKA_ID_ENCODINGSCOPE 0x5032
yading@11 135 #define MATROSKA_ID_ENCODINGTYPE 0x5033
yading@11 136 #define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034
yading@11 137 #define MATROSKA_ID_ENCODINGCOMPALGO 0x4254
yading@11 138 #define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255
yading@11 139
yading@11 140 #define MATROSKA_ID_ENCODINGENCRYPTION 0x5035
yading@11 141 #define MATROSKA_ID_ENCODINGENCAESSETTINGS 0x47E7
yading@11 142 #define MATROSKA_ID_ENCODINGENCALGO 0x47E1
yading@11 143 #define MATROSKA_ID_ENCODINGENCKEYID 0x47E2
yading@11 144 #define MATROSKA_ID_ENCODINGSIGALGO 0x47E5
yading@11 145 #define MATROSKA_ID_ENCODINGSIGHASHALGO 0x47E6
yading@11 146 #define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4
yading@11 147 #define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3
yading@11 148
yading@11 149 /* ID in the cues master */
yading@11 150 #define MATROSKA_ID_POINTENTRY 0xBB
yading@11 151
yading@11 152 /* IDs in the pointentry master */
yading@11 153 #define MATROSKA_ID_CUETIME 0xB3
yading@11 154 #define MATROSKA_ID_CUETRACKPOSITION 0xB7
yading@11 155
yading@11 156 /* IDs in the cuetrackposition master */
yading@11 157 #define MATROSKA_ID_CUETRACK 0xF7
yading@11 158 #define MATROSKA_ID_CUECLUSTERPOSITION 0xF1
yading@11 159 #define MATROSKA_ID_CUEBLOCKNUMBER 0x5378
yading@11 160
yading@11 161 /* IDs in the tags master */
yading@11 162 #define MATROSKA_ID_TAG 0x7373
yading@11 163 #define MATROSKA_ID_SIMPLETAG 0x67C8
yading@11 164 #define MATROSKA_ID_TAGNAME 0x45A3
yading@11 165 #define MATROSKA_ID_TAGSTRING 0x4487
yading@11 166 #define MATROSKA_ID_TAGLANG 0x447A
yading@11 167 #define MATROSKA_ID_TAGDEFAULT 0x4484
yading@11 168 #define MATROSKA_ID_TAGDEFAULT_BUG 0x44B4
yading@11 169 #define MATROSKA_ID_TAGTARGETS 0x63C0
yading@11 170 #define MATROSKA_ID_TAGTARGETS_TYPE 0x63CA
yading@11 171 #define MATROSKA_ID_TAGTARGETS_TYPEVALUE 0x68CA
yading@11 172 #define MATROSKA_ID_TAGTARGETS_TRACKUID 0x63C5
yading@11 173 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4
yading@11 174 #define MATROSKA_ID_TAGTARGETS_ATTACHUID 0x63C6
yading@11 175
yading@11 176 /* IDs in the seekhead master */
yading@11 177 #define MATROSKA_ID_SEEKENTRY 0x4DBB
yading@11 178
yading@11 179 /* IDs in the seekpoint master */
yading@11 180 #define MATROSKA_ID_SEEKID 0x53AB
yading@11 181 #define MATROSKA_ID_SEEKPOSITION 0x53AC
yading@11 182
yading@11 183 /* IDs in the cluster master */
yading@11 184 #define MATROSKA_ID_CLUSTERTIMECODE 0xE7
yading@11 185 #define MATROSKA_ID_CLUSTERPOSITION 0xA7
yading@11 186 #define MATROSKA_ID_CLUSTERPREVSIZE 0xAB
yading@11 187 #define MATROSKA_ID_BLOCKGROUP 0xA0
yading@11 188 #define MATROSKA_ID_BLOCKADDITIONS 0x75A1
yading@11 189 #define MATROSKA_ID_BLOCKMORE 0xA6
yading@11 190 #define MATROSKA_ID_BLOCKADDID 0xEE
yading@11 191 #define MATROSKA_ID_BLOCKADDITIONAL 0xA5
yading@11 192 #define MATROSKA_ID_SIMPLEBLOCK 0xA3
yading@11 193
yading@11 194 /* IDs in the blockgroup master */
yading@11 195 #define MATROSKA_ID_BLOCK 0xA1
yading@11 196 #define MATROSKA_ID_BLOCKDURATION 0x9B
yading@11 197 #define MATROSKA_ID_BLOCKREFERENCE 0xFB
yading@11 198
yading@11 199 /* IDs in the attachments master */
yading@11 200 #define MATROSKA_ID_ATTACHEDFILE 0x61A7
yading@11 201 #define MATROSKA_ID_FILEDESC 0x467E
yading@11 202 #define MATROSKA_ID_FILENAME 0x466E
yading@11 203 #define MATROSKA_ID_FILEMIMETYPE 0x4660
yading@11 204 #define MATROSKA_ID_FILEDATA 0x465C
yading@11 205 #define MATROSKA_ID_FILEUID 0x46AE
yading@11 206
yading@11 207 /* IDs in the chapters master */
yading@11 208 #define MATROSKA_ID_EDITIONENTRY 0x45B9
yading@11 209 #define MATROSKA_ID_CHAPTERATOM 0xB6
yading@11 210 #define MATROSKA_ID_CHAPTERTIMESTART 0x91
yading@11 211 #define MATROSKA_ID_CHAPTERTIMEEND 0x92
yading@11 212 #define MATROSKA_ID_CHAPTERDISPLAY 0x80
yading@11 213 #define MATROSKA_ID_CHAPSTRING 0x85
yading@11 214 #define MATROSKA_ID_CHAPLANG 0x437C
yading@11 215 #define MATROSKA_ID_EDITIONUID 0x45BC
yading@11 216 #define MATROSKA_ID_EDITIONFLAGHIDDEN 0x45BD
yading@11 217 #define MATROSKA_ID_EDITIONFLAGDEFAULT 0x45DB
yading@11 218 #define MATROSKA_ID_EDITIONFLAGORDERED 0x45DD
yading@11 219 #define MATROSKA_ID_CHAPTERUID 0x73C4
yading@11 220 #define MATROSKA_ID_CHAPTERFLAGHIDDEN 0x98
yading@11 221 #define MATROSKA_ID_CHAPTERFLAGENABLED 0x4598
yading@11 222 #define MATROSKA_ID_CHAPTERPHYSEQUIV 0x63C3
yading@11 223
yading@11 224 typedef enum {
yading@11 225 MATROSKA_TRACK_TYPE_NONE = 0x0,
yading@11 226 MATROSKA_TRACK_TYPE_VIDEO = 0x1,
yading@11 227 MATROSKA_TRACK_TYPE_AUDIO = 0x2,
yading@11 228 MATROSKA_TRACK_TYPE_COMPLEX = 0x3,
yading@11 229 MATROSKA_TRACK_TYPE_LOGO = 0x10,
yading@11 230 MATROSKA_TRACK_TYPE_SUBTITLE = 0x11,
yading@11 231 MATROSKA_TRACK_TYPE_CONTROL = 0x20,
yading@11 232 } MatroskaTrackType;
yading@11 233
yading@11 234 typedef enum {
yading@11 235 MATROSKA_TRACK_ENCODING_COMP_ZLIB = 0,
yading@11 236 MATROSKA_TRACK_ENCODING_COMP_BZLIB = 1,
yading@11 237 MATROSKA_TRACK_ENCODING_COMP_LZO = 2,
yading@11 238 MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP = 3,
yading@11 239 } MatroskaTrackEncodingCompAlgo;
yading@11 240
yading@11 241 typedef enum {
yading@11 242 MATROSKA_VIDEO_STEREOMODE_TYPE_MONO = 0,
yading@11 243 MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT = 1,
yading@11 244 MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP = 2,
yading@11 245 MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM = 3,
yading@11 246 MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL = 4,
yading@11 247 MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR = 5,
yading@11 248 MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL = 6,
yading@11 249 MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR = 7,
yading@11 250 MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL = 8,
yading@11 251 MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR = 9,
yading@11 252 MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED = 10,
yading@11 253 MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT = 11,
yading@11 254 MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG = 12,
yading@11 255 MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR = 13,
yading@11 256 MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL = 14,
yading@11 257 } MatroskaVideoStereoModeType;
yading@11 258
yading@11 259 /*
yading@11 260 * Matroska Codec IDs, strings
yading@11 261 */
yading@11 262
yading@11 263 typedef struct CodecTags{
yading@11 264 char str[20];
yading@11 265 enum AVCodecID id;
yading@11 266 }CodecTags;
yading@11 267
yading@11 268 /* max. depth in the EBML tree structure */
yading@11 269 #define EBML_MAX_DEPTH 16
yading@11 270
yading@11 271 #define MATROSKA_VIDEO_STEREO_MODE_COUNT 15
yading@11 272 #define MATROSKA_VIDEO_STEREO_PLANE_COUNT 3
yading@11 273
yading@11 274 extern const CodecTags ff_mkv_codec_tags[];
yading@11 275 extern const CodecMime ff_mkv_mime_tags[];
yading@11 276 extern const AVMetadataConv ff_mkv_metadata_conv[];
yading@11 277 extern const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREO_MODE_COUNT];
yading@11 278 extern const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT];
yading@11 279
yading@11 280 #endif /* AVFORMAT_MATROSKA_H */