1 /* GStreamer Matroska muxer/demuxer 2 * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net> 3 * 4 * matroska-ids.h: matroska file/stream data IDs 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public 17 * License along with this library; if not, write to the 18 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22 #ifndef __GST_MATROSKA_IDS_H__ 23 #define __GST_MATROSKA_IDS_H__ 24 25 #include <gst/gst.h> 26 #include <gst/video/video-info.h> 27 28 #include "ebml-ids.h" 29 30 /* 31 * EBML DocType. 32 */ 33 34 #define GST_MATROSKA_DOCTYPE_MATROSKA "matroska" 35 #define GST_MATROSKA_DOCTYPE_WEBM "webm" 36 37 /* 38 * Matroska element IDs. max. 32-bit. 39 */ 40 41 /* toplevel Segment */ 42 #define GST_MATROSKA_ID_SEGMENT 0x18538067 43 44 /* matroska top-level master IDs, childs of Segment */ 45 #define GST_MATROSKA_ID_SEGMENTINFO 0x1549A966 46 #define GST_MATROSKA_ID_TRACKS 0x1654AE6B 47 #define GST_MATROSKA_ID_CUES 0x1C53BB6B 48 #define GST_MATROSKA_ID_TAGS 0x1254C367 49 #define GST_MATROSKA_ID_SEEKHEAD 0x114D9B74 50 #define GST_MATROSKA_ID_CLUSTER 0x1F43B675 51 #define GST_MATROSKA_ID_ATTACHMENTS 0x1941A469 52 #define GST_MATROSKA_ID_CHAPTERS 0x1043A770 53 54 /* IDs in the SegmentInfo master */ 55 #define GST_MATROSKA_ID_TIMECODESCALE 0x2AD7B1 56 #define GST_MATROSKA_ID_DURATION 0x4489 57 #define GST_MATROSKA_ID_WRITINGAPP 0x5741 58 #define GST_MATROSKA_ID_MUXINGAPP 0x4D80 59 #define GST_MATROSKA_ID_DATEUTC 0x4461 60 #define GST_MATROSKA_ID_SEGMENTUID 0x73A4 61 #define GST_MATROSKA_ID_SEGMENTFILENAME 0x7384 62 #define GST_MATROSKA_ID_PREVUID 0x3CB923 63 #define GST_MATROSKA_ID_PREVFILENAME 0x3C83AB 64 #define GST_MATROSKA_ID_NEXTUID 0x3EB923 65 #define GST_MATROSKA_ID_NEXTFILENAME 0x3E83BB 66 #define GST_MATROSKA_ID_TITLE 0x7BA9 67 #define GST_MATROSKA_ID_SEGMENTFAMILY 0x4444 68 #define GST_MATROSKA_ID_CHAPTERTRANSLATE 0x6924 69 70 /* IDs in the ChapterTranslate master */ 71 #define GST_MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID 0x69FC 72 #define GST_MATROSKA_ID_CHAPTERTRANSLATECODEC 0x69BF 73 #define GST_MATROSKA_ID_CHAPTERTRANSLATEID 0x69A5 74 75 /* ID in the Tracks master */ 76 #define GST_MATROSKA_ID_TRACKENTRY 0xAE 77 78 /* IDs in the TrackEntry master */ 79 #define GST_MATROSKA_ID_TRACKNUMBER 0xD7 80 #define GST_MATROSKA_ID_TRACKUID 0x73C5 81 #define GST_MATROSKA_ID_TRACKTYPE 0x83 82 #define GST_MATROSKA_ID_TRACKAUDIO 0xE1 83 #define GST_MATROSKA_ID_TRACKVIDEO 0xE0 84 #define GST_MATROSKA_ID_CONTENTENCODINGS 0x6D80 85 #define GST_MATROSKA_ID_CODECID 0x86 86 #define GST_MATROSKA_ID_CODECPRIVATE 0x63A2 87 #define GST_MATROSKA_ID_CODECNAME 0x258688 88 #define GST_MATROSKA_ID_TRACKNAME 0x536E 89 #define GST_MATROSKA_ID_TRACKLANGUAGE 0x22B59C 90 #define GST_MATROSKA_ID_TRACKFLAGENABLED 0xB9 91 #define GST_MATROSKA_ID_TRACKFLAGDEFAULT 0x88 92 #define GST_MATROSKA_ID_TRACKFLAGFORCED 0x55AA 93 #define GST_MATROSKA_ID_TRACKFLAGLACING 0x9C 94 #define GST_MATROSKA_ID_TRACKMINCACHE 0x6DE7 95 #define GST_MATROSKA_ID_TRACKMAXCACHE 0x6DF8 96 #define GST_MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383 97 #define GST_MATROSKA_ID_TRACKTIMECODESCALE 0x23314F 98 #define GST_MATROSKA_ID_MAXBLOCKADDITIONID 0x55EE 99 #define GST_MATROSKA_ID_TRACKATTACHMENTLINK 0x7446 100 #define GST_MATROSKA_ID_TRACKOVERLAY 0x6FAB 101 #define GST_MATROSKA_ID_TRACKTRANSLATE 0x6624 102 /* semi-draft */ 103 #define GST_MATROSKA_ID_TRACKOFFSET 0x537F 104 /* semi-draft */ 105 #define GST_MATROSKA_ID_CODECSETTINGS 0x3A9697 106 /* semi-draft */ 107 #define GST_MATROSKA_ID_CODECINFOURL 0x3B4040 108 /* semi-draft */ 109 #define GST_MATROSKA_ID_CODECDOWNLOADURL 0x26B240 110 /* semi-draft */ 111 #define GST_MATROSKA_ID_CODECDECODEALL 0xAA 112 #define GST_MATROSKA_ID_SEEKPREROLL 0x56BB 113 #define GST_MATROSKA_ID_CODECDELAY 0x56AA 114 115 /* IDs in the TrackTranslate master */ 116 #define GST_MATROSKA_ID_TRACKTRANSLATEEDITIONUID 0x66FC 117 #define GST_MATROSKA_ID_TRACKTRANSLATECODEC 0x66BF 118 #define GST_MATROSKA_ID_TRACKTRANSLATETRACKID 0x66A5 119 120 121 /* IDs in the TrackVideo master */ 122 /* NOTE: This one is here only for backward compatibility. 123 * Use _TRACKDEFAULDURATION */ 124 #define GST_MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 125 #define GST_MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0 126 #define GST_MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA 127 #define GST_MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2 128 #define GST_MATROSKA_ID_VIDEOPIXELWIDTH 0xB0 129 #define GST_MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA 130 #define GST_MATROSKA_ID_VIDEOPIXELCROPBOTTOM 0x54AA 131 #define GST_MATROSKA_ID_VIDEOPIXELCROPTOP 0x54BB 132 #define GST_MATROSKA_ID_VIDEOPIXELCROPLEFT 0x54CC 133 #define GST_MATROSKA_ID_VIDEOPIXELCROPRIGHT 0x54DD 134 #define GST_MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A 135 /* semi-draft */ 136 #define GST_MATROSKA_ID_VIDEOSTEREOMODE 0x53B8 137 #define GST_MATROSKA_ID_VIDEOASPECTRATIOTYPE 0x54B3 138 #define GST_MATROSKA_ID_VIDEOCOLOURSPACE 0x2EB524 139 /* semi-draft */ 140 #define GST_MATROSKA_ID_VIDEOGAMMAVALUE 0x2FB523 141 142 #define GST_MATROSKA_ID_VIDEOCOLOUR 0x55B0 143 /* IDs in the Colour master*/ 144 #define GST_MATROSKA_ID_VIDEOMATRIXCOEFFICIENTS 0x55B1 145 #define GST_MATROSKA_ID_VIDEORANGE 0x55B9 146 #define GST_MATROSKA_ID_VIDEOTRANSFERCHARACTERISTICS 0x55BA 147 #define GST_MATROSKA_ID_VIDEOPRIMARIES 0x55BB 148 149 /* IDs in the TrackAudio master */ 150 #define GST_MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5 151 #define GST_MATROSKA_ID_AUDIOBITDEPTH 0x6264 152 #define GST_MATROSKA_ID_AUDIOCHANNELS 0x9F 153 /* semi-draft */ 154 #define GST_MATROSKA_ID_AUDIOCHANNELPOSITIONS 0x7D7B 155 #define GST_MATROSKA_ID_AUDIOOUTPUTSAMPLINGFREQ 0x78B5 156 157 /* IDs in the TrackContentEncoding master */ 158 #define GST_MATROSKA_ID_CONTENTENCODING 0x6240 159 160 /* IDs in the ContentEncoding master */ 161 #define GST_MATROSKA_ID_CONTENTENCODINGORDER 0x5031 162 #define GST_MATROSKA_ID_CONTENTENCODINGSCOPE 0x5032 163 #define GST_MATROSKA_ID_CONTENTENCODINGTYPE 0x5033 164 #define GST_MATROSKA_ID_CONTENTCOMPRESSION 0x5034 165 #define GST_MATROSKA_ID_CONTENTENCRYPTION 0x5035 166 167 /* IDs in the ContentCompression master */ 168 #define GST_MATROSKA_ID_CONTENTCOMPALGO 0x4254 169 #define GST_MATROSKA_ID_CONTENTCOMPSETTINGS 0x4255 170 171 /* IDs in the ContentEncryption master */ 172 #define GST_MATROSKA_ID_CONTENTENCALGO 0x47E1 173 #define GST_MATROSKA_ID_CONTENTENCKEYID 0x47E2 174 #define GST_MATROSKA_ID_CONTENTSIGNATURE 0x47E3 175 #define GST_MATROSKA_ID_CONTENTSIGKEYID 0x47E4 176 #define GST_MATROSKA_ID_CONTENTSIGALGO 0x47E5 177 #define GST_MATROSKA_ID_CONTENTSIGHASHALGO 0x47E6 178 /* Added in WebM spec */ 179 #define GST_MATROSKA_ID_CONTENTENCAESSETTINGS 0x47E7 180 #define GST_MATROSKA_ID_AESSETTINGSCIPHERMODE 0x47E8 181 182 /* ID in the CUEs master */ 183 #define GST_MATROSKA_ID_POINTENTRY 0xBB 184 185 /* IDs in the pointentry master */ 186 #define GST_MATROSKA_ID_CUETIME 0xB3 187 #define GST_MATROSKA_ID_CUETRACKPOSITIONS 0xB7 188 189 /* IDs in the CueTrackPositions master */ 190 #define GST_MATROSKA_ID_CUETRACK 0xF7 191 #define GST_MATROSKA_ID_CUECLUSTERPOSITION 0xF1 192 #define GST_MATROSKA_ID_CUEBLOCKNUMBER 0x5378 193 /* semi-draft */ 194 #define GST_MATROSKA_ID_CUECODECSTATE 0xEA 195 /* semi-draft */ 196 #define GST_MATROSKA_ID_CUEREFERENCE 0xDB 197 198 /* IDs in the CueReference master */ 199 /* semi-draft */ 200 #define GST_MATROSKA_ID_CUEREFTIME 0x96 201 /* semi-draft */ 202 #define GST_MATROSKA_ID_CUEREFCLUSTER 0x97 203 /* semi-draft */ 204 #define GST_MATROSKA_ID_CUEREFNUMBER 0x535F 205 /* semi-draft */ 206 #define GST_MATROSKA_ID_CUEREFCODECSTATE 0xEB 207 208 /* IDs in the Tags master */ 209 #define GST_MATROSKA_ID_TAG 0x7373 210 211 /* in the Tag master */ 212 #define GST_MATROSKA_ID_SIMPLETAG 0x67C8 213 #define GST_MATROSKA_ID_TARGETS 0x63C0 214 215 /* in the SimpleTag master */ 216 #define GST_MATROSKA_ID_TAGNAME 0x45A3 217 #define GST_MATROSKA_ID_TAGSTRING 0x4487 218 #define GST_MATROSKA_ID_TAGLANGUAGE 0x447A 219 #define GST_MATROSKA_ID_TAGDEFAULT 0x4484 220 #define GST_MATROSKA_ID_TAGBINARY 0x4485 221 222 /* in the Targets master */ 223 #define GST_MATROSKA_ID_TARGETTYPEVALUE 0x68CA 224 #define GST_MATROSKA_ID_TARGETTYPE 0x63CA 225 #define GST_MATROSKA_ID_TARGETTRACKUID 0x63C5 226 #define GST_MATROSKA_ID_TARGETEDITIONUID 0x63C9 227 #define GST_MATROSKA_ID_TARGETCHAPTERUID 0x63C4 228 #define GST_MATROSKA_ID_TARGETATTACHMENTUID 0x63C6 229 230 /* IDs in the SeekHead master */ 231 #define GST_MATROSKA_ID_SEEKENTRY 0x4DBB 232 233 /* IDs in the SeekEntry master */ 234 #define GST_MATROSKA_ID_SEEKID 0x53AB 235 #define GST_MATROSKA_ID_SEEKPOSITION 0x53AC 236 237 /* IDs in the Cluster master */ 238 #define GST_MATROSKA_ID_CLUSTERTIMECODE 0xE7 239 #define GST_MATROSKA_ID_BLOCKGROUP 0xA0 240 #define GST_MATROSKA_ID_SIMPLEBLOCK 0xA3 241 #define GST_MATROSKA_ID_REFERENCEBLOCK 0xFB 242 #define GST_MATROSKA_ID_POSITION 0xA7 243 #define GST_MATROSKA_ID_PREVSIZE 0xAB 244 /* semi-draft */ 245 #define GST_MATROSKA_ID_ENCRYPTEDBLOCK 0xAF 246 #define GST_MATROSKA_ID_SILENTTRACKS 0x5854 247 248 /* IDs in the SilentTracks master */ 249 #define GST_MATROSKA_ID_SILENTTRACKNUMBER 0x58D7 250 251 /* IDs in the BlockGroup master */ 252 #define GST_MATROSKA_ID_BLOCK 0xA1 253 #define GST_MATROSKA_ID_BLOCKDURATION 0x9B 254 /* semi-draft */ 255 #define GST_MATROSKA_ID_BLOCKVIRTUAL 0xA2 256 #define GST_MATROSKA_ID_REFERENCEBLOCK 0xFB 257 #define GST_MATROSKA_ID_BLOCKADDITIONS 0x75A1 258 #define GST_MATROSKA_ID_REFERENCEPRIORITY 0xFA 259 /* semi-draft */ 260 #define GST_MATROSKA_ID_REFERENCEVIRTUAL 0xFD 261 /* semi-draft */ 262 #define GST_MATROSKA_ID_CODECSTATE 0xA4 263 #define GST_MATROSKA_ID_SLICES 0x8E 264 #define GST_MATROSKA_ID_DISCARDPADDING 0x75A2 265 266 /* IDs in the BlockAdditions master */ 267 #define GST_MATROSKA_ID_BLOCKMORE 0xA6 268 269 /* IDs in the BlockMore master */ 270 #define GST_MATROSKA_ID_BLOCKADDID 0xEE 271 #define GST_MATROSKA_ID_BLOCKADDITIONAL 0xA5 272 273 /* IDs in the Slices master */ 274 #define GST_MATROSKA_ID_TIMESLICE 0xE8 275 276 /* IDs in the TimeSlice master */ 277 #define GST_MATROSKA_ID_LACENUMBER 0xCC 278 /* semi-draft */ 279 #define GST_MATROSKA_ID_FRAMENUMBER 0xCD 280 /* semi-draft */ 281 #define GST_MATROSKA_ID_BLOCKADDITIONID 0xCB 282 /* semi-draft */ 283 #define GST_MATROSKA_ID_TIMESLICEDELAY 0xCE 284 #define GST_MATROSKA_ID_TIMESLICEDURATION 0xCF 285 286 /* IDs in the Attachments master */ 287 #define GST_MATROSKA_ID_ATTACHEDFILE 0x61A7 288 289 /* IDs in the AttachedFile master */ 290 #define GST_MATROSKA_ID_FILEDESCRIPTION 0x467E 291 #define GST_MATROSKA_ID_FILENAME 0x466E 292 #define GST_MATROSKA_ID_FILEMIMETYPE 0x4660 293 #define GST_MATROSKA_ID_FILEDATA 0x465C 294 #define GST_MATROSKA_ID_FILEUID 0x46AE 295 /* semi-draft */ 296 #define GST_MATROSKA_ID_FILEREFERRAL 0x4675 297 298 /* IDs in the Chapters master */ 299 #define GST_MATROSKA_ID_EDITIONENTRY 0x45B9 300 301 /* IDs in the EditionEntry master */ 302 #define GST_MATROSKA_ID_EDITIONUID 0x45BC 303 #define GST_MATROSKA_ID_EDITIONFLAGHIDDEN 0x45BD 304 #define GST_MATROSKA_ID_EDITIONFLAGDEFAULT 0x45DB 305 #define GST_MATROSKA_ID_EDITIONFLAGORDERED 0x45DD 306 #define GST_MATROSKA_ID_CHAPTERATOM 0xB6 307 308 /* IDs in the ChapterAtom master */ 309 #define GST_MATROSKA_ID_CHAPTERUID 0x73C4 310 #define GST_MATROSKA_ID_CHAPTERSTRINGUID 0x5654 311 #define GST_MATROSKA_ID_CHAPTERTIMESTART 0x91 312 #define GST_MATROSKA_ID_CHAPTERTIMESTOP 0x92 313 #define GST_MATROSKA_ID_CHAPTERFLAGHIDDEN 0x98 314 #define GST_MATROSKA_ID_CHAPTERFLAGENABLED 0x4598 315 #define GST_MATROSKA_ID_CHAPTERSEGMENTUID 0x6E67 316 #define GST_MATROSKA_ID_CHAPTERSEGMENTEDITIONUID 0x6EBC 317 #define GST_MATROSKA_ID_CHAPTERPHYSICALEQUIV 0x63C3 318 #define GST_MATROSKA_ID_CHAPTERTRACK 0x8F 319 #define GST_MATROSKA_ID_CHAPTERDISPLAY 0x80 320 #define GST_MATROSKA_ID_CHAPPROCESS 0x6944 321 322 /* IDs in the ChapProcess master */ 323 #define GST_MATROSKA_ID_CHAPPROCESSCODECID 0x6955 324 #define GST_MATROSKA_ID_CHAPPROCESSPRIVATE 0x450D 325 #define GST_MATROSKA_ID_CHAPPROCESSCOMMAND 0x6911 326 327 /* IDs in the ChapProcessCommand master */ 328 #define GST_MATROSKA_ID_CHAPPROCESSTIME 0x6922 329 #define GST_MATROSKA_ID_CHAPPROCESSDATA 0x6933 330 331 /* IDs in the ChapterDisplay master */ 332 #define GST_MATROSKA_ID_CHAPSTRING 0x85 333 #define GST_MATROSKA_ID_CHAPLANGUAGE 0x437C 334 #define GST_MATROSKA_ID_CHAPCOUNTRY 0x437E 335 336 /* IDs in the ChapterTrack master */ 337 #define GST_MATROSKA_ID_CHAPTERTRACKNUMBER 0x89 338 339 /* 340 * Matroska Codec IDs. Strings. 341 */ 342 343 #define GST_MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC "V_MS/VFW/FOURCC" 344 #define GST_MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED "V_UNCOMPRESSED" 345 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_SP "V_MPEG4/ISO/SP" 346 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_ASP "V_MPEG4/ISO/ASP" 347 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AP "V_MPEG4/ISO/AP" 348 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC "V_MPEG4/ISO/AVC" 349 #define GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3 "V_MPEG4/MS/V3" 350 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG1 "V_MPEG1" 351 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG2 "V_MPEG2" 352 /* FIXME: not (yet) in the spec! */ 353 #define GST_MATROSKA_CODEC_ID_VIDEO_MJPEG "V_MJPEG" 354 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO1 "V_REAL/RV10" 355 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO2 "V_REAL/RV20" 356 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO3 "V_REAL/RV30" 357 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO4 "V_REAL/RV40" 358 #define GST_MATROSKA_CODEC_ID_VIDEO_THEORA "V_THEORA" 359 #define GST_MATROSKA_CODEC_ID_VIDEO_QUICKTIME "V_QUICKTIME" 360 #define GST_MATROSKA_CODEC_ID_VIDEO_SNOW "V_SNOW" 361 #define GST_MATROSKA_CODEC_ID_VIDEO_DIRAC "V_DIRAC" 362 #define GST_MATROSKA_CODEC_ID_VIDEO_VP8 "V_VP8" 363 #define GST_MATROSKA_CODEC_ID_VIDEO_VP9 "V_VP9" 364 #define GST_MATROSKA_CODEC_ID_VIDEO_AV1 "V_AV1" 365 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEGH_HEVC "V_MPEGH/ISO/HEVC" 366 #define GST_MATROSKA_CODEC_ID_VIDEO_PRORES "V_PRORES" 367 368 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L1 "A_MPEG/L1" 369 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L2 "A_MPEG/L2" 370 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L3 "A_MPEG/L3" 371 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_BE "A_PCM/INT/BIG" 372 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_LE "A_PCM/INT/LIT" 373 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT "A_PCM/FLOAT/IEEE" 374 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3 "A_AC3" 375 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID9 "A_AC3/BSID9" 376 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID10 "A_AC3/BSID10" 377 #define GST_MATROSKA_CODEC_ID_AUDIO_EAC3 "A_EAC3" 378 #define GST_MATROSKA_CODEC_ID_AUDIO_TRUEHD "A_TRUEHD" 379 #define GST_MATROSKA_CODEC_ID_AUDIO_DTS "A_DTS" 380 #define GST_MATROSKA_CODEC_ID_AUDIO_VORBIS "A_VORBIS" 381 #define GST_MATROSKA_CODEC_ID_AUDIO_FLAC "A_FLAC" 382 /* FIXME: not yet in the spec */ 383 #define GST_MATROSKA_CODEC_ID_AUDIO_SPEEX "A_SPEEX" 384 #define GST_MATROSKA_CODEC_ID_AUDIO_ACM "A_MS/ACM" 385 #define GST_MATROSKA_CODEC_ID_AUDIO_TTA "A_TTA1" 386 #define GST_MATROSKA_CODEC_ID_AUDIO_WAVPACK4 "A_WAVPACK4" 387 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_14_4 "A_REAL/14_4" 388 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_28_8 "A_REAL/28_8" 389 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_COOK "A_REAL/COOK" 390 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_SIPR "A_REAL/SIPR" 391 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_RALF "A_REAL/RALF" 392 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_ATRC "A_REAL/ATRC" 393 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC "A_AAC" 394 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG2 "A_AAC/MPEG2/" 395 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG4 "A_AAC/MPEG4/" 396 #define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDMC "A_QUICKTIME/QDMC" 397 #define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDM2 "A_QUICKTIME/QDM2" 398 #define GST_MATROSKA_CODEC_ID_AUDIO_OPUS "A_OPUS" 399 /* Undefined for now: 400 #define GST_MATROSKA_CODEC_ID_AUDIO_MPC "A_MPC" 401 */ 402 403 #define GST_MATROSKA_CODEC_ID_SUBTITLE_ASCII "S_TEXT/ASCII" 404 #define GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8 "S_TEXT/UTF8" 405 #define GST_MATROSKA_CODEC_ID_SUBTITLE_SSA "S_TEXT/SSA" 406 #define GST_MATROSKA_CODEC_ID_SUBTITLE_ASS "S_TEXT/ASS" 407 #define GST_MATROSKA_CODEC_ID_SUBTITLE_USF "S_TEXT/USF" 408 #define GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB "S_VOBSUB" 409 #define GST_MATROSKA_CODEC_ID_SUBTITLE_HDMVPGS "S_HDMV/PGS" 410 #define GST_MATROSKA_CODEC_ID_SUBTITLE_BMP "S_IMAGE/BMP" 411 #define GST_MATROSKA_CODEC_ID_SUBTITLE_KATE "S_KATE" 412 413 /* 414 * Matroska tags. Strings. 415 */ 416 417 #define GST_MATROSKA_TAG_ID_TITLE "TITLE" 418 #define GST_MATROSKA_TAG_ID_AUTHOR "AUTHOR" 419 #define GST_MATROSKA_TAG_ID_ARTIST "ARTIST" 420 #define GST_MATROSKA_TAG_ID_ALBUM "ALBUM" 421 #define GST_MATROSKA_TAG_ID_COMMENTS "COMMENTS" 422 #define GST_MATROSKA_TAG_ID_COMMENT "COMMENT" 423 #define GST_MATROSKA_TAG_ID_BITSPS "BITSPS" 424 #define GST_MATROSKA_TAG_ID_BPS "BPS" 425 #define GST_MATROSKA_TAG_ID_ENCODER "ENCODER" 426 #define GST_MATROSKA_TAG_ID_ISRC "ISRC" 427 #define GST_MATROSKA_TAG_ID_COPYRIGHT "COPYRIGHT" 428 #define GST_MATROSKA_TAG_ID_BPM "BPM" 429 #define GST_MATROSKA_TAG_ID_TERMS_OF_USE "TERMS_OF_USE" 430 #define GST_MATROSKA_TAG_ID_DATE "DATE" 431 #define GST_MATROSKA_TAG_ID_COMPOSER "COMPOSER" 432 #define GST_MATROSKA_TAG_ID_LEAD_PERFORMER "LEAD_PERFOMER" 433 #define GST_MATROSKA_TAG_ID_GENRE "GENRE" 434 #define GST_MATROSKA_TAG_ID_TOTAL_PARTS "TOTAL_PARTS" 435 #define GST_MATROSKA_TAG_ID_PART_NUMBER "PART_NUMBER" 436 #define GST_MATROSKA_TAG_ID_SUBTITLE "SUBTITLE" 437 #define GST_MATROSKA_TAG_ID_ACCOMPANIMENT "ACCOMPANIMENT" 438 #define GST_MATROSKA_TAG_ID_LYRICS "LYRICS" 439 #define GST_MATROSKA_TAG_ID_CONDUCTOR "CONDUCTOR" 440 #define GST_MATROSKA_TAG_ID_ENCODED_BY "ENCODED_BY" 441 #define GST_MATROSKA_TAG_ID_DESCRIPTION "DESCRIPTION" 442 #define GST_MATROSKA_TAG_ID_KEYWORDS "KEYWORDS" 443 #define GST_MATROSKA_TAG_ID_DATE_RELEASED "DATE_RELEASED" 444 #define GST_MATROSKA_TAG_ID_DATE_RECORDED "DATE_RECORDED" 445 #define GST_MATROSKA_TAG_ID_DATE_ENCODED "DATE_ENCODED" 446 #define GST_MATROSKA_TAG_ID_DATE_TAGGED "DATE_TAGGED" 447 #define GST_MATROSKA_TAG_ID_DATE_DIGITIZED "DATE_DIGITIZED" 448 #define GST_MATROSKA_TAG_ID_DATE_WRITTEN "DATE_WRITTEN" 449 #define GST_MATROSKA_TAG_ID_DATE_PURCHASED "DATE_PURCHASED" 450 #define GST_MATROSKA_TAG_ID_RECORDING_LOCATION "RECORDING_LOCATION" 451 #define GST_MATROSKA_TAG_ID_PRODUCTION_COPYRIGHT "PRODUCTION_COPYRIGHT" 452 #define GST_MATROSKA_TAG_ID_LICENSE "LICENSE" 453 454 /* 455 * TODO: add this tag & mappings 456 * "REPLAYGAIN_GAIN" -> GST_TAG_*_GAIN see http://replaygain.hydrogenaudio.org/rg_data_format.html 457 * "REPLAYGAIN_PEAK" -> GST_TAG_*_PEAK see http://replaygain.hydrogenaudio.org/peak_data_format.html 458 * both are depending on the target (track, album?) 459 * 460 * "TOTAL_PARTS" -> GST_TAG_TRACK_COUNT depending on target 461 * "PART_NUMBER" -> GST_TAG_TRACK_NUMBER depending on target 462 * 463 * "SORT_WITH" -> nested in other elements, GST_TAG_TITLE_SORTNAME, etc 464 * 465 * TODO: maybe add custom gstreamer tags for other standard matroska tags, 466 * see http://matroska.org/technical/specs/tagging/index.html 467 * 468 * TODO: handle tag targets and nesting correctly 469 */ 470 471 /* 472 * Enumerations for various types (mapping from binary 473 * value to what it actually means). 474 */ 475 476 typedef enum { 477 GST_MATROSKA_TRACK_TYPE_VIDEO = 0x1, 478 GST_MATROSKA_TRACK_TYPE_AUDIO = 0x2, 479 GST_MATROSKA_TRACK_TYPE_COMPLEX = 0x3, 480 GST_MATROSKA_TRACK_TYPE_LOGO = 0x10, 481 GST_MATROSKA_TRACK_TYPE_SUBTITLE = 0x11, 482 GST_MATROSKA_TRACK_TYPE_BUTTONS = 0x12, 483 GST_MATROSKA_TRACK_TYPE_CONTROL = 0x20, 484 } GstMatroskaTrackType; 485 486 typedef enum { 487 GST_MATROSKA_ASPECT_RATIO_MODE_FREE = 0x0, 488 GST_MATROSKA_ASPECT_RATIO_MODE_KEEP = 0x1, 489 GST_MATROSKA_ASPECT_RATIO_MODE_FIXED = 0x2, 490 } GstMatroskaAspectRatioMode; 491 492 /* 493 * These aren't in any way "matroska-form" things, 494 * it's just something I use in the muxer/demuxer. 495 */ 496 497 typedef enum { 498 GST_MATROSKA_TRACK_ENABLED = (1<<0), 499 GST_MATROSKA_TRACK_DEFAULT = (1<<1), 500 GST_MATROSKA_TRACK_LACING = (1<<2), 501 GST_MATROSKA_TRACK_FORCED = (1<<3), 502 GST_MATROSKA_TRACK_SHIFT = (1<<16) 503 } GstMatroskaTrackFlags; 504 505 typedef enum { 506 GST_MATROSKA_INTERLACE_MODE_UNKNOWN = 0, 507 GST_MATROSKA_INTERLACE_MODE_INTERLACED = 1, 508 GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE = 2, 509 } GstMatroskaInterlaceMode; 510 511 typedef enum { 512 GST_MATROSKA_STEREO_MODE_SBS_LR = 0x1, 513 GST_MATROSKA_STEREO_MODE_TB_RL = 0x2, 514 GST_MATROSKA_STEREO_MODE_TB_LR = 0x3, 515 GST_MATROSKA_STEREO_MODE_CHECKER_RL = 0x4, 516 GST_MATROSKA_STEREO_MODE_CHECKER_LR = 0x5, 517 GST_MATROSKA_STEREO_MODE_SBS_RL = 0x9, 518 GST_MATROSKA_STEREO_MODE_FBF_LR = 0xD, 519 GST_MATROSKA_STEREO_MODE_FBF_RL = 0xE 520 } GstMatroskaStereoMode; 521 522 typedef enum { 523 GST_MATROSKA_ENCODING_COMPRESSION = 0x00, 524 GST_MATROSKA_ENCODING_ENCRYPTION = 0x01 525 } GstMatroskaEncodingType; 526 527 /* WebM spec */ 528 typedef enum { 529 GST_MATROSKA_BLOCK_ENCRYPTED = 0x01, 530 GST_MATROSKA_BLOCK_PARTITIONED = 0x02 531 } GstMatroskaEncryptedBlockFlags; 532 533 typedef struct _GstMatroskaTrackContext GstMatroskaTrackContext; 534 535 /* TODO: check if all fields are used */ 536 struct _GstMatroskaTrackContext { 537 GstPad *pad; 538 GstCaps *caps; 539 guint index; 540 /* reverse playback */ 541 GstClockTime from_time; 542 gint64 from_offset; 543 gint64 to_offset; 544 545 GArray *index_table; 546 547 gint index_writer_id; 548 549 /* some often-used info */ 550 gchar *codec_id, *codec_name, *name, *language; 551 gpointer codec_priv; 552 gsize codec_priv_size; 553 gpointer codec_state; 554 gsize codec_state_size; 555 GstMatroskaTrackType type; 556 guint64 uid, num; 557 GstMatroskaTrackFlags flags; 558 guint64 default_duration; 559 guint64 pos; 560 gdouble timecodescale; 561 guint64 seek_preroll; 562 guint64 codec_delay; 563 564 gboolean set_discont; /* TRUE = set DISCONT flag on next buffer */ 565 566 /* Queue to save the GST_PROTECTION events which will be sent before the first source buffer */ 567 GQueue protection_event_queue; 568 /* Protection information structure which will be added in protection metadata for each encrypted buffer */ 569 GstStructure * protection_info; 570 571 /* Stream header buffer, to put into caps and send before any other buffers */ 572 GstBufferList * stream_headers; 573 gboolean send_stream_headers; 574 575 /* Special flag for VobSub, for which we have to send colour table info 576 * (if available) first before sending any data, and just testing 577 * for time == 0 is not enough to detect that. Used by demuxer */ 578 gboolean send_dvd_event; 579 580 /* Special counter for muxer to skip the first N vorbis/theora headers - 581 * they are put into codec private data, not muxed into the stream */ 582 guint xiph_headers_to_skip; 583 584 /* Used for postprocessing a frame before it is pushed from the demuxer */ 585 GstFlowReturn (*postprocess_frame) (GstElement *element, 586 GstMatroskaTrackContext *context, 587 GstBuffer **buffer); 588 589 /* List of tags for this stream */ 590 GstTagList *tags; 591 /* Tags changed and should be pushed again */ 592 gboolean tags_changed; 593 594 /* A GArray of GstMatroskaTrackEncoding structures which contain the 595 * encoding (compression/encryption) settings for this track, if any */ 596 GArray *encodings; 597 598 /* Whether the stream is EOS */ 599 gboolean eos; 600 601 /* any alignment we need our output buffers to have */ 602 gint alignment; 603 604 /* for compatibility with VFW files, where timestamp represents DTS */ 605 gboolean dts_only; 606 607 /* indicate that the track is raw (jpeg,raw variants) and so pts=dts */ 608 gboolean intra_only; 609 }; 610 611 typedef struct _GstMatroskaTrackVideoContext { 612 GstMatroskaTrackContext parent; 613 614 guint pixel_width, pixel_height; 615 guint display_width, display_height; 616 gdouble default_fps; 617 GstMatroskaAspectRatioMode asr_mode; 618 guint32 fourcc; 619 620 GstMatroskaInterlaceMode interlace_mode; 621 622 GstVideoMultiviewMode multiview_mode; 623 GstVideoMultiviewFlags multiview_flags; 624 625 /* QoS */ 626 GstClockTime earliest_time; 627 628 GstBuffer *dirac_unit; 629 GstVideoColorimetry colorimetry; 630 } GstMatroskaTrackVideoContext; 631 632 typedef struct _GstMatroskaTrackAudioContext { 633 GstMatroskaTrackContext parent; 634 635 guint samplerate, channels, bitdepth; 636 637 guint32 wvpk_block_index; 638 } GstMatroskaTrackAudioContext; 639 640 typedef struct _GstMatroskaTrackSubtitleContext { 641 GstMatroskaTrackContext parent; 642 643 gboolean check_utf8; /* buffers should be valid UTF-8 */ 644 gboolean check_markup; /* check if buffers contain markup 645 * or plaintext and escape characters */ 646 gboolean invalid_utf8; /* work around broken files */ 647 gboolean seen_markup_tag; /* markup found in text */ 648 } GstMatroskaTrackSubtitleContext; 649 650 typedef struct _GstMatroskaIndex { 651 guint64 pos; /* of the corresponding *cluster*! */ 652 GstClockTime time; /* in nanoseconds */ 653 guint32 block; /* number of the block in the cluster */ 654 guint16 track; /* reference to 'num' */ 655 } GstMatroskaIndex; 656 657 typedef struct _Wavpack4Header { 658 guchar ck_id [4]; /* "wvpk" */ 659 guint32 ck_size; /* size of entire frame (minus 8, of course) */ 660 guint16 version; /* 0x403 for now */ 661 guint8 track_no; /* track number (0 if not used, like now) */ 662 guint8 index_no; /* remember these? (0 if not used, like now) */ 663 guint32 total_samples; /* for entire file (-1 if unknown) */ 664 guint32 block_index; /* index of first sample in block (to file begin) */ 665 guint32 block_samples; /* # samples in this block */ 666 guint32 flags; /* various flags for id and decoding */ 667 guint32 crc; /* crc for actual decoded data */ 668 } Wavpack4Header; 669 670 typedef enum { 671 GST_MATROSKA_TRACK_ENCODING_SCOPE_FRAME = (1<<0), 672 GST_MATROSKA_TRACK_ENCODING_SCOPE_CODEC_DATA = (1<<1), 673 GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING = (1<<2) 674 } GstMatroskaTrackEncodingScope; 675 676 #define MATROSKA_TRACK_ENCODING_SCOPE_TYPE (matroska_track_encoding_scope_get_type()) 677 GType matroska_track_encoding_scope_get_type (void); 678 679 typedef enum { 680 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB = 0, 681 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB = 1, 682 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X = 2, 683 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP = 3 684 } GstMatroskaTrackCompressionAlgorithm; 685 686 /* The encryption algorithm used. The value '0' means that the contents 687 * have not been encrypted but only signed. 688 * Predefined values: 1 - DES; 2 - 3DES; 3 - Twofish; 4 - Blowfish; 5 - AES. 689 * WebM only supports a value of 5 (AES). 690 */ 691 typedef enum { 692 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_NONE = 0, 693 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_DES = 1, 694 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_3DES = 2, 695 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_TWOFISH = 3, 696 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_BLOWFISH = 4, 697 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_AES = 5 698 } GstMatroskaTrackEncryptionAlgorithm; 699 700 #define MATROSKA_TRACK_ENCRYPTION_ALGORITHM_TYPE (matroska_track_encryption_algorithm_get_type()) 701 GType matroska_track_encryption_algorithm_get_type (void); 702 703 /* Defined only in WebM spec. 704 * The cipher mode used in the encryption. Predefined values: 1 - CTR 705 */ 706 typedef enum { 707 GST_MATROSKA_TRACK_ENCRYPTION_CIPHER_MODE_NONE = 0, 708 GST_MATROSKA_TRACK_ENCRYPTION_CIPHER_MODE_CTR = 1 709 } GstMatroskaTrackEncryptionCipherMode; 710 711 #define MATROSKA_TRACK_ENCRYPTION_CIPHER_MODE_TYPE (matroska_track_encryption_cipher_mode_get_type()) 712 GType matroska_track_encryption_cipher_mode_get_type (void); 713 714 715 typedef struct _GstMatroskaTrackEncoding { 716 guint order; 717 guint scope : 3; 718 guint type : 1; 719 guint comp_algo : 2; 720 guint8 *comp_settings; 721 guint comp_settings_length; 722 guint enc_algo : 3; 723 guint enc_cipher_mode : 2; 724 } GstMatroskaTrackEncoding; 725 726 gboolean gst_matroska_track_init_video_context (GstMatroskaTrackContext ** p_context); 727 gboolean gst_matroska_track_init_audio_context (GstMatroskaTrackContext ** p_context); 728 gboolean gst_matroska_track_init_subtitle_context (GstMatroskaTrackContext ** p_context); 729 730 void gst_matroska_register_tags (void); 731 732 GstBufferList * gst_matroska_parse_xiph_stream_headers (gpointer codec_data, 733 gsize codec_data_size); 734 735 GstBufferList * gst_matroska_parse_speex_stream_headers (gpointer codec_data, 736 gsize codec_data_size); 737 738 GstBufferList * gst_matroska_parse_opus_stream_headers (gpointer codec_data, 739 gsize codec_data_size); 740 741 GstBufferList * gst_matroska_parse_flac_stream_headers (gpointer codec_data, 742 gsize codec_data_size); 743 void gst_matroska_track_free (GstMatroskaTrackContext * track); 744 GstClockTime gst_matroska_track_get_buffer_timestamp (GstMatroskaTrackContext * track, GstBuffer *buf); 745 746 #endif /* __GST_MATROSKA_IDS_H__ */ 747