From: Steve Lhomme Date: Sat, 3 Apr 2010 07:55:52 +0000 (+0000) Subject: use the new macros to define EBML class elements X-Git-Tag: release-0.9.0~32 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0297c74abd442dbb5e5ac1a89d81d7b4a448208e;p=libmatroska use the new macros to define EBML class elements git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libmatroska@68 a6f86f6d-0131-4f8e-9e7b-e335508773d5 --- diff --git a/libmatroska.proj b/libmatroska.proj index f2fce81..b223979 100644 --- a/libmatroska.proj +++ b/libmatroska.proj @@ -55,6 +55,7 @@ LIB matroska HEADER matroska/KaxContexts.h HEADER matroska/KaxCues.h HEADER matroska/KaxCuesData.h + HEADER matroska/KaxDefines.h HEADER matroska/KaxInfo.h HEADER matroska/KaxInfoData.h HEADER matroska/KaxSeekHead.h diff --git a/matroska/KaxContexts.h b/matroska/KaxContexts.h index 2624c54..9ef3623 100644 --- a/matroska/KaxContexts.h +++ b/matroska/KaxContexts.h @@ -79,6 +79,43 @@ extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecDownloadURL_Context; extern const EbmlSemanticContext MATROSKA_DLL_API KaxCodecDecodeAll_Context; extern const EbmlSemanticContext MATROSKA_DLL_API KaxTrackOverlay_Context; +#define Context_KaxMatroska KaxMatroska_Context +#define Context_KaxSegment KaxSegment_Context +#define Context_KaxTrackEntry KaxTrackEntry_Context +#define Context_KaxTracks KaxTracks_Context +#define Context_KaxTrackVideo KaxTrackVideo_Context +#define Context_KaxCluster KaxCluster_Context +#define Context_KaxBlockMore KaxBlockMore_Context +#define Context_KaxBlockAdditions KaxBlockAdditions_Context +#define Context_KaxBlockGroup KaxBlockGroup_Context +#define Context_KaxTimeSlice KaxTimeSlice_Context +#define Context_KaxSlices KaxSlices_Context +#define Context_KaxContentEncoding KaxContentEncoding_Context +#define Context_KaxContentEncodings KaxContentEncodings_Context +#define Context_KaxContentCompression KaxContentCompression_Context +#define Context_KaxContentEncryption KaxContentEncryption_Context +#define Context_KaxInfo KaxInfo_Context +#define Context_KaxChapterTranslate KaxChapterTranslate_Context +#define Context_KaxTrackAudio KaxTrackAudio_Context +#define Context_KaxTrackTranslate KaxTrackTranslate_Context +#define Context_KaxAttached KaxAttached_Context +#define Context_KaxAttachments KaxAttachments_Context +#define Context_KaxEditionEntry KaxEditionEntry_Context +#define Context_KaxChapters KaxChapters_Context +#define Context_KaxChapterAtom KaxChapterAtom_Context +#define Context_KaxChapterTrack KaxChapterTrack_Context +#define Context_KaxChapterDisplay KaxChapterDisplay_Context +#define Context_KaxChapterProcess KaxChapterProcess_Context +#define Context_KaxChapterProcessCommand KaxChapterProcessCommand_Context +#define Context_KaxClusterSilentTracks KaxClusterSilentTracks_Context +#define Context_KaxCues KaxCues_Context +#define Context_KaxCuePoint KaxCuePoint_Context +#define Context_KaxCueTrackPositions KaxCueTrackPositions_Context +#define Context_KaxCueReference KaxCueReference_Context +#define Context_KaxSeek KaxSeek_Context +#define Context_KaxTags KaxTags_Context +#define Context_KaxSeekHead KaxSeekHead_Context + extern const EbmlSemanticContext & MATROSKA_DLL_API GetKaxGlobal_Context(); extern const EbmlSemanticContext & MATROSKA_DLL_API GetKaxTagsGlobal_Context(); diff --git a/matroska/KaxDefines.h b/matroska/KaxDefines.h index bb36d42..064f6a8 100644 --- a/matroska/KaxDefines.h +++ b/matroska/KaxDefines.h @@ -46,14 +46,16 @@ #define DEFINE_MKX_FLOAT(a,b,c,d,e) DEFINE_xxx_FLOAT(a,b,c,d,e,*GetKaxGlobal_Context) #define DEFINE_MKX_DATE(a,b,c,d,e) DEFINE_xxx_DATE(a,b,c,d,e,*GetKaxGlobal_Context) #else -#define DEFINE_MKX_MASTER(a,b,c,d,e) DEFINE_xxx_MASTER(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_UINTEGER(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_SINTEGER(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_STRING(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_UNISTRING(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_BINARY(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_FLOAT(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) -#define DEFINE_MKX_DATE(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_MASTER(a,b,c,d,e) DEFINE_xxx_MASTER(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_MASTER_GLOBAL(a,b,c,d) DEFINE_xxx_MASTER_GLOBAL(a,b,c,d,*GetKaxGlobal_Context) +#define DEFINE_MKX_MASTER_ORPHAN(a,b,c,d) DEFINE_xxx_MASTER_ORPHAN(a,b,c,d,*GetKaxGlobal_Context) +#define DEFINE_MKX_UINTEGER(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_SINTEGER(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_STRING(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_UNISTRING(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_BINARY(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_FLOAT(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) +#define DEFINE_MKX_DATE(a,b,c,d,e) DEFINE_xxx_CLASS(a,b,c,d,e,*GetKaxGlobal_Context) #endif #endif // LIBMATROSKA_DEFINES_H diff --git a/src/KaxAttached.cpp b/src/KaxAttached.cpp index 69fb1ba..ada83c9 100644 --- a/src/KaxAttached.cpp +++ b/src/KaxAttached.cpp @@ -34,6 +34,7 @@ */ #include "matroska/KaxAttached.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" // sub elements @@ -42,9 +43,9 @@ using namespace LIBEBML_NAMESPACE; START_LIBMATROSKA_NAMESPACE #if MATROSKA_VERSION == 1 -EbmlSemantic KaxAttached_ContextList[5] = +static const EbmlSemantic ContextList_KaxAttached[5] = #else // MATROSKA_VERSION -EbmlSemantic KaxAttached_ContextList[6] = +static const EbmlSemantic ContextList_KaxAttached[6] = #endif // MATROSKA_VERSION { EbmlSemantic(true, true, EBML_INFO(KaxFileName)), @@ -57,35 +58,15 @@ EbmlSemantic KaxAttached_ContextList[6] = #endif // MATROSKA_VERSION }; -EbmlId KaxAttached_TheId (0x61A7, 2); -EbmlId KaxFileDescription_TheId(0x467E, 2); -EbmlId KaxFileName_TheId (0x466E, 2); -EbmlId KaxMimeType_TheId (0x4660, 2); -EbmlId KaxFileData_TheId (0x465C, 2); -EbmlId KaxFileUID_TheId (0x46AE, 2); +DEFINE_MKX_MASTER (KaxAttached, 0x61A7, 2, KaxAttachments, "AttachedFile"); +DEFINE_MKX_UNISTRING(KaxFileDescription, 0x467E, 2, KaxAttachments, "FileDescription"); +DEFINE_MKX_UNISTRING(KaxFileName, 0x466E, 2, KaxAttachments, "FileName"); +DEFINE_MKX_STRING (KaxMimeType, 0x4660, 2, KaxAttachments, "FileMimeType"); +DEFINE_MKX_BINARY (KaxFileData, 0x465C, 2, KaxAttachments, "FileData"); +DEFINE_MKX_UINTEGER (KaxFileUID, 0x46AE, 2, KaxAttachments, "FileUID"); #if MATROSKA_VERSION >= 2 -EbmlId KaxFileReferral_TheId (0x4675, 2); -#endif // MATROSKA_VERSION - -const EbmlSemanticContext KaxAttached_Context = EbmlSemanticContext(countof(KaxAttached_ContextList), KaxAttached_ContextList, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAttached)); -const EbmlSemanticContext KaxFileDescription_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxFileDescription)); -const EbmlSemanticContext KaxFileName_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxFileName)); -const EbmlSemanticContext KaxMimeType_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxMimeType)); -const EbmlSemanticContext KaxFileData_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxFileData)); -const EbmlSemanticContext KaxFileUID_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxFileUID)); -#if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxFileReferral_Context = EbmlSemanticContext(0, NULL, &KaxAttachments_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxFileReferral)); -#endif // MATROSKA_VERSION - -const EbmlCallbacks KaxAttached::ClassInfos(KaxAttached::Create, KaxAttached_TheId, "AttachedFile", KaxAttached_Context); -const EbmlCallbacks KaxFileDescription::ClassInfos(KaxFileDescription::Create, KaxFileDescription_TheId, "FileDescription", KaxFileDescription_Context); -const EbmlCallbacks KaxFileName::ClassInfos(KaxFileName::Create, KaxFileName_TheId, "FileName", KaxFileName_Context); -const EbmlCallbacks KaxMimeType::ClassInfos(KaxMimeType::Create, KaxMimeType_TheId, "FileMimeType", KaxMimeType_Context); -const EbmlCallbacks KaxFileData::ClassInfos(KaxFileData::Create, KaxFileData_TheId, "FileData", KaxFileData_Context); -const EbmlCallbacks KaxFileUID::ClassInfos(KaxFileUID::Create, KaxFileUID_TheId, "FileUID", KaxFileUID_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxFileReferral::ClassInfos(KaxFileReferral::Create, KaxFileReferral_TheId, "FileReferral", KaxFileReferral_Context); -#endif // MATROSKA_VERSION +DEFINE_MKX_BINARY (KaxFileReferral, 0x4675, 2, KaxAttachments, "FileReferral"); +#endif KaxAttached::KaxAttached() :EbmlMaster(KaxAttached_Context) diff --git a/src/KaxAttachments.cpp b/src/KaxAttachments.cpp index 6d69f02..597522e 100644 --- a/src/KaxAttachments.cpp +++ b/src/KaxAttachments.cpp @@ -35,21 +35,19 @@ #include "matroska/KaxAttachments.h" #include "matroska/KaxAttached.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" using namespace LIBEBML_NAMESPACE; // sub elements START_LIBMATROSKA_NAMESPACE -EbmlSemantic KaxAttachments_ContextList[1] = +static const EbmlSemantic ContextList_KaxAttachments[1] = { EbmlSemantic(true, false, EBML_INFO(KaxAttached)), ///< EBMLVersion }; -const EbmlSemanticContext KaxAttachments_Context = EbmlSemanticContext(countof(KaxAttachments_ContextList), KaxAttachments_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAttachments)); - -EbmlId KaxAttachments_TheId(0x1941A469, 4); -const EbmlCallbacks KaxAttachments::ClassInfos(KaxAttachments::Create, KaxAttachments_TheId, "Attachments", KaxAttachments_Context); +DEFINE_MKX_MASTER(KaxAttachments, 0x1941A469, 4, KaxSegment, "Attachments"); KaxAttachments::KaxAttachments() :EbmlMaster(KaxAttachments_Context) diff --git a/src/KaxBlock.cpp b/src/KaxBlock.cpp index 08d615b..078ddf9 100644 --- a/src/KaxBlock.cpp +++ b/src/KaxBlock.cpp @@ -39,13 +39,14 @@ #include "matroska/KaxContexts.h" #include "matroska/KaxBlockData.h" #include "matroska/KaxCluster.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE #if MATROSKA_VERSION == 1 -const EbmlSemantic KaxBlockGroup_ContextList[6] = +static const EbmlSemantic ContextList_KaxBlockGroup[6] = #else // MATROSKA_VERSION -const EbmlSemantic KaxBlockGroup_ContextList[9] = +static const EbmlSemantic ContextList_KaxBlockGroup[9] = #endif // MATROSKA_VERSION { EbmlSemantic(true, true, EBML_INFO(KaxBlock)), @@ -63,55 +64,30 @@ const EbmlSemantic KaxBlockGroup_ContextList[9] = EbmlSemantic(false, true, EBML_INFO(KaxBlockAdditions)), }; -const EbmlSemantic KaxBlockAdditions_ContextList[1] = +static const EbmlSemantic ContextList_KaxBlockAdditions[1] = { EbmlSemantic(true, false, EBML_INFO(KaxBlockMore)) }; -const EbmlSemantic KaxBlockMore_ContextList[2] = +static const EbmlSemantic ContextList_KaxBlockMore[2] = { EbmlSemantic(true, true, EBML_INFO(KaxBlockAddID)), EbmlSemantic(true, true, EBML_INFO(KaxBlockAdditional)) }; -EbmlId KaxBlockGroup_TheId (0xA0, 1); -EbmlId KaxBlock_TheId (0xA1, 1); -EbmlId KaxSimpleBlock_TheId (0xA3, 1); -EbmlId KaxBlockDuration_TheId (0x9B, 1); +DEFINE_MKX_MASTER (KaxBlockGroup, 0xA0, 1, KaxCluster, "BlockGroup"); +DEFINE_MKX_BINARY (KaxBlock, 0xA1, 1, KaxBlockGroup, "Block"); +DEFINE_MKX_UINTEGER(KaxBlockDuration, 0x9B, 1, KaxBlockGroup, "BlockDuration"); #if MATROSKA_VERSION >= 2 -EbmlId KaxBlockVirtual_TheId (0xA2, 1); -EbmlId KaxCodecState_TheId (0xA4, 1); -#endif // MATROSKA_VERSION -EbmlId KaxBlockAdditions_TheId (0x75A1, 2); -EbmlId KaxBlockMore_TheId (0xA6, 1); -EbmlId KaxBlockAddID_TheId (0xEE, 1); -EbmlId KaxBlockAdditional_TheId(0xA5, 1); - -const EbmlSemanticContext KaxBlockGroup_Context = EbmlSemanticContext(countof(KaxBlockGroup_ContextList), KaxBlockGroup_ContextList, &KaxCluster_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockGroup)); -const EbmlSemanticContext KaxBlock_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlock)); -const EbmlSemanticContext KaxBlockDuration_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockDuration)); -#if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxSimpleBlock_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSimpleBlock)); -const EbmlSemanticContext KaxBlockVirtual_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockVirtual)); -const EbmlSemanticContext KaxCodecState_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecState)); -#endif // MATROSKA_VERSION -const EbmlSemanticContext KaxBlockAdditions_Context = EbmlSemanticContext(countof(KaxBlockAdditions_ContextList), KaxBlockAdditions_ContextList, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockAdditions)); -const EbmlSemanticContext KaxBlockMore_Context = EbmlSemanticContext(countof(KaxBlockMore_ContextList), KaxBlockMore_ContextList, &KaxBlockAdditions_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockMore)); -const EbmlSemanticContext KaxBlockAddID_Context = EbmlSemanticContext(0, NULL, &KaxBlockMore_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockAddID)); -const EbmlSemanticContext KaxBlockAdditional_Context = EbmlSemanticContext(0, NULL, &KaxBlockMore_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxBlockAdditional)); - -const EbmlCallbacks KaxBlockGroup::ClassInfos(KaxBlockGroup::Create, KaxBlockGroup_TheId, "BlockGroup", KaxBlockGroup_Context); -const EbmlCallbacks KaxBlock::ClassInfos(KaxBlock::Create, KaxBlock_TheId, "Block", KaxBlock_Context); -const EbmlCallbacks KaxBlockDuration::ClassInfos(KaxBlockDuration::Create, KaxBlockDuration_TheId, "BlockDuration", KaxBlockDuration_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxSimpleBlock::ClassInfos(KaxSimpleBlock::Create, KaxSimpleBlock_TheId, "SimpleBlock", KaxSimpleBlock_Context); -const EbmlCallbacks KaxBlockVirtual::ClassInfos(KaxBlockVirtual::Create, KaxBlockVirtual_TheId, "BlockVirtual", KaxBlockVirtual_Context); -const EbmlCallbacks KaxCodecState::ClassInfos(KaxCodecState::Create, KaxCodecState_TheId, "CodecState", KaxCodecState_Context); -#endif // MATROSKA_VERSION -const EbmlCallbacks KaxBlockAdditions::ClassInfos(KaxBlockAdditions::Create, KaxBlockAdditions_TheId, "BlockAdditions", KaxBlockAdditions_Context); -const EbmlCallbacks KaxBlockMore::ClassInfos(KaxBlockMore::Create, KaxBlockMore_TheId, "BlockMore", KaxBlockMore_Context); -const EbmlCallbacks KaxBlockAddID::ClassInfos(KaxBlockAddID::Create, KaxBlockAddID_TheId, "BlockAddID", KaxBlockAddID_Context); -const EbmlCallbacks KaxBlockAdditional::ClassInfos(KaxBlockAdditional::Create, KaxBlockAdditional_TheId, "BlockAdditional", KaxBlockAdditional_Context); +DEFINE_MKX_BINARY (KaxSimpleBlock, 0xA3, 1, KaxCluster, "SimpleBlock"); +DEFINE_MKX_BINARY (KaxBlockVirtual, 0xA2, 1, KaxBlockGroup, "BlockVirtual"); +DEFINE_MKX_BINARY (KaxCodecState, 0xA4, 1, KaxBlockGroup, "CodecState"); +#endif +DEFINE_MKX_MASTER (KaxBlockAdditions, 0x75A1, 2, KaxBlockGroup, "BlockAdditions"); +DEFINE_MKX_MASTER (KaxBlockMore, 0xA6, 1, KaxBlockAdditions, "BlockMore"); +DEFINE_MKX_UINTEGER(KaxBlockAddID, 0xEE, 1, KaxBlockMore, "BlockAddID"); +DEFINE_MKX_BINARY (KaxBlockAdditional, 0xA5, 1, KaxBlockMore, "BlockAdditional"); + DataBuffer * DataBuffer::Clone() { diff --git a/src/KaxBlockData.cpp b/src/KaxBlockData.cpp index 1dd6da4..8236988 100644 --- a/src/KaxBlockData.cpp +++ b/src/KaxBlockData.cpp @@ -35,17 +35,18 @@ #include "matroska/KaxBlockData.h" #include "matroska/KaxContexts.h" #include "matroska/KaxBlock.h" +#include "matroska/KaxDefines.h" using namespace LIBEBML_NAMESPACE; START_LIBMATROSKA_NAMESPACE -const EbmlSemantic KaxSlices_ContextList[1] = +const EbmlSemantic ContextList_KaxSlices[1] = { EbmlSemantic(false, false, EBML_INFO(KaxTimeSlice)), }; -const EbmlSemantic KaxTimeSlice_ContextList[5] = +const EbmlSemantic ContextList_KaxTimeSlice[5] = { EbmlSemantic(false, true, EBML_INFO(KaxSliceLaceNumber)), EbmlSemantic(false, true, EBML_INFO(KaxSliceFrameNumber)), @@ -54,44 +55,19 @@ const EbmlSemantic KaxTimeSlice_ContextList[5] = EbmlSemantic(false, true, EBML_INFO(KaxSliceDuration)), }; -EbmlId KaxReferencePriority_TheId(0xFA, 1); -EbmlId KaxReferenceBlock_TheId (0xFB, 1); -EbmlId KaxSlices_TheId (0x8E, 1); -EbmlId KaxTimeSlice_TheId (0xE8, 1); -EbmlId KaxSliceLaceNumber_TheId (0xCC, 1); -EbmlId KaxSliceFrameNumber_TheId (0xCD, 1); -EbmlId KaxSliceBlockAddID_TheId (0xCB, 1); -EbmlId KaxSliceDelay_TheId (0xCE, 1); -EbmlId KaxSliceDuration_TheId (0xCF, 1); +DEFINE_MKX_UINTEGER(KaxReferencePriority, 0xFA, 1, KaxBlockGroup, "FlagReferenced"); +DEFINE_MKX_SINTEGER(KaxReferenceBlock, 0xFB, 1, KaxBlockGroup, "ReferenceBlock"); +DEFINE_MKX_MASTER (KaxSlices, 0x8E, 1, KaxBlockGroup, "Slices"); +DEFINE_MKX_MASTER (KaxTimeSlice, 0xE8, 1, KaxSlices, "TimeSlice"); +DEFINE_MKX_UINTEGER(KaxSliceLaceNumber, 0xCC, 1, KaxTimeSlice, "SliceLaceNumber"); +DEFINE_MKX_UINTEGER(KaxSliceFrameNumber, 0xCD, 1, KaxTimeSlice, "SliceFrameNumber"); +DEFINE_MKX_UINTEGER(KaxSliceBlockAddID, 0xCB, 1, KaxTimeSlice, "SliceBlockAddID"); +DEFINE_MKX_UINTEGER(KaxSliceDelay, 0xCE, 1, KaxTimeSlice, "SliceDelay"); +DEFINE_MKX_UINTEGER(KaxSliceDuration, 0xCF, 1, KaxTimeSlice, "SliceDuration"); #if MATROSKA_VERSION >= 2 -EbmlId KaxReferenceVirtual_TheId (0xFD, 1); -#endif // MATROSKA_VERSION - -const EbmlSemanticContext KaxReferencePriority_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxReferencePriority)); -const EbmlSemanticContext KaxReferenceBlock_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxReferenceBlock)); -const EbmlSemanticContext KaxSlices_Context = EbmlSemanticContext(countof(KaxSlices_ContextList), KaxSlices_ContextList, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSlices)); -const EbmlSemanticContext KaxTimeSlice_Context = EbmlSemanticContext(countof(KaxTimeSlice_ContextList), KaxTimeSlice_ContextList, &KaxSlices_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTimeSlice)); -const EbmlSemanticContext KaxSliceLaceNumber_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSliceLaceNumber)); -const EbmlSemanticContext KaxSliceFrameNumber_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSliceFrameNumber)); -const EbmlSemanticContext KaxSliceBlockAddID_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSliceBlockAddID)); -const EbmlSemanticContext KaxSliceDelay_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSliceDelay)); -const EbmlSemanticContext KaxSliceDuration_Context = EbmlSemanticContext(0, NULL, &KaxTimeSlice_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSliceDuration)); -#if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxReferenceVirtual_Context = EbmlSemanticContext(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxReferenceVirtual)); -#endif // MATROSKA_VERSION - -const EbmlCallbacks KaxReferencePriority::ClassInfos(KaxReferencePriority::Create, KaxReferencePriority_TheId, "FlagReferenced", KaxReferencePriority_Context); -const EbmlCallbacks KaxReferenceBlock::ClassInfos(KaxReferenceBlock::Create, KaxReferenceBlock_TheId, "ReferenceBlock", KaxReferenceBlock_Context); -const EbmlCallbacks KaxSlices::ClassInfos(KaxSlices::Create, KaxSlices_TheId, "Slices", KaxSlices_Context); -const EbmlCallbacks KaxTimeSlice::ClassInfos(KaxTimeSlice::Create, KaxTimeSlice_TheId, "TimeSlice", KaxTimeSlice_Context); -const EbmlCallbacks KaxSliceLaceNumber::ClassInfos(KaxSliceLaceNumber::Create, KaxSliceLaceNumber_TheId, "SliceLaceNumber", KaxSliceLaceNumber_Context); -const EbmlCallbacks KaxSliceFrameNumber::ClassInfos(KaxSliceFrameNumber::Create, KaxSliceFrameNumber_TheId, "SliceFrameNumber", KaxSliceFrameNumber_Context); -const EbmlCallbacks KaxSliceBlockAddID::ClassInfos(KaxSliceBlockAddID::Create, KaxSliceBlockAddID_TheId, "SliceBlockAddID", KaxSliceBlockAddID_Context); -const EbmlCallbacks KaxSliceDelay::ClassInfos(KaxSliceDelay::Create, KaxSliceDelay_TheId, "SliceDelay", KaxSliceDelay_Context); -const EbmlCallbacks KaxSliceDuration::ClassInfos(KaxSliceDuration::Create, KaxSliceDuration_TheId, "SliceDuration", KaxSliceDuration_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxReferenceVirtual::ClassInfos(KaxReferenceVirtual::Create, KaxReferenceVirtual_TheId, "ReferenceVirtual", KaxReferenceVirtual_Context); -#endif // MATROSKA_VERSION +DEFINE_MKX_UINTEGER(KaxReferenceVirtual, 0xFD, 1, KaxBlockGroup, "ReferenceVirtual"); +#endif + KaxSlices::KaxSlices() :EbmlMaster(KaxSlices_Context) diff --git a/src/KaxChapters.cpp b/src/KaxChapters.cpp index e9933ab..a440089 100644 --- a/src/KaxChapters.cpp +++ b/src/KaxChapters.cpp @@ -34,16 +34,17 @@ */ #include "matroska/KaxChapters.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" // sub elements START_LIBMATROSKA_NAMESPACE -EbmlSemantic KaxChapters_ContextList[1] = +static const EbmlSemantic ContextList_KaxChapters[1] = { EbmlSemantic(true, false, EBML_INFO(KaxEditionEntry)), }; -EbmlSemantic KaxEditionEntry_ContextList[5] = +static const EbmlSemantic ContextList_KaxEditionEntry[5] = { EbmlSemantic(false, true , EBML_INFO(KaxEditionUID)), EbmlSemantic(true , true , EBML_INFO(KaxEditionFlagHidden)), @@ -52,7 +53,7 @@ EbmlSemantic KaxEditionEntry_ContextList[5] = EbmlSemantic(true , false, EBML_INFO(KaxChapterAtom)), }; -EbmlSemantic KaxChapterAtom_ContextList[12] = +static const EbmlSemantic ContextList_KaxChapterAtom[12] = { EbmlSemantic(false, false, EBML_INFO(KaxChapterAtom)), EbmlSemantic(true, true, EBML_INFO(KaxChapterUID)), @@ -68,114 +69,59 @@ EbmlSemantic KaxChapterAtom_ContextList[12] = EbmlSemantic(false, false, EBML_INFO(KaxChapterProcess)), }; -EbmlSemantic KaxChapterTrack_ContextList[1] = +static const EbmlSemantic ContextList_KaxChapterTrack[1] = { EbmlSemantic(true, false, EBML_INFO(KaxChapterTrackNumber)), }; -EbmlSemantic KaxChapterDisplay_ContextList[3] = +static const EbmlSemantic ContextList_KaxChapterDisplay[3] = { EbmlSemantic(true, true, EBML_INFO(KaxChapterString)), EbmlSemantic(true, false, EBML_INFO(KaxChapterLanguage)), EbmlSemantic(false, false, EBML_INFO(KaxChapterCountry)), }; -EbmlSemantic KaxChapterProcess_ContextList[3] = +static const EbmlSemantic ContextList_KaxChapterProcess[3] = { EbmlSemantic(true, true, EBML_INFO(KaxChapterProcessCodecID)), EbmlSemantic(false, true, EBML_INFO(KaxChapterProcessPrivate)), EbmlSemantic(false, false, EBML_INFO(KaxChapterProcessCommand)), }; -EbmlSemantic KaxChapterProcessCommand_ContextList[2] = +static const EbmlSemantic ContextList_KaxChapterProcessCommand[2] = { EbmlSemantic(true, true, EBML_INFO(KaxChapterProcessTime)), EbmlSemantic(true, true, EBML_INFO(KaxChapterProcessData)), }; -const EbmlSemanticContext KaxChapters_Context = EbmlSemanticContext(countof(KaxChapters_ContextList), KaxChapters_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapters)); -const EbmlSemanticContext KaxEditionEntry_Context = EbmlSemanticContext(countof(KaxEditionEntry_ContextList), KaxEditionEntry_ContextList, &KaxChapters_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxEditionEntry)); -const EbmlSemanticContext KaxEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxEditionUID)); -const EbmlSemanticContext KaxEditionFlagHidden_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxEditionFlagHidden)); -const EbmlSemanticContext KaxEditionFlagDefault_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxEditionFlagDefault)); -const EbmlSemanticContext KaxEditionFlagOrdered_Context = EbmlSemanticContext(0, NULL, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxEditionFlagOrdered)); -const EbmlSemanticContext KaxChapterAtom_Context = EbmlSemanticContext(countof(KaxChapterAtom_ContextList), KaxChapterAtom_ContextList, &KaxEditionEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterAtom)); -const EbmlSemanticContext KaxChapterTrack_Context = EbmlSemanticContext(countof(KaxChapterTrack_ContextList), KaxChapterTrack_ContextList, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTrack)); -const EbmlSemanticContext KaxChapterDisplay_Context = EbmlSemanticContext(countof(KaxChapterDisplay_ContextList), KaxChapterDisplay_ContextList, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterDisplay)); -const EbmlSemanticContext KaxChapterUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterUID)); -const EbmlSemanticContext KaxChapterTimeStart_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTimeStart)); -const EbmlSemanticContext KaxChapterTimeEnd_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTimeEnd)); -const EbmlSemanticContext KaxChapterFlagHidden_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterFlagHidden)); -const EbmlSemanticContext KaxChapterFlagEnabled_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterFlagEnabled)); -const EbmlSemanticContext KaxChapterSegmentUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterSegmentUID)); -const EbmlSemanticContext KaxChapterSegmentEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterSegmentEditionUID)); -const EbmlSemanticContext KaxChapterPhysicalEquiv_Context = EbmlSemanticContext(0, NULL, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterPhysicalEquiv)); -const EbmlSemanticContext KaxChapterTrackNumber_Context = EbmlSemanticContext(0, NULL, &KaxChapterTrack_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTrackNumber)); -const EbmlSemanticContext KaxChapterString_Context = EbmlSemanticContext(0, NULL, &KaxChapterDisplay_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterString)); -const EbmlSemanticContext KaxChapterLanguage_Context = EbmlSemanticContext(0, NULL, &KaxChapterLanguage_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterLanguage)); -const EbmlSemanticContext KaxChapterCountry_Context = EbmlSemanticContext(0, NULL, &KaxChapterCountry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterCountry)); -const EbmlSemanticContext KaxChapterProcess_Context = EbmlSemanticContext(countof(KaxChapterProcess_ContextList), KaxChapterProcess_ContextList, &KaxChapterAtom_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterProcess)); -const EbmlSemanticContext KaxChapterProcessCodecID_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcess_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterProcessCodecID)); -const EbmlSemanticContext KaxChapterProcessPrivate_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcess_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterProcessPrivate)); -const EbmlSemanticContext KaxChapterProcessCommand_Context = EbmlSemanticContext(countof(KaxChapterProcessCommand_ContextList), KaxChapterProcessCommand_ContextList, &KaxChapterProcess_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterProcessCommand)); -const EbmlSemanticContext KaxChapterProcessTime_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcessCommand_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterProcessTime)); -const EbmlSemanticContext KaxChapterProcessData_Context = EbmlSemanticContext(0, NULL, &KaxChapterProcessCommand_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterProcessData)); - -EbmlId KaxChapters_TheId (0x1043A770, 4); -EbmlId KaxEditionEntry_TheId (0x45B9, 2); -EbmlId KaxEditionUID_TheId (0x45BC, 2); -EbmlId KaxEditionFlagHidden_TheId (0x45BD, 2); -EbmlId KaxEditionFlagDefault_TheId (0x45DB, 2); -EbmlId KaxEditionFlagOrdered_TheId (0x45DD, 2); -EbmlId KaxChapterAtom_TheId (0xB6, 1); -EbmlId KaxChapterUID_TheId (0x73C4, 2); -EbmlId KaxChapterTimeStart_TheId (0x91, 1); -EbmlId KaxChapterTimeEnd_TheId (0x92, 1); -EbmlId KaxChapterFlagHidden_TheId (0x98, 1); -EbmlId KaxChapterFlagEnabled_TheId (0x4598, 2); -EbmlId KaxChapterSegmentUID_TheId (0x6E67, 2); -EbmlId KaxChapterSegmentEditionUID_TheId(0x6EBC, 2); -EbmlId KaxChapterPhysicalEquiv_TheId (0x63C3, 2); -EbmlId KaxChapterTrack_TheId (0x8F, 1); -EbmlId KaxChapterTrackNumber_TheId (0x89, 1); -EbmlId KaxChapterDisplay_TheId (0x80, 1); -EbmlId KaxChapterString_TheId (0x85, 1); -EbmlId KaxChapterLanguage_TheId (0x437C, 2); -EbmlId KaxChapterCountry_TheId (0x437E, 2); -EbmlId KaxChapterProcess_TheId (0x6944, 2); -EbmlId KaxChapterProcessCodecID_TheId (0x6955, 2); -EbmlId KaxChapterProcessPrivate_TheId (0x450D, 2); -EbmlId KaxChapterProcessCommand_TheId (0x6911, 2); -EbmlId KaxChapterProcessTime_TheId (0x6922, 2); -EbmlId KaxChapterProcessData_TheId (0x6933, 2); - -const EbmlCallbacks KaxChapters::ClassInfos(KaxChapters::Create, KaxChapters_TheId, "Chapters", KaxChapters_Context); -const EbmlCallbacks KaxEditionEntry::ClassInfos(KaxEditionEntry::Create, KaxEditionEntry_TheId, "EditionEntry", KaxEditionEntry_Context); -const EbmlCallbacks KaxEditionUID::ClassInfos(KaxEditionUID::Create, KaxEditionUID_TheId, "EditionUID", KaxEditionUID_Context); -const EbmlCallbacks KaxEditionFlagHidden::ClassInfos(KaxEditionFlagHidden::Create, KaxEditionFlagHidden_TheId, "EditionFlagHidden", KaxEditionFlagHidden_Context); -const EbmlCallbacks KaxEditionFlagDefault::ClassInfos(KaxEditionFlagDefault::Create, KaxEditionFlagDefault_TheId, "EditionFlagDefault", KaxEditionFlagDefault_Context); -const EbmlCallbacks KaxEditionFlagOrdered::ClassInfos(KaxEditionFlagOrdered::Create, KaxEditionFlagOrdered_TheId, "EditionFlagOrdered", KaxEditionFlagOrdered_Context); -const EbmlCallbacks KaxChapterAtom::ClassInfos(KaxChapterAtom::Create, KaxChapterAtom_TheId, "ChapterAtom", KaxChapterAtom_Context); -const EbmlCallbacks KaxChapterUID::ClassInfos(KaxChapterUID::Create, KaxChapterUID_TheId, "ChapterUID", KaxChapterUID_Context); -const EbmlCallbacks KaxChapterTimeStart::ClassInfos(KaxChapterTimeStart::Create, KaxChapterTimeStart_TheId, "ChapterTimeStart", KaxChapterTimeStart_Context); -const EbmlCallbacks KaxChapterTimeEnd::ClassInfos(KaxChapterTimeEnd::Create, KaxChapterTimeEnd_TheId, "ChapterTimeEnd", KaxChapterTimeEnd_Context); -const EbmlCallbacks KaxChapterFlagHidden::ClassInfos(KaxChapterFlagHidden::Create, KaxChapterFlagHidden_TheId, "ChapterFlagHidden", KaxChapterFlagHidden_Context); -const EbmlCallbacks KaxChapterFlagEnabled::ClassInfos(KaxChapterFlagEnabled::Create, KaxChapterFlagEnabled_TheId, "ChapterFlagEnabled", KaxChapterFlagEnabled_Context); -const EbmlCallbacks KaxChapterSegmentUID::ClassInfos(KaxChapterSegmentUID::Create, KaxChapterSegmentUID_TheId, "ChapterSegmentUID", KaxChapterSegmentUID_Context); -const EbmlCallbacks KaxChapterSegmentEditionUID::ClassInfos(KaxChapterSegmentEditionUID::Create, KaxChapterSegmentEditionUID_TheId, "ChapterSegmentEditionUID", KaxChapterSegmentEditionUID_Context); -const EbmlCallbacks KaxChapterPhysicalEquiv::ClassInfos(KaxChapterPhysicalEquiv::Create, KaxChapterPhysicalEquiv_TheId, "ChapterPhysicalEquiv", KaxChapterPhysicalEquiv_Context); -const EbmlCallbacks KaxChapterTrack::ClassInfos(KaxChapterTrack::Create, KaxChapterTrack_TheId, "ChapterTrack", KaxChapterTrack_Context); -const EbmlCallbacks KaxChapterTrackNumber::ClassInfos(KaxChapterTrackNumber::Create, KaxChapterTrackNumber_TheId, "ChapterTrackNumber", KaxChapterTrackNumber_Context); -const EbmlCallbacks KaxChapterDisplay::ClassInfos(KaxChapterDisplay::Create, KaxChapterDisplay_TheId, "ChapterDisplay", KaxChapterDisplay_Context); -const EbmlCallbacks KaxChapterString::ClassInfos(KaxChapterString::Create, KaxChapterString_TheId, "ChapterString", KaxChapterString_Context); -const EbmlCallbacks KaxChapterLanguage::ClassInfos(KaxChapterLanguage::Create, KaxChapterLanguage_TheId, "ChapterLanguage", KaxChapterLanguage_Context); -const EbmlCallbacks KaxChapterCountry::ClassInfos(KaxChapterCountry::Create, KaxChapterCountry_TheId, "ChapterCountry", KaxChapterCountry_Context); -const EbmlCallbacks KaxChapterProcess::ClassInfos(KaxChapterProcess::Create, KaxChapterProcess_TheId, "ChapterProcess", KaxChapterProcess_Context); -const EbmlCallbacks KaxChapterProcessCodecID::ClassInfos(KaxChapterProcessCodecID::Create, KaxChapterProcessCodecID_TheId, "ChapterProcessCodecID", KaxChapterProcessCodecID_Context); -const EbmlCallbacks KaxChapterProcessPrivate::ClassInfos(KaxChapterProcessPrivate::Create, KaxChapterProcessPrivate_TheId, "ChapterProcessPrivate", KaxChapterProcessPrivate_Context); -const EbmlCallbacks KaxChapterProcessCommand::ClassInfos(KaxChapterProcessCommand::Create, KaxChapterProcessCommand_TheId, "ChapterProcessCommand", KaxChapterProcessCommand_Context); -const EbmlCallbacks KaxChapterProcessTime::ClassInfos(KaxChapterProcessTime::Create, KaxChapterProcessTime_TheId, "ChapterProcessTime", KaxChapterProcessTime_Context); -const EbmlCallbacks KaxChapterProcessData::ClassInfos(KaxChapterProcessData::Create, KaxChapterProcessData_TheId, "ChapterProcessData", KaxChapterProcessData_Context); +DEFINE_MKX_MASTER (KaxChapters, 0x1043A770, 4, KaxSegment, "Chapters"); +DEFINE_MKX_MASTER (KaxEditionEntry, 0x45B9, 2, KaxChapters, "EditionEntry"); +DEFINE_MKX_UINTEGER (KaxEditionUID, 0x45BC, 2, KaxEditionEntry, "EditionUID"); +DEFINE_MKX_UINTEGER (KaxEditionFlagHidden, 0x45BD, 2, KaxEditionEntry, "EditionFlagHidden"); +DEFINE_MKX_UINTEGER (KaxEditionFlagDefault, 0x45DB, 2, KaxEditionEntry, "EditionFlagDefault"); +DEFINE_MKX_UINTEGER (KaxEditionFlagOrdered, 0x45DD, 2, KaxEditionEntry, "EditionFlagOrdered"); +DEFINE_MKX_MASTER (KaxChapterAtom, 0xB6, 1, KaxEditionEntry, "ChapterAtom"); +DEFINE_MKX_UINTEGER (KaxChapterUID, 0x73C4, 2, KaxChapterAtom, "ChapterUID"); +DEFINE_MKX_UINTEGER (KaxChapterTimeStart, 0x91, 1, KaxChapterAtom, "ChapterTimeStart"); +DEFINE_MKX_UINTEGER (KaxChapterTimeEnd, 0x92, 1, KaxChapterAtom, "ChapterTimeEnd"); +DEFINE_MKX_UINTEGER (KaxChapterFlagHidden, 0x98, 1, KaxChapterAtom, "ChapterFlagHidden"); +DEFINE_MKX_UINTEGER (KaxChapterFlagEnabled, 0x4598, 2, KaxChapterAtom, "ChapterFlagEnabled"); +DEFINE_MKX_BINARY (KaxChapterSegmentUID, 0x6E67, 2, KaxChapterAtom, "ChapterSegmentUID"); +DEFINE_MKX_BINARY (KaxChapterSegmentEditionUID, 0x6EBC, 2, KaxChapterAtom, "ChapterSegmentEditionUID"); +DEFINE_MKX_UINTEGER (KaxChapterPhysicalEquiv, 0x63C3, 2, KaxChapterAtom, "ChapterPhysicalEquiv"); +DEFINE_MKX_MASTER (KaxChapterTrack, 0x8F, 1, KaxChapterAtom, "ChapterTrack"); +DEFINE_MKX_UINTEGER (KaxChapterTrackNumber, 0x89, 1, KaxChapterTrack, "ChapterTrackNumber"); +DEFINE_MKX_MASTER (KaxChapterDisplay, 0x80, 1, KaxChapterAtom, "ChapterDisplay"); +DEFINE_MKX_UNISTRING(KaxChapterString, 0x85, 1, KaxChapterDisplay, "ChapterString"); +DEFINE_MKX_STRING (KaxChapterLanguage, 0x437C, 2, KaxChapterLanguage, "ChapterLanguage"); // parent context ? +DEFINE_MKX_STRING (KaxChapterCountry, 0x437E, 2, KaxChapterCountry, "ChapterCountry"); // parent context ? +DEFINE_MKX_MASTER (KaxChapterProcess, 0x6944, 2, KaxChapterAtom, "ChapterProcess"); +DEFINE_MKX_UINTEGER (KaxChapterProcessCodecID, 0x6955, 2, KaxChapterProcess, "ChapterProcessCodecID"); +DEFINE_MKX_BINARY (KaxChapterProcessPrivate, 0x450D, 2, KaxChapterProcess, "ChapterProcessPrivate"); +DEFINE_MKX_MASTER (KaxChapterProcessCommand, 0x6911, 2, KaxChapterProcess, "ChapterProcessCommand"); +DEFINE_MKX_UINTEGER (KaxChapterProcessTime, 0x6922, 2, KaxChapterProcessCommand, "ChapterProcessTime"); +DEFINE_MKX_BINARY (KaxChapterProcessData, 0x6933, 2, KaxChapterProcessCommand, "ChapterProcessData"); + KaxChapters::KaxChapters() :EbmlMaster(KaxChapters_Context) diff --git a/src/KaxCluster.cpp b/src/KaxCluster.cpp index adadf53..1be9d56 100644 --- a/src/KaxCluster.cpp +++ b/src/KaxCluster.cpp @@ -35,14 +35,15 @@ #include "matroska/KaxBlock.h" #include "matroska/KaxContexts.h" #include "matroska/KaxSegment.h" +#include "matroska/KaxDefines.h" // sub elements START_LIBMATROSKA_NAMESPACE #if MATROSKA_VERSION == 1 -EbmlSemantic KaxCluster_ContextList[5] = +static const EbmlSemantic ContextList_KaxCluster[5] = #else // MATROSKA_VERSION -EbmlSemantic KaxCluster_ContextList[6] = +static const EbmlSemantic ContextList_KaxCluster[6] = #endif // MATROSKA_VERSION { EbmlSemantic(true, true, EBML_INFO(KaxClusterTimecode)), @@ -55,10 +56,7 @@ EbmlSemantic KaxCluster_ContextList[6] = EbmlSemantic(false, true, EBML_INFO(KaxClusterPosition)), }; -const EbmlSemanticContext KaxCluster_Context = EbmlSemanticContext(countof(KaxCluster_ContextList), KaxCluster_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCluster)); - -EbmlId KaxCluster_TheId(0x1F43B675, 4); -const EbmlCallbacks KaxCluster::ClassInfos(KaxCluster::Create, KaxCluster_TheId, "Cluster", KaxCluster_Context); +DEFINE_MKX_MASTER(KaxCluster, 0x1F43B675, 4, KaxSegment, "Cluster"); KaxCluster::KaxCluster() :EbmlMaster(KaxCluster_Context) diff --git a/src/KaxClusterData.cpp b/src/KaxClusterData.cpp index 9bf6b99..309efaf 100644 --- a/src/KaxClusterData.cpp +++ b/src/KaxClusterData.cpp @@ -34,31 +34,20 @@ */ #include "matroska/KaxClusterData.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE -EbmlId KaxClusterTimecode_TheId (0xE7, 1); -EbmlId KaxClusterSilentTracks_TheId (0x5854, 2); -EbmlId KaxClusterSilentTrackNumber_TheId(0x58D7, 2); -EbmlId KaxClusterPrevSize_TheId (0xAB, 1); -EbmlId KaxClusterPosition_TheId (0xA7, 1); - -EbmlSemantic KaxClusterSilentTracks_ContextList[1] = +static const EbmlSemantic ContextList_KaxClusterSilentTracks[1] = { EbmlSemantic(false, false, EBML_INFO(KaxClusterSilentTrackNumber)), }; -const EbmlSemanticContext KaxClusterTimecode_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxClusterTimecode)); -const EbmlSemanticContext KaxClusterSilentTracks_Context = EbmlSemanticContext(countof(KaxClusterSilentTracks_ContextList), KaxClusterSilentTracks_ContextList, &KaxCluster_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxClusterSilentTracks)); -const EbmlSemanticContext KaxClusterSilentTrackNumber_Context = EbmlSemanticContext(0, NULL, &KaxClusterSilentTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxClusterSilentTrackNumber)); -const EbmlSemanticContext KaxClusterPosition_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxClusterPosition)); -const EbmlSemanticContext KaxClusterPrevSize_Context = EbmlSemanticContext(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxClusterPrevSize)); - -const EbmlCallbacks KaxClusterTimecode::ClassInfos(KaxClusterTimecode::Create, KaxClusterTimecode_TheId, "ClusterTimecode", KaxClusterTimecode_Context); -const EbmlCallbacks KaxClusterSilentTracks::ClassInfos(KaxClusterSilentTracks::Create, KaxClusterSilentTracks_TheId, "ClusterSilentTracks", KaxClusterSilentTracks_Context); -const EbmlCallbacks KaxClusterSilentTrackNumber::ClassInfos(KaxClusterSilentTrackNumber::Create, KaxClusterSilentTrackNumber_TheId, "ClusterSilentTrackNumber", KaxClusterSilentTrackNumber_Context); -const EbmlCallbacks KaxClusterPrevSize::ClassInfos(KaxClusterPrevSize::Create, KaxClusterPrevSize_TheId, "ClusterPrevSize", KaxClusterPrevSize_Context); -const EbmlCallbacks KaxClusterPosition::ClassInfos(KaxClusterPosition::Create, KaxClusterPosition_TheId, "ClusterPosition", KaxClusterPosition_Context); +DEFINE_MKX_UINTEGER(KaxClusterTimecode, 0xE7, 1, KaxCluster, "ClusterTimecode"); +DEFINE_MKX_MASTER (KaxClusterSilentTracks, 0x5854, 2, KaxCluster, "ClusterSilentTracks") +DEFINE_MKX_UINTEGER(KaxClusterSilentTrackNumber, 0x58D7, 2, KaxClusterSilentTracks, "ClusterSilentTrackNumber"); +DEFINE_MKX_UINTEGER(KaxClusterPosition, 0xA7, 1, KaxCluster, "ClusterPosition"); +DEFINE_MKX_UINTEGER(KaxClusterPrevSize, 0xAB, 1, KaxCluster, "ClusterPrevSize"); KaxClusterSilentTracks::KaxClusterSilentTracks() :EbmlMaster(KaxClusterSilentTracks_Context) diff --git a/src/KaxContentEncoding.cpp b/src/KaxContentEncoding.cpp index 6d54da5..0eb6734 100644 --- a/src/KaxContentEncoding.cpp +++ b/src/KaxContentEncoding.cpp @@ -34,14 +34,15 @@ */ #include "matroska/KaxContentEncoding.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE -const EbmlSemantic KaxContentEncodings_ContextList[1] = { +static const EbmlSemantic ContextList_KaxContentEncodings[1] = { EbmlSemantic(true, true, EBML_INFO(KaxContentEncoding)), }; -const EbmlSemantic KaxContentEncoding_ContextList[5] = { +static const EbmlSemantic ContextList_KaxContentEncoding[5] = { EbmlSemantic(true, true, EBML_INFO(KaxContentEncodingOrder)), EbmlSemantic(true, true, EBML_INFO(KaxContentEncodingScope)), EbmlSemantic(true, true, EBML_INFO(KaxContentEncodingType)), @@ -49,12 +50,12 @@ const EbmlSemantic KaxContentEncoding_ContextList[5] = { EbmlSemantic(false, true, EBML_INFO(KaxContentEncryption)), }; -const EbmlSemantic KaxContentCompression_ContextList[2] = { +static const EbmlSemantic ContextList_KaxContentCompression[2] = { EbmlSemantic(true, true, EBML_INFO(KaxContentCompAlgo)), EbmlSemantic(false, true, EBML_INFO(KaxContentCompSettings)), }; -const EbmlSemantic KaxContentEncryption_ContextList[6] = { +static const EbmlSemantic ContextList_KaxContentEncryption[6] = { EbmlSemantic(false, true, EBML_INFO(KaxContentEncAlgo)), EbmlSemantic(false, true, EBML_INFO(KaxContentEncKeyID)), EbmlSemantic(false, true, EBML_INFO(KaxContentSignature)), @@ -63,177 +64,21 @@ const EbmlSemantic KaxContentEncryption_ContextList[6] = { EbmlSemantic(false, true, EBML_INFO(KaxContentSigHashAlgo)), }; -EbmlId KaxContentEncodings_TheId (0x6d80, 2); -EbmlId KaxContentEncoding_TheId (0x6240, 2); -EbmlId KaxContentEncodingOrder_TheId (0x5031, 2); -EbmlId KaxContentEncodingScope_TheId (0x5032, 2); -EbmlId KaxContentEncodingType_TheId (0x5033, 2); -EbmlId KaxContentCompression_TheId (0x5034, 2); -EbmlId KaxContentCompAlgo_TheId (0x4254, 2); -EbmlId KaxContentCompSettings_TheId (0x4255, 2); -EbmlId KaxContentEncryption_TheId (0x5035, 2); -EbmlId KaxContentEncAlgo_TheId (0x47e1, 2); -EbmlId KaxContentEncKeyID_TheId (0x47e2, 2); -EbmlId KaxContentSignature_TheId (0x47e3, 2); -EbmlId KaxContentSigKeyID_TheId (0x47e4, 2); -EbmlId KaxContentSigAlgo_TheId (0x47e5, 2); -EbmlId KaxContentSigHashAlgo_TheId (0x47e6, 2); - -const EbmlSemanticContext KaxContentEncodings_Context = -EbmlSemanticContext(countof(KaxContentEncodings_ContextList), - KaxContentEncodings_ContextList, &KaxTrackEntry_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncodings)); - -const EbmlSemanticContext KaxContentEncoding_Context = -EbmlSemanticContext(countof(KaxContentEncoding_ContextList), - KaxContentEncoding_ContextList, - &KaxContentEncodings_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncoding)); - -const EbmlSemanticContext KaxContentEncodingOrder_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncoding_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncodingOrder)); - -const EbmlSemanticContext KaxContentEncodingScope_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncoding_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncodingScope)); - -const EbmlSemanticContext KaxContentEncodingType_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncoding_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncodingType)); - -const EbmlSemanticContext KaxContentCompression_Context = -EbmlSemanticContext(countof(KaxContentCompression_ContextList), - KaxContentCompression_ContextList, - &KaxContentEncoding_Context, *GetKaxGlobal_Context, - &EBML_INFO(KaxContentCompression)); - -const EbmlSemanticContext KaxContentCompAlgo_Context = -EbmlSemanticContext(0, NULL, &KaxContentCompression_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentCompAlgo)); - -const EbmlSemanticContext KaxContentCompSettings_Context = -EbmlSemanticContext(0, NULL, &KaxContentCompression_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentCompSettings)); - -const EbmlSemanticContext KaxContentEncryption_Context = -EbmlSemanticContext(countof(KaxContentEncryption_ContextList), - KaxContentEncryption_ContextList, - &KaxContentEncoding_Context, *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncryption)); - -const EbmlSemanticContext KaxContentEncAlgo_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncAlgo)); - -const EbmlSemanticContext KaxContentEncKeyID_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentEncKeyID)); - -const EbmlSemanticContext KaxContentSignature_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentSignature)); - -const EbmlSemanticContext KaxContentSigAlgo_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentSigKeyID)); - -const EbmlSemanticContext KaxContentSigHashAlgo_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentSigKeyID)); - -const EbmlSemanticContext KaxContentSigKeyID_Context = -EbmlSemanticContext(0, NULL, &KaxContentEncryption_Context, - *GetKaxGlobal_Context, - &EBML_INFO(KaxContentSigKeyID)); - -const EbmlCallbacks -KaxContentEncodings::ClassInfos(KaxContentEncodings::Create, - KaxContentEncodings_TheId, - "ContentEncodings", - KaxContentEncodings_Context); -const EbmlCallbacks -KaxContentEncoding::ClassInfos(KaxContentEncoding::Create, - KaxContentEncoding_TheId, - "ContentEncoding", - KaxContentEncoding_Context); -const EbmlCallbacks -KaxContentEncodingOrder::ClassInfos(KaxContentEncodingOrder::Create, - KaxContentEncodingOrder_TheId, - "ContentEncodingOrder", - KaxContentEncodingOrder_Context); -const EbmlCallbacks -KaxContentEncodingScope::ClassInfos(KaxContentEncodingScope::Create, - KaxContentEncodingScope_TheId, - "ContentEncodingScope", - KaxContentEncodingScope_Context); -const EbmlCallbacks -KaxContentEncodingType::ClassInfos(KaxContentEncodingType::Create, - KaxContentEncodingType_TheId, - "ContentEncodingType", - KaxContentEncodingType_Context); -const EbmlCallbacks -KaxContentCompression::ClassInfos(KaxContentCompression::Create, - KaxContentCompression_TheId, - "ContentCompression", - KaxContentCompression_Context); -const EbmlCallbacks -KaxContentCompAlgo::ClassInfos(KaxContentCompAlgo::Create, - KaxContentCompAlgo_TheId, - "ContentCompAlgo", - KaxContentCompAlgo_Context); -const EbmlCallbacks -KaxContentCompSettings::ClassInfos(KaxContentCompSettings::Create, - KaxContentCompSettings_TheId, - "ContentCompSettings", - KaxContentCompSettings_Context); -const EbmlCallbacks -KaxContentEncryption::ClassInfos(KaxContentEncryption::Create, - KaxContentEncryption_TheId, - "ContentEncryption", - KaxContentEncryption_Context); -const EbmlCallbacks -KaxContentEncAlgo::ClassInfos(KaxContentEncAlgo::Create, - KaxContentEncAlgo_TheId, - "ContentEncAlgo", - KaxContentEncAlgo_Context); -const EbmlCallbacks -KaxContentEncKeyID::ClassInfos(KaxContentEncKeyID::Create, - KaxContentEncKeyID_TheId, - "ContentEncKeyID", - KaxContentEncKeyID_Context); -const EbmlCallbacks -KaxContentSignature::ClassInfos(KaxContentSignature::Create, - KaxContentSignature_TheId, - "ContentSignature", - KaxContentSignature_Context); -const EbmlCallbacks -KaxContentSigAlgo::ClassInfos(KaxContentSigAlgo::Create, - KaxContentSigAlgo_TheId, - "ContentSigAlgo", - KaxContentSigAlgo_Context); -const EbmlCallbacks -KaxContentSigHashAlgo::ClassInfos(KaxContentSigHashAlgo::Create, - KaxContentSigHashAlgo_TheId, - "ContentSigHashAlgo", - KaxContentSigHashAlgo_Context); -const EbmlCallbacks -KaxContentSigKeyID::ClassInfos(KaxContentSigKeyID::Create, - KaxContentSigKeyID_TheId, - "ContentSigKeyID", - KaxContentSigKeyID_Context); +DEFINE_MKX_MASTER (KaxContentEncodings, 0x6d80, 2, KaxTrackEntry, "ContentEncodings"); +DEFINE_MKX_MASTER (KaxContentEncoding, 0x6240, 2, KaxContentEncodings, "ContentEncoding"); +DEFINE_MKX_UINTEGER(KaxContentEncodingOrder, 0x5031, 2, KaxContentEncoding, "ContentEncodingOrder"); +DEFINE_MKX_UINTEGER(KaxContentEncodingScope, 0x5032, 2, KaxContentEncoding, "ContentEncodingScope"); +DEFINE_MKX_UINTEGER(KaxContentEncodingType, 0x5033, 2, KaxContentEncoding, "ContentEncodingType"); +DEFINE_MKX_MASTER (KaxContentCompression, 0x5034, 2, KaxContentEncoding, "ContentCompression"); +DEFINE_MKX_UINTEGER(KaxContentCompAlgo, 0x4254, 2, KaxContentCompression, "ContentCompAlgo"); +DEFINE_MKX_UINTEGER(KaxContentCompSettings, 0x4255, 2, KaxContentCompression, "ContentCompSettings"); +DEFINE_MKX_MASTER (KaxContentEncryption, 0x5035, 2, KaxContentEncoding, "ContentEncryption"); +DEFINE_MKX_UINTEGER(KaxContentEncAlgo, 0x47e1, 2, KaxContentEncryption, "ContentEncAlgo"); +DEFINE_MKX_BINARY (KaxContentEncKeyID, 0x47e2, 2, KaxContentEncryption, "ContentEncKeyID"); +DEFINE_MKX_BINARY (KaxContentSignature, 0x47e3, 2, KaxContentEncryption, "ContentSignature"); +DEFINE_MKX_BINARY (KaxContentSigKeyID, 0x47e4, 2, KaxContentEncryption, "ContentSigKeyID"); +DEFINE_MKX_UINTEGER(KaxContentSigAlgo, 0x47e5, 2, KaxContentEncryption, "ContentSigAlgo"); +DEFINE_MKX_UINTEGER(KaxContentSigHashAlgo, 0x47e6, 2, KaxContentEncryption, "ContentSigHashAlgo"); KaxContentEncodings::KaxContentEncodings(): EbmlMaster(KaxContentEncodings_Context) { diff --git a/src/KaxCues.cpp b/src/KaxCues.cpp index e998eb3..d2ea0e2 100644 --- a/src/KaxCues.cpp +++ b/src/KaxCues.cpp @@ -36,19 +36,17 @@ #include "matroska/KaxCuesData.h" #include "matroska/KaxContexts.h" #include "ebml/EbmlStream.h" +#include "matroska/KaxDefines.h" // sub elements START_LIBMATROSKA_NAMESPACE -EbmlSemantic KaxCues_ContextList[1] = +static const EbmlSemantic ContextList_KaxCues[1] = { EbmlSemantic(true, false, EBML_INFO(KaxCuePoint)), }; -const EbmlSemanticContext KaxCues_Context = EbmlSemanticContext(countof(KaxCues_ContextList), KaxCues_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCues)); - -EbmlId KaxCues_TheId(0x1C53BB6B, 4); -const EbmlCallbacks KaxCues::ClassInfos(KaxCues::Create, KaxCues_TheId, "Cues", KaxCues_Context); +DEFINE_MKX_MASTER(KaxCues, 0x1C53BB6B, 4, KaxSegment, "Cues"); KaxCues::KaxCues() :EbmlMaster(KaxCues_Context) diff --git a/src/KaxCuesData.cpp b/src/KaxCuesData.cpp index ca74e67..2693152 100644 --- a/src/KaxCuesData.cpp +++ b/src/KaxCuesData.cpp @@ -1,329 +1,300 @@ -/**************************************************************************** -** libmatroska : parse Matroska files, see http://www.matroska.org/ -** -** -** -** Copyright (C) 2002-2010 Steve Lhomme. All rights reserved. -** -** This library is free software; you can redistribute it and/or -** modify it under the terms of the GNU Lesser General Public -** License as published by the Free Software Foundation; either -** version 2.1 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 -** Lesser General Public License for more details. -** -** You should have received a copy of the GNU Lesser General Public -** License along with this library; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -** -** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.** -** Contact license@matroska.org if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -/*! - \file - \version \$Id: KaxCuesData.cpp 1265 2007-01-14 17:20:35Z mosu $ - \author Steve Lhomme -*/ -#include - -#include "matroska/KaxCuesData.h" -#include "matroska/KaxContexts.h" -#include "matroska/KaxBlock.h" -#include "matroska/KaxBlockData.h" -#include "matroska/KaxCluster.h" -#include "matroska/KaxSegment.h" - -START_LIBMATROSKA_NAMESPACE - -EbmlSemantic KaxCuePoint_ContextList[2] = -{ - EbmlSemantic(true, true, EBML_INFO(KaxCueTime)), - EbmlSemantic(true, false, EBML_INFO(KaxCueTrackPositions)), -}; - -#if MATROSKA_VERSION == 1 -EbmlSemantic KaxCueTrackPositions_ContextList[3] = -#else // MATROSKA_VERSION -EbmlSemantic KaxCueTrackPositions_ContextList[5] = -#endif // MATROSKA_VERSION -{ - EbmlSemantic(true, true, EBML_INFO(KaxCueTrack)), - EbmlSemantic(true, true, EBML_INFO(KaxCueClusterPosition)), - EbmlSemantic(false, true, EBML_INFO(KaxCueBlockNumber)), -#if MATROSKA_VERSION >= 2 - EbmlSemantic(false, true, EBML_INFO(KaxCueCodecState)), - EbmlSemantic(false, false, EBML_INFO(KaxCueReference)), -#endif // MATROSKA_VERSION -}; - -#if MATROSKA_VERSION >= 2 -EbmlSemantic KaxCueReference_ContextList[4] = -{ - EbmlSemantic(true, true, EBML_INFO(KaxCueRefTime)), - EbmlSemantic(true, true, EBML_INFO(KaxCueRefCluster)), - EbmlSemantic(false, true, EBML_INFO(KaxCueRefNumber)), - EbmlSemantic(false, true, EBML_INFO(KaxCueRefCodecState)), -}; -#endif // MATROSKA_VERSION - -EbmlId KaxCuePoint_TheId (0xBB, 1); -EbmlId KaxCueTime_TheId (0xB3, 1); -EbmlId KaxCueTrackPositions_TheId (0xB7, 1); -EbmlId KaxCueTrack_TheId (0xF7, 1); -EbmlId KaxCueClusterPosition_TheId(0xF1, 1); -EbmlId KaxCueBlockNumber_TheId (0x5378, 2); -#if MATROSKA_VERSION >= 2 -EbmlId KaxCueCodecState_TheId (0xEA, 1); -EbmlId KaxCueReference_TheId (0xDB, 1); -EbmlId KaxCueRefTime_TheId (0x96, 1); -EbmlId KaxCueRefCluster_TheId (0x97, 1); -EbmlId KaxCueRefNumber_TheId (0x535F, 2); -EbmlId KaxCueRefCodecState_TheId (0xEB, 1); -#endif // MATROSKA_VERSION - -const EbmlSemanticContext KaxCuePoint_Context = EbmlSemanticContext(countof(KaxCuePoint_ContextList), KaxCuePoint_ContextList, &KaxCues_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCuePoint)); -const EbmlSemanticContext KaxCueTime_Context = EbmlSemanticContext(0, NULL, &KaxCuePoint_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueTime)); -const EbmlSemanticContext KaxCueTrackPositions_Context = EbmlSemanticContext(countof(KaxCueTrackPositions_ContextList), KaxCueTrackPositions_ContextList, &KaxCuePoint_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueTrackPositions)); -const EbmlSemanticContext KaxCueTrack_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueTrack)); -const EbmlSemanticContext KaxCueClusterPosition_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueClusterPosition)); -const EbmlSemanticContext KaxCueBlockNumber_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueBlockNumber)); -#if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxCueCodecState_Context = EbmlSemanticContext(0, NULL, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueCodecState)); -const EbmlSemanticContext KaxCueReference_Context = EbmlSemanticContext(countof(KaxCueReference_ContextList), KaxCueReference_ContextList, &KaxCueTrackPositions_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueReference)); -const EbmlSemanticContext KaxCueRefTime_Context = EbmlSemanticContext(0, NULL, &KaxCueReference_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueRefTime)); -const EbmlSemanticContext KaxCueRefCluster_Context = EbmlSemanticContext(0, NULL, &KaxCueRefTime_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueRefCluster)); -const EbmlSemanticContext KaxCueRefNumber_Context = EbmlSemanticContext(0, NULL, &KaxCueRefTime_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueRefNumber)); -const EbmlSemanticContext KaxCueRefCodecState_Context = EbmlSemanticContext(0, NULL, &KaxCueRefTime_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCueRefCodecState)); -#endif // MATROSKA_VERSION - -const EbmlCallbacks KaxCuePoint::ClassInfos(KaxCuePoint::Create, KaxCuePoint_TheId, "CuePoint", KaxCuePoint_Context); -const EbmlCallbacks KaxCueTime::ClassInfos(KaxCueTime::Create, KaxCueTime_TheId, "CueTime", KaxCueTime_Context); -const EbmlCallbacks KaxCueTrackPositions::ClassInfos(KaxCueTrackPositions::Create, KaxCueTrackPositions_TheId, "CueTrackPositions", KaxCueTrackPositions_Context); -const EbmlCallbacks KaxCueTrack::ClassInfos(KaxCueTrack::Create, KaxCueTrack_TheId, "CueTrack", KaxCueTrack_Context); -const EbmlCallbacks KaxCueClusterPosition::ClassInfos(KaxCueClusterPosition::Create, KaxCueClusterPosition_TheId, "CueClusterPosition", KaxCueClusterPosition_Context); -const EbmlCallbacks KaxCueBlockNumber::ClassInfos(KaxCueBlockNumber::Create, KaxCueBlockNumber_TheId, "CueBlockNumber", KaxCueBlockNumber_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxCueCodecState::ClassInfos(KaxCueCodecState::Create, KaxCueCodecState_TheId, "CueCodecState", KaxCueCodecState_Context); -const EbmlCallbacks KaxCueReference::ClassInfos(KaxCueReference::Create, KaxCueReference_TheId, "CueReference", KaxCueReference_Context); -const EbmlCallbacks KaxCueRefTime::ClassInfos(KaxCueRefTime::Create, KaxCueRefTime_TheId, "CueRefTime", KaxCueRefTime_Context); -const EbmlCallbacks KaxCueRefCluster::ClassInfos(KaxCueRefCluster::Create, KaxCueRefCluster_TheId, "CueRefCluster", KaxCueRefCluster_Context); -const EbmlCallbacks KaxCueRefNumber::ClassInfos(KaxCueRefNumber::Create, KaxCueRefNumber_TheId, "CueRefNumber", KaxCueRefNumber_Context); -const EbmlCallbacks KaxCueRefCodecState::ClassInfos(KaxCueRefCodecState::Create, KaxCueRefCodecState_TheId, "CueRefCodecState", KaxCueRefCodecState_Context); -#endif // MATROSKA_VERSION - -KaxCuePoint::KaxCuePoint() - :EbmlMaster(KaxCuePoint_Context) -{} - -KaxCueTrackPositions::KaxCueTrackPositions() - :EbmlMaster(KaxCueTrackPositions_Context) -{} - -#if MATROSKA_VERSION >= 2 -KaxCueReference::KaxCueReference() - :EbmlMaster(KaxCueReference_Context) -{} -#endif // MATROSKA_VERSION - -/*! - \todo handle codec state checking - \todo remove duplicate references (reference to 2 frames that each reference the same frame) -*/ -void KaxCuePoint::PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTimecodeScale) -{ - // fill me - KaxCueTime & NewTime = GetChild(*this); - *static_cast(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale; - - KaxCueTrackPositions & NewPositions = AddNewChild(*this); - KaxCueTrack & TheTrack = GetChild(NewPositions); - *static_cast(&TheTrack) = BlockReference.TrackNumber(); - - KaxCueClusterPosition & TheClustPos = GetChild(NewPositions); - *static_cast(&TheClustPos) = BlockReference.ClusterPosition(); - -#if MATROSKA_VERSION >= 2 - // handle reference use - if (BlockReference.ReferenceCount() != 0) - { - unsigned int i; - for (i=0; i(NewPositions); - NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTimecodeScale); - } - } - - KaxCodecState *CodecState = static_cast(BlockReference.FindFirstElt(EBML_INFO(KaxCodecState))); - if (CodecState != NULL) { - KaxCueCodecState &CueCodecState = AddNewChild(NewPositions); - *static_cast(&CueCodecState) = BlockReference.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition()); - } -#endif // MATROSKA_VERSION - - SetValueIsSet(); -} - -void KaxCuePoint::PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale) -{ - const KaxInternalBlock &BlockReference = BlobReference; - - // fill me - KaxCueTime & NewTime = GetChild(*this); - *static_cast(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale; - - KaxCueTrackPositions & NewPositions = AddNewChild(*this); - KaxCueTrack & TheTrack = GetChild(NewPositions); - *static_cast(&TheTrack) = BlockReference.TrackNum(); - - KaxCueClusterPosition & TheClustPos = GetChild(NewPositions); - *static_cast(&TheClustPos) = BlockReference.ClusterPosition(); - -#if 0 // MATROSKA_VERSION >= 2 - // handle reference use - if (BlockReference.ReferenceCount() != 0) - { - unsigned int i; - for (i=0; i(NewPositions); - NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTimecodeScale); - } - } -#endif // MATROSKA_VERSION - -#if MATROSKA_VERSION >= 2 - if (!BlobReference.IsSimpleBlock()) { - const KaxBlockGroup &BlockGroup = BlobReference; - const KaxCodecState *CodecState = static_cast(BlockGroup.FindFirstElt(EBML_INFO(KaxCodecState))); - if (CodecState != NULL) { - KaxCueCodecState &CueCodecState = AddNewChild(NewPositions); - *static_cast(&CueCodecState) = BlockGroup.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition()); - } - } -#endif // MATROSKA_VERSION - - SetValueIsSet(); -} - -#if MATROSKA_VERSION >= 2 -/*! - \todo handle codec state checking -*/ -void KaxCueReference::AddReference(const KaxBlockBlob & BlockReference, uint64 GlobalTimecodeScale) -{ - const KaxInternalBlock & theBlock = BlockReference; - KaxCueRefTime & NewTime = GetChild(*this); - *static_cast(&NewTime) = theBlock.GlobalTimecode() / GlobalTimecodeScale; - - KaxCueRefCluster & TheClustPos = GetChild(*this); - *static_cast(&TheClustPos) = theBlock.ClusterPosition(); - -#ifdef OLD - // handle recursive reference use - if (BlockReference.ReferenceCount() != 0) - { - unsigned int i; - for (i=0; i(EltB); - - // compare timecode - const KaxCueTime * TimeCodeA = static_cast(FindElt(EBML_INFO(KaxCueTime))); - if (TimeCodeA == NULL) - return false; - - const KaxCueTime * TimeCodeB = static_cast(theEltB.FindElt(EBML_INFO(KaxCueTime))); - if (TimeCodeB == NULL) - return false; - - if (TimeCodeA->IsSmallerThan(TimeCodeB)) - return true; - - if (TimeCodeB->IsSmallerThan(TimeCodeA)) - return false; - - // compare tracks (timecodes are equal) - const KaxCueTrack * TrackA = static_cast(FindElt(EBML_INFO(KaxCueTrack))); - if (TrackA == NULL) - return false; - - const KaxCueTrack * TrackB = static_cast(theEltB.FindElt(EBML_INFO(KaxCueTrack))); - if (TrackB == NULL) - return false; - - if (TrackA->IsSmallerThan(TrackB)) - return true; - - if (TrackB->IsSmallerThan(TrackA)) - return false; - - return false; -} - -bool KaxCuePoint::Timecode(uint64 & aTimecode, uint64 GlobalTimecodeScale) const -{ - const KaxCueTime *aTime = static_cast(FindFirstElt(EBML_INFO(KaxCueTime))); - if (aTime == NULL) - return false; - aTimecode = uint64(*aTime) * GlobalTimecodeScale; - return true; -} - -/*! - \brief return the position of the Cluster to load -*/ -const KaxCueTrackPositions * KaxCuePoint::GetSeekPosition() const -{ - const KaxCueTrackPositions * result = NULL; - uint64 aPosition = EBML_PRETTYLONGINT(0xFFFFFFFFFFFFFFF); - // find the position of the "earlier" Cluster - const KaxCueTrackPositions *aPoss = static_cast(FindFirstElt(EBML_INFO(KaxCueTrackPositions))); - while (aPoss != NULL) - { - const KaxCueClusterPosition *aPos = static_cast(aPoss->FindFirstElt(EBML_INFO(KaxCueClusterPosition))); - if (aPos != NULL && uint64(*aPos) < aPosition) { - aPosition = uint64(*aPos); - result = aPoss; - } - - aPoss = static_cast(FindNextElt(*aPoss)); - } - return result; -} - -uint64 KaxCueTrackPositions::ClusterPosition() const -{ - const KaxCueClusterPosition *aPos = static_cast(FindFirstElt(EBML_INFO(KaxCueClusterPosition))); - if (aPos == NULL) - return 0; - - return uint64(*aPos); -} - -uint16 KaxCueTrackPositions::TrackNumber() const -{ - const KaxCueTrack *aTrack = static_cast(FindFirstElt(EBML_INFO(KaxCueTrack))); - if (aTrack == NULL) - return 0; - - return uint16(*aTrack); -} - - -END_LIBMATROSKA_NAMESPACE +/**************************************************************************** +** libmatroska : parse Matroska files, see http://www.matroska.org/ +** +** +** +** Copyright (C) 2002-2010 Steve Lhomme. All rights reserved. +** +** This library is free software; you can redistribute it and/or +** modify it under the terms of the GNU Lesser General Public +** License as published by the Free Software Foundation; either +** version 2.1 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 +** Lesser General Public License for more details. +** +** You should have received a copy of the GNU Lesser General Public +** License along with this library; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.** +** Contact license@matroska.org if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +/*! + \file + \version \$Id: KaxCuesData.cpp 1265 2007-01-14 17:20:35Z mosu $ + \author Steve Lhomme +*/ +#include + +#include "matroska/KaxCuesData.h" +#include "matroska/KaxContexts.h" +#include "matroska/KaxBlock.h" +#include "matroska/KaxBlockData.h" +#include "matroska/KaxCluster.h" +#include "matroska/KaxSegment.h" +#include "matroska/KaxDefines.h" + +START_LIBMATROSKA_NAMESPACE + +static const EbmlSemantic ContextList_KaxCuePoint[2] = +{ + EbmlSemantic(true, true, EBML_INFO(KaxCueTime)), + EbmlSemantic(true, false, EBML_INFO(KaxCueTrackPositions)), +}; + +#if MATROSKA_VERSION == 1 +static const EbmlSemantic ContextList_KaxCueTrackPositions[3] = +#else // MATROSKA_VERSION +static const EbmlSemantic ContextList_KaxCueTrackPositions[5] = +#endif // MATROSKA_VERSION +{ + EbmlSemantic(true, true, EBML_INFO(KaxCueTrack)), + EbmlSemantic(true, true, EBML_INFO(KaxCueClusterPosition)), + EbmlSemantic(false, true, EBML_INFO(KaxCueBlockNumber)), +#if MATROSKA_VERSION >= 2 + EbmlSemantic(false, true, EBML_INFO(KaxCueCodecState)), + EbmlSemantic(false, false, EBML_INFO(KaxCueReference)), +#endif // MATROSKA_VERSION +}; + +#if MATROSKA_VERSION >= 2 +static const EbmlSemantic ContextList_KaxCueReference[4] = +{ + EbmlSemantic(true, true, EBML_INFO(KaxCueRefTime)), + EbmlSemantic(true, true, EBML_INFO(KaxCueRefCluster)), + EbmlSemantic(false, true, EBML_INFO(KaxCueRefNumber)), + EbmlSemantic(false, true, EBML_INFO(KaxCueRefCodecState)), +}; +#endif // MATROSKA_VERSION + +DEFINE_MKX_MASTER (KaxCuePoint, 0xBB, 1, KaxCues, "CuePoint"); +DEFINE_MKX_UINTEGER(KaxCueTime, 0xB3, 1, KaxCuePoint, "CueTime"); +DEFINE_MKX_MASTER (KaxCueTrackPositions, 0xB7, 1, KaxCuePoint, "CueTrackPositions"); +DEFINE_MKX_UINTEGER(KaxCueTrack, 0xF7, 1, KaxCueTrackPositions, "CueTrack"); +DEFINE_MKX_UINTEGER(KaxCueClusterPosition, 0xF1, 1, KaxCueTrackPositions, "CueClusterPosition"); +DEFINE_MKX_UINTEGER(KaxCueBlockNumber, 0x5378, 2, KaxCueTrackPositions, "CueBlockNumber"); +#if MATROSKA_VERSION >= 2 +DEFINE_MKX_UINTEGER(KaxCueCodecState, 0xEA, 1, KaxCueTrackPositions, "CueCodecState"); +DEFINE_MKX_MASTER (KaxCueReference, 0xDB, 1, KaxCueTrackPositions, "CueReference"); +DEFINE_MKX_UINTEGER(KaxCueRefTime, 0x96, 1, KaxCueReference, "CueRefTime"); +DEFINE_MKX_UINTEGER(KaxCueRefCluster, 0x97, 1, KaxCueRefTime, "CueRefCluster"); +DEFINE_MKX_UINTEGER(KaxCueRefNumber, 0x535F, 2, KaxCueRefTime, "CueRefNumber"); +DEFINE_MKX_UINTEGER(KaxCueRefCodecState, 0xEB, 1, KaxCueRefTime, "CueRefCodecState"); +#endif + +KaxCuePoint::KaxCuePoint() + :EbmlMaster(KaxCuePoint_Context) +{} + +KaxCueTrackPositions::KaxCueTrackPositions() + :EbmlMaster(KaxCueTrackPositions_Context) +{} + +#if MATROSKA_VERSION >= 2 +KaxCueReference::KaxCueReference() + :EbmlMaster(KaxCueReference_Context) +{} +#endif // MATROSKA_VERSION + +/*! + \todo handle codec state checking + \todo remove duplicate references (reference to 2 frames that each reference the same frame) +*/ +void KaxCuePoint::PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTimecodeScale) +{ + // fill me + KaxCueTime & NewTime = GetChild(*this); + *static_cast(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale; + + KaxCueTrackPositions & NewPositions = AddNewChild(*this); + KaxCueTrack & TheTrack = GetChild(NewPositions); + *static_cast(&TheTrack) = BlockReference.TrackNumber(); + + KaxCueClusterPosition & TheClustPos = GetChild(NewPositions); + *static_cast(&TheClustPos) = BlockReference.ClusterPosition(); + +#if MATROSKA_VERSION >= 2 + // handle reference use + if (BlockReference.ReferenceCount() != 0) + { + unsigned int i; + for (i=0; i(NewPositions); + NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTimecodeScale); + } + } + + KaxCodecState *CodecState = static_cast(BlockReference.FindFirstElt(EBML_INFO(KaxCodecState))); + if (CodecState != NULL) { + KaxCueCodecState &CueCodecState = AddNewChild(NewPositions); + *static_cast(&CueCodecState) = BlockReference.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition()); + } +#endif // MATROSKA_VERSION + + SetValueIsSet(); +} + +void KaxCuePoint::PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale) +{ + const KaxInternalBlock &BlockReference = BlobReference; + + // fill me + KaxCueTime & NewTime = GetChild(*this); + *static_cast(&NewTime) = BlockReference.GlobalTimecode() / GlobalTimecodeScale; + + KaxCueTrackPositions & NewPositions = AddNewChild(*this); + KaxCueTrack & TheTrack = GetChild(NewPositions); + *static_cast(&TheTrack) = BlockReference.TrackNum(); + + KaxCueClusterPosition & TheClustPos = GetChild(NewPositions); + *static_cast(&TheClustPos) = BlockReference.ClusterPosition(); + +#if 0 // MATROSKA_VERSION >= 2 + // handle reference use + if (BlockReference.ReferenceCount() != 0) + { + unsigned int i; + for (i=0; i(NewPositions); + NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTimecodeScale); + } + } +#endif // MATROSKA_VERSION + +#if MATROSKA_VERSION >= 2 + if (!BlobReference.IsSimpleBlock()) { + const KaxBlockGroup &BlockGroup = BlobReference; + const KaxCodecState *CodecState = static_cast(BlockGroup.FindFirstElt(EBML_INFO(KaxCodecState))); + if (CodecState != NULL) { + KaxCueCodecState &CueCodecState = AddNewChild(NewPositions); + *static_cast(&CueCodecState) = BlockGroup.GetParentCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementPosition()); + } + } +#endif // MATROSKA_VERSION + + SetValueIsSet(); +} + +#if MATROSKA_VERSION >= 2 +/*! + \todo handle codec state checking +*/ +void KaxCueReference::AddReference(const KaxBlockBlob & BlockReference, uint64 GlobalTimecodeScale) +{ + const KaxInternalBlock & theBlock = BlockReference; + KaxCueRefTime & NewTime = GetChild(*this); + *static_cast(&NewTime) = theBlock.GlobalTimecode() / GlobalTimecodeScale; + + KaxCueRefCluster & TheClustPos = GetChild(*this); + *static_cast(&TheClustPos) = theBlock.ClusterPosition(); + +#ifdef OLD + // handle recursive reference use + if (BlockReference.ReferenceCount() != 0) + { + unsigned int i; + for (i=0; i(EltB); + + // compare timecode + const KaxCueTime * TimeCodeA = static_cast(FindElt(EBML_INFO(KaxCueTime))); + if (TimeCodeA == NULL) + return false; + + const KaxCueTime * TimeCodeB = static_cast(theEltB.FindElt(EBML_INFO(KaxCueTime))); + if (TimeCodeB == NULL) + return false; + + if (TimeCodeA->IsSmallerThan(TimeCodeB)) + return true; + + if (TimeCodeB->IsSmallerThan(TimeCodeA)) + return false; + + // compare tracks (timecodes are equal) + const KaxCueTrack * TrackA = static_cast(FindElt(EBML_INFO(KaxCueTrack))); + if (TrackA == NULL) + return false; + + const KaxCueTrack * TrackB = static_cast(theEltB.FindElt(EBML_INFO(KaxCueTrack))); + if (TrackB == NULL) + return false; + + if (TrackA->IsSmallerThan(TrackB)) + return true; + + if (TrackB->IsSmallerThan(TrackA)) + return false; + + return false; +} + +bool KaxCuePoint::Timecode(uint64 & aTimecode, uint64 GlobalTimecodeScale) const +{ + const KaxCueTime *aTime = static_cast(FindFirstElt(EBML_INFO(KaxCueTime))); + if (aTime == NULL) + return false; + aTimecode = uint64(*aTime) * GlobalTimecodeScale; + return true; +} + +/*! + \brief return the position of the Cluster to load +*/ +const KaxCueTrackPositions * KaxCuePoint::GetSeekPosition() const +{ + const KaxCueTrackPositions * result = NULL; + uint64 aPosition = EBML_PRETTYLONGINT(0xFFFFFFFFFFFFFFF); + // find the position of the "earlier" Cluster + const KaxCueTrackPositions *aPoss = static_cast(FindFirstElt(EBML_INFO(KaxCueTrackPositions))); + while (aPoss != NULL) + { + const KaxCueClusterPosition *aPos = static_cast(aPoss->FindFirstElt(EBML_INFO(KaxCueClusterPosition))); + if (aPos != NULL && uint64(*aPos) < aPosition) { + aPosition = uint64(*aPos); + result = aPoss; + } + + aPoss = static_cast(FindNextElt(*aPoss)); + } + return result; +} + +uint64 KaxCueTrackPositions::ClusterPosition() const +{ + const KaxCueClusterPosition *aPos = static_cast(FindFirstElt(EBML_INFO(KaxCueClusterPosition))); + if (aPos == NULL) + return 0; + + return uint64(*aPos); +} + +uint16 KaxCueTrackPositions::TrackNumber() const +{ + const KaxCueTrack *aTrack = static_cast(FindFirstElt(EBML_INFO(KaxCueTrack))); + if (aTrack == NULL) + return 0; + + return uint16(*aTrack); +} + + +END_LIBMATROSKA_NAMESPACE diff --git a/src/KaxInfo.cpp b/src/KaxInfo.cpp index 3e66c96..2c4261d 100644 --- a/src/KaxInfo.cpp +++ b/src/KaxInfo.cpp @@ -36,11 +36,12 @@ #include "matroska/KaxInfoData.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" // sub elements START_LIBMATROSKA_NAMESPACE -const EbmlSemantic KaxInfo_ContextList[14] = +static const EbmlSemantic ContextList_KaxInfo[14] = { EbmlSemantic(false, true, EBML_INFO(KaxSegmentUID)), EbmlSemantic(false, true, EBML_INFO(KaxSegmentFilename)), @@ -58,17 +59,9 @@ const EbmlSemantic KaxInfo_ContextList[14] = EbmlSemantic(true, true, EBML_INFO(KaxWritingApp)), }; -const EbmlSemanticContext KaxInfo_Context = EbmlSemanticContext(countof(KaxInfo_ContextList), KaxInfo_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxInfo)); -const EbmlSemanticContext KaxMuxingApp_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxMuxingApp)); -const EbmlSemanticContext KaxWritingApp_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxWritingApp)); - -EbmlId KaxInfo_TheId (0x1549A966, 4); -EbmlId KaxMuxingApp_TheId (0x4D80, 2); -EbmlId KaxWritingApp_TheId(0x5741, 2); - -const EbmlCallbacks KaxInfo::ClassInfos(KaxInfo::Create, KaxInfo_TheId, "Info", KaxInfo_Context); -const EbmlCallbacks KaxMuxingApp::ClassInfos(KaxMuxingApp::Create, KaxMuxingApp_TheId, "MuxingApp", KaxMuxingApp_Context); -const EbmlCallbacks KaxWritingApp::ClassInfos(KaxWritingApp::Create, KaxWritingApp_TheId, "WritingApp", KaxWritingApp_Context); +DEFINE_MKX_MASTER (KaxInfo, 0x1549A966, 4, KaxSegment, "Info"); +DEFINE_MKX_UNISTRING(KaxMuxingApp, 0x4D80, 2, KaxInfo, "MuxingApp"); +DEFINE_MKX_UNISTRING(KaxWritingApp, 0x5741, 2, KaxInfo, "WritingApp"); KaxInfo::KaxInfo() :EbmlMaster(KaxInfo_Context) diff --git a/src/KaxInfoData.cpp b/src/KaxInfoData.cpp index aad60a4..53a2f97 100644 --- a/src/KaxInfoData.cpp +++ b/src/KaxInfoData.cpp @@ -35,64 +35,32 @@ */ #include "matroska/KaxInfoData.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE -const EbmlSemantic KaxChapterTranslate_ContextList[3] = +static const EbmlSemantic ContextList_KaxChapterTranslate[3] = { EbmlSemantic(false, false, EBML_INFO(KaxChapterTranslateEditionUID)), EbmlSemantic(true, true, EBML_INFO(KaxChapterTranslateCodec)), EbmlSemantic(true, true, EBML_INFO(KaxChapterTranslateID)), }; -EbmlId KaxSegmentUID_TheId (0x73A4, 2); -EbmlId KaxSegmentFilename_TheId (0x7384, 2); -EbmlId KaxPrevUID_TheId (0x3CB923, 3); -EbmlId KaxPrevFilename_TheId (0x3C83AB, 3); -EbmlId KaxNextUID_TheId (0x3EB923, 3); -EbmlId KaxNextFilename_TheId (0x3E83BB, 3); -EbmlId KaxSegmentFamily_TheId (0x4444, 2); -EbmlId KaxChapterTranslate_TheId(0x6924, 2); -EbmlId KaxChapterTranslateEditionUID_TheId(0x69FC, 2); -EbmlId KaxChapterTranslateCodec_TheId(0x69BF, 2); -EbmlId KaxChapterTranslateID_TheId(0x69A5, 2); -EbmlId KaxTimecodeScale_TheId (0x2AD7B1, 3); -EbmlId KaxDuration_TheId (0x4489, 2); -EbmlId KaxDateUTC_TheId (0x4461, 2); -EbmlId KaxTitle_TheId (0x7BA9, 2); - -const EbmlSemanticContext KaxSegmentUID_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSegmentUID)); -const EbmlSemanticContext KaxSegmentFilename_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSegmentFilename)); -const EbmlSemanticContext KaxPrevUID_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxPrevUID)); -const EbmlSemanticContext KaxPrevFilename_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxPrevFilename)); -const EbmlSemanticContext KaxNextUID_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxNextUID)); -const EbmlSemanticContext KaxNextFilename_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxNextFilename)); -const EbmlSemanticContext KaxSegmentFamily_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSegmentFamily)); -const EbmlSemanticContext KaxChapterTranslate_Context = EbmlSemanticContext(countof(KaxChapterTranslate_ContextList), KaxChapterTranslate_ContextList, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTranslate)); -const EbmlSemanticContext KaxChapterTranslateEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxChapterTranslate_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTranslateEditionUID)); -const EbmlSemanticContext KaxChapterTranslateCodec_Context = EbmlSemanticContext(0, NULL, &KaxChapterTranslate_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTranslateCodec)); -const EbmlSemanticContext KaxChapterTranslateID_Context = EbmlSemanticContext(0, NULL, &KaxChapterTranslate_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxChapterTranslateID)); -const EbmlSemanticContext KaxTimecodeScale_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTimecodeScale)); -const EbmlSemanticContext KaxDuration_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxDuration)); -const EbmlSemanticContext KaxDateUTC_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxDateUTC)); -const EbmlSemanticContext KaxTitle_Context = EbmlSemanticContext(0, NULL, &KaxInfo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTitle)); - - -const EbmlCallbacks KaxSegmentUID::ClassInfos(KaxSegmentUID::Create, KaxSegmentUID_TheId, "SegmentUID", KaxSegmentUID_Context); -const EbmlCallbacks KaxSegmentFilename::ClassInfos(KaxSegmentFilename::Create, KaxSegmentFilename_TheId, "SegmentFilename", KaxSegmentFilename_Context); -const EbmlCallbacks KaxPrevUID::ClassInfos(KaxPrevUID::Create, KaxPrevUID_TheId, "PrevUID", KaxPrevUID_Context); -const EbmlCallbacks KaxPrevFilename::ClassInfos(KaxPrevFilename::Create, KaxPrevFilename_TheId, "PrevFilename", KaxPrevFilename_Context); -const EbmlCallbacks KaxNextUID::ClassInfos(KaxNextUID::Create, KaxNextUID_TheId, "NextUID", KaxNextUID_Context); -const EbmlCallbacks KaxNextFilename::ClassInfos(KaxNextFilename::Create, KaxNextFilename_TheId, "NextFilename", KaxNextFilename_Context); -const EbmlCallbacks KaxSegmentFamily::ClassInfos(KaxSegmentFamily::Create, KaxSegmentFamily_TheId, "SegmentFamily", KaxSegmentFamily_Context); -const EbmlCallbacks KaxChapterTranslate::ClassInfos(KaxChapterTranslate::Create, KaxChapterTranslate_TheId, "ChapterTranslate", KaxChapterTranslate_Context); -const EbmlCallbacks KaxChapterTranslateEditionUID::ClassInfos(KaxChapterTranslateEditionUID::Create, KaxChapterTranslateEditionUID_TheId, "ChapterTranslateEditionUID", KaxChapterTranslateEditionUID_Context); -const EbmlCallbacks KaxChapterTranslateCodec::ClassInfos(KaxChapterTranslateCodec::Create, KaxChapterTranslateCodec_TheId, "ChapterTranslateCodec", KaxChapterTranslateCodec_Context); -const EbmlCallbacks KaxChapterTranslateID::ClassInfos(KaxChapterTranslateID::Create, KaxChapterTranslateID_TheId, "ChapterTranslateID", KaxChapterTranslateID_Context); -const EbmlCallbacks KaxTimecodeScale::ClassInfos(KaxTimecodeScale::Create, KaxTimecodeScale_TheId, "TimecodeScale", KaxTimecodeScale_Context); -const EbmlCallbacks KaxDuration::ClassInfos(KaxDuration::Create, KaxDuration_TheId, "Duration", KaxDuration_Context); -const EbmlCallbacks KaxDateUTC::ClassInfos(KaxDateUTC::Create, KaxDateUTC_TheId, "DateUTC", KaxDateUTC_Context); -const EbmlCallbacks KaxTitle::ClassInfos(KaxTitle::Create, KaxTitle_TheId, "Title", KaxTitle_Context); +DEFINE_MKX_BINARY (KaxSegmentUID, 0x73A4, 2, KaxInfo, "ChapterTranslate"); +DEFINE_MKX_UNISTRING(KaxSegmentFilename, 0x7384, 2, KaxInfo, "SegmentFilename"); +DEFINE_MKX_BINARY (KaxPrevUID, 0x3CB923, 3, KaxInfo, "PrevUID"); +DEFINE_MKX_UNISTRING(KaxPrevFilename, 0x3C83AB, 3, KaxInfo, "PrevFilename"); +DEFINE_MKX_BINARY (KaxNextUID, 0x3EB923, 3, KaxInfo, "NextUID"); +DEFINE_MKX_UNISTRING(KaxNextFilename, 0x3E83BB, 3, KaxInfo, "NextFilename"); +DEFINE_MKX_BINARY (KaxSegmentFamily, 0x4444, 2, KaxInfo, "SegmentFamily"); +DEFINE_MKX_MASTER (KaxChapterTranslate, 0x6924, 2, KaxInfo, "ChapterTranslate"); +DEFINE_MKX_UINTEGER (KaxChapterTranslateEditionUID, 0x69FC, 2, KaxChapterTranslate, "ChapterTranslateEditionUID"); +DEFINE_MKX_UINTEGER (KaxChapterTranslateCodec, 0x69BF, 2, KaxChapterTranslate, "ChapterTranslateCodec"); +DEFINE_MKX_BINARY (KaxChapterTranslateID, 0x69A5, 2, KaxChapterTranslate, "ChapterTranslateID"); +DEFINE_MKX_UINTEGER (KaxTimecodeScale, 0x2AD7B1, 3, KaxInfo, "TimecodeScale"); +DEFINE_MKX_FLOAT (KaxDuration, 0x4489, 2, KaxInfo, "Duration"); +DEFINE_MKX_DATE (KaxDateUTC, 0x4461, 2, KaxInfo, "DateUTC"); +DEFINE_MKX_UNISTRING(KaxTitle, 0x7BA9, 2, KaxInfo, "Title"); KaxChapterTranslate::KaxChapterTranslate() :EbmlMaster(KaxChapterTranslate_Context) diff --git a/src/KaxSeekHead.cpp b/src/KaxSeekHead.cpp index 1853afd..c402d08 100644 --- a/src/KaxSeekHead.cpp +++ b/src/KaxSeekHead.cpp @@ -36,37 +36,28 @@ #include "matroska/KaxContexts.h" #include "matroska/KaxSegment.h" #include "matroska/KaxCues.h" +#include "matroska/KaxDefines.h" using namespace LIBEBML_NAMESPACE; // sub elements START_LIBMATROSKA_NAMESPACE -EbmlSemantic KaxSeekHead_ContextList[1] = +static const EbmlSemantic ContextList_KaxSeekHead[1] = { EbmlSemantic(true, false, EBML_INFO(KaxSeek)), }; -EbmlSemantic KaxSeek_ContextList[2] = +static const EbmlSemantic ContextList_KaxSeek[2] = { EbmlSemantic(true, true, EBML_INFO(KaxSeekID)), EbmlSemantic(true, true, EBML_INFO(KaxSeekPosition)), }; -const EbmlSemanticContext KaxSeekHead_Context = EbmlSemanticContext(countof(KaxSeekHead_ContextList), KaxSeekHead_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSeekHead)); -const EbmlSemanticContext KaxSeek_Context = EbmlSemanticContext(countof(KaxSeek_ContextList), KaxSeek_ContextList, &KaxSeekHead_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSeek)); -const EbmlSemanticContext KaxSeekID_Context = EbmlSemanticContext(0, NULL, &KaxSeek_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSeekID)); -const EbmlSemanticContext KaxSeekPosition_Context = EbmlSemanticContext(0, NULL, &KaxSeek_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxSeekPosition)); - -EbmlId KaxSeekHead_TheId (0x114D9B74, 4); -EbmlId KaxSeek_TheId (0x4DBB, 2); -EbmlId KaxSeekID_TheId (0x53AB, 2); -EbmlId KaxSeekPosition_TheId(0x53AC, 2); - -const EbmlCallbacks KaxSeekHead::ClassInfos(KaxSeekHead::Create, KaxSeekHead_TheId, "SeekHeader", KaxSeekHead_Context); -const EbmlCallbacks KaxSeek::ClassInfos(KaxSeek::Create, KaxSeek_TheId, "SeekPoint", KaxSeek_Context); -const EbmlCallbacks KaxSeekID::ClassInfos(KaxSeekID::Create, KaxSeekID_TheId, "SeekID", KaxSeekID_Context); -const EbmlCallbacks KaxSeekPosition::ClassInfos(KaxSeekPosition::Create, KaxSeekPosition_TheId, "SeekPosition", KaxSeekPosition_Context); +DEFINE_MKX_MASTER (KaxSeekHead, 0x114D9B74, 4, KaxSegment, "SeekHeader"); +DEFINE_MKX_MASTER (KaxSeek, 0x4DBB, 2, KaxSeekHead, "SeekPoint"); +DEFINE_MKX_BINARY (KaxSeekID, 0x53AB, 2, KaxSeek, "SeekID"); +DEFINE_MKX_UINTEGER(KaxSeekPosition, 0x53AC, 2, KaxSeek, "SeekPosition"); KaxSeekHead::KaxSeekHead() :EbmlMaster(KaxSeekHead_Context) diff --git a/src/KaxSegment.cpp b/src/KaxSegment.cpp index ab09e51..73632ac 100644 --- a/src/KaxSegment.cpp +++ b/src/KaxSegment.cpp @@ -45,16 +45,17 @@ #include "matroska/KaxAttachments.h" #include "matroska/KaxTags.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE -EbmlSemantic KaxMatroska_ContextList[2] = +static const EbmlSemantic ContextList_KaxMatroska[2] = { EbmlSemantic(true, true, EBML_INFO(EbmlHead)), EbmlSemantic(true, false, EBML_INFO(KaxSegment)), }; -EbmlSemantic KaxSegment_ContextList[8] = +static const EbmlSemantic ContextList_KaxSegment[8] = { EbmlSemantic(false, false, EBML_INFO(KaxCluster)), EbmlSemantic(false, false, EBML_INFO(KaxSeekHead)), @@ -66,11 +67,8 @@ EbmlSemantic KaxSegment_ContextList[8] = EbmlSemantic(false, true, EBML_INFO(KaxTags)), }; -const EbmlSemanticContext KaxMatroska_Context = EbmlSemanticContext(countof(KaxMatroska_ContextList), KaxMatroska_ContextList, NULL, *GetKaxGlobal_Context, NULL); -const EbmlSemanticContext KaxSegment_Context = EbmlSemanticContext(countof(KaxSegment_ContextList), KaxSegment_ContextList, NULL, *GetKaxGlobal_Context, &EBML_INFO(KaxSegment)); - -EbmlId KaxSegment_TheId(0x18538067, 4); -const EbmlCallbacks KaxSegment::ClassInfos(KaxSegment::Create, KaxSegment_TheId, "Segment\0rotomopogo", KaxSegment_Context); +DEFINE_MKX_MASTER_GLOBAL(KaxMatroska, -1, 5, "Matroska"); +DEFINE_MKX_MASTER_ORPHAN(KaxSegment, 0x18538067, 4, "Segment\0rotomopogo"); KaxSegment::KaxSegment() :EbmlMaster(KaxSegment_Context) diff --git a/src/KaxTags.cpp b/src/KaxTags.cpp index 4beb39b..0b9874d 100644 --- a/src/KaxTags.cpp +++ b/src/KaxTags.cpp @@ -36,22 +36,19 @@ #include "matroska/KaxTags.h" #include "matroska/KaxTag.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" using namespace LIBEBML_NAMESPACE; // sub elements START_LIBMATROSKA_NAMESPACE -EbmlSemantic KaxTags_ContextList[1] = +static const EbmlSemantic ContextList_KaxTags[1] = { EbmlSemantic(true, false, EBML_INFO(KaxTag)), }; -const EbmlSemanticContext KaxTags_Context = EbmlSemanticContext(countof(KaxTags_ContextList), KaxTags_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTags)); - -EbmlId KaxTags_TheId(0x1254C367, 4); - -const EbmlCallbacks KaxTags::ClassInfos(KaxTags::Create, KaxTags_TheId, "Tags", KaxTags_Context); +DEFINE_MKX_MASTER(KaxTags, 0x1254C367, 4, KaxSegment, "Tags"); KaxTags::KaxTags() :EbmlMaster(KaxTags_Context) diff --git a/src/KaxTrackAudio.cpp b/src/KaxTrackAudio.cpp index 8cb7dd5..b401646 100644 --- a/src/KaxTrackAudio.cpp +++ b/src/KaxTrackAudio.cpp @@ -36,13 +36,14 @@ // sub elements #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE #if MATROSKA_VERSION == 1 -const EbmlSemantic KaxTrackAudio_ContextList[4] = +static const EbmlSemantic ContextList_KaxTrackAudio[4] = #else // MATROSKA_VERSION -const EbmlSemantic KaxTrackAudio_ContextList[5] = +static const EbmlSemantic ContextList_KaxTrackAudio[5] = #endif // MATROSKA_VERSION { EbmlSemantic(true , true, EBML_INFO(KaxAudioSamplingFreq)), @@ -54,32 +55,14 @@ const EbmlSemantic KaxTrackAudio_ContextList[5] = #endif // MATROSKA_VERSION }; -const EbmlSemanticContext KaxTrackAudio_Context = EbmlSemanticContext(countof(KaxTrackAudio_ContextList), KaxTrackAudio_ContextList, &KaxTrackEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackAudio)); -const EbmlSemanticContext KaxAudioSamplingFreq_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAudioSamplingFreq)); -const EbmlSemanticContext KaxAudioOutputSamplingFreq_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAudioOutputSamplingFreq)); -const EbmlSemanticContext KaxAudioChannels_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAudioChannels)); -const EbmlSemanticContext KaxAudioBitDepth_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAudioBitDepth)); +DEFINE_MKX_MASTER (KaxTrackAudio, 0xE1, 1, KaxTrackEntry, "TrackAudio"); +DEFINE_MKX_FLOAT (KaxAudioSamplingFreq, 0xB5, 1, KaxTrackAudio, "AudioSamplingFreq"); +DEFINE_MKX_FLOAT (KaxAudioOutputSamplingFreq, 0x78B5, 2, KaxTrackAudio, "AudioOutputSamplingFreq"); +DEFINE_MKX_UINTEGER(KaxAudioChannels, 0x9F, 1, KaxTrackAudio, "AudioChannels"); +DEFINE_MKX_UINTEGER(KaxAudioBitDepth, 0x6264, 2, KaxTrackAudio, "AudioBitDepth"); #if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxAudioPosition_Context = EbmlSemanticContext(0, NULL, &KaxTrackAudio_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxAudioPosition)); -#endif // MATROSKA_VERSION - -EbmlId KaxTrackAudio_TheId (0xE1, 1); -EbmlId KaxAudioSamplingFreq_TheId(0xB5, 1); -EbmlId KaxAudioOutputSamplingFreq_TheId(0x78B5, 2); -EbmlId KaxAudioChannels_TheId (0x9F, 1); -EbmlId KaxAudioBitDepth_TheId (0x6264, 2); -#if MATROSKA_VERSION >= 2 -EbmlId KaxAudioPosition_TheId (0x7D7B, 2); -#endif // MATROSKA_VERSION - -const EbmlCallbacks KaxTrackAudio::ClassInfos(KaxTrackAudio::Create, KaxTrackAudio_TheId, "TrackAudio", KaxTrackAudio_Context); -const EbmlCallbacks KaxAudioSamplingFreq::ClassInfos(KaxAudioSamplingFreq::Create, KaxAudioSamplingFreq_TheId, "AudioSamplingFreq", KaxAudioSamplingFreq_Context); -const EbmlCallbacks KaxAudioOutputSamplingFreq::ClassInfos(KaxAudioOutputSamplingFreq::Create, KaxAudioOutputSamplingFreq_TheId, "AudioOutputSamplingFreq", KaxAudioOutputSamplingFreq_Context); -const EbmlCallbacks KaxAudioChannels::ClassInfos(KaxAudioChannels::Create, KaxAudioChannels_TheId, "AudioChannels", KaxAudioChannels_Context); -const EbmlCallbacks KaxAudioBitDepth::ClassInfos(KaxAudioBitDepth::Create, KaxAudioBitDepth_TheId, "AudioBitDepth", KaxAudioBitDepth_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxAudioPosition::ClassInfos(KaxAudioPosition::Create, KaxAudioPosition_TheId, "AudioPosition", KaxAudioPosition_Context); -#endif // MATROSKA_VERSION +DEFINE_MKX_BINARY (KaxAudioPosition, 0x7D7B, 2, KaxTrackAudio, "AudioPosition"); +#endif KaxTrackAudio::KaxTrackAudio() :EbmlMaster(KaxTrackAudio_Context) diff --git a/src/KaxTrackEntryData.cpp b/src/KaxTrackEntryData.cpp index 6bccf8b..fc337e3 100644 --- a/src/KaxTrackEntryData.cpp +++ b/src/KaxTrackEntryData.cpp @@ -35,105 +35,46 @@ */ #include "matroska/KaxTrackEntryData.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE -const EbmlSemantic KaxTrackTranslate_ContextList[3] = +static const EbmlSemantic ContextList_KaxTrackTranslate[3] = { EbmlSemantic(false, false,EBML_INFO(KaxTrackTranslateEditionUID)), EbmlSemantic(true , true, EBML_INFO(KaxTrackTranslateCodec)), EbmlSemantic(true , true, EBML_INFO(KaxTrackTranslateTrackID)), }; -EbmlId KaxTrackNumber_TheId (0xD7, 1); -EbmlId KaxTrackUID_TheId (0x73C5, 2); -EbmlId KaxTrackType_TheId (0x83, 1); -EbmlId KaxTrackFlagDefault_TheId (0x88, 1); -EbmlId KaxTrackFlagForced_TheId (0x55AA, 2); -EbmlId KaxTrackFlagLacing_TheId (0x9C, 1); -EbmlId KaxTrackMinCache_TheId (0x6DE7, 2); -EbmlId KaxTrackMaxCache_TheId (0x6DF8, 2); -EbmlId KaxTrackDefaultDuration_TheId (0x23E383, 3); -EbmlId KaxTrackTimecodeScale_TheId (0x23314F, 3); -EbmlId KaxMaxBlockAdditionID_TheId (0x55EE, 2); -EbmlId KaxTrackName_TheId (0x536E, 2); -EbmlId KaxTrackLanguage_TheId (0x22B59C, 3); -EbmlId KaxCodecID_TheId (0x86, 1); -EbmlId KaxCodecPrivate_TheId (0x63A2, 2); -EbmlId KaxCodecName_TheId (0x258688, 3); -EbmlId KaxTrackAttachmentLink_TheId (0x7446, 2); -EbmlId KaxTrackOverlay_TheId (0x6FAB, 2); -EbmlId KaxTrackTranslate_TheId (0x6624, 2); -EbmlId KaxTrackTranslateEditionUID_TheId(0x66FC, 2); -EbmlId KaxTrackTranslateCodec_TheId (0x66BF, 2); -EbmlId KaxTrackTranslateTrackID_TheId (0x66A5, 2); +DEFINE_MKX_UINTEGER (KaxTrackNumber, 0xD7, 1, KaxTracks, "TrackNumber"); +DEFINE_MKX_UINTEGER (KaxTrackUID, 0x73C5, 2, KaxTracks, "TrackUID"); +DEFINE_MKX_UINTEGER (KaxTrackType, 0x83, 1, KaxTracks, "TrackType"); +DEFINE_MKX_UINTEGER (KaxTrackFlagDefault, 0x88, 1, KaxTracks, "TrackFlagEnabled"); +DEFINE_MKX_UINTEGER (KaxTrackFlagForced, 0x55AA, 2, KaxTracks, "TrackFlagForced"); +DEFINE_MKX_UINTEGER (KaxTrackFlagLacing, 0x9C, 1, KaxTracks, "TrackFlagLacing"); +DEFINE_MKX_UINTEGER (KaxTrackMinCache, 0x6DE7, 2, KaxTracks, "TrackMinCache"); +DEFINE_MKX_UINTEGER (KaxTrackMaxCache, 0x6DF8, 2, KaxTracks, "TrackMaxCache\0rotomodobopo"); +DEFINE_MKX_UINTEGER (KaxTrackDefaultDuration, 0x23E383, 3, KaxTracks, "TrackDefaultDuration"); +DEFINE_MKX_FLOAT (KaxTrackTimecodeScale, 0x23314F, 3, KaxTracks, "TrackTimecodeScale"); +DEFINE_MKX_UINTEGER (KaxMaxBlockAdditionID, 0x55EE, 2, KaxTracks, "MaxBlockAdditionID"); +DEFINE_MKX_UNISTRING(KaxTrackName, 0x536E, 2, KaxTracks, "TrackName"); +DEFINE_MKX_STRING (KaxTrackLanguage, 0x22B59C, 3, KaxTracks, "TrackLanguage"); +DEFINE_MKX_STRING (KaxCodecID, 0x86, 1, KaxTracks, "CodecID"); +DEFINE_MKX_BINARY (KaxCodecPrivate, 0x63A2, 2, KaxTracks, "CodecPrivate"); +DEFINE_MKX_UNISTRING(KaxCodecName, 0x258688, 3, KaxTracks, "CodecName"); +DEFINE_MKX_BINARY (KaxTrackAttachmentLink, 0x7446, 2, KaxTracks, "TrackAttachmentLink"); +DEFINE_MKX_UINTEGER (KaxTrackOverlay, 0x6FAB, 2, KaxTracks, "TrackOverlay"); +DEFINE_MKX_MASTER (KaxTrackTranslate, 0x6624, 2, KaxTracks, "TrackTranslate"); +DEFINE_MKX_UINTEGER (KaxTrackTranslateEditionUID, 0x66FC, 2, KaxTrackTranslate, "TrackTranslateEditionUID"); +DEFINE_MKX_UINTEGER (KaxTrackTranslateCodec, 0x66BF, 2, KaxTrackTranslate, "TrackTranslateCodec"); +DEFINE_MKX_BINARY (KaxTrackTranslateTrackID, 0x66A5, 2, KaxTrackTranslate, "TrackTranslateTrackID"); #if MATROSKA_VERSION >= 2 -EbmlId KaxTrackFlagEnabled_TheId (0xB9, 1); -EbmlId KaxCodecSettings_TheId (0x3A9697, 3); -EbmlId KaxCodecInfoURL_TheId (0x3B4040, 3); -EbmlId KaxCodecDownloadURL_TheId (0x26B240, 3); -EbmlId KaxCodecDecodeAll_TheId (0xAA, 1); -#endif // MATROSKA_VERSION - -const EbmlSemanticContext KaxTrackNumber_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackNumber)); -const EbmlSemanticContext KaxTrackUID_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackUID)); -const EbmlSemanticContext KaxTrackType_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackType)); -const EbmlSemanticContext KaxTrackFlagDefault_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackFlagDefault)); -const EbmlSemanticContext KaxTrackFlagForced_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackFlagForced)); -const EbmlSemanticContext KaxTrackFlagLacing_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackFlagLacing)); -const EbmlSemanticContext KaxTrackMinCache_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackMinCache)); -const EbmlSemanticContext KaxTrackMaxCache_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackMaxCache)); -const EbmlSemanticContext KaxTrackDefaultDuration_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackDefaultDuration)); -const EbmlSemanticContext KaxTrackTimecodeScale_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackTimecodeScale)); -const EbmlSemanticContext KaxMaxBlockAdditionID_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxMaxBlockAdditionID)); -const EbmlSemanticContext KaxTrackName_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackName)); -const EbmlSemanticContext KaxTrackLanguage_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackLanguage)); -const EbmlSemanticContext KaxCodecID_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecID)); -const EbmlSemanticContext KaxCodecPrivate_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecPrivate)); -const EbmlSemanticContext KaxCodecName_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecName)); -const EbmlSemanticContext KaxTrackAttachmentLink_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackAttachmentLink)); -const EbmlSemanticContext KaxTrackOverlay_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackOverlay)); -const EbmlSemanticContext KaxTrackTranslate_Context = EbmlSemanticContext(countof(KaxTrackTranslate_ContextList), KaxTrackTranslate_ContextList, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackTranslate)); -const EbmlSemanticContext KaxTrackTranslateEditionUID_Context = EbmlSemanticContext(0, NULL, &KaxTrackTranslate_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackTranslateEditionUID)); -const EbmlSemanticContext KaxTrackTranslateCodec_Context = EbmlSemanticContext(0, NULL, &KaxTrackTranslate_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackTranslateCodec)); -const EbmlSemanticContext KaxTrackTranslateTrackID_Context = EbmlSemanticContext(0, NULL, &KaxTrackTranslate_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackTranslateTrackID)); -#if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxTrackFlagEnabled_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackFlagEnabled)); -const EbmlSemanticContext KaxCodecSettings_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecSettings)); -const EbmlSemanticContext KaxCodecInfoURL_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecInfoURL)); -const EbmlSemanticContext KaxCodecDownloadURL_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecDownloadURL)); -const EbmlSemanticContext KaxCodecDecodeAll_Context = EbmlSemanticContext(0, NULL, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxCodecDecodeAll)); -#endif // MATROSKA_VERSION - -const EbmlCallbacks KaxTrackNumber::ClassInfos(KaxTrackNumber::Create, KaxTrackNumber_TheId, "TrackNumber", KaxTrackNumber_Context); -const EbmlCallbacks KaxTrackUID::ClassInfos(KaxTrackUID::Create, KaxTrackUID_TheId, "TrackUID", KaxTrackUID_Context); -const EbmlCallbacks KaxTrackType::ClassInfos(KaxTrackType::Create, KaxTrackType_TheId, "TrackType", KaxTrackType_Context); -const EbmlCallbacks KaxTrackFlagDefault::ClassInfos(KaxTrackFlagDefault::Create, KaxTrackFlagDefault_TheId, "TrackFlagDefault", KaxTrackFlagDefault_Context); -const EbmlCallbacks KaxTrackFlagForced::ClassInfos(KaxTrackFlagForced::Create, KaxTrackFlagForced_TheId, "TrackFlagForced", KaxTrackFlagForced_Context); -const EbmlCallbacks KaxTrackFlagLacing::ClassInfos(KaxTrackFlagLacing::Create, KaxTrackFlagLacing_TheId, "TrackFlagLacing", KaxTrackFlagLacing_Context); -const EbmlCallbacks KaxTrackMinCache::ClassInfos(KaxTrackMinCache::Create, KaxTrackMinCache_TheId, "TrackMinCache", KaxTrackMinCache_Context); -const EbmlCallbacks KaxTrackMaxCache::ClassInfos(KaxTrackMaxCache::Create, KaxTrackMaxCache_TheId, "TrackMaxCache\0rotomodobopo", KaxTrackMaxCache_Context); -const EbmlCallbacks KaxTrackDefaultDuration::ClassInfos(KaxTrackDefaultDuration::Create, KaxTrackDefaultDuration_TheId, "TrackDefaultDuration", KaxTrackDefaultDuration_Context); -const EbmlCallbacks KaxTrackTimecodeScale::ClassInfos(KaxTrackTimecodeScale::Create, KaxTrackTimecodeScale_TheId, "TrackTimecodeScale", KaxTrackTimecodeScale_Context); -const EbmlCallbacks KaxMaxBlockAdditionID::ClassInfos(KaxMaxBlockAdditionID::Create, KaxMaxBlockAdditionID_TheId, "MaxBlockAdditionID", KaxMaxBlockAdditionID_Context); -const EbmlCallbacks KaxTrackName::ClassInfos(KaxTrackName::Create, KaxTrackName_TheId, "TrackName", KaxTrackName_Context); -const EbmlCallbacks KaxTrackLanguage::ClassInfos(KaxTrackLanguage::Create, KaxTrackLanguage_TheId, "TrackLanguage", KaxTrackLanguage_Context); -const EbmlCallbacks KaxCodecID::ClassInfos(KaxCodecID::Create, KaxCodecID_TheId, "CodecID", KaxCodecID_Context); -const EbmlCallbacks KaxCodecPrivate::ClassInfos(KaxCodecPrivate::Create, KaxCodecPrivate_TheId, "CodecPrivate", KaxCodecPrivate_Context); -const EbmlCallbacks KaxCodecName::ClassInfos(KaxCodecName::Create, KaxCodecName_TheId, "CodecName", KaxCodecName_Context); -const EbmlCallbacks KaxTrackAttachmentLink::ClassInfos(KaxTrackAttachmentLink::Create, KaxTrackAttachmentLink_TheId, "TrackAttachmentLink", KaxTrackAttachmentLink_Context); -const EbmlCallbacks KaxTrackOverlay::ClassInfos(KaxTrackOverlay::Create, KaxTrackOverlay_TheId, "TrackOverlay", KaxTrackOverlay_Context); -const EbmlCallbacks KaxTrackTranslate::ClassInfos(KaxTrackTranslate::Create, KaxTrackTranslate_TheId, "TrackTranslate", KaxTrackTranslate_Context); -const EbmlCallbacks KaxTrackTranslateEditionUID::ClassInfos(KaxTrackTranslateEditionUID::Create, KaxTrackTranslateEditionUID_TheId, "TrackTranslateEditionUID", KaxTrackTranslateEditionUID_Context); -const EbmlCallbacks KaxTrackTranslateCodec::ClassInfos(KaxTrackTranslateCodec::Create, KaxTrackTranslateCodec_TheId, "TrackTranslateCodec", KaxTrackTranslateCodec_Context); -const EbmlCallbacks KaxTrackTranslateTrackID::ClassInfos(KaxTrackTranslateTrackID::Create, KaxTrackTranslateTrackID_TheId, "TrackTranslateTrackID", KaxTrackTranslateTrackID_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxTrackFlagEnabled::ClassInfos(KaxTrackFlagEnabled::Create, KaxTrackFlagEnabled_TheId, "TrackFlagEnabled", KaxTrackFlagEnabled_Context); -const EbmlCallbacks KaxCodecSettings::ClassInfos(KaxCodecSettings::Create, KaxCodecSettings_TheId, "CodecSettings", KaxCodecSettings_Context); -const EbmlCallbacks KaxCodecInfoURL::ClassInfos(KaxCodecInfoURL::Create, KaxCodecInfoURL_TheId, "CodecInfoURL", KaxCodecInfoURL_Context); -const EbmlCallbacks KaxCodecDownloadURL::ClassInfos(KaxCodecDownloadURL::Create, KaxCodecDownloadURL_TheId, "CodecDownloadURL", KaxCodecDownloadURL_Context); -const EbmlCallbacks KaxCodecDecodeAll::ClassInfos(KaxCodecDecodeAll::Create, KaxCodecDecodeAll_TheId, "CodecDecodeAll", KaxCodecDecodeAll_Context); -#endif // MATROSKA_VERSION +DEFINE_MKX_UINTEGER (KaxTrackFlagEnabled, 0xB9, 1, KaxTracks, "TrackFlagDefault"); +DEFINE_MKX_UNISTRING(KaxCodecSettings, 0x3A9697, 3, KaxTracks, "CodecSettings"); +DEFINE_MKX_STRING (KaxCodecInfoURL, 0x3B4040, 3, KaxTracks, "CodecInfoURL"); +DEFINE_MKX_STRING (KaxCodecDownloadURL, 0x26B240, 3, KaxTracks, "CodecDownloadURL"); +DEFINE_MKX_UINTEGER (KaxCodecDecodeAll, 0xAA, 1, KaxTracks, "CodecDecodeAll"); +#endif KaxTrackTranslate::KaxTrackTranslate() :EbmlMaster(KaxTrackTranslate_Context) diff --git a/src/KaxTrackVideo.cpp b/src/KaxTrackVideo.cpp index 077e627..3a23a8e 100644 --- a/src/KaxTrackVideo.cpp +++ b/src/KaxTrackVideo.cpp @@ -36,13 +36,14 @@ // sub elements #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE #if MATROSKA_VERSION == 1 -const EbmlSemantic KaxTrackVideo_ContextList[10] = +static const EbmlSemantic ContextList_KaxTrackVideo[10] = #else // MATROSKA_VERSION -const EbmlSemantic KaxTrackVideo_ContextList[15] = +static const EbmlSemantic ContextList_KaxTrackVideo[15] = #endif // MATROSKA_VERSION { EbmlSemantic(true , true, EBML_INFO(KaxVideoPixelWidth)), @@ -64,62 +65,24 @@ const EbmlSemantic KaxTrackVideo_ContextList[15] = #endif // MATROSKA_VERSION }; -const EbmlSemanticContext KaxTrackVideo_Context = EbmlSemanticContext(countof(KaxTrackVideo_ContextList), KaxTrackVideo_ContextList, &KaxTrackEntry_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackVideo)); -const EbmlSemanticContext KaxVideoPixelWidth_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoPixelWidth)); -const EbmlSemanticContext KaxVideoPixelHeight_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoPixelHeight)); -const EbmlSemanticContext KaxVideoPixelCropBottom_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoPixelCropBottom)); -const EbmlSemanticContext KaxVideoPixelCropTop_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoPixelCropTop)); -const EbmlSemanticContext KaxVideoPixelCropRight_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoPixelCropLeft)); -const EbmlSemanticContext KaxVideoPixelCropLeft_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoPixelCropRight)); -const EbmlSemanticContext KaxVideoDisplayWidth_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoDisplayWidth)); -const EbmlSemanticContext KaxVideoDisplayHeight_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoDisplayHeight)); -const EbmlSemanticContext KaxVideoColourSpace_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoColourSpace)); -const EbmlSemanticContext KaxVideoFrameRate_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoFrameRate)); +DEFINE_MKX_MASTER (KaxTrackVideo, 0xE0, 1, KaxTrackEntry, "TrackVideo"); +DEFINE_MKX_UINTEGER(KaxVideoPixelWidth, 0xB0, 1, KaxTrackVideo, "VideoPixelWidth"); +DEFINE_MKX_UINTEGER(KaxVideoPixelHeight, 0xBA, 1, KaxTrackVideo, "VideoPixelHeight"); +DEFINE_MKX_UINTEGER(KaxVideoPixelCropBottom, 0x54AA, 2, KaxTrackVideo, "VideoPixelCropBottom"); +DEFINE_MKX_UINTEGER(KaxVideoPixelCropTop, 0x54BB, 2, KaxTrackVideo, "VideoPixelCropTop"); +DEFINE_MKX_UINTEGER(KaxVideoPixelCropLeft, 0x54CC, 2, KaxTrackVideo, "VideoPixelCropLeft"); +DEFINE_MKX_UINTEGER(KaxVideoPixelCropRight, 0x54DD, 2, KaxTrackVideo, "VideoPixelCropRight"); +DEFINE_MKX_UINTEGER(KaxVideoDisplayWidth, 0x54B0, 2, KaxTrackVideo, "VideoDisplayWidth"); +DEFINE_MKX_UINTEGER(KaxVideoDisplayHeight, 0x54BA, 2, KaxTrackVideo, "VideoDisplayHeight"); +DEFINE_MKX_BINARY (KaxVideoColourSpace, 0x2EB524, 3, KaxTrackVideo, "VideoColourSpace"); +DEFINE_MKX_FLOAT (KaxVideoFrameRate, 0x2383E3, 3, KaxTrackVideo, "VideoFrameRate"); #if MATROSKA_VERSION >= 2 -const EbmlSemanticContext KaxVideoFlagInterlaced_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoFlagInterlaced)); -const EbmlSemanticContext KaxVideoStereoMode_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoStereoMode)); -const EbmlSemanticContext KaxVideoDisplayUnit_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoDisplayUnit)); -const EbmlSemanticContext KaxVideoAspectRatio_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoAspectRatio)); -const EbmlSemanticContext KaxVideoGamma_Context = EbmlSemanticContext(0, NULL, &KaxTrackVideo_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxVideoGamma)); -#endif // MATROSKA_VERSION - -EbmlId KaxTrackVideo_TheId (0xE0, 1); -EbmlId KaxVideoPixelWidth_TheId (0xB0, 1); -EbmlId KaxVideoPixelHeight_TheId (0xBA, 1); -EbmlId KaxVideoPixelCropBottom_TheId(0x54AA, 2); -EbmlId KaxVideoPixelCropTop_TheId (0x54BB, 2); -EbmlId KaxVideoPixelCropLeft_TheId (0x54CC, 2); -EbmlId KaxVideoPixelCropRight_TheId (0x54DD, 2); -EbmlId KaxVideoDisplayWidth_TheId (0x54B0, 2); -EbmlId KaxVideoDisplayHeight_TheId (0x54BA, 2); -EbmlId KaxVideoColourSpace_TheId (0x2EB524, 3); -EbmlId KaxVideoFrameRate_TheId (0x2383E3, 3); -#if MATROSKA_VERSION >= 2 -EbmlId KaxVideoFlagInterlaced_TheId (0x9A, 1); -EbmlId KaxVideoStereoMode_TheId (0x53B9, 2); -EbmlId KaxVideoDisplayUnit_TheId (0x54B2, 2); -EbmlId KaxVideoAspectRatio_TheId (0x54B3, 1); -EbmlId KaxVideoGamma_TheId (0x2FB523, 3); -#endif // MATROSKA_VERSION - -const EbmlCallbacks KaxTrackVideo::ClassInfos(KaxTrackVideo::Create, KaxTrackVideo_TheId, "TrackAudio", KaxTrackVideo_Context); -const EbmlCallbacks KaxVideoPixelWidth::ClassInfos(KaxVideoPixelWidth::Create, KaxVideoPixelWidth_TheId, "VideoPixelWidth", KaxVideoPixelWidth_Context); -const EbmlCallbacks KaxVideoPixelHeight::ClassInfos(KaxVideoPixelHeight::Create, KaxVideoPixelHeight_TheId, "VideoPixelHeight", KaxVideoPixelHeight_Context); -const EbmlCallbacks KaxVideoPixelCropBottom::ClassInfos(KaxVideoPixelCropBottom::Create, KaxVideoPixelCropBottom_TheId, "VideoPixelCropBottom", KaxVideoPixelCropBottom_Context); -const EbmlCallbacks KaxVideoPixelCropTop::ClassInfos(KaxVideoPixelCropTop::Create, KaxVideoPixelCropTop_TheId, "VideoPixelCropTop", KaxVideoPixelCropTop_Context); -const EbmlCallbacks KaxVideoPixelCropLeft::ClassInfos(KaxVideoPixelCropLeft::Create, KaxVideoPixelCropLeft_TheId, "VideoPixelCropLeft", KaxVideoPixelCropLeft_Context); -const EbmlCallbacks KaxVideoPixelCropRight::ClassInfos(KaxVideoPixelCropRight::Create, KaxVideoPixelCropRight_TheId, "VideoPixelCropRight", KaxVideoPixelCropRight_Context); -const EbmlCallbacks KaxVideoDisplayWidth::ClassInfos(KaxVideoDisplayWidth::Create, KaxVideoDisplayWidth_TheId, "VideoDisplayWidth", KaxVideoDisplayWidth_Context); -const EbmlCallbacks KaxVideoDisplayHeight::ClassInfos(KaxVideoDisplayHeight::Create, KaxVideoDisplayHeight_TheId, "VideoDisplayHeight", KaxVideoDisplayHeight_Context); -const EbmlCallbacks KaxVideoColourSpace::ClassInfos(KaxVideoColourSpace::Create, KaxVideoColourSpace_TheId, "VideoColourSpace", KaxVideoColourSpace_Context); -const EbmlCallbacks KaxVideoFrameRate::ClassInfos(KaxVideoFrameRate::Create, KaxVideoFrameRate_TheId, "VideoFrameRate", KaxVideoFrameRate_Context); -#if MATROSKA_VERSION >= 2 -const EbmlCallbacks KaxVideoFlagInterlaced::ClassInfos(KaxVideoFlagInterlaced::Create, KaxVideoFlagInterlaced_TheId, "VideoFlagInterlaced", KaxVideoFlagInterlaced_Context); -const EbmlCallbacks KaxVideoStereoMode::ClassInfos(KaxVideoStereoMode::Create, KaxVideoStereoMode_TheId, "VideoStereoMode", KaxVideoStereoMode_Context); -const EbmlCallbacks KaxVideoDisplayUnit::ClassInfos(KaxVideoDisplayUnit::Create, KaxVideoDisplayUnit_TheId, "VideoDisplayUnit", KaxVideoDisplayUnit_Context); -const EbmlCallbacks KaxVideoAspectRatio::ClassInfos(KaxVideoAspectRatio::Create, KaxVideoAspectRatio_TheId, "VideoAspectRatio", KaxVideoAspectRatio_Context); -const EbmlCallbacks KaxVideoGamma::ClassInfos(KaxVideoGamma::Create, KaxVideoGamma_TheId, "VideoGamma", KaxVideoGamma_Context); -#endif // MATROSKA_VERSION +DEFINE_MKX_UINTEGER(KaxVideoFlagInterlaced, 0x9A, 1, KaxTrackVideo, "VideoFlagInterlaced"); +DEFINE_MKX_UINTEGER(KaxVideoStereoMode, 0x53B9, 2, KaxTrackVideo, "VideoStereoMode"); +DEFINE_MKX_UINTEGER(KaxVideoDisplayUnit, 0x54B2, 2, KaxTrackVideo, "VideoDisplayUnit"); +DEFINE_MKX_UINTEGER(KaxVideoAspectRatio, 0x54B3, 2, KaxTrackVideo, "VideoAspectRatio"); +DEFINE_MKX_FLOAT (KaxVideoGamma, 0x2FB523, 3, KaxTrackVideo, "VideoGamma"); +#endif KaxTrackVideo::KaxTrackVideo() :EbmlMaster(KaxTrackVideo_Context) diff --git a/src/KaxTracks.cpp b/src/KaxTracks.cpp index 608ee6b..30aa14b 100644 --- a/src/KaxTracks.cpp +++ b/src/KaxTracks.cpp @@ -40,18 +40,19 @@ #include "matroska/KaxTrackVideo.h" #include "matroska/KaxContentEncoding.h" #include "matroska/KaxContexts.h" +#include "matroska/KaxDefines.h" START_LIBMATROSKA_NAMESPACE -const EbmlSemantic KaxTracks_ContextList[1] = +static const EbmlSemantic ContextList_KaxTracks[1] = { EbmlSemantic(true, false, EBML_INFO(KaxTrackEntry)), }; #if MATROSKA_VERSION == 1 -const EbmlSemantic KaxTrackEntry_ContextList[22] = +static const EbmlSemantic ContextList_KaxTrackEntry[22] = #else // MATROSKA_VERSION -const EbmlSemantic KaxTrackEntry_ContextList[27] = +static const EbmlSemantic ContextList_KaxTrackEntry[27] = #endif // MATROSKA_VERSION { EbmlSemantic(true , true, EBML_INFO(KaxTrackNumber)), @@ -87,14 +88,8 @@ const EbmlSemantic KaxTrackEntry_ContextList[27] = EbmlSemantic(false, true, EBML_INFO(KaxContentEncodings)), }; -const EbmlSemanticContext KaxTracks_Context = EbmlSemanticContext(countof(KaxTracks_ContextList), KaxTracks_ContextList, &KaxSegment_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTracks)); -const EbmlSemanticContext KaxTrackEntry_Context = EbmlSemanticContext(countof(KaxTrackEntry_ContextList), KaxTrackEntry_ContextList, &KaxTracks_Context, *GetKaxGlobal_Context, &EBML_INFO(KaxTrackEntry)); - -EbmlId KaxTracks_TheId (0x1654AE6B, 4); -EbmlId KaxTrackEntry_TheId(0xAE, 1); - -const EbmlCallbacks KaxTracks::ClassInfos(KaxTracks::Create, KaxTracks_TheId, "Tracks", KaxTracks_Context); -const EbmlCallbacks KaxTrackEntry::ClassInfos(KaxTrackEntry::Create, KaxTrackEntry_TheId, "TrackEntry", KaxTrackEntry_Context); +DEFINE_MKX_MASTER(KaxTracks, 0x1654AE6B, 4, KaxSegment, "Tracks"); +DEFINE_MKX_MASTER(KaxTrackEntry, 0xAE, 1, KaxTracks, "TrackEntry"); KaxTracks::KaxTracks() :EbmlMaster(KaxTracks_Context)