[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