hxflsrc.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:12k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxflsrc.h,v 1.11.2.1 2004/07/09 02:05:57 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _HX_FILE_SOURCE_
  50. #define _HX_FILE_SOURCE_
  51. #include "hxbsrc.h"
  52. #include "hxsrc.h"
  53. // forward decl..
  54. class CHXString;
  55. struct IHXFileMimeMapperResponse;
  56. struct IHXFormatResponse;
  57. struct IHXPluginSearchEnumerator;
  58. #include "hxcom.h"
  59. #include "ihxpckts.h"
  60. #include "chxpckts.h"
  61. #include "hxfiles.h"
  62. #include "recognizer.h"
  63. class HXFileSource : public HXSource, 
  64.       public IHXFormatResponse,
  65.                       public IHXHTTPRedirectResponse
  66. {
  67. public:
  68.  HXFileSource(void);
  69.     STDMETHOD(QueryInterface) (THIS_
  70. REFIID riid,
  71. void** ppvObj);
  72.     STDMETHOD_(ULONG32,AddRef) (THIS);
  73.     STDMETHOD_(ULONG32,Release) (THIS);
  74.     /*
  75.      * IHXPendingStatus methods
  76.      */
  77.     /************************************************************************
  78.      * Method:
  79.      *     IHXPendingStatus::GetStatus
  80.      * Purpose:
  81.      *     Called by the user to get the current pending status from an object
  82.      */
  83.     STDMETHOD(GetStatus) (THIS_
  84. REF(UINT16) uStatusCode, 
  85. REF(IHXBuffer*) pStatusDesc, 
  86. REF(UINT16) ulPercentDone);
  87.     /*
  88.      * IHXRegistryID methods
  89.      */
  90.     /************************************************************************
  91.      * Method:
  92.      *     IHXRegistryID::GetID
  93.      * Purpose:
  94.      *     Get registry ID(hash_key) of the objects(player, source and stream)
  95.      *
  96.      */
  97.     STDMETHOD(GetID) (THIS_
  98. REF(UINT32) /*OUT*/  ulRegistryID);
  99.     /************************************************************************
  100.      * Method:
  101.      *     IHXInfoLogger::LogInformation
  102.      * Purpose:
  103.      *     Logs any user defined information in form of action and 
  104.      *     associated data.
  105.      */
  106.     STDMETHOD(LogInformation) (THIS_
  107. const char* /*IN*/ pAction,
  108. const char* /*IN*/ pData);
  109.     /************************************************************************
  110.      * Method:
  111.      *     IHXSourceBufferingStats::GetCurrentBuffering
  112.      * Purpose:
  113.      *     Get the current buffering information
  114.      */
  115.     STDMETHOD(GetCurrentBuffering) (THIS_ 
  116.                                     UINT16  uStreamNumber,
  117.                                     REF(INT64)  llLowestTimestamp, 
  118.                                     REF(INT64)  llHighestTimestamp,
  119.                                     REF(UINT32) ulNumBytes,
  120.                                     REF(BOOL)   bDone);
  121.     void ReSetup();
  122.     HX_RESULT  Setup(const CHXURL* pURL, BOOL bAltURL);
  123.     virtual HX_RESULT DoCleanup(EndCode endCode = END_STOP);
  124.     virtual HX_RESULT DoSeek(ULONG32 seekTime);
  125.     
  126.     virtual HX_RESULT DoPause(void);
  127.     virtual HX_RESULT DoResume(void);
  128.     virtual HX_RESULT StartInitialization(void);
  129.     virtual UINT16 GetNumStreams(void);
  130.     virtual HX_RESULT GetStreamInfo(ULONG32 ulStreamNumber,
  131.       STREAM_INFO*& theStreamInfo);
  132.     virtual HX_RESULT GetEvent(UINT16 usStreamNumber, CHXEvent * &theEvent);
  133.     virtual BOOL IsStatisticsReady(void);
  134. #if defined(HELIX_FEATURE_ASM)
  135.     virtual BOOL IsSimulatedNetworkPlayback()  {return (m_pSimulatedSourceBandwidth != NULL);};
  136. #endif /* HELIX_FEATURE_ASM */
  137.     BOOL IsSourceDone(void);
  138.     /*
  139.      * IHXFormatResponse methods
  140.      */
  141.     STDMETHOD(InitDone) (THIS_
  142. HX_RESULT status);
  143.     STDMETHOD(FileHeaderReady) (THIS_
  144. HX_RESULT status,
  145. IHXValues* pHeader);
  146.     STDMETHODIMP StreamHeaderReady(HX_RESULT status, IHXValues* pHeader);
  147.     STDMETHODIMP PacketReady(HX_RESULT status, IHXPacket* pPacket);
  148.     STDMETHODIMP StreamDone(UINT16   unStreamNumber);
  149.     STDMETHODIMP SeekDone(HX_RESULT status);
  150.     /************************************************************************
  151.      * Method:
  152.      *     IHXHTTPRedirectResponse::RedirectDone
  153.      * Purpose:
  154.      *     return the redirect URL
  155.      */
  156.     STDMETHOD(RedirectDone) (THIS_ IHXBuffer* pURL);
  157.     
  158.     // tell about end of source...
  159.     virtual void SetEndOfClip(BOOL bForcedEndofClip = FALSE);
  160.     void AdjustClipBandwidthStats(BOOL bActivate = FALSE);
  161.     BOOL CanBeResumed(void);
  162.     void CheckForDefaultUpgrade(HX_RESULT status);
  163.             HX_RESULT   ContinueWithFileHeader(HX_RESULT status, IHXValues* pHeader);
  164.     virtual HX_RESULT ContinueWithFileHeaderExt(HX_RESULT status, IHXValues* pHeader);
  165.     virtual HX_RESULT StreamHeaderReadyExt(IHXValues* pHeader);
  166.     virtual HX_RESULT UpdateRegistry(UINT32 ulRegistryID);
  167.     virtual HX_RESULT FillRecordControl();
  168. protected:
  169.     LONG32 m_lRefCount;
  170.     virtual  ~HXFileSource(void);
  171.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  172.     virtual HX_RESULT UpdateStatistics(void);
  173.     virtual HX_RESULT _ProcessIdle(BOOL atInterrupt = 0);
  174.     virtual HX_RESULT _ProcessIdleExt(BOOL atInterrupt = 0);
  175.     
  176.     HX_RESULT   FillBuffers(void);
  177.     void ReBuffer(void);
  178.     void ReportError(HX_RESULT theErr);
  179.     void CleanupFileObjects();
  180.     HX_RESULT InitializeFileFormat();
  181.     void CalculateCurrentBuffering(void);
  182.             void        GetFileDone(HX_RESULT rc, IHXBuffer* pFile);
  183.             HX_RESULT HandleSDPData(IHXValues* pHeader);
  184.     UINT32     m_ulLastBufferingReturned;
  185.     UINT32     m_ulInitialTime;
  186.     INT64     m_llFillEndTime;
  187.     INT64     m_llLastFillEndTime;
  188.     UINT32     m_ulMaxPreRoll;  
  189.     UINT16     m_uNumStreamsToBeFilled : 16;
  190.     HX_BITFIELD     m_bInFillMode : 1;
  191.     HX_BITFIELD     m_bInitialPacket : 1;
  192.     HX_BITFIELD     m_bFastStartInProgress : 1;
  193.     HX_BITFIELD     m_bAddDefaultUpgrade : 1;
  194.     HX_BITFIELD     m_bCurrentFileFormatUnkInUse: 1;
  195.     HX_BITFIELD     m_bValidateMetaDone: 1;
  196.     char*     m_pDefaultUpgradeString;
  197.     IHXFileSystemObject*   m_pFSObject;
  198.     IHXFileFormatObject*   m_pFFObject;
  199.     IHXFileFormatObject*   m_pRAMFFObject;
  200.     IHXFileResponse*     m_pFileResponse;
  201.     IHXPluginSearchEnumerator*     m_pFileFormatEnumerator;
  202.     IUnknown*     m_pCurrentFileFormatUnk;
  203.     //////////////////////////////////////////////////////
  204.     // The following members and encapsulated classes are
  205.     // used to determine the mime-type of the file we are
  206.     // asked to read.
  207. public:
  208.     void FinishSetup(HX_RESULT status, const char* pMimeType);
  209.     void AttempToLoadFilePlugin(const char* pMimeType);
  210.     HX_RESULT ExtendedSetup(const char* pszURL);
  211. protected:
  212.     IHXFileObject* m_pFileObject;
  213.     IHXRequestHandler* m_pRequestHandler;
  214.     char* m_pMimeType;     
  215.     char* m_pExtension;     
  216.     class CMimeFinderFileResponse : public IHXFileMimeMapperResponse,
  217.                                     public IHXFileRecognizerResponse
  218.     {
  219.     private:
  220. HXFileSource* m_pSource;
  221. LONG32 m_lRefCount;
  222.     public:
  223. CMimeFinderFileResponse(HXFileSource* pSource)
  224.     { 
  225. m_pSource = pSource; 
  226. m_lRefCount = 0;
  227.     };
  228. // IUnknown methods
  229. STDMETHOD(QueryInterface) (THIS_
  230. REFIID riid,
  231. void** ppvObj);
  232. STDMETHOD_(ULONG32,AddRef)  (THIS);
  233. STDMETHOD_(ULONG32,Release) (THIS);
  234.     
  235. // IHXFileMimeMapperResponse methods
  236. STDMETHOD(MimeTypeFound) (THIS_
  237.   HX_RESULT   status,
  238.   const char* pMimeType);
  239.         // IHXFileRecognizerResponse methods
  240.         STDMETHOD(GetMimeTypeDone) (THIS_ HX_RESULT status, IHXBuffer* pMimeType);
  241.     };
  242.     CMimeFinderFileResponse* m_pMimeFinderResponse;
  243. #if defined(HELIX_FEATURE_ASM)
  244.     class SourceBandwidthInfo : public IHXSourceBandwidthInfo
  245.     {
  246.     private:
  247. LONG32 m_lRefCount;
  248.     public:
  249. SourceBandwidthInfo() {m_lRefCount = 0;};
  250. ~SourceBandwidthInfo() {};
  251. /*
  252.  * IUnknown methods
  253.  */
  254. STDMETHOD(QueryInterface) (THIS_
  255.     REFIID riid,
  256.     void** ppvObj);
  257. STDMETHOD_(ULONG32,AddRef) (THIS);
  258. STDMETHOD_(ULONG32,Release) (THIS);
  259. /*
  260.  * IHXSourceBandwidthInfo methods
  261.  */
  262. STDMETHOD(InitBw) (THIS_
  263.     IHXBandwidthManagerInput* pBwMgr);
  264. STDMETHOD(SetTransmitRate) (THIS_
  265.     UINT32 ulBitRate);
  266.     };
  267.     SourceBandwidthInfo*    m_pSimulatedSourceBandwidth;
  268. #endif /* HELIX_FEATURE_ASM */
  269.     UINT32  GetEventBeginTime(INT64 llPacketTime, UINT32 streamPreRoll);
  270.     
  271.     class CFileReader : public IHXFileResponse
  272.     {
  273.     public:
  274.         CFileReader(HXFileSource* pOwner);
  275.         ~CFileReader();
  276.         STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  277.         STDMETHOD_(ULONG32,AddRef)(THIS);
  278.         STDMETHOD_(ULONG32,Release)(THIS);
  279.         // IHXFileResponse methods
  280.         STDMETHOD(InitDone)  (THIS_ HX_RESULT status);
  281.         STDMETHOD(SeekDone)  (THIS_ HX_RESULT status);
  282.         STDMETHOD(ReadDone)  (THIS_ HX_RESULT status, IHXBuffer *pBuffer);
  283.         STDMETHOD(WriteDone) (THIS_ HX_RESULT status);
  284.         STDMETHOD(CloseDone) (THIS_ HX_RESULT status);
  285.         HX_RESULT   GetFile(IHXFileObject* /*IN*/ pFile);
  286.         void        Close(void);
  287.     protected:
  288.         BOOL            m_bGetFilePending;
  289.         IHXBuffer*      m_pBuffer;
  290.         HXFileSource*   m_pOwner;
  291.         IHXFileObject*  m_pFile;
  292.         LONG32          m_lRefCount;
  293.     };
  294.     friend class CFileReader;
  295.     CFileReader*                m_pFileReader;
  296.     CHXFileRecognizer*          m_pFileRecognizer;
  297. };
  298. #endif // _HX_FILE_SOURCE