qtatmmgs.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:18k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _QTATMMGS_H_
  36. #define _QTATMMGS_H_
  37. /****************************************************************************
  38.  *  Defines
  39.  */
  40. #define _STCO_ZERO_BASED_IQ
  41. #define _STSD_ZERO_BASED_IQ
  42. #define _STSS_ZERO_BASED_IQ
  43. #define _TINF_NO_MEDIA_SCALE_IQ
  44. // Enable identification of SYNC packets with ASM_SWITCH_ON/OFF flags
  45. #define _STSS_TRACK_SYNC    
  46. #define QT_BAD_IDX 0xFFFFFFFF
  47. #define QT_BAD_PAYLOAD 0xFFFFFFFF
  48. #ifdef QTCONFIG_SPEED_OVER_SIZE
  49. #define QTATMMGS_INLINE inline
  50. #else // QTCONFIG_SPEED_OVER_SIZE
  51. #define QTATMMGS_INLINE /**/
  52. #endif // QTCONFIG_SPEED_OVER_SIZE
  53. /****************************************************************************
  54.  *  Includes
  55.  */
  56. #include "qtatoms.h"
  57. #include "hxcomm.h"
  58. class CQTTrackManager;
  59. class CQT_MovieInfo_Manager;
  60. /****************************************************************************
  61.  *  Track Edit Manager
  62.  *  Note: All locally stored times are in media units
  63.  */
  64. class CQT_TrackEdit_Manager
  65. {
  66. public:
  67.     /*
  68.      * Constructor/Destructor
  69.      */
  70.     CQT_TrackEdit_Manager(void);
  71.     ~CQT_TrackEdit_Manager();
  72.     /*
  73.      * Main Interface
  74.      */
  75.     HX_RESULT Init( CQTAtom* pAtom, 
  76.     ULONG32 ulMovieTimeScale,
  77.     ULONG32 ulMediaTimeScale);
  78.     BOOL EstablishByTime(ULONG32 ulTime); // Given in miliseconds
  79.     BOOL AdvanceByMediaTime(ULONG32 ulMediaTime, BOOL &bDone)  // media units
  80.     {
  81. m_ulCurrentInEditTime += ulMediaTime;
  82. bDone = FALSE; // Assume Not Done
  83. if (m_ulCurrentInEditTime < m_ulCurrentEditDuration)
  84. {
  85.     return FALSE;  // No Edit Advancement
  86. }
  87. else
  88. {
  89.     // We have to move onto the next edit
  90.     if (!SequenceToEdit())
  91.     {
  92. bDone = TRUE;
  93. m_ulCurrentInEditTime -= ulMediaTime;
  94.     }
  95.     return TRUE;  // Edit Advancement (possibly failed)
  96. }
  97.     }
  98.     ULONG32 GetMediaTime(void)  // in media units
  99.     {
  100. return m_ulCurrentMediaStartTime + m_ulCurrentInEditTime;
  101.     }
  102.     double GetRealTime(void)  // in miliseconds
  103.     {
  104. return (((double) (m_ulCurrentEditTime + m_ulCurrentInEditTime)) *
  105.         1000.0 /
  106. ((double) m_ulMediaTimeScale));
  107.     }
  108. private:
  109.     BOOL SequenceToEdit(void);
  110.     ULONG32 MovieToMediaUnits(ULONG32 ulMovieTime)
  111.     {
  112. return (ULONG32) ((((double) ulMovieTime) / m_ulMovieTimeScale) * 
  113.   m_ulMediaTimeScale + 0.5);
  114.     }
  115.     CQT_elst_Atom* m_pEditListAtom;
  116.     ULONG32 m_ulMovieTimeScale;
  117.     ULONG32 m_ulMediaTimeScale;
  118.     ULONG32 m_ulNumEdits;
  119.     ULONG32 m_ulCurrentEditIdx;
  120.     ULONG32 m_ulCurrentEditTime;
  121.     ULONG32 m_ulCurrentInEditTime;
  122.     ULONG32 m_ulCurrentEditDuration;
  123.     ULONG32 m_ulCurrentMediaStartTime;  
  124. };
  125. /****************************************************************************
  126.  *  Sample To Chunk Manager
  127.  */
  128. class CQT_SampleToChunk_Manager
  129. {
  130. public:
  131.     /*
  132.      * Constructor/Destructor
  133.      */
  134.     CQT_SampleToChunk_Manager(void);
  135.     ~CQT_SampleToChunk_Manager();
  136.     /*
  137.      * Main Interface
  138.      */
  139.     HX_RESULT Init(CQTAtom* pAtom);
  140.     BOOL EstablishBySample(ULONG32 ulSampleNum);
  141.     BOOL AdvanceBySample(void)
  142.     {
  143. m_ulSampleNumber++;
  144. m_ulSampleInChunkNum++;
  145. return SequenceToChunk();
  146.     }
  147.     BOOL AdvanceToNextChunk(void)
  148.     {
  149. m_ulSampleNumber += (m_ulSamplesPerChunk - m_ulSampleInChunkNum);
  150. m_ulSampleInChunkNum = m_ulSamplesPerChunk;
  151. return AdvanceBySample();
  152.     }
  153.     ULONG32 GetChunkNum(void) { return m_ulCurrentChunk; }
  154.     ULONG32 GetChunkSampleNum(void) { return m_ulSampleInChunkNum; }
  155.     ULONG32 GetChunkSampleCount(void) { return m_ulSamplesPerChunk; }
  156.     ULONG32 GetSampleDescIdx(void) { return m_ulSampleDescIdx; }
  157.     ULONG32 GetSampleNum(void) { return m_ulSampleNumber; }
  158.     
  159. private:
  160.     BOOL SequenceToChunk(void);
  161.     inline BOOL SequenceReverseToChunk(void);
  162.     CQT_stsc_Atom* m_pSampleToChunkAtom;
  163.     ULONG32 m_ulNumEntries;
  164.     ULONG32 m_ulSampleInChunkNum;
  165.     ULONG32 m_ulCurrentChunk;
  166.     ULONG32 m_ulNextEntryChunk;
  167.     ULONG32 m_ulCurrentEntryIdx;
  168.     ULONG32 m_ulSamplesPerChunk;
  169.     ULONG32 m_ulSampleNumber;
  170.     ULONG32 m_ulSampleDescIdx;
  171. #ifdef _STCO_ZERO_BASED_IQ
  172.     ULONG32 m_ulChunkNumOffset;
  173. #endif // _STCO_ZERO_BASED_IQ
  174. };
  175. /****************************************************************************
  176.  *  Time To Sample Manager
  177.  *  Note: All time locals are in media time units
  178.  */
  179. class CQT_TimeToSample_Manager
  180. {
  181. public:
  182.     /*
  183.      * Constructor/Destructor
  184.      */
  185.     CQT_TimeToSample_Manager(void);
  186.     ~CQT_TimeToSample_Manager();
  187.     /*
  188.      * Main Interface
  189.      */
  190.     HX_RESULT Init(CQTAtom* pAtom);
  191.     BOOL EstablishByMediaTime(ULONG32 ulMediaTime);
  192.     BOOL EstablishAtKeyByMediaTime(ULONG32 ulMediaTime);
  193.     QTATMMGS_INLINE BOOL AdvanceSyncSampleNumber(void);
  194.     QTATMMGS_INLINE BOOL AdvanceCompBySample(void);
  195.     QTATMMGS_INLINE BOOL AdvanceBySample(void);
  196.     BOOL EstablishCompBySample(ULONG32 ulSampleNum);
  197.     ULONG32 GetSampleNumber(void) { return m_ulSampleNumber; }
  198.     ULONG32 GetSampleDuration(void) { return m_ulSampleDuration; }
  199.     ULONG32 GetCompositionOffset(void) { return m_ulCompOffset; }
  200.     ULONG32 GetLastMediaSyncTime(void) { return m_ulLastSyncTime; }
  201.     ULONG32 GetSyncSampleNumber(void) { return m_ulSyncSampleNumber; }
  202.     BOOL    IsOnSyncSample(void) { return (m_ulSyncSampleNumber == 
  203.   m_ulSampleNumber); }
  204. private:
  205.     CQT_stts_Atom* m_pTimeToSampleAtom;
  206.     CQT_ctts_Atom* m_pCompOffsetAtom;
  207.     CQT_stss_Atom* m_pSyncSampleAtom;
  208.     ULONG32 m_ulNumEntries;
  209.     ULONG32 m_ulCurrentEntryIdx;
  210.     ULONG32 m_ulSampleNumber;
  211.     ULONG32 m_ulSamplesLeftInEntry;
  212.     ULONG32 m_ulSampleDuration;
  213.     ULONG32 m_ulLastSyncTime;
  214.     ULONG32 m_ulNumCompEntries;
  215.     ULONG32 m_ulCurrentCompEntryIdx;
  216.     ULONG32 m_ulCompSampleNumber;
  217.     ULONG32 m_ulSamplesLeftInCompEntry;
  218.     ULONG32 m_ulCompOffset;
  219.     ULONG32 m_ulNumSyncEntries;
  220.     ULONG32 m_ulCurrentSyncEntryIdx;
  221.     ULONG32 m_ulSyncSampleNumber;
  222. #ifdef _STSS_ZERO_BASED_IQ
  223.     ULONG32 m_ulKeyFrameNumOffset;
  224. #endif // _STSS_ZERO_BASED_IQ
  225. };
  226. /****************************************************************************
  227.  *  Sample Size Manager
  228.  */
  229. class CQT_SampleSize_Manager
  230. {
  231. public:
  232.     /*
  233.      * Constructor/Destructor
  234.      */
  235.     CQT_SampleSize_Manager(void);
  236.     ~CQT_SampleSize_Manager();
  237.     /*
  238.      * Main Interface
  239.      */
  240.     HX_RESULT Init(CQTAtom* pAtom);
  241.     BOOL EstablishBySample(ULONG32 ulSampleNum, 
  242.    ULONG32 ulChunkSampleNum,
  243.    ULONG32 ulSamplesPerChunk = 0);
  244.     ULONG32 GetSampleSize(void) { return m_ulSampleSize; }
  245.     ULONG32 GetChunkSampleOffset(void) { return m_ulChunkSampleOffset; }
  246.     ULONG32 GetChunkSize(void) { return m_ulChunkSize; }
  247. private:
  248.     CQT_stsz_Atom* m_pSampleSizeAtom;
  249.     ULONG32 m_ulGenericSize;
  250.     ULONG32 m_ulSampleSize;
  251.     ULONG32 m_ulChunkSampleOffset;
  252.     ULONG32 m_ulChunkSize;
  253.     ULONG32 m_ulNumEntries;
  254.     ULONG32 m_ulChunkStartSampleNum;
  255.     ULONG32 m_ulSampleNum;
  256. };
  257. /****************************************************************************
  258.  *  Chunk To Offset Manager
  259.  */
  260. class CQT_ChunkToOffset_Manager
  261. {
  262. public:
  263.     /*
  264.      * Constructor/Destructor
  265.      */
  266.     CQT_ChunkToOffset_Manager(void);
  267.     ~CQT_ChunkToOffset_Manager();
  268.     /*
  269.      * Main Interface
  270.      */
  271.     HX_RESULT Init(CQTAtom* pAtom);
  272.     BOOL EstablishByChunk(ULONG32 ulChunkNum)
  273.     {
  274. if ((ulChunkNum > 0) &&
  275.     (ulChunkNum <= m_ulNumEntries))
  276. {
  277.     m_ulChunkOffset = m_pChunkToOffsetAtom->Get_ChunkOffset(ulChunkNum - 1);
  278.     return TRUE;
  279. }
  280. return FALSE;
  281.     }
  282.     ULONG32 GetChunkOffset(void)    { return m_ulChunkOffset; }
  283. private:
  284.     CQT_stco_Atom* m_pChunkToOffsetAtom;
  285.     ULONG32 m_ulChunkOffset;
  286.     ULONG32 m_ulNumEntries;
  287. };
  288. /****************************************************************************
  289.  *  Sample Description Manager
  290.  */
  291. class CQT_SampleDescription_Manager
  292. {
  293. public:
  294.     /*
  295.      * Constructor/Destructor
  296.      */
  297.     CQT_SampleDescription_Manager(void);
  298.     ~CQT_SampleDescription_Manager();
  299.     /*
  300.      * Main Interface
  301.      */
  302.     HX_RESULT Init(CQTAtom* pAtom);
  303.     BOOL EstablishByIdx(ULONG32 ulSampleDescIdx)
  304.     {
  305. if (ulSampleDescIdx == m_ulSampleDescIdx)
  306. {
  307.     return TRUE;
  308. }
  309. if (ulSampleDescIdx < m_ulNumEntries)
  310. {
  311.     m_ulSampleDescIdx = ulSampleDescIdx;
  312.     return ParseSampleDescription();
  313. }
  314. return FALSE;
  315.     }
  316.     ULONG32 GetDataRefIdx(void) { return m_ulDataRefIdx; }
  317.     ULONG32 GetDataFormat(void) { return m_ulDataFormat; }
  318.     ULONG32 GetNumEntries(void) { return m_ulNumEntries; }
  319.     ULONG32 GetRTPTimeScale(void) { return m_ulRTPTimeScale; }
  320.     LONG32  GetTimeStampOffset(void) { return m_lTimeStampOffset; }
  321.     LONG32  GetSequenceNumOffset(void) { return m_lSequenceNumOffset; }
  322.     CQT_stsd_Atom::ArrayEntry* GetSampleDescEntry(void) { return m_pSampleDesc; }
  323.     ULONG32 GetSampleDescBufferOffset(void)
  324.     {
  325. HX_ASSERT(m_pSampleDescriptionAtom);
  326. return (ULONG32) (((UINT8*) m_pSampleDesc) - 
  327.   m_pSampleDescriptionAtom->GetData());
  328.     }
  329.     IHXBuffer* GetSampleDescBuffer(void)
  330.     {
  331. HX_ASSERT(m_pSampleDescriptionAtom);
  332. return m_pSampleDescriptionAtom->GetBuffer();
  333.     }
  334.     CQT_stsd_Atom* GetSampleDescriptionAtom() { return m_pSampleDescriptionAtom; }
  335. private:
  336.     BOOL ParseSampleDescription(void);
  337.     CQT_stsd_Atom* m_pSampleDescriptionAtom;
  338.     ULONG32 m_ulSampleDescIdx;
  339.     CQT_stsd_Atom::ArrayEntry* m_pSampleDesc;
  340.     ULONG32 m_ulDataRefIdx;
  341.     ULONG32 m_ulDataFormat;
  342.     ULONG32 m_ulRTPTimeScale;
  343.     LONG32  m_lTimeStampOffset;
  344.     LONG32  m_lSequenceNumOffset;
  345.     ULONG32 m_ulNumEntries;
  346.     ULONG32 m_ulDataRefIdxOffset;
  347. };
  348. /****************************************************************************
  349.  *  Data Reference Manager
  350.  */
  351. class CQT_DataReference_Manager
  352. {
  353. public:
  354.     /*
  355.      * Constructor/Destructor
  356.      */
  357.     CQT_DataReference_Manager(void);
  358.     ~CQT_DataReference_Manager();
  359.     /*
  360.      * Main Interface
  361.      */
  362.     HX_RESULT Init(CQTAtom* pAtom, IHXCommonClassFactory* pClassFactory);
  363.     BOOL EstablishByIdx(ULONG32 ulDataRefIdx)
  364.     {
  365. if (ulDataRefIdx == m_ulDataRefIdx)
  366. {
  367.     return TRUE;
  368. }
  369. if (ulDataRefIdx < m_ulNumEntries)
  370. {
  371.     m_ulDataRefIdx = ulDataRefIdx;
  372.     return ParseDataReference();
  373. }
  374. return FALSE;
  375.     }
  376.     IHXBuffer* GetDataRefName(void) { return m_pDataRefName; }
  377. private:
  378.     BOOL ParseDataReference(void);
  379.     BOOL FindRelPath(UINT8* pData,
  380.      ULONG32 ulDataLength, 
  381.      UINT8* &pRelPath, 
  382.      ULONG32 &ulPathLength);
  383.     CQT_dref_Atom* m_pDataReferenceAtom;
  384.     ULONG32 m_ulDataRefIdx;
  385.     IHXBuffer* m_pDataRefName;
  386.     IHXCommonClassFactory* m_pClassFactory;
  387.     ULONG32 m_ulNumEntries;
  388. };
  389. /****************************************************************************
  390.  *  Hint Reference Manager
  391.  */
  392. class CQT_HintReference_Manager
  393. {
  394. public:
  395.     /*
  396.      * Constructor/Destructor
  397.      */
  398.     CQT_HintReference_Manager(void);
  399.     ~CQT_HintReference_Manager();
  400.     /*
  401.      * Main Interface
  402.      */
  403.     HX_RESULT Init(CQTAtom* pAtom);
  404.     BOOL EstablishByIdx(ULONG32 ulTrackRefIdx)
  405.     {
  406. if (ulTrackRefIdx == m_ulTrackRefIdx)
  407. {
  408.     return TRUE;
  409. }
  410. if (ulTrackRefIdx < m_ulNumEntries)
  411. {
  412.     m_ulTrackRefIdx = ulTrackRefIdx;
  413.     return ParseTrackReference();
  414. }
  415. return FALSE;
  416.     }
  417.     ULONG32 GetTrackID(void) { return m_ulTrackID; }
  418. private:
  419.     BOOL ParseTrackReference(void)
  420.     {
  421. m_ulTrackID = m_pHintAtom->Get_TrackID(m_ulTrackRefIdx);
  422. return TRUE;
  423.     }
  424.     CQT_hint_Atom* m_pHintAtom;
  425.     ULONG32 m_ulTrackRefIdx;
  426.     ULONG32 m_ulTrackID;
  427.     ULONG32 m_ulNumEntries;
  428. };
  429. /****************************************************************************
  430.  *  Track Info Manager
  431.  */
  432. class CQT_TrackInfo_Manager
  433. {
  434. public:
  435.     /*
  436.      * Constructor/Destructor
  437.      */
  438.     CQT_TrackInfo_Manager(void);
  439.     ~CQT_TrackInfo_Manager();
  440.     /*
  441.      * Main Interface
  442.      */
  443.     HX_RESULT Init(IUnknown* pContext,
  444.    CQTAtom* pAtom,
  445.    CQT_SampleDescription_Manager* pSampleDescManager,
  446.    CQTTrackManager* pTrackManager,
  447.    CQT_MovieInfo_Manager* pMovieInfo = NULL);
  448.    
  449.     HX_RESULT CheckForcePacketization(CQT_sdp_Atom* pSDPAtom, IUnknown* pContext);
  450.     QTAtomType GetTrackType(void) { return m_TrackType; }
  451.     ULONG32 GetMediaTimeScale(void) { return m_ulMediaTimeScale; }
  452.     // Track duration is given in movie units
  453.     ULONG32 GetTrackDuration(void) { return m_ulTrackDuration; }
  454.     ULONG32 GetNameLength(void);
  455.     const UINT8* GetName(void);
  456.     ULONG32 GetSDPLength(void);
  457.     const UINT8* GetSDP(void);
  458.     ULONG32 GetOpaqueDataLength(void);
  459.     const UINT8* GetOpaqueData(void);
  460.     const UINT32 GetNumSamplesInOpaqueData(void);
  461.     const char* GetMimeType(void)   { return m_pMimeType; }
  462.     ULONG32 GetTrackSize(void)     { return m_ulTrackSize; }
  463.     ULONG32 GetAvgBitrate(void)     { return m_ulAvgBitrate; }
  464.     ULONG32 GetMaxBitrate(void)     { return m_ulMaxBitrate; }
  465.     ULONG32 GetPreroll(void)     { return m_ulPreroll; }
  466.     ULONG32 GetPredata(void)     { return m_ulPredata; }
  467.     
  468.     ULONG32 GetRefTrackId(void)     { return m_ulRefTrackID; }
  469.     ULONG32 GetTrackWidth(void)     { return m_ulTrackWidth; }
  470.     ULONG32 GetTrackHeight(void)    { return m_ulTrackHeight; }
  471.     ULONG32 GetFrameWidth(void)     { return m_ulFrameWidth; }
  472.     ULONG32 GetFrameHeight(void)    { return m_ulFrameHeight; }
  473.     ULONG32 GetNumChannels(void)    { return m_ulChannels; }
  474.     UINT32 GetTrackTransformX(void) { return m_ulTrackMatrixTransformX; }
  475.     UINT32 GetTrackTransformY(void) { return m_ulTrackMatrixTransformY; }
  476.     ULONG32 GetPayloadType(void);
  477.     ULONG32 GetPayloadNameLength(void);
  478.     UINT8* GetPayloadName(void);
  479.     HX_RESULT GetHeader(IHXValues* &pHeader);
  480.     void SetHeader(IHXValues* pHeader);
  481. private:
  482.     void Clear(void);
  483.     HX_RESULT InitHinted(CQTAtom* pAtom,
  484.  CQT_SampleDescription_Manager* pSampleDescManager,
  485.  CQTTrackManager* pTrackManager,
  486.  CQT_MovieInfo_Manager* pMovieInfo);
  487.     HX_RESULT InitNonHinted(CQTAtom* pAtom,
  488.     CQT_SampleDescription_Manager* pSampleDescManager,
  489.     CQTTrackManager* pTrackManager,
  490.     CQT_MovieInfo_Manager* pMovieInfo);
  491.     
  492.     ULONG32 m_ulMediaTimeScale;
  493.     ULONG32 m_ulPayloadType;
  494.     ULONG32 m_ulTrackDuration;
  495.     ULONG32 m_ulTrackSize;
  496.     ULONG32 m_ulAvgBitrate;
  497.     ULONG32 m_ulMaxBitrate;
  498.     ULONG32 m_ulPreroll;
  499.     ULONG32 m_ulPredata;
  500.     ULONG32 m_ulRefTrackID;
  501.     ULONG32 m_ulTrackWidth;
  502.     ULONG32 m_ulTrackHeight;
  503.     ULONG32 m_ulFrameWidth;
  504.     ULONG32 m_ulFrameHeight;
  505.     ULONG32 m_ulChannels;
  506.     QTAtomType m_TrackType;
  507.     UINT32 m_ulTrackMatrixTransformX;
  508.     UINT32 m_ulTrackMatrixTransformY;
  509.     char* m_pName;
  510.     char* m_pSDP;
  511.     char* m_pMimeType;
  512.     UINT8* m_pOpaqueData;
  513.     ULONG32 m_ulOpaqueDataSize;
  514.     BOOL m_bOpaqueDataShouldBeDeleted;
  515.     UINT32 m_ulNumSamplesInOpaqueData;
  516.     IHXValues* m_pHeader;
  517.     
  518.     CQT_name_Atom* m_pNameAtom;
  519.     CQT_sdp_Atom* m_pSDPAtom;
  520.     CQT_payt_Atom* m_pPayloadTypeAtom;
  521. };
  522. /****************************************************************************
  523.  *  Movie Info Manager
  524.  */
  525. class CQT_MovieInfo_Manager
  526. {
  527. public:
  528.     /*
  529.      * Constructor/Destructor
  530.      */
  531.     CQT_MovieInfo_Manager(void);
  532.     ~CQT_MovieInfo_Manager();
  533.     /*
  534.      * Main Interface
  535.      */
  536.     HX_RESULT Init(CQTAtom* pAtom, 
  537.    CQTTrackManager* pTrackManager);
  538.     void      Clear(void);
  539.     ULONG32 GetMovieTimeScale(void) { return m_ulMovieTimeScale; }
  540.     ULONG32 GetMovieDuration(void) { return m_ulMovieDuration; }
  541.     ULONG32 GetNameLength(void)
  542.     {
  543. ULONG32 ulSize = 0;
  544. if (m_pNameAtom)
  545. {
  546.     ulSize = m_pNameAtom->GetDataSize();
  547. }
  548. return ulSize;
  549.     }
  550.     UINT8* GetName(void)
  551.     {
  552. return m_pNameAtom ? m_pNameAtom->GetData() : NULL;
  553.     }
  554.     ULONG32 GetSDPLength(void);
  555.     UINT8* GetSDP(void);
  556. private:
  557.     HX_RESULT ParseMovieHintInfo(CQTAtom* pAtom);
  558.     ULONG32 m_ulMovieTimeScale;
  559.     ULONG32 m_ulMovieDuration;
  560.     CQT_name_Atom* m_pNameAtom;
  561.     CQT_rtp_Atom* m_pRTPSDPAtom;
  562. };
  563. #ifdef QTCONFIG_SPEED_OVER_SIZE
  564. #include "qtatmmgs_inline.h"
  565. #endif // QTCONFIG_SPEED_OVER_SIZE
  566. #endif  // _QTATMMGS_H_