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

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 _HX_FILE_SOURCE_
  36. #define _HX_FILE_SOURCE_
  37. #include "hxbsrc.h"
  38. #include "hxsrc.h"
  39. // forward decl..
  40. class CHXString;
  41. struct IHXFileMimeMapperResponse;
  42. struct IHXFormatResponse;
  43. struct IHXPluginSearchEnumerator;
  44. #include "hxcom.h"
  45. #include "ihxpckts.h"
  46. #include "chxpckts.h"
  47. #include "hxfiles.h"
  48. #include "recognizer.h"
  49. class HXFileSource : public HXSource, 
  50.       public IHXFormatResponse,
  51.                       public IHXHTTPRedirectResponse
  52. {
  53. public:
  54.  HXFileSource(void);
  55.     STDMETHOD(QueryInterface) (THIS_
  56. REFIID riid,
  57. void** ppvObj);
  58.     STDMETHOD_(ULONG32,AddRef) (THIS);
  59.     STDMETHOD_(ULONG32,Release) (THIS);
  60.     /*
  61.      * IHXPendingStatus methods
  62.      */
  63.     /************************************************************************
  64.      * Method:
  65.      *     IHXPendingStatus::GetStatus
  66.      * Purpose:
  67.      *     Called by the user to get the current pending status from an object
  68.      */
  69.     STDMETHOD(GetStatus) (THIS_
  70. REF(UINT16) uStatusCode, 
  71. REF(IHXBuffer*) pStatusDesc, 
  72. REF(UINT16) ulPercentDone);
  73.     /*
  74.      * IHXRegistryID methods
  75.      */
  76.     /************************************************************************
  77.      * Method:
  78.      *     IHXRegistryID::GetID
  79.      * Purpose:
  80.      *     Get registry ID(hash_key) of the objects(player, source and stream)
  81.      *
  82.      */
  83.     STDMETHOD(GetID) (THIS_
  84. REF(UINT32) /*OUT*/  ulRegistryID);
  85.     /************************************************************************
  86.      * Method:
  87.      *     IHXInfoLogger::LogInformation
  88.      * Purpose:
  89.      *     Logs any user defined information in form of action and 
  90.      *     associated data.
  91.      */
  92.     STDMETHOD(LogInformation) (THIS_
  93. const char* /*IN*/ pAction,
  94. const char* /*IN*/ pData);
  95.     /************************************************************************
  96.      * Method:
  97.      *     IHXSourceBufferingStats::GetCurrentBuffering
  98.      * Purpose:
  99.      *     Get the current buffering information
  100.      */
  101.     STDMETHOD(GetCurrentBuffering) (THIS_ 
  102.                                     UINT16  uStreamNumber,
  103.                                     REF(INT64)  llLowestTimestamp, 
  104.                                     REF(INT64)  llHighestTimestamp,
  105.                                     REF(UINT32) ulNumBytes,
  106.                                     REF(BOOL)   bDone);
  107.     void ReSetup();
  108.     HX_RESULT  Setup(const CHXURL* pURL, BOOL bAltURL);
  109.     virtual HX_RESULT DoCleanup(EndCode endCode = END_STOP);
  110.     virtual HX_RESULT DoSeek(ULONG32 seekTime);
  111.     
  112.     virtual HX_RESULT DoPause(void);
  113.     virtual HX_RESULT DoResume(void);
  114.     virtual HX_RESULT StartInitialization(void);
  115.     virtual UINT16 GetNumStreams(void);
  116.     virtual HX_RESULT GetStreamInfo(ULONG32 ulStreamNumber,
  117.       STREAM_INFO*& theStreamInfo);
  118.     virtual HX_RESULT GetEvent(UINT16 usStreamNumber, CHXEvent * &theEvent);
  119.     virtual BOOL IsStatisticsReady(void);
  120. #if defined(HELIX_FEATURE_ASM)
  121.     virtual BOOL IsSimulatedNetworkPlayback()  {return (m_pSimulatedSourceBandwidth != NULL);};
  122. #endif /* HELIX_FEATURE_ASM */
  123.     BOOL IsSourceDone(void);
  124.     /*
  125.      * IHXFormatResponse methods
  126.      */
  127.     STDMETHOD(InitDone) (THIS_
  128. HX_RESULT status);
  129.     STDMETHOD(FileHeaderReady) (THIS_
  130. HX_RESULT status,
  131. IHXValues* pHeader);
  132.     STDMETHODIMP StreamHeaderReady(HX_RESULT status, IHXValues* pHeader);
  133.     STDMETHODIMP PacketReady(HX_RESULT status, IHXPacket* pPacket);
  134.     STDMETHODIMP StreamDone(UINT16   unStreamNumber);
  135.     STDMETHODIMP SeekDone(HX_RESULT status);
  136.     /************************************************************************
  137.      * Method:
  138.      *     IHXHTTPRedirectResponse::RedirectDone
  139.      * Purpose:
  140.      *     return the redirect URL
  141.      */
  142.     STDMETHOD(RedirectDone) (THIS_ IHXBuffer* pURL);
  143.     
  144.     // tell about end of source...
  145.     virtual void SetEndOfClip(BOOL bForcedEndofClip = FALSE);
  146.     void AdjustClipBandwidthStats(BOOL bActivate = FALSE);
  147.     BOOL CanBeResumed(void);
  148.     void CheckForDefaultUpgrade(HX_RESULT status);
  149.             HX_RESULT   ContinueWithFileHeader(HX_RESULT status, IHXValues* pHeader);
  150.     virtual HX_RESULT ContinueWithFileHeaderExt(HX_RESULT status, IHXValues* pHeader);
  151.     virtual HX_RESULT StreamHeaderReadyExt(IHXValues* pHeader);
  152.     virtual HX_RESULT UpdateRegistry(UINT32 ulRegistryID);
  153.     virtual HX_RESULT FillRecordControl();
  154. protected:
  155.     LONG32 m_lRefCount;
  156.     virtual  ~HXFileSource(void);
  157.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  158.     virtual HX_RESULT UpdateStatistics(void);
  159.     virtual HX_RESULT _ProcessIdle(BOOL atInterrupt = 0);
  160.     virtual HX_RESULT _ProcessIdleExt(BOOL atInterrupt = 0);
  161.     
  162.     HX_RESULT   FillBuffers(void);
  163.     void ReBuffer(void);
  164.     void ReportError(HX_RESULT theErr);
  165.     void CleanupFileObjects();
  166.     HX_RESULT InitializeFileFormat();
  167.     void CalculateCurrentBuffering(void);
  168.             void        GetFileDone(HX_RESULT rc, IHXBuffer* pFile);
  169.             HX_RESULT HandleSDPData(IHXValues* pHeader);
  170.     UINT32     m_ulLastBufferingReturned;
  171.     UINT32     m_ulInitialTime;
  172.     INT64     m_llFillEndTime;
  173.     INT64     m_llLastFillEndTime;
  174.     UINT32     m_ulMaxPreRoll;  
  175.     UINT16     m_uNumStreamsToBeFilled : 16;
  176.     HX_BITFIELD     m_bInFillMode : 1;
  177.     HX_BITFIELD     m_bInitialPacket : 1;
  178.     HX_BITFIELD     m_bFastStartInProgress : 1;
  179.     HX_BITFIELD     m_bAddDefaultUpgrade : 1;
  180.     HX_BITFIELD     m_bCurrentFileFormatUnkInUse: 1;
  181.     HX_BITFIELD     m_bValidateMetaDone: 1;
  182.     char*     m_pDefaultUpgradeString;
  183.     IHXFileSystemObject*   m_pFSObject;
  184.     IHXFileFormatObject*   m_pFFObject;
  185.     IHXFileFormatObject*   m_pRAMFFObject;
  186.     IHXFileResponse*     m_pFileResponse;
  187.     IHXPluginSearchEnumerator*     m_pFileFormatEnumerator;
  188.     IUnknown*     m_pCurrentFileFormatUnk;
  189.     //////////////////////////////////////////////////////
  190.     // The following members and encapsulated classes are
  191.     // used to determine the mime-type of the file we are
  192.     // asked to read.
  193. public:
  194.     void FinishSetup(HX_RESULT status, const char* pMimeType);
  195.     void AttempToLoadFilePlugin(const char* pMimeType);
  196.     HX_RESULT ExtendedSetup(const char* pszURL);
  197. protected:
  198.     IHXFileObject* m_pFileObject;
  199.     IHXRequestHandler* m_pRequestHandler;
  200.     char* m_pMimeType;     
  201.     char* m_pExtension;     
  202.     class CMimeFinderFileResponse : public IHXFileMimeMapperResponse,
  203.                                     public IHXFileRecognizerResponse
  204.     {
  205.     private:
  206. HXFileSource* m_pSource;
  207. LONG32 m_lRefCount;
  208.     public:
  209. CMimeFinderFileResponse(HXFileSource* pSource)
  210.     { 
  211. m_pSource = pSource; 
  212. m_lRefCount = 0;
  213.     };
  214. // IUnknown methods
  215. STDMETHOD(QueryInterface) (THIS_
  216. REFIID riid,
  217. void** ppvObj);
  218. STDMETHOD_(ULONG32,AddRef)  (THIS);
  219. STDMETHOD_(ULONG32,Release) (THIS);
  220.     
  221. // IHXFileMimeMapperResponse methods
  222. STDMETHOD(MimeTypeFound) (THIS_
  223.   HX_RESULT   status,
  224.   const char* pMimeType);
  225.         // IHXFileRecognizerResponse methods
  226.         STDMETHOD(GetMimeTypeDone) (THIS_ HX_RESULT status, IHXBuffer* pMimeType);
  227.     };
  228.     CMimeFinderFileResponse* m_pMimeFinderResponse;
  229. #if defined(HELIX_FEATURE_ASM)
  230.     class SourceBandwidthInfo : public IHXSourceBandwidthInfo
  231.     {
  232.     private:
  233. LONG32 m_lRefCount;
  234.     public:
  235. SourceBandwidthInfo() {m_lRefCount = 0;};
  236. ~SourceBandwidthInfo() {};
  237. /*
  238.  * IUnknown methods
  239.  */
  240. STDMETHOD(QueryInterface) (THIS_
  241.     REFIID riid,
  242.     void** ppvObj);
  243. STDMETHOD_(ULONG32,AddRef) (THIS);
  244. STDMETHOD_(ULONG32,Release) (THIS);
  245. /*
  246.  * IHXSourceBandwidthInfo methods
  247.  */
  248. STDMETHOD(InitBw) (THIS_
  249.     IHXBandwidthManagerInput* pBwMgr);
  250. STDMETHOD(SetTransmitRate) (THIS_
  251.     UINT32 ulBitRate);
  252.     };
  253.     SourceBandwidthInfo*    m_pSimulatedSourceBandwidth;
  254. #endif /* HELIX_FEATURE_ASM */
  255.     UINT32  GetEventBeginTime(INT64 llPacketTime, UINT32 streamPreRoll);
  256.     
  257.     class CFileReader : public IHXFileResponse
  258.     {
  259.     public:
  260.         CFileReader(HXFileSource* pOwner);
  261.         ~CFileReader();
  262.         STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  263.         STDMETHOD_(ULONG32,AddRef)(THIS);
  264.         STDMETHOD_(ULONG32,Release)(THIS);
  265.         // IHXFileResponse methods
  266.         STDMETHOD(InitDone)  (THIS_ HX_RESULT status);
  267.         STDMETHOD(SeekDone)  (THIS_ HX_RESULT status);
  268.         STDMETHOD(ReadDone)  (THIS_ HX_RESULT status, IHXBuffer *pBuffer);
  269.         STDMETHOD(WriteDone) (THIS_ HX_RESULT status);
  270.         STDMETHOD(CloseDone) (THIS_ HX_RESULT status);
  271.         HX_RESULT   GetFile(IHXFileObject* /*IN*/ pFile);
  272.         void        Close(void);
  273.     protected:
  274.         BOOL            m_bGetFilePending;
  275.         IHXBuffer*      m_pBuffer;
  276.         HXFileSource*   m_pOwner;
  277.         IHXFileObject*  m_pFile;
  278.         LONG32          m_lRefCount;
  279.     };
  280.     friend class CFileReader;
  281.     CFileReader*                m_pFileReader;
  282.     CHXFileRecognizer*          m_pFileRecognizer;
  283. };
  284. #endif // _HX_FILE_SOURCE