diff options
Diffstat (limited to 'gst/matroska/matroska-ids.h')
-rwxr-xr-x | gst/matroska/matroska-ids.h | 647 |
1 files changed, 647 insertions, 0 deletions
diff --git a/gst/matroska/matroska-ids.h b/gst/matroska/matroska-ids.h new file mode 100755 index 0000000..68a68d4 --- /dev/null +++ b/gst/matroska/matroska-ids.h @@ -0,0 +1,647 @@ +/* GStreamer Matroska muxer/demuxer + * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net> + * + * matroska-ids.h: matroska file/stream data IDs + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_MATROSKA_IDS_H__ +#define __GST_MATROSKA_IDS_H__ + +#include <gst/gst.h> + +#include "ebml-ids.h" + +/* + * EBML DocType. + */ + +#define GST_MATROSKA_DOCTYPE_MATROSKA "matroska" +#define GST_MATROSKA_DOCTYPE_WEBM "webm" + +/* + * Matroska element IDs. max. 32-bit. + */ + +/* toplevel Segment */ +#define GST_MATROSKA_ID_SEGMENT 0x18538067 + +/* matroska top-level master IDs, childs of Segment */ +#define GST_MATROSKA_ID_SEGMENTINFO 0x1549A966 +#define GST_MATROSKA_ID_TRACKS 0x1654AE6B +#define GST_MATROSKA_ID_CUES 0x1C53BB6B +#define GST_MATROSKA_ID_TAGS 0x1254C367 +#define GST_MATROSKA_ID_SEEKHEAD 0x114D9B74 +#define GST_MATROSKA_ID_CLUSTER 0x1F43B675 +#define GST_MATROSKA_ID_ATTACHMENTS 0x1941A469 +#define GST_MATROSKA_ID_CHAPTERS 0x1043A770 + +/* IDs in the SegmentInfo master */ +#define GST_MATROSKA_ID_TIMECODESCALE 0x2AD7B1 +#define GST_MATROSKA_ID_DURATION 0x4489 +#define GST_MATROSKA_ID_WRITINGAPP 0x5741 +#define GST_MATROSKA_ID_MUXINGAPP 0x4D80 +#define GST_MATROSKA_ID_DATEUTC 0x4461 +#define GST_MATROSKA_ID_SEGMENTUID 0x73A4 +#define GST_MATROSKA_ID_SEGMENTFILENAME 0x7384 +#define GST_MATROSKA_ID_PREVUID 0x3CB923 +#define GST_MATROSKA_ID_PREVFILENAME 0x3C83AB +#define GST_MATROSKA_ID_NEXTUID 0x3EB923 +#define GST_MATROSKA_ID_NEXTFILENAME 0x3E83BB +#define GST_MATROSKA_ID_TITLE 0x7BA9 +#define GST_MATROSKA_ID_SEGMENTFAMILY 0x4444 +#define GST_MATROSKA_ID_CHAPTERTRANSLATE 0x6924 + +/* IDs in the ChapterTranslate master */ +#define GST_MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID 0x69FC +#define GST_MATROSKA_ID_CHAPTERTRANSLATECODEC 0x69BF +#define GST_MATROSKA_ID_CHAPTERTRANSLATEID 0x69A5 + +/* ID in the Tracks master */ +#define GST_MATROSKA_ID_TRACKENTRY 0xAE + +/* IDs in the TrackEntry master */ +#define GST_MATROSKA_ID_TRACKNUMBER 0xD7 +#define GST_MATROSKA_ID_TRACKUID 0x73C5 +#define GST_MATROSKA_ID_TRACKTYPE 0x83 +#define GST_MATROSKA_ID_TRACKAUDIO 0xE1 +#define GST_MATROSKA_ID_TRACKVIDEO 0xE0 +#define GST_MATROSKA_ID_CONTENTENCODINGS 0x6D80 +#define GST_MATROSKA_ID_CODECID 0x86 +#define GST_MATROSKA_ID_CODECPRIVATE 0x63A2 +#define GST_MATROSKA_ID_CODECNAME 0x258688 +#define GST_MATROSKA_ID_TRACKNAME 0x536E +#define GST_MATROSKA_ID_TRACKLANGUAGE 0x22B59C +#define GST_MATROSKA_ID_TRACKFLAGENABLED 0xB9 +#define GST_MATROSKA_ID_TRACKFLAGDEFAULT 0x88 +#define GST_MATROSKA_ID_TRACKFLAGFORCED 0x55AA +#define GST_MATROSKA_ID_TRACKFLAGLACING 0x9C +#define GST_MATROSKA_ID_TRACKMINCACHE 0x6DE7 +#define GST_MATROSKA_ID_TRACKMAXCACHE 0x6DF8 +#define GST_MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383 +#define GST_MATROSKA_ID_TRACKTIMECODESCALE 0x23314F +#define GST_MATROSKA_ID_MAXBLOCKADDITIONID 0x55EE +#define GST_MATROSKA_ID_TRACKATTACHMENTLINK 0x7446 +#define GST_MATROSKA_ID_TRACKOVERLAY 0x6FAB +#define GST_MATROSKA_ID_TRACKTRANSLATE 0x6624 +/* semi-draft */ +#define GST_MATROSKA_ID_TRACKOFFSET 0x537F +/* semi-draft */ +#define GST_MATROSKA_ID_CODECSETTINGS 0x3A9697 +/* semi-draft */ +#define GST_MATROSKA_ID_CODECINFOURL 0x3B4040 +/* semi-draft */ +#define GST_MATROSKA_ID_CODECDOWNLOADURL 0x26B240 +/* semi-draft */ +#define GST_MATROSKA_ID_CODECDECODEALL 0xAA + +/* IDs in the TrackTranslate master */ +#define GST_MATROSKA_ID_TRACKTRANSLATEEDITIONUID 0x66FC +#define GST_MATROSKA_ID_TRACKTRANSLATECODEC 0x66BF +#define GST_MATROSKA_ID_TRACKTRANSLATETRACKID 0x66A5 + + +/* IDs in the TrackVideo master */ +/* NOTE: This one is here only for backward compatibility. + * Use _TRACKDEFAULDURATION */ +#define GST_MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 +#define GST_MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0 +#define GST_MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA +#define GST_MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2 +#define GST_MATROSKA_ID_VIDEOPIXELWIDTH 0xB0 +#define GST_MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA +#define GST_MATROSKA_ID_VIDEOPIXELCROPBOTTOM 0x54AA +#define GST_MATROSKA_ID_VIDEOPIXELCROPTOP 0x54BB +#define GST_MATROSKA_ID_VIDEOPIXELCROPLEFT 0x54CC +#define GST_MATROSKA_ID_VIDEOPIXELCROPRIGHT 0x54DD +#define GST_MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A +/* semi-draft */ +#define GST_MATROSKA_ID_VIDEOSTEREOMODE 0x53B8 +#define GST_MATROSKA_ID_VIDEOASPECTRATIOTYPE 0x54B3 +#define GST_MATROSKA_ID_VIDEOCOLOURSPACE 0x2EB524 +/* semi-draft */ +#define GST_MATROSKA_ID_VIDEOGAMMAVALUE 0x2FB523 + +/* IDs in the TrackAudio master */ +#define GST_MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5 +#define GST_MATROSKA_ID_AUDIOBITDEPTH 0x6264 +#define GST_MATROSKA_ID_AUDIOCHANNELS 0x9F +/* semi-draft */ +#define GST_MATROSKA_ID_AUDIOCHANNELPOSITIONS 0x7D7B +#define GST_MATROSKA_ID_AUDIOOUTPUTSAMPLINGFREQ 0x78B5 + +/* IDs in the TrackContentEncoding master */ +#define GST_MATROSKA_ID_CONTENTENCODING 0x6240 + +/* IDs in the ContentEncoding master */ +#define GST_MATROSKA_ID_CONTENTENCODINGORDER 0x5031 +#define GST_MATROSKA_ID_CONTENTENCODINGSCOPE 0x5032 +#define GST_MATROSKA_ID_CONTENTENCODINGTYPE 0x5033 +#define GST_MATROSKA_ID_CONTENTCOMPRESSION 0x5034 +#define GST_MATROSKA_ID_CONTENTENCRYPTION 0x5035 + +/* IDs in the ContentCompression master */ +#define GST_MATROSKA_ID_CONTENTCOMPALGO 0x4254 +#define GST_MATROSKA_ID_CONTENTCOMPSETTINGS 0x4255 + +/* IDs in the ContentEncryption master */ +#define GST_MATROSKA_ID_CONTENTENCALGO 0x47E1 +#define GST_MATROSKA_ID_CONTENTENCKEYID 0x47E2 +#define GST_MATROSKA_ID_CONTENTSIGNATURE 0x47E3 +#define GST_MATROSKA_ID_CONTENTSIGKEYID 0x47E4 +#define GST_MATROSKA_ID_CONTENTSIGALGO 0x47E5 +#define GST_MATROSKA_ID_CONTENTSIGHASHALGO 0x47E6 + +/* ID in the CUEs master */ +#define GST_MATROSKA_ID_POINTENTRY 0xBB + +/* IDs in the pointentry master */ +#define GST_MATROSKA_ID_CUETIME 0xB3 +#define GST_MATROSKA_ID_CUETRACKPOSITIONS 0xB7 + +/* IDs in the CueTrackPositions master */ +#define GST_MATROSKA_ID_CUETRACK 0xF7 +#define GST_MATROSKA_ID_CUECLUSTERPOSITION 0xF1 +#define GST_MATROSKA_ID_CUEBLOCKNUMBER 0x5378 +/* semi-draft */ +#define GST_MATROSKA_ID_CUECODECSTATE 0xEA +/* semi-draft */ +#define GST_MATROSKA_ID_CUEREFERENCE 0xDB + +/* IDs in the CueReference master */ +/* semi-draft */ +#define GST_MATROSKA_ID_CUEREFTIME 0x96 +/* semi-draft */ +#define GST_MATROSKA_ID_CUEREFCLUSTER 0x97 +/* semi-draft */ +#define GST_MATROSKA_ID_CUEREFNUMBER 0x535F +/* semi-draft */ +#define GST_MATROSKA_ID_CUEREFCODECSTATE 0xEB + +/* IDs in the Tags master */ +#define GST_MATROSKA_ID_TAG 0x7373 + +/* in the Tag master */ +#define GST_MATROSKA_ID_SIMPLETAG 0x67C8 +#define GST_MATROSKA_ID_TARGETS 0x63C0 + +/* in the SimpleTag master */ +#define GST_MATROSKA_ID_TAGNAME 0x45A3 +#define GST_MATROSKA_ID_TAGSTRING 0x4487 +#define GST_MATROSKA_ID_TAGLANGUAGE 0x447A +#define GST_MATROSKA_ID_TAGDEFAULT 0x4484 +#define GST_MATROSKA_ID_TAGBINARY 0x4485 + +/* in the Targets master */ +#define GST_MATROSKA_ID_TARGETTYPEVALUE 0x68CA +#define GST_MATROSKA_ID_TARGETTYPE 0x63CA +#define GST_MATROSKA_ID_TARGETTRACKUID 0x63C5 +#define GST_MATROSKA_ID_TARGETEDITIONUID 0x63C9 +#define GST_MATROSKA_ID_TARGETCHAPTERUID 0x63C4 +#define GST_MATROSKA_ID_TARGETATTACHMENTUID 0x63C6 + +/* IDs in the SeekHead master */ +#define GST_MATROSKA_ID_SEEKENTRY 0x4DBB + +/* IDs in the SeekEntry master */ +#define GST_MATROSKA_ID_SEEKID 0x53AB +#define GST_MATROSKA_ID_SEEKPOSITION 0x53AC + +/* IDs in the Cluster master */ +#define GST_MATROSKA_ID_CLUSTERTIMECODE 0xE7 +#define GST_MATROSKA_ID_BLOCKGROUP 0xA0 +#define GST_MATROSKA_ID_SIMPLEBLOCK 0xA3 +#define GST_MATROSKA_ID_REFERENCEBLOCK 0xFB +#define GST_MATROSKA_ID_POSITION 0xA7 +#define GST_MATROSKA_ID_PREVSIZE 0xAB +/* semi-draft */ +#define GST_MATROSKA_ID_ENCRYPTEDBLOCK 0xAF +#define GST_MATROSKA_ID_SILENTTRACKS 0x5854 + +/* IDs in the SilentTracks master */ +#define GST_MATROSKA_ID_SILENTTRACKNUMBER 0x58D7 + +/* IDs in the BlockGroup master */ +#define GST_MATROSKA_ID_BLOCK 0xA1 +#define GST_MATROSKA_ID_BLOCKDURATION 0x9B +/* semi-draft */ +#define GST_MATROSKA_ID_BLOCKVIRTUAL 0xA2 +#define GST_MATROSKA_ID_REFERENCEBLOCK 0xFB +#define GST_MATROSKA_ID_BLOCKADDITIONS 0x75A1 +#define GST_MATROSKA_ID_REFERENCEPRIORITY 0xFA +/* semi-draft */ +#define GST_MATROSKA_ID_REFERENCEVIRTUAL 0xFD +/* semi-draft */ +#define GST_MATROSKA_ID_CODECSTATE 0xA4 +#define GST_MATROSKA_ID_SLICES 0x8E + +/* IDs in the BlockAdditions master */ +#define GST_MATROSKA_ID_BLOCKMORE 0xA6 + +/* IDs in the BlockMore master */ +#define GST_MATROSKA_ID_BLOCKADDID 0xEE +#define GST_MATROSKA_ID_BLOCKADDITIONAL 0xA5 + +/* IDs in the Slices master */ +#define GST_MATROSKA_ID_TIMESLICE 0xE8 + +/* IDs in the TimeSlice master */ +#define GST_MATROSKA_ID_LACENUMBER 0xCC +/* semi-draft */ +#define GST_MATROSKA_ID_FRAMENUMBER 0xCD +/* semi-draft */ +#define GST_MATROSKA_ID_BLOCKADDITIONID 0xCB +/* semi-draft */ +#define GST_MATROSKA_ID_TIMESLICEDELAY 0xCE +#define GST_MATROSKA_ID_TIMESLICEDURATION 0xCF + +/* IDs in the Attachments master */ +#define GST_MATROSKA_ID_ATTACHEDFILE 0x61A7 + +/* IDs in the AttachedFile master */ +#define GST_MATROSKA_ID_FILEDESCRIPTION 0x467E +#define GST_MATROSKA_ID_FILENAME 0x466E +#define GST_MATROSKA_ID_FILEMIMETYPE 0x4660 +#define GST_MATROSKA_ID_FILEDATA 0x465C +#define GST_MATROSKA_ID_FILEUID 0x46AE +/* semi-draft */ +#define GST_MATROSKA_ID_FILEREFERRAL 0x4675 + +/* IDs in the Chapters master */ +#define GST_MATROSKA_ID_EDITIONENTRY 0x45B9 + +/* IDs in the EditionEntry master */ +#define GST_MATROSKA_ID_EDITIONUID 0x45BC +#define GST_MATROSKA_ID_EDITIONFLAGHIDDEN 0x45BD +#define GST_MATROSKA_ID_EDITIONFLAGDEFAULT 0x45DB +#define GST_MATROSKA_ID_EDITIONFLAGORDERED 0x45DD +#define GST_MATROSKA_ID_CHAPTERATOM 0xB6 + +/* IDs in the ChapterAtom master */ +#define GST_MATROSKA_ID_CHAPTERUID 0x73C4 +#define GST_MATROSKA_ID_CHAPTERTIMESTART 0x91 +#define GST_MATROSKA_ID_CHAPTERTIMESTOP 0x92 +#define GST_MATROSKA_ID_CHAPTERFLAGHIDDEN 0x98 +#define GST_MATROSKA_ID_CHAPTERFLAGENABLED 0x4598 +#define GST_MATROSKA_ID_CHAPTERSEGMENTUID 0x6E67 +#define GST_MATROSKA_ID_CHAPTERSEGMENTEDITIONUID 0x6EBC +#define GST_MATROSKA_ID_CHAPTERPHYSICALEQUIV 0x63C3 +#define GST_MATROSKA_ID_CHAPTERTRACK 0x8F +#define GST_MATROSKA_ID_CHAPTERDISPLAY 0x80 +#define GST_MATROSKA_ID_CHAPPROCESS 0x6944 + +/* IDs in the ChapProcess master */ +#define GST_MATROSKA_ID_CHAPPROCESSCODECID 0x6955 +#define GST_MATROSKA_ID_CHAPPROCESSPRIVATE 0x450D +#define GST_MATROSKA_ID_CHAPPROCESSCOMMAND 0x6911 + +/* IDs in the ChapProcessCommand master */ +#define GST_MATROSKA_ID_CHAPPROCESSTIME 0x6922 +#define GST_MATROSKA_ID_CHAPPROCESSDATA 0x6933 + +/* IDs in the ChapterDisplay master */ +#define GST_MATROSKA_ID_CHAPSTRING 0x85 +#define GST_MATROSKA_ID_CHAPLANGUAGE 0x437C +#define GST_MATROSKA_ID_CHAPCOUNTRY 0x437E + +/* IDs in the ChapterTrack master */ +#define GST_MATROSKA_ID_CHAPTERTRACKNUMBER 0x89 + +/* + * Matroska Codec IDs. Strings. + */ + +#define GST_MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC "V_MS/VFW/FOURCC" +#define GST_MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED "V_UNCOMPRESSED" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_SP "V_MPEG4/ISO/SP" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_ASP "V_MPEG4/ISO/ASP" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AP "V_MPEG4/ISO/AP" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC "V_MPEG4/ISO/AVC" +#define GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3 "V_MPEG4/MS/V3" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEG1 "V_MPEG1" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEG2 "V_MPEG2" +/* FIXME: not (yet) in the spec! */ +#define GST_MATROSKA_CODEC_ID_VIDEO_MJPEG "V_MJPEG" +#define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO1 "V_REAL/RV10" +#define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO2 "V_REAL/RV20" +#define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO3 "V_REAL/RV30" +#define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO4 "V_REAL/RV40" +#define GST_MATROSKA_CODEC_ID_VIDEO_THEORA "V_THEORA" +#define GST_MATROSKA_CODEC_ID_VIDEO_QUICKTIME "V_QUICKTIME" +#define GST_MATROSKA_CODEC_ID_VIDEO_SNOW "V_SNOW" +#define GST_MATROSKA_CODEC_ID_VIDEO_DIRAC "V_DIRAC" +#define GST_MATROSKA_CODEC_ID_VIDEO_VP8 "V_VP8" +#define GST_MATROSKA_CODEC_ID_VIDEO_VP9 "V_VP9" +#define GST_MATROSKA_CODEC_ID_VIDEO_MPEGH_HEVC "V_MPEGH/ISO/HEVC" + +#define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L1 "A_MPEG/L1" +#define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L2 "A_MPEG/L2" +#define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L3 "A_MPEG/L3" +#define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_BE "A_PCM/INT/BIG" +#define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_LE "A_PCM/INT/LIT" +#define GST_MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT "A_PCM/FLOAT/IEEE" +#define GST_MATROSKA_CODEC_ID_AUDIO_AC3 "A_AC3" +#define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID9 "A_AC3/BSID9" +#define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID10 "A_AC3/BSID10" +#define GST_MATROSKA_CODEC_ID_AUDIO_EAC3 "A_EAC3" +#define GST_MATROSKA_CODEC_ID_AUDIO_TRUEHD "A_TRUEHD" +#define GST_MATROSKA_CODEC_ID_AUDIO_DTS "A_DTS" +#define GST_MATROSKA_CODEC_ID_AUDIO_VORBIS "A_VORBIS" +#define GST_MATROSKA_CODEC_ID_AUDIO_FLAC "A_FLAC" +/* FIXME: not yet in the spec */ +#define GST_MATROSKA_CODEC_ID_AUDIO_SPEEX "A_SPEEX" +#define GST_MATROSKA_CODEC_ID_AUDIO_ACM "A_MS/ACM" +#define GST_MATROSKA_CODEC_ID_AUDIO_TTA "A_TTA1" +#define GST_MATROSKA_CODEC_ID_AUDIO_WAVPACK4 "A_WAVPACK4" +#define GST_MATROSKA_CODEC_ID_AUDIO_REAL_14_4 "A_REAL/14_4" +#define GST_MATROSKA_CODEC_ID_AUDIO_REAL_28_8 "A_REAL/28_8" +#define GST_MATROSKA_CODEC_ID_AUDIO_REAL_COOK "A_REAL/COOK" +#define GST_MATROSKA_CODEC_ID_AUDIO_REAL_SIPR "A_REAL/SIPR" +#define GST_MATROSKA_CODEC_ID_AUDIO_REAL_RALF "A_REAL/RALF" +#define GST_MATROSKA_CODEC_ID_AUDIO_REAL_ATRC "A_REAL/ATRC" +#define GST_MATROSKA_CODEC_ID_AUDIO_AAC "A_AAC" +#define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG2 "A_AAC/MPEG2/" +#define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG4 "A_AAC/MPEG4/" +#define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDMC "A_QUICKTIME/QDMC" +#define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDM2 "A_QUICKTIME/QDM2" +#define GST_MATROSKA_CODEC_ID_AUDIO_OPUS "A_OPUS" +/* Undefined for now: +#define GST_MATROSKA_CODEC_ID_AUDIO_MPC "A_MPC" +*/ + +#define GST_MATROSKA_CODEC_ID_SUBTITLE_ASCII "S_TEXT/ASCII" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8 "S_TEXT/UTF8" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_SSA "S_TEXT/SSA" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_ASS "S_TEXT/ASS" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_USF "S_TEXT/USF" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB "S_VOBSUB" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_HDMVPGS "S_HDMV/PGS" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_BMP "S_IMAGE/BMP" +#define GST_MATROSKA_CODEC_ID_SUBTITLE_KATE "S_KATE" + +/* + * Matroska tags. Strings. + */ + +#define GST_MATROSKA_TAG_ID_TITLE "TITLE" +#define GST_MATROSKA_TAG_ID_AUTHOR "AUTHOR" +#define GST_MATROSKA_TAG_ID_ARTIST "ARTIST" +#define GST_MATROSKA_TAG_ID_ALBUM "ALBUM" +#define GST_MATROSKA_TAG_ID_COMMENTS "COMMENTS" +#define GST_MATROSKA_TAG_ID_COMMENT "COMMENT" +#define GST_MATROSKA_TAG_ID_BITSPS "BITSPS" +#define GST_MATROSKA_TAG_ID_BPS "BPS" +#define GST_MATROSKA_TAG_ID_ENCODER "ENCODER" +#define GST_MATROSKA_TAG_ID_ISRC "ISRC" +#define GST_MATROSKA_TAG_ID_COPYRIGHT "COPYRIGHT" +#define GST_MATROSKA_TAG_ID_BPM "BPM" +#define GST_MATROSKA_TAG_ID_TERMS_OF_USE "TERMS_OF_USE" +#define GST_MATROSKA_TAG_ID_DATE "DATE" +#define GST_MATROSKA_TAG_ID_COMPOSER "COMPOSER" +#define GST_MATROSKA_TAG_ID_LEAD_PERFORMER "LEAD_PERFOMER" +#define GST_MATROSKA_TAG_ID_GENRE "GENRE" +#define GST_MATROSKA_TAG_ID_TOTAL_PARTS "TOTAL_PARTS" +#define GST_MATROSKA_TAG_ID_PART_NUMBER "PART_NUMBER" +#define GST_MATROSKA_TAG_ID_SUBTITLE "SUBTITLE" +#define GST_MATROSKA_TAG_ID_ACCOMPANIMENT "ACCOMPANIMENT" +#define GST_MATROSKA_TAG_ID_LYRICS "LYRICS" +#define GST_MATROSKA_TAG_ID_CONDUCTOR "CONDUCTOR" +#define GST_MATROSKA_TAG_ID_ENCODED_BY "ENCODED_BY" +#define GST_MATROSKA_TAG_ID_DESCRIPTION "DESCRIPTION" +#define GST_MATROSKA_TAG_ID_KEYWORDS "KEYWORDS" +#define GST_MATROSKA_TAG_ID_DATE_RELEASED "DATE_RELEASED" +#define GST_MATROSKA_TAG_ID_DATE_RECORDED "DATE_RECORDED" +#define GST_MATROSKA_TAG_ID_DATE_ENCODED "DATE_ENCODED" +#define GST_MATROSKA_TAG_ID_DATE_TAGGED "DATE_TAGGED" +#define GST_MATROSKA_TAG_ID_DATE_DIGITIZED "DATE_DIGITIZED" +#define GST_MATROSKA_TAG_ID_DATE_WRITTEN "DATE_WRITTEN" +#define GST_MATROSKA_TAG_ID_DATE_PURCHASED "DATE_PURCHASED" +#define GST_MATROSKA_TAG_ID_RECORDING_LOCATION "RECORDING_LOCATION" +#define GST_MATROSKA_TAG_ID_PRODUCTION_COPYRIGHT "PRODUCTION_COPYRIGHT" +#define GST_MATROSKA_TAG_ID_LICENSE "LICENSE" + +/* + * TODO: add this tag & mappings + * "REPLAYGAIN_GAIN" -> GST_TAG_*_GAIN see http://replaygain.hydrogenaudio.org/rg_data_format.html + * "REPLAYGAIN_PEAK" -> GST_TAG_*_PEAK see http://replaygain.hydrogenaudio.org/peak_data_format.html + * both are depending on the target (track, album?) + * + * "TOTAL_PARTS" -> GST_TAG_TRACK_COUNT depending on target + * "PART_NUMBER" -> GST_TAG_TRACK_NUMBER depending on target + * + * "SORT_WITH" -> nested in other elements, GST_TAG_TITLE_SORTNAME, etc + * + * TODO: maybe add custom gstreamer tags for other standard matroska tags, + * see http://matroska.org/technical/specs/tagging/index.html + * + * TODO: handle tag targets and nesting correctly + */ + +/* + * Enumerations for various types (mapping from binary + * value to what it actually means). + */ + +typedef enum { + GST_MATROSKA_TRACK_TYPE_VIDEO = 0x1, + GST_MATROSKA_TRACK_TYPE_AUDIO = 0x2, + GST_MATROSKA_TRACK_TYPE_COMPLEX = 0x3, + GST_MATROSKA_TRACK_TYPE_LOGO = 0x10, + GST_MATROSKA_TRACK_TYPE_SUBTITLE = 0x11, + GST_MATROSKA_TRACK_TYPE_BUTTONS = 0x12, + GST_MATROSKA_TRACK_TYPE_CONTROL = 0x20, +} GstMatroskaTrackType; + +typedef enum { + GST_MATROSKA_ASPECT_RATIO_MODE_FREE = 0x0, + GST_MATROSKA_ASPECT_RATIO_MODE_KEEP = 0x1, + GST_MATROSKA_ASPECT_RATIO_MODE_FIXED = 0x2, +} GstMatroskaAspectRatioMode; + +/* + * These aren't in any way "matroska-form" things, + * it's just something I use in the muxer/demuxer. + */ + +typedef enum { + GST_MATROSKA_TRACK_ENABLED = (1<<0), + GST_MATROSKA_TRACK_DEFAULT = (1<<1), + GST_MATROSKA_TRACK_LACING = (1<<2), + GST_MATROSKA_TRACK_FORCED = (1<<3), + GST_MATROSKA_TRACK_SHIFT = (1<<16) +} GstMatroskaTrackFlags; + +typedef enum { + GST_MATROSKA_VIDEOTRACK_INTERLACED = (GST_MATROSKA_TRACK_SHIFT<<0) +} GstMatroskaVideoTrackFlags; + + +typedef struct _GstMatroskaTrackContext GstMatroskaTrackContext; + +/* TODO: check if all fields are used */ +struct _GstMatroskaTrackContext { + GstPad *pad; + GstCaps *caps; + guint index; + /* reverse playback */ + GstClockTime from_time; + gint64 from_offset; + gint64 to_offset; + + GArray *index_table; + + gint index_writer_id; + + /* some often-used info */ + gchar *codec_id, *codec_name, *name, *language; + gpointer codec_priv; + gsize codec_priv_size; + gpointer codec_state; + gsize codec_state_size; + GstMatroskaTrackType type; + guint64 uid, num; + GstMatroskaTrackFlags flags; + guint64 default_duration; + guint64 pos; + gdouble timecodescale; + + gboolean set_discont; /* TRUE = set DISCONT flag on next buffer */ + + /* Stream header buffer, to put into caps and send before any other buffers */ + GstBufferList * stream_headers; + gboolean send_stream_headers; + + /* Special flag for VobSub, for which we have to send colour table info + * (if available) first before sending any data, and just testing + * for time == 0 is not enough to detect that. Used by demuxer */ + gboolean send_dvd_event; + + /* Special counter for muxer to skip the first N vorbis/theora headers - + * they are put into codec private data, not muxed into the stream */ + guint xiph_headers_to_skip; + + /* Used for postprocessing a frame before it is pushed from the demuxer */ + GstFlowReturn (*postprocess_frame) (GstElement *element, + GstMatroskaTrackContext *context, + GstBuffer **buffer); + + /* Tags to send after newsegment event */ + GstTagList *pending_tags; + + /* A GArray of GstMatroskaTrackEncoding structures which contain the + * encoding (compression/encryption) settings for this track, if any */ + GArray *encodings; + + /* Whether the stream is EOS */ + gboolean eos; + + /* any alignment we need our output buffers to have */ + gint alignment; +}; + +typedef struct _GstMatroskaTrackVideoContext { + GstMatroskaTrackContext parent; + + guint pixel_width, pixel_height; + guint display_width, display_height; + gdouble default_fps; + GstMatroskaAspectRatioMode asr_mode; + guint32 fourcc; + + /* QoS */ + GstClockTime earliest_time; + + GstBuffer *dirac_unit; +} GstMatroskaTrackVideoContext; + +typedef struct _GstMatroskaTrackAudioContext { + GstMatroskaTrackContext parent; + + guint samplerate, channels, bitdepth; + + guint32 wvpk_block_index; +} GstMatroskaTrackAudioContext; + +typedef struct _GstMatroskaTrackSubtitleContext { + GstMatroskaTrackContext parent; + + gboolean check_utf8; /* buffers should be valid UTF-8 */ + gboolean check_markup; /* check if buffers contain markup + * or plaintext and escape characters */ + gboolean invalid_utf8; /* work around broken files */ + gboolean seen_markup_tag; /* markup found in text */ +} GstMatroskaTrackSubtitleContext; + +typedef struct _GstMatroskaIndex { + guint64 pos; /* of the corresponding *cluster*! */ + guint16 track; /* reference to 'num' */ + GstClockTime time; /* in nanoseconds */ + guint32 block; /* number of the block in the cluster */ +} GstMatroskaIndex; + +typedef struct _Wavpack4Header { + guchar ck_id [4]; /* "wvpk" */ + guint32 ck_size; /* size of entire frame (minus 8, of course) */ + guint16 version; /* 0x403 for now */ + guint8 track_no; /* track number (0 if not used, like now) */ + guint8 index_no; /* remember these? (0 if not used, like now) */ + guint32 total_samples; /* for entire file (-1 if unknown) */ + guint32 block_index; /* index of first sample in block (to file begin) */ + guint32 block_samples; /* # samples in this block */ + guint32 flags; /* various flags for id and decoding */ + guint32 crc; /* crc for actual decoded data */ +} Wavpack4Header; + +typedef enum { + GST_MATROSKA_TRACK_ENCODING_SCOPE_FRAME = (1<<0), + GST_MATROSKA_TRACK_ENCODING_SCOPE_CODEC_DATA = (1<<1), + GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING = (1<<2) +} GstMatroskaTrackEncodingScope; + +typedef enum { + GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB = 0, + GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB = 1, + GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X = 2, + GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP = 3 +} GstMatroskaTrackCompressionAlgorithm; + +typedef struct _GstMatroskaTrackEncoding { + guint order; + guint scope : 3; + guint type : 1; + guint comp_algo : 2; + guint8 *comp_settings; + guint comp_settings_length; +} GstMatroskaTrackEncoding; + +gboolean gst_matroska_track_init_video_context (GstMatroskaTrackContext ** p_context); +gboolean gst_matroska_track_init_audio_context (GstMatroskaTrackContext ** p_context); +gboolean gst_matroska_track_init_subtitle_context (GstMatroskaTrackContext ** p_context); + +void gst_matroska_register_tags (void); + +GstBufferList * gst_matroska_parse_xiph_stream_headers (gpointer codec_data, + gsize codec_data_size); + +GstBufferList * gst_matroska_parse_speex_stream_headers (gpointer codec_data, + gsize codec_data_size); + +GstBufferList * gst_matroska_parse_flac_stream_headers (gpointer codec_data, + gsize codec_data_size); +void gst_matroska_track_free (GstMatroskaTrackContext * track); + +#endif /* __GST_MATROSKA_IDS_H__ */ |