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

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 _QTFFPLIN_H_
  36. #define _QTFFPLIN_H_
  37. /****************************************************************************
  38.  *  Defines
  39.  */
  40. #define QTFF_RDT_FORMAT     0
  41. #define QTFF_RTP_FORMAT     1
  42. #define MAX_QTFORMAT_FLAVOR 0x07
  43. #define MAX_QTFLAVORS     (MAX_QTFORMAT_FLAVOR + 1)
  44. #define QTASM_MARKER_ON_RULE 1
  45. #define QTASM_MARKER_OFF_RULE 0
  46. /****************************************************************************
  47.  *  Includes
  48.  */
  49. #include "hxcom.h"
  50. #include "hxplugn.h"
  51. #include "hxformt.h"
  52. #include "hxfiles.h"
  53. #include "hxerror.h"
  54. #include "hxasm.h"
  55. #include "fswtchr.h"
  56. #include "atomizer.h"
  57. #include "qtatmmgs.h"
  58. #include "qttrkmgr.h"
  59. #include "qtpacketizerfct.h"
  60. #ifdef QTCONFIG_BFRAG
  61. #include "bfrag.h"
  62. #endif // QTCONFIG_BFRAG
  63. #ifdef QTCONFIG_BFRAG_FACTORY
  64. #include "bfragfct.h"
  65. #endif // QTCONFIG_BFRAG_FACTORY
  66. #include "qtffrefcounter.h"
  67. /****************************************************************************
  68.  * 
  69.  *  Class:
  70.  * CQTFileFormat
  71.  *
  72.  *  Purpose:
  73.  * Implements Quick Time File Format
  74.  */
  75. class CQTFileFormat : public IHXPlugin, 
  76. public IHXFileFormatObject, 
  77. public IHXFileResponse,
  78. public IHXAtomizationCommander,
  79. public IHXAtomizerResponse,
  80. public IHXThreadSafeMethods,
  81. public IHXASMSource,
  82. public IHXPacketFormat
  83. {
  84. public:
  85.     /*
  86.      * Constructor
  87.      */
  88.     CQTFileFormat();
  89.     /*
  90.      * IUnknown methods
  91.      */
  92.     STDMETHOD(QueryInterface) (THIS_
  93. REFIID riid,
  94. void** ppvObj);
  95.     STDMETHOD_(ULONG32,AddRef) (THIS);
  96.     STDMETHOD_(ULONG32,Release) (THIS);
  97.     /*
  98.      * IHXPlugin methods
  99.      */
  100.     STDMETHOD(GetPluginInfo) (THIS_
  101. REF(BOOL) bLoadMultiple,
  102. REF(const char*) pDescription,
  103. REF(const char*) pCopyright,
  104. REF(const char*) pMoreInfoURL,
  105. REF(ULONG32) ulVersionNumber
  106. );
  107.     STDMETHOD(InitPlugin)   (THIS_
  108.     IUnknown*   /*IN*/  pContext);
  109.     /*
  110.      * IHXFileFormatObject methods
  111.      */
  112.     STDMETHOD(GetFileFormatInfo)    
  113. (THIS_
  114. REF(const char**) pFileMimeTypes,
  115. REF(const char**) pFileExtensions,
  116. REF(const char**) pFileOpenNames);
  117.     STDMETHOD(InitFileFormat)
  118. (THIS_
  119.         IHXRequest* pRequest, 
  120. IHXFormatResponse* pFormatResponse,
  121. IHXFileObject* pFileObject);
  122.     STDMETHOD(Close) (THIS);
  123.     STDMETHOD(GetFileHeader) (THIS);
  124.     STDMETHOD(GetStreamHeader) (THIS_
  125. UINT16 unStreamNumber);
  126.     
  127.     STDMETHOD(GetPacket) (THIS_
  128. UINT16 unStreamNumber);
  129.     STDMETHOD(Seek) (THIS_
  130. ULONG32 ulOffset);
  131.     /*
  132.      * IHXFileResponse
  133.      */
  134.     STDMETHOD(InitDone)     (THIS_
  135.     HX_RESULT status);
  136.     STDMETHOD(CloseDone)    (THIS_
  137.     HX_RESULT status);
  138.     STDMETHOD(ReadDone)     (THIS_ 
  139.          HX_RESULT status,
  140.     IHXBuffer* pBuffer);
  141.     STDMETHOD(WriteDone)    (THIS_ 
  142.     HX_RESULT status);
  143.     STDMETHOD(SeekDone)     (THIS_ 
  144.     HX_RESULT status);
  145.     /*
  146.      * IHXAtomizationCommander
  147.      */
  148.     STDMETHOD_(QTAtomizerCmd,GetAtomCommand) (THIS_
  149. QTAtomType AtomType,
  150. CQTAtom* pParent);
  151.     /*
  152.      * IHXAtomizerResponse
  153.      */
  154.     STDMETHOD(AtomReady)    (THIS_
  155.     HX_RESULT status,
  156.     CQTAtom* pRootAtom);
  157.     /*
  158.      * IHXThreadSafeMethods
  159.      */
  160.     STDMETHOD_(UINT32,IsThreadSafe)(THIS);
  161.     /*
  162.      * IHXASMSource methods
  163.      */
  164.     STDMETHOD (Subscribe)   (THIS_
  165.     UINT16 uStreamNumber,
  166.     UINT16 uRuleNumber);
  167.     STDMETHOD (Unsubscribe) (THIS_
  168.     UINT16 uStreamNumber,
  169.     UINT16 uRuleNumber);
  170.     /*
  171.      * IHXPacketFormat methods
  172.      */
  173.     STDMETHOD(GetSupportedPacketFormats)    (THIS_
  174.     REF(const char**) pFormats);
  175.     STDMETHOD(SetPacketFormat)     (THIS_
  176.     const char* pFormat);
  177.     /*
  178.      * Main Interface
  179.      */
  180.     HX_RESULT PacketReady(UINT16 uStreamNum, 
  181.   HX_RESULT status, 
  182.   IHXPacket* pPacket);
  183.     IUnknown* GetContext(void)     { return m_pContext; }
  184.     ULONG32 GetPacketFormat(void)   { return m_ulPacketFormat; }
  185.     HX_RESULT BuildStreamHeader(IHXValues* &pHeader,
  186. CQTTrack* pTrack,
  187. CQT_TrackInfo_Manager* pTrackInfo,
  188. CQT_MovieInfo_Manager* pMovieInfo,
  189. CQTTrackManager* pTrackManager,
  190. IHXCommonClassFactory* pClassFactory);
  191.     /*
  192.      * Public Managers
  193.      */
  194.     CQT_MovieInfo_Manager m_MovieInfo;
  195.     CQTTrackManager m_TrackManager;
  196. #ifdef QTCONFIG_BFRAG_FACTORY
  197.     CBufferFragmentFactory* m_pBufferFragmentFactory;
  198. #endif // QTCONFIG_BFRAG_FACTORY
  199. protected:
  200.     virtual CQTPacketizerFactory* BuildPacketizerFactory(void);
  201.     virtual HX_RESULT GetSessionIdentity(IHXValues* pHeader,
  202.  CQT_MovieInfo_Manager* pMovieInfo);
  203.     virtual HX_RESULT GetPayloadIdentity(IHXValues* pHeader,
  204.  CQTTrack* pTrack,
  205.  CQT_TrackInfo_Manager* pTrackInfo);
  206.     virtual ~CQTFileFormat(); 
  207.     IUnknown* m_pContext;
  208.     IHXCommonClassFactory* m_pClassFactory;
  209.     IHXFormatResponse* m_pFFResponse;
  210. private:
  211.     typedef enum
  212.     {
  213. QTFF_Offline,
  214. QTFF_Ready,
  215. QTFF_Error,
  216. QTFF_Init,
  217. QTFF_Atomize,
  218. QTFF_GetPacket,
  219. QTFF_PrimeCache,
  220. QTFF_SeekPending
  221.     } QTFileFormatState;
  222.     class CPacketCache
  223.     {
  224.     public:
  225. CPacketCache(void)
  226.     : pPacket(NULL)
  227.     , bPending(FALSE)
  228.     , bStreamDone(FALSE)    {;}
  229. ~CPacketCache() { HX_RELEASE(pPacket); }
  230. IHXPacket* pPacket;
  231. BOOL     bPending;
  232. BOOL     bStreamDone;
  233.     };
  234.     inline UINT16 GetNextPacketStreamNum(void);
  235.     HX_RESULT MakeFileHeader(HX_RESULT status);
  236.     HX_RESULT ObtainStreamHeader(UINT16 unStreamNumber,
  237.  IHXValues* &pHeader);
  238.     HX_RESULT AddMetaInfo(IHXValues* pHeader);
  239.     HX_RESULT ExtractAcceptMetaInfo(IHXBuffer* pRequestedInfoBuffer);
  240.     HX_RESULT HandleFailure(HX_RESULT status);
  241.     HX_RESULT CheckLicense(void);
  242.     void      ReportError(UINT32 ulErrorID, HX_RESULT retVal);
  243.     HX_RESULT GetResourceErrorString(UINT32 ulErrorID, CHXString& rErrorStr);
  244.     void  WarnIfNotHinted(HX_RESULT status, BOOL bIgnoreHintTracks);
  245.     
  246.     IHXScheduler* m_pScheduler;
  247.     IHXErrorMessages* m_pErrorMessages;
  248.     BOOL m_bQTLicensed;
  249.     BOOL                m_bMP4Licensed;
  250.     BOOL m_bViewSourceRequest;
  251.     UINT8 m_uFormatFlavor;
  252.     
  253.     IHXRequest* m_pRequest;
  254.     static const char* const zm_pDescription;
  255.     static const char* const zm_pCopyright;
  256.     static const char* const zm_pMoreInfoURL;
  257.     
  258.     static const char* const zm_pFileMimeTypes[];
  259.     static const char* const zm_pFileExtensions[];
  260.     static const char* const zm_pFileOpenNames[];
  261.     static const char* const zm_pPacketFormats[];
  262.     IHXFileSwitcher* m_pFileSwitcher;
  263.     CAtomizer* m_pAtomizer;
  264.     CQTPacketAssembler* m_pPacketAssembler;
  265.     ULONG32 m_ulPendingSeekTime;
  266.     CPacketCache* m_pPacketCache;
  267.     UINT16 m_uNextPacketStreamNum;
  268.     QTFileFormatState m_State;
  269.     ULONG32 m_ulPacketFormat;
  270.     LONG32 m_lRefCount;
  271.     // Values for mask
  272.     typedef enum
  273.     {
  274. META_INFO_NONE = 0,
  275. META_INFO_ALL = 1,
  276. META_INFO_WIDTH = 2,
  277. META_INFO_HEIGHT = 4
  278.     } eMetaInfoRequest;
  279.     UINT32 m_ulStreamMetaInfoMask;
  280. };
  281. #endif // ndef _QTFFPLIN_H_