[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs] mp4/fileformat/pub atomizer.h, 1.9,
From: pbasic () helixcommunity ! org
Date: 2008-04-28 2:10:02
Message-ID: 200804280210.m3S2AVhZ019578 () mailer ! progressive-comp ! com
[Download RAW message or body]
Update of /cvsroot/datatype/mp4/fileformat/pub
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv28131/pub
Modified Files:
Tag: hxclient_3_1_0_atlas
atomizer.h qtatmmgs.h qtatoms.h qtbatom.h
Log Message:
Modified atomizer to handle versioned container atoms. Added ID3v2 support.
Index: qtatmmgs.h
===================================================================
RCS file: /cvsroot/datatype/mp4/fileformat/pub/qtatmmgs.h,v
retrieving revision 1.19.8.2
retrieving revision 1.19.8.3
diff -u -d -r1.19.8.2 -r1.19.8.3
--- qtatmmgs.h 27 Mar 2008 11:21:07 -0000 1.19.8.2
+++ qtatmmgs.h 28 Apr 2008 02:09:59 -0000 1.19.8.3
@@ -704,8 +704,8 @@
/*
* Main Interface
*/
- HX_RESULT Init(CQTAtom* pAtom,
- CQTTrackManager* pTrackManager);
+ HX_RESULT Init(CQTAtom* pAtom,
+ CQTTrackManager* pTrackManager);
void Clear(void);
@@ -981,7 +981,7 @@
//*** Recording Year Atom ************************************
- HXBOOL HasRecordingYear()
+ HXBOOL HasRecordingYear(void)
{
return (m_pYrrcAtom ? TRUE : FALSE);
}
@@ -991,6 +991,18 @@
return m_pYrrcAtom ? m_pYrrcAtom->GetRecordingYear() : 0;
}
+ //*** ID32 Atom *********************************************
+
+ UINT32 GetID32BlobSize(void)
+ {
+ return m_pID32Atom ? m_pID32Atom->GetID32BlobSize() : 0;
+ }
+
+ UINT8* GetID32Blob(void)
+ {
+ return m_pID32Atom ? m_pID32Atom->GetID32Blob() : 0;
+ }
+
//*** Language Encoding **************************************
// If the encodings of all atoms are equal, <out> is filled with unambiguous \
encoding and TRUE is returned. @@ -1006,6 +1018,12 @@
private:
HX_RESULT ParseMovieHintInfo(CQTAtom* pAtom);
+ static CQT_meta_Atom* FindMetaAtom(CQTAtom* pAtom);
+
+#ifdef HELIX_FEATURE_3GPP_METAINFO
+ static CQT_ID32_Atom* FindID32Atom(CQT_moov_Atom* pMoovAtom);
+ static CQT_ID32_Atom* FindID32Atom(CQT_meta_Atom* pMetaAtom);
+#endif // HELIX_FEATURE_3GPP_METAINFO
ULONG32 m_ulMovieTimeScale;
ULONG32 m_ulMovieDuration;
@@ -1026,6 +1044,7 @@
CQT_loci_Atom* m_pLociAtom;
CQT_albm_Atom* m_pAlbmAtom;
CQT_yrrc_Atom* m_pYrrcAtom;
+ CQT_ID32_Atom* m_pID32Atom;
#endif // HELIX_FEATURE_3GPP_METAINFO
#endif // HELIX_FEATURE_3GPP_METAINFO || HELIX_FEATURE_SERVER
Index: qtbatom.h
===================================================================
RCS file: /cvsroot/datatype/mp4/fileformat/pub/qtbatom.h,v
retrieving revision 1.5
retrieving revision 1.5.16.1
diff -u -d -r1.5 -r1.5.16.1
--- qtbatom.h 27 Apr 2005 13:57:42 -0000 1.5
+++ qtbatom.h 28 Apr 2008 02:09:59 -0000 1.5.16.1
@@ -43,6 +43,7 @@
#define QT_NEW_HEADER_SIZE 20
#define QT_EXTENDED_SIZE 8
#define QT_NEW_HEADER_GAP 4
+#define QT_NONLEAFTYPE_BODY_SIZE_FULLBOX 4
#define QT_ENCODE_TYPE(b1, b2, b3, b4) ((b1 << 24) | \
(b2 << 16) | \
@@ -142,6 +143,7 @@
*/
virtual HXBOOL IsLeafType(void) = 0;
virtual QTAtomType GetType(void) = 0;
+ virtual ULONG32 GetNonLeafTypeBodySize(void) { return 0; }
virtual HXBOOL IsNewQTAtom(void) { return FALSE; }
virtual HXBOOL IsPagingAtom(void) { return FALSE; }
virtual HXBOOL IsPagingEnabled(void) { return FALSE; }
@@ -209,6 +211,58 @@
return ChildIterator(m_pChildList, m_pChildList->GetHeadPosition());
}
+ /*
+ * Typed Child Iterator
+ */
+ class TypedChildIterator
+ {
+ public:
+ // If <atomType> == 0, all types are traversed.
+ TypedChildIterator(CQTAtom* pParent = NULL, QTAtomType atomType = 0)
+ : m_pParent(pParent)
+ , m_atomType(atomType)
+ , m_childCount(m_pParent ? m_pParent->GetPresentChildCount() : 0)
+ , m_indexNextSeek(0)
+ , m_pCurrentChild(NULL)
+ {
+ FindNextChild();
+ }
+ CQTAtom* GetCurrent()
+ {
+ return m_pCurrentChild;
+ }
+ HXBOOL MoveToNext()
+ {
+ FindNextChild();
+ return (m_pCurrentChild != NULL) ? TRUE : FALSE;
+ }
+
+ private:
+ void FindNextChild()
+ {
+ if(m_pParent)
+ {
+ m_pCurrentChild = NULL;
+
+ while(m_indexNextSeek < m_childCount)
+ {
+ CQTAtom* pAtom = m_pParent->GetPresentChild(m_indexNextSeek++);
+ if(pAtom &&
+ ((m_atomType == pAtom->GetType()) || (m_atomType == 0)))
+ {
+ m_pCurrentChild = pAtom;
+ }
+ }
+ }
+ }
+
+ CQTAtom* m_pParent;
+ QTAtomType m_atomType;
+ UINT16 m_childCount;
+ UINT16 m_indexNextSeek;
+ CQTAtom* m_pCurrentChild;
+ };
+
protected:
UINT8* FindArrayEntry(UINT8* pStartEntry, ULONG32 ulArrayIdx)
{
Index: qtatoms.h
===================================================================
RCS file: /cvsroot/datatype/mp4/fileformat/pub/qtatoms.h,v
retrieving revision 1.20.8.2
retrieving revision 1.20.8.3
diff -u -d -r1.20.8.2 -r1.20.8.3
--- qtatoms.h 27 Mar 2008 11:21:07 -0000 1.20.8.2
+++ qtatoms.h 28 Apr 2008 02:09:59 -0000 1.20.8.3
@@ -122,9 +122,11 @@
QT_loci = QT_ENCODE_TYPE('l', 'o', 'c', 'i'),
QT_albm = QT_ENCODE_TYPE('a', 'l', 'b', 'm'),
QT_yrrc = QT_ENCODE_TYPE('y', 'r', 'r', 'c'),
+ QT_ID32 = QT_ENCODE_TYPE('I', 'D', '3', '2'),
// /<<-- end Asset Info Data box types
#endif // HELIX_FEATURE_3GPP_METAINFO
#endif // HELIX_FEATURE_3GPP_METAINFO || HELIX_FEATURE_SERVER
+ QT_meta = QT_ENCODE_TYPE('m', 'e', 't', 'a'),
QT_edts = QT_ENCODE_TYPE('e', 'd', 't', 's'),
QT_elst = QT_ENCODE_TYPE('e', 'l', 's', 't'),
QT_tref = QT_ENCODE_TYPE('t', 'r', 'e', 'f'),
@@ -1335,10 +1337,99 @@
}
};
+/****************************************************************************
+ * ID32 Atom Class
+ */
+class CQT_ID32_Atom : public CQTAtom
+{
+public:
+ /*
+ * Leaf Data Format
+ */
+ struct Data
+ {
+ UINT8 pVersion[1];
+ UINT8 pFlags[3];
+ UINT8 pPadAndLang[2];
+ UINT8 pID32Blob[1];
+ } PACKING;
+
+ /*
+ * Constructor/Destructor
+ */
+ CQT_ID32_Atom(ULONG32 ulOffset,
+ ULONG32 ulSize,
+ CQTAtom *pParent) : CQTAtom(ulOffset,
+ ulSize,
+ pParent) {;}
+
+ /*
+ * Required Virtual Methods
+ */
+ virtual HXBOOL IsLeafType(void) { return TRUE; }
+ virtual QTAtomType GetType(void) { return QT_ID32; }
+
+ /*
+ * Data Access Methods
+ */
+ void GetLanguageEncoding(char out[3])
+ {
+ InitLanguageEncoding(out);
+ HX_ASSERT(m_pData);
+ if(m_pData)
+ {
+ ExtractLanguageEncoding(((Data*)m_pData)->pPadAndLang, out);
+ }
+ }
+
+ UINT8* GetID32Blob(void)
+ {
+ HX_ASSERT(m_pData);
+ return (m_pData) ? ((Data*) m_pData)->pID32Blob : NULL;
+ }
+
+ ULONG32 GetID32BlobSize(void)
+ {
+ return (GetDataSize() - sizeof(Data) + sizeof(UINT8));
+ }
+};
+
#endif // HELIX_FEATURE_3GPP_METAINFO
#endif // HELIX_FEATURE_3GPP_METAINFO || HELIX_FEATURE_SERVER
/****************************************************************************
+ * meta Atom Class
+ */
+class CQT_meta_Atom : public CQTAtom
+{
+public:
+ /*
+ * Non-Leaf Data Format
+ */
+ struct Data
+ {
+ UINT8 pVersion[1];
+ UINT8 pFlags[3];
+ } PACKING;
+
+ /*
+ * Constructor/Destructor
+ */
+ CQT_meta_Atom(ULONG32 ulOffset,
+ ULONG32 ulSize,
+ CQTAtom *pParent) : CQTAtom(ulOffset,
+ ulSize,
+ pParent) {;}
+
+ /*
+ * Required Virtual Methods
+ */
+ virtual HXBOOL IsLeafType(void) { return FALSE; }
+ virtual QTAtomType GetType(void) { return QT_meta; }
+ virtual ULONG32 GetNonLeafTypeBodySize(void) { return \
QT_NONLEAFTYPE_BODY_SIZE_FULLBOX; } +};
+
+/****************************************************************************
* name Atom Class
*/
class CQT_name_Atom : public CQTAtom
Index: atomizer.h
===================================================================
RCS file: /cvsroot/datatype/mp4/fileformat/pub/atomizer.h,v
retrieving revision 1.9
retrieving revision 1.9.10.1
diff -u -d -r1.9 -r1.9.10.1
--- atomizer.h 1 Nov 2005 00:27:11 -0000 1.9
+++ atomizer.h 28 Apr 2008 02:09:59 -0000 1.9.10.1
@@ -222,7 +222,8 @@
ATMZR_ProcNewHeader,
ATMZR_ProcExtendedSize,
ATMZR_MakeAtom,
- ATMZR_ProcBody
+ ATMZR_ProcBody,
+ ATMZR_ProcNonLeafBody
} AtomizerState;
typedef enum
_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic