[matroska] r1265 - in trunk/libmatroska: matroska src
[email protected] Sun, 14 Jan 2007 20:20:37 +0300 (MSK)
| Newsgroups | gmane.comp.multimedia.matroska.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mosu
Date: 2007-01-14 20:20:35 +0300 (Sun, 14 Jan 2007)
New Revision: 1265
Modified:
trunk/libmatroska/matroska/KaxBlock.h
trunk/libmatroska/matroska/KaxCluster.h
trunk/libmatroska/matroska/KaxCuesData.h
trunk/libmatroska/src/KaxBlock.cpp
trunk/libmatroska/src/KaxCues.cpp
trunk/libmatroska/src/KaxCuesData.cpp
Log:
Added support for KaxCodecState and for indexing them in the cues.
Modified: trunk/libmatroska/matroska/KaxBlock.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/libmatroska/matroska/KaxBlock.h 2006-10-12 20:52:34 UTC (rev 12=
64)
+++ trunk/libmatroska/matroska/KaxBlock.h 2007-01-14 17:20:35 UTC (rev 12=
65)
@@ -187,6 +187,8 @@
=20
operator KaxInternalBlock &();
=20
+ const KaxCluster *GetParentCluster() const { return ParentCluster; }
+
protected:
KaxCluster * ParentCluster;
const KaxTrackEntry * ParentTrack;
@@ -320,6 +322,7 @@
}
=20
operator KaxBlockGroup &();
+ operator const KaxBlockGroup &() const;
#if MATROSKA_VERSION >=3D 2
operator KaxSimpleBlock &();
#endif
@@ -434,6 +437,19 @@
EbmlElement * Clone() const {return new KaxBlockAddID(*this);}
};
=20
+class MATROSKA_DLL_API KaxCodecState : public EbmlBinary {
+ public:
+ KaxCodecState() {}
+ KaxCodecState(const KaxCodecState & ElementToClone) :EbmlBinary(Elemen=
tToClone){}
+ static EbmlElement & Create() {return *(new KaxCodecState);}
+ const EbmlCallbacks & Generic() const {return ClassInfos;}
+ static const EbmlCallbacks ClassInfos;
+ operator const EbmlId &() const {return ClassInfos.GlobalId;}
+ bool ValidateSize() const {return true;}
+
+ EbmlElement * Clone() const {return new KaxCodecState(*this);}
+};
+
END_LIBMATROSKA_NAMESPACE
=20
#endif // LIBMATROSKA_BLOCK_H
Modified: trunk/libmatroska/matroska/KaxCluster.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/libmatroska/matroska/KaxCluster.h 2006-10-12 20:52:34 UTC (rev =
1264)
+++ trunk/libmatroska/matroska/KaxCluster.h 2007-01-14 17:20:35 UTC (rev =
1265)
@@ -140,6 +140,8 @@
=20
bool AddBlockBlob(KaxBlockBlob * NewBlob);
=20
+ const KaxSegment *GetParentSegment() const { return ParentSegment; }
+
protected:
KaxBlockBlob * currentNewBlob;
std::vector<KaxBlockBlob*> Blobs;
Modified: trunk/libmatroska/matroska/KaxCuesData.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/libmatroska/matroska/KaxCuesData.h 2006-10-12 20:52:34 UTC (rev=
1264)
+++ trunk/libmatroska/matroska/KaxCuesData.h 2007-01-14 17:20:35 UTC (rev=
1265)
@@ -56,7 +56,7 @@
operator const EbmlId &() const {return ClassInfos.GlobalId;}
EbmlElement * Clone() const {return new KaxCuePoint(*this);}
void PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTi=
mecodeScale);
- void PositionSet(const KaxInternalBlock & BlockReference, uint64 Globa=
lTimecodeScale);
+ void PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTime=
codeScale);
=20
bool operator<(const EbmlElement & EltB) const;
=20
Modified: trunk/libmatroska/src/KaxBlock.cpp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/libmatroska/src/KaxBlock.cpp 2006-10-12 20:52:34 UTC (rev 1264)
+++ trunk/libmatroska/src/KaxBlock.cpp 2007-01-14 17:20:35 UTC (rev 1265)
@@ -45,7 +45,7 @@
#if MATROSKA_VERSION =3D=3D 1
const EbmlSemantic KaxBlockGroup_ContextList[6] =3D
#else // MATROSKA_VERSION
-const EbmlSemantic KaxBlockGroup_ContextList[8] =3D
+const EbmlSemantic KaxBlockGroup_ContextList[9] =3D
#endif // MATROSKA_VERSION
{
EbmlSemantic(true, true, KaxBlock::ClassInfos),
@@ -58,6 +58,7 @@
EbmlSemantic(false, false, KaxReferenceBlock::ClassInfos),
#if MATROSKA_VERSION >=3D 2
EbmlSemantic(false, true, KaxReferenceVirtual::ClassInfos),
+ EbmlSemantic(false, true, KaxCodecState::ClassInfos),
#endif // MATROSKA_VERSION
EbmlSemantic(false, true, KaxBlockAdditions::ClassInfos),
};
@@ -79,6 +80,7 @@
EbmlId KaxBlockDuration_TheId (0x9B, 1);
#if MATROSKA_VERSION >=3D 2
EbmlId KaxBlockVirtual_TheId (0xA2, 1);
+EbmlId KaxCodecState_TheId (0xA4, 1);
#endif // MATROSKA_VERSION
EbmlId KaxBlockAdditions_TheId (0x75A1, 2);
EbmlId KaxBlockMore_TheId (0xA6, 1);
@@ -91,6 +93,7 @@
#if MATROSKA_VERSION >=3D 2
const EbmlSemanticContext KaxSimpleBlock_Context =3D EbmlSemanticContext=
(0, NULL, &KaxCluster_Context, *GetKaxGlobal_Context, &KaxSimpleBlock::Cl=
assInfos);
const EbmlSemanticContext KaxBlockVirtual_Context =3D EbmlSemanticContex=
t(0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxBlockVirtua=
l::ClassInfos);
+const EbmlSemanticContext KaxCodecState_Context =3D EbmlSemanticContext(=
0, NULL, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxCodecState::C=
lassInfos);
#endif // MATROSKA_VERSION
const EbmlSemanticContext KaxBlockAdditions_Context =3D EbmlSemanticCont=
ext(countof(KaxBlockAdditions_ContextList), KaxBlockAdditions_ContextList=
, &KaxBlockGroup_Context, *GetKaxGlobal_Context, &KaxBlockAdditions::Clas=
sInfos);
const EbmlSemanticContext KaxBlockMore_Context =3D EbmlSemanticContext(c=
ountof(KaxBlockMore_ContextList), KaxBlockMore_ContextList, &KaxBlockAddi=
tions_Context, *GetKaxGlobal_Context, &KaxBlockMore::ClassInfos);
@@ -103,6 +106,7 @@
#if MATROSKA_VERSION >=3D 2
const EbmlCallbacks KaxSimpleBlock::ClassInfos(KaxSimpleBlock::Create, K=
axSimpleBlock_TheId, "SimpleBlock", KaxSimpleBlock_Context);
const EbmlCallbacks KaxBlockVirtual::ClassInfos(KaxBlockVirtual::Create,=
KaxBlockVirtual_TheId, "BlockVirtual", KaxBlockVirtual_Context);
+const EbmlCallbacks KaxCodecState::ClassInfos(KaxCodecState::Create, Kax=
CodecState_TheId, "CodecState", KaxCodecState_Context);
#endif // MATROSKA_VERSION
const EbmlCallbacks KaxBlockAdditions::ClassInfos(KaxBlockAdditions::Cre=
ate, KaxBlockAdditions_TheId, "BlockAdditions", KaxBlockAdditions_Context=
);
const EbmlCallbacks KaxBlockMore::ClassInfos(KaxBlockMore::Create, KaxBl=
ockMore_TheId, "BlockMore", KaxBlockMore_Context);
@@ -966,6 +970,13 @@
return *Block.group;
}
=20
+KaxBlockBlob::operator const KaxBlockGroup &() const
+{
+ assert(!bUseSimpleBlock);
+ assert(Block.group);
+ return *Block.group;
+}
+
KaxBlockBlob::operator KaxInternalBlock &()
{
assert(Block.group);
Modified: trunk/libmatroska/src/KaxCues.cpp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/libmatroska/src/KaxCues.cpp 2006-10-12 20:52:34 UTC (rev 1264)
+++ trunk/libmatroska/src/KaxCues.cpp 2007-01-14 17:20:35 UTC (rev 1265)
@@ -96,8 +96,7 @@
if (*ListIdx =3D=3D &BlockReference) {
// found, now add the element to the entry list
KaxCuePoint & NewPoint =3D AddNewChild<KaxCuePoint>(*this);
- const KaxInternalBlock &intblock =3D BlockReference;
- NewPoint.PositionSet(intblock, GlobalTimecodeScale());
+ NewPoint.PositionSet(BlockReference, GlobalTimecodeScale());
myTempReferences.erase(ListIdx);
break;
}
@@ -115,7 +114,7 @@
refTmp.TrackNum() =3D=3D BlockRef.TrackNumber()) {
// found, now add the element to the entry list
KaxCuePoint & NewPoint =3D AddNewChild<KaxCuePoint>(*this);
- NewPoint.PositionSet(refTmp, GlobalTimecodeScale());
+ NewPoint.PositionSet(**ListIdx, GlobalTimecodeScale());
myTempReferences.erase(ListIdx);
break;
}
Modified: trunk/libmatroska/src/KaxCuesData.cpp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/libmatroska/src/KaxCuesData.cpp 2006-10-12 20:52:34 UTC (rev 12=
64)
+++ trunk/libmatroska/src/KaxCuesData.cpp 2007-01-14 17:20:35 UTC (rev 12=
65)
@@ -36,6 +36,8 @@
#include "matroska/KaxContexts.h"
#include "matroska/KaxBlock.h"
#include "matroska/KaxBlockData.h"
+#include "matroska/KaxCluster.h"
+#include "matroska/KaxSegment.h"
=20
START_LIBMATROSKA_NAMESPACE
=20
@@ -156,13 +158,21 @@
NewRefs.AddReference(BlockReference.Reference(i).RefBlock(), GlobalTi=
mecodeScale);
}
}
+
+ KaxCodecState *CodecState =3D static_cast<KaxCodecState *>(BlockReferen=
ce.FindFirstElt(KaxCodecState::ClassInfos));
+ if (CodecState !=3D NULL) {
+ KaxCueCodecState &CueCodecState =3D AddNewChild<KaxCueCodecState>(NewP=
ositions);
+ *static_cast<EbmlUInteger*>(&CueCodecState) =3D BlockReference.GetPare=
ntCluster()->GetParentSegment()->GetRelativePosition(CodecState->GetEleme=
ntPosition());
+ }
#endif // MATROSKA_VERSION
=20
bValueIsSet =3D true;
}
=20
-void KaxCuePoint::PositionSet(const KaxInternalBlock & BlockReference, u=
int64 GlobalTimecodeScale)
+void KaxCuePoint::PositionSet(const KaxBlockBlob & BlobReference, uint64=
GlobalTimecodeScale)
{
+ const KaxInternalBlock &BlockReference =3D BlobReference;
+
// fill me
KaxCueTime & NewTime =3D GetChild<KaxCueTime>(*this);
*static_cast<EbmlUInteger*>(&NewTime) =3D BlockReference.GlobalTimecode=
() / GlobalTimecodeScale;
@@ -186,6 +196,17 @@
}
#endif // MATROSKA_VERSION
=20
+#if MATROSKA_VERSION >=3D 2
+ if (!BlobReference.IsSimpleBlock()) {
+ const KaxBlockGroup &BlockGroup =3D BlobReference;
+ const KaxCodecState *CodecState =3D static_cast<KaxCodecState *>(Block=
Group.FindFirstElt(KaxCodecState::ClassInfos));
+ if (CodecState !=3D NULL) {
+ KaxCueCodecState &CueCodecState =3D AddNewChild<KaxCueCodecState>(New=
Positions);
+ *static_cast<EbmlUInteger*>(&CueCodecState) =3D BlockGroup.GetParentC=
luster()->GetParentSegment()->GetRelativePosition(CodecState->GetElementP=
osition());
+ }
+ }
+#endif // MATROSKA_VERSION
+
bValueIsSet =3D true;
}
=20