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

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 _QTTRACK_H_
  36. #define _QTTRACK_H_
  37. /****************************************************************************
  38.  *  Defines
  39.  */
  40. #define QTTRK_USE_KEY_FRAMES FALSE
  41. #define QTTRK_USE_ANY_FRAME TRUE
  42. /****************************************************************************
  43.  *  Includes
  44.  */
  45. #include "hxfiles.h"
  46. #include "hxfswch.h"
  47. #include "qtatmmgs.h"
  48. #include "hxformt.h"
  49. #include "qtmcache.h"
  50. class CQTPacketAssembler;
  51. class CQTFileFormat;
  52. class CQTPacketizerFactory;
  53. /****************************************************************************
  54.  * 
  55.  *  Class:
  56.  * CQTTrack
  57.  *
  58.  *  Purpose:
  59.  * Implements Quick Time Track.
  60.  */
  61. class CQTTrack : public IHXFileResponse,
  62.                  public IHXThreadSafeMethods
  63. {
  64. public:
  65.     /*
  66.      * Constructor/Destructor
  67.      */
  68.     CQTTrack(CQTAtom* pTrackAtom);
  69.     virtual ~CQTTrack();
  70.     /*
  71.      * Main Interafce
  72.      */
  73.     virtual HX_RESULT Init(CQTFileFormat* pFileFormat,
  74.    CQTPacketAssembler* pPacketAssembler,
  75.    CQTPacketizerFactory* pPacketizerFactory,
  76.    const char* pProtocol = NULL);
  77.     virtual void Close(void);
  78.     virtual HX_RESULT Seek(ULONG32 ulTime);  // Time given in miliseconds
  79.     virtual HX_RESULT GetPacket(UINT16 uStreamNum);
  80.     virtual HX_RESULT ComputeTrackSize(ULONG32& ulTrackSizeOut);    
  81.     ULONG32 GetID(void) { return m_ulTrackID; }
  82.     HX_RESULT GetDataSegment(ULONG32 ulSampleNum,
  83.      ULONG32 ulSampleOffset,
  84.      ULONG32 ulSize);
  85.     HX_RESULT GetCompressedDataSegment(ULONG32 ulSampleNum,
  86.        ULONG32 ulSampleOffset,
  87.        ULONG32 ulSize,
  88.        UINT16  uBytesPerCBlock,
  89.        UINT16  uSamplesPerCBlock);
  90.     HX_RESULT GetSampleDescDataSegment(ULONG32 ulSampleDescIdx,
  91.        ULONG32 ulSampleDescOffset,
  92.        ULONG32 ulSize);
  93.     HX_RESULT GetNextCompressedDataSegment(ULONG32 ulSize);
  94.     ULONG32 GetLastSampleDescIdx(void) {return m_ulLastSampleDescIdx;}
  95.     /*
  96.      * IUnknown methods
  97.      */
  98.     STDMETHOD (QueryInterface )     (THIS_ 
  99.     REFIID ID, 
  100.     void** ppInterfaceObj);
  101.     STDMETHOD_(UINT32, AddRef )     (THIS);
  102.     STDMETHOD_(UINT32, Release)     (THIS);
  103.     /*
  104.      *  IHXFileResponse methods
  105.      */
  106.     STDMETHOD(InitDone)     (THIS_
  107.     HX_RESULT status)
  108.     {
  109. HX_ASSERT(HXR_NOTIMPL == HXR_OK);
  110. return HXR_NOTIMPL;
  111.     }
  112.     STDMETHOD(CloseDone)    (THIS_
  113.     HX_RESULT status)
  114.     {
  115. HX_ASSERT(HXR_NOTIMPL == HXR_OK);
  116. return HXR_NOTIMPL;
  117.     }
  118.     STDMETHOD(ReadDone)     (THIS_ 
  119.     HX_RESULT status,
  120.     IHXBuffer* pBuffer);
  121.     STDMETHOD(WriteDone)    (THIS_ 
  122.     HX_RESULT status)
  123.     {
  124. HX_ASSERT(HXR_NOTIMPL == HXR_OK);
  125. return HXR_NOTIMPL;
  126.     }
  127.     STDMETHOD(SeekDone)     (THIS_ 
  128.     HX_RESULT status);
  129.  
  130.     /*
  131.      * IHXThreadSafeMethods
  132.      */
  133.    STDMETHOD_(UINT32,IsThreadSafe) (THIS);
  134.     /*
  135.      * Public Atom Managers
  136.      */
  137.     CQT_TrackInfo_Manager m_TrackInfo;
  138.     CQT_SampleDescription_Manager m_SampleDesc;
  139. protected:
  140.     /*
  141.      * Protected functions
  142.      */
  143.     HX_RESULT InitPacketizer(IHXPayloadFormatObject* &pPacketizer,
  144.      CQTPacketizerFactory* pPacketizerFactory,
  145.      const char* pProtocol,
  146.      CQT_TrackInfo_Manager* pTrackInfo,
  147.      CQT_MovieInfo_Manager* pMovieInfo,
  148.      CQTTrackManager* pTrackManager,
  149.      CQTTrack* pTrack,
  150.      IUnknown* pContext);
  151.     HX_RESULT LoadData(IHXBuffer* pFileName,
  152.        ULONG32 ulOffset,
  153.        ULONG32 ulSize);
  154.     HX_RESULT DataReady(HX_RESULT status,
  155. IHXBuffer *pBuffer);
  156.     BOOL SequenceToTime(CQT_TrackEdit_Manager &TrackEdit,
  157. CQT_TimeToSample_Manager &TimeToSample,
  158. CQT_SampleToChunk_Manager &SampleToChunk,
  159. BOOL bUseNonKeyFrames);
  160.     BOOL AdvanceSample(CQT_TrackEdit_Manager &TrackEdit,
  161.        CQT_TimeToSample_Manager &TimeToSample,
  162.        CQT_SampleToChunk_Manager &SampleToChunk);
  163.     HX_RESULT ReturnPacket(HX_RESULT status, 
  164.    IHXBuffer* pBuffer);
  165.     HX_RESULT ReturnPacket(HX_RESULT status, 
  166.   IHXBuffer* pBuffer,
  167.   ULONG32 ulOffset,
  168.   ULONG32 ulSize);
  169.     /*
  170.      * Protected Atom Managers
  171.      */
  172.     CQT_DataReference_Manager m_DataRef;
  173.     CQT_SampleSize_Manager m_SampleSize;
  174.     
  175.     CQT_trak_Atom* m_pTrackAtom;
  176.     CQTFileFormat* m_pFileFormat;
  177.     CQTPacketAssembler* m_pPacketAssembler;
  178.     IHXCommonClassFactory* m_pClassFactory;
  179.     ULONG32 m_ulTrackID;
  180.     ULONG32 m_ulReadSize;
  181.     ULONG32 m_ulReadPageSize;
  182.     ULONG32 m_ulReadPageOffset;
  183.     IHXBuffer* m_pReadFileNameBuffer;
  184.     char* m_pReadFileName;
  185. #ifdef QTCONFIG_TRACK_CACHE
  186.     CQTMemCache m_TrackCache;
  187. #endif // QTCONFIG_TRACK_CACHE
  188. private:
  189.     typedef enum
  190.     {
  191. QTT_SampleRead,
  192. QTT_SegmentRead,
  193. QTT_Offline
  194.     } QTTPendingState;
  195.     QTTPendingState m_PendingState;
  196.     BOOL m_bTrackDone;
  197.     /*
  198.      * Private Atom Managers
  199.      */
  200.     CQT_TrackEdit_Manager m_TrackEdit;
  201.     CQT_TimeToSample_Manager m_TimeToSample;
  202.     CQT_SampleToChunk_Manager m_SampleToChunk;
  203.     CQT_ChunkToOffset_Manager m_ChunkToOffset;
  204.     UINT16 m_uBytesPerCBlock;
  205.     UINT16 m_uSamplesPerCBlock;
  206.     UINT16 m_uStreamNumber;
  207.     IHXPayloadFormatObject* m_pPacketizer;
  208.     IHXFileSwitcher* m_pFileSwitcher;
  209.     
  210.     LONG32 m_lRefCount;
  211.     ULONG32 m_ulLastSampleDescIdx;
  212. };
  213. #endif  // _QTTRACK_H_