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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: sinkctl.h,v 1.2.8.1 2004/07/09 02:05:58 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 _SINKCTL_
  50. #define _SINKCTL_
  51. struct IHXInterruptState;
  52. struct IHXClientEngine;
  53. struct IHXCallback;
  54. struct IHXScheduler;
  55. class  CHXSimpleList;
  56. class  ErrorCallback;
  57. class  CHXGenericCallback;
  58. class CHXAdviseSinkControl : public IHXClientAdviseSink, public IHXInterruptSafe
  59. {
  60. public:
  61.     CHXAdviseSinkControl();
  62.     ~CHXAdviseSinkControl();
  63.     
  64.     /*
  65.      * IUnknown methods
  66.      */
  67.     STDMETHOD(QueryInterface) (THIS_
  68. REFIID riid,
  69. void** ppvObj);
  70.     STDMETHOD_(ULONG32,AddRef) (THIS);
  71.     STDMETHOD_(ULONG32,Release) (THIS);
  72.     /*
  73.      * IHXClientAdviseSink methods
  74.      */
  75.     /************************************************************************
  76.      * Method:
  77.      *     IHXClientAdviseSink::OnPosLength
  78.      * Purpose:
  79.      *     Called to advise the client that the position or length of the
  80.      *     current playback context has changed.
  81.      */
  82.     STDMETHOD(OnPosLength) (THIS_
  83. UINT32   ulPosition,
  84. UINT32   ulLength);
  85.     /************************************************************************
  86.      * Method:
  87.      *     IHXClientAdviseSink::OnPresentationOpened
  88.      * Purpose:
  89.      *     Called to advise the client a presentation has been opened.
  90.      */
  91.     STDMETHOD(OnPresentationOpened) (THIS);
  92.     /************************************************************************
  93.      * Method:
  94.      *     IHXClientAdviseSink::OnPresentationClosed
  95.      * Purpose:
  96.      *     Called to advise the client a presentation has been closed.
  97.      */
  98.     STDMETHOD(OnPresentationClosed) (THIS);
  99.     /************************************************************************
  100.      * Method:
  101.      *     IHXClientAdviseSink::OnStatisticsChanged
  102.      * Purpose:
  103.      *     Called to advise the client that the presentation statistics
  104.      *     have changed. 
  105.      */
  106.     STDMETHOD(OnStatisticsChanged) (THIS);
  107.     /************************************************************************
  108.      * Method:
  109.      *     IHXClientAdviseSink::OnPreSeek
  110.      * Purpose:
  111.      *     Called by client engine to inform the client that a seek is
  112.      *     about to occur. The render is informed the last time for the 
  113.      *     stream's time line before the seek, as well as the first new
  114.      *     time for the stream's time line after the seek will be completed.
  115.      *
  116.      */
  117.     STDMETHOD (OnPreSeek) (THIS_
  118. ULONG32     ulOldTime,
  119. ULONG32     ulNewTime);
  120.     /************************************************************************
  121.      * Method:
  122.      *     IHXClientAdviseSink::OnPostSeek
  123.      * Purpose:
  124.      *     Called by client engine to inform the client that a seek has
  125.      *     just occured. The render is informed the last time for the 
  126.      *     stream's time line before the seek, as well as the first new
  127.      *     time for the stream's time line after the seek.
  128.      *
  129.      */
  130.     STDMETHOD (OnPostSeek) (THIS_
  131. ULONG32     ulOldTime,
  132. ULONG32     ulNewTime);
  133.     /************************************************************************
  134.      * Method:
  135.      *     IHXClientAdviseSink::OnStop
  136.      * Purpose:
  137.      *     Called by client engine to inform the client that a stop has
  138.      *     just occured. 
  139.      *
  140.      */
  141.     STDMETHOD (OnStop) (THIS);
  142.     /************************************************************************
  143.      * Method:
  144.      *     IHXClientAdviseSink::OnPause
  145.      * Purpose:
  146.      *     Called by client engine to inform the client that a pause has
  147.      *     just occured. The render is informed the last time for the 
  148.      *     stream's time line before the pause.
  149.      *
  150.      */
  151.     STDMETHOD (OnPause) (THIS_
  152. ULONG32     ulTime);
  153.     /************************************************************************
  154.      * Method:
  155.      *     IHXClientAdviseSink::OnBegin
  156.      * Purpose:
  157.      *     Called by client engine to inform the client that a begin or
  158.      *     resume has just occured. The render is informed the first time 
  159.      *     for the stream's time line after the resume.
  160.      *
  161.      */
  162.     STDMETHOD (OnBegin) (THIS_
  163. ULONG32     ulTime);
  164.     /************************************************************************
  165.      * Method:
  166.      *     IHXClientAdviseSink::OnBuffering
  167.      * Purpose:
  168.      *     Called by client engine to inform the client that buffering
  169.      *     of data is occuring. The render is informed of the reason for
  170.      *     the buffering (start-up of stream, seek has occured, network
  171.      *     congestion, etc.), as well as percentage complete of the 
  172.      *     buffering process.
  173.      *
  174.      */
  175.     STDMETHOD (OnBuffering) (THIS_
  176. ULONG32     ulFlags,
  177. UINT16     unPercentComplete);
  178.     /************************************************************************
  179.      * Method:
  180.      *     IHXClientAdviseSink::OnContacting
  181.      * Purpose:
  182.      *     Called by client engine to inform the client is contacting
  183.      *     hosts(s).
  184.      *
  185.      */
  186.     STDMETHOD (OnContacting) (THIS_
  187. const char* pHostName);
  188. /*
  189.   IHXInteruptSafe methods. 
  190. */
  191. STDMETHOD_(BOOL,IsInterruptSafe) (THIS);
  192.     /*
  193.      * CHXAdviseSinkControl methods
  194.      */
  195.     HX_RESULT AddAdviseSink(IHXClientAdviseSink* pAdviseSink);
  196.     HX_RESULT RemoveAdviseSink(IHXClientAdviseSink* pAdviseSink);
  197.     void      Init(IHXClientEngine* pEngine);
  198. private:
  199.     CHXSimpleList m_pSinkList;
  200.     LONG32 m_lRefCount;
  201.     IHXInterruptState* m_pInterruptState;
  202.     IHXScheduler* m_pScheduler;
  203.     struct PlayerAdviseSink;
  204.     friend struct PlayerAdviseSink;
  205.     struct PlayerAdviseSink
  206.     {
  207.      PlayerAdviseSink(IHXClientAdviseSink* pAdviseSink,
  208.                         BOOL bInterruptSafe);
  209. ~PlayerAdviseSink();
  210.     
  211.      IHXClientAdviseSink* m_pAdviseSink;
  212.      BOOL m_bInterruptSafe;
  213. CHXSimpleList* m_pPendingAdviseList;
  214.     };
  215.     typedef enum 
  216.     {
  217.   ONPOSLENGTH = 0
  218. , ONPRESENTATIONOPENED
  219. , ONPRESENTATIONCLOSED
  220. , ONSTATISTICSCHANGED
  221. , ONPRESEEK
  222. , ONPOSTSEEK
  223. , ONSTOP
  224. , ONPAUSE
  225. , ONBEGIN
  226. , ONBUFFERING
  227. , ONCONTACTING
  228.     } AdviseType;
  229.     struct PendingAdvise;
  230.     friend struct PendingAdvise;
  231.     struct PendingAdvise
  232.     {
  233. PendingAdvise()
  234. {
  235.     m_pHostName = NULL;
  236. }
  237. ~PendingAdvise()
  238. {
  239.     if (m_pHostName)
  240.     {
  241. delete [] m_pHostName;
  242.     }
  243. }
  244. AdviseType  m_AdviseType;
  245. UINT32     m_ulArg1;
  246. UINT32     m_ulArg2;
  247. char*     m_pHostName;
  248.     };
  249.     void AddToPendingList(PlayerAdviseSink* pPlayerAdviseSink,
  250.   AdviseType type,
  251.   UINT32 ulArg1 = 0, 
  252.   UINT32 ulArg2 = 0, 
  253.   char* pHostName = NULL);
  254.     void ProcessPendingRequests(PlayerAdviseSink* pPlayerAdviseSink);
  255.     void ProcessAllRequests(void);
  256.     CHXGenericCallback*    m_pCallback;
  257.     static void AdviseSinkCallback(void* pParam);    
  258. };
  259. struct ErrorReport
  260. {
  261.     ErrorReport()
  262.     {
  263. m_unSeverity = 0;
  264. m_ulHXCode = 0;
  265. m_ulUserCode = 0;
  266. m_pUserString = NULL;
  267. m_pMoreInfoURL = NULL;
  268.     }
  269.     ~ErrorReport()
  270.     {
  271. m_unSeverity = 0;
  272. m_ulHXCode = 0;
  273. m_ulUserCode = 0;
  274. HX_VECTOR_DELETE(m_pUserString);
  275. HX_VECTOR_DELETE(m_pMoreInfoURL);
  276.     }
  277.     UINT8 m_unSeverity;
  278.     HX_RESULT   m_ulHXCode;
  279.     ULONG32     m_ulUserCode;
  280.     char* m_pUserString;
  281.     char* m_pMoreInfoURL;
  282. };
  283. class CHXErrorSinkControl : public IHXErrorSinkControl
  284. {
  285.     public:
  286.      CHXErrorSinkControl();
  287. ~CHXErrorSinkControl();
  288. /*
  289.  * IHXErrorSinkControl methods
  290.  */
  291.      STDMETHOD(AddErrorSink) (THIS_ 
  292.      IHXErrorSink* pErrorSink,
  293.                                  const UINT8     unLowSeverity,
  294.                                  const UINT8     unHighSeverity);
  295.      STDMETHOD(RemoveErrorSink) (THIS_ IHXErrorSink* pErrorSink);
  296. /*
  297.  * IUnknown methods
  298.  */
  299. STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  300. STDMETHOD_(ULONG32,AddRef) (THIS);
  301. STDMETHOD_(ULONG32,Release) (THIS);
  302.     
  303.      //get the severity range for pErrorSink
  304.      void GetSeverityRange(IHXErrorSink* pErrorSink, UINT8& unLowSeverity, 
  305.       UINT8& unHighSeverity);
  306. void Init(IHXClientEngine* pEngine);
  307. void Close();
  308.     
  309. HX_RESULT ErrorOccurred(const UINT8 unSeverity,  
  310. const ULONG32 ulHXCode,
  311. const ULONG32 ulUserCode,
  312. const char* pUserString,
  313. const char* pMoreInfoURL
  314. );
  315.      struct PlayerErrorSink
  316.      {
  317.          PlayerErrorSink(IHXErrorSink*  pErrorSink,
  318.                             const UINT8     unLowSeverity,
  319.                             const UINT8     unHighSeverity)
  320.             {
  321.      m_pErrorSink = pErrorSink;
  322.      m_unLowSeverity = unLowSeverity;
  323.      m_unHighSeverity = unHighSeverity;
  324.             };
  325.         
  326.          IHXErrorSink* m_pErrorSink;
  327.          UINT8 m_unLowSeverity;
  328.          UINT8 m_unHighSeverity;
  329.      };
  330.     
  331.     public:
  332.      CHXSimpleList m_pSinkList;
  333.     
  334.     private:
  335. HX_RESULT CallReport(
  336. const UINT8 unSeverity,  
  337. HX_RESULT ulHXCode,
  338. const ULONG32 ulUserCode,
  339. const char* pUserString,
  340. const char* pMoreInfoURL);
  341. void ReportPendingErrors(void);
  342.     
  343. friend class ErrorCallback;
  344.      LONG32     m_lRefCount;
  345. IHXInterruptState* m_pInterruptState;
  346. IHXScheduler*     m_pScheduler;
  347. CHXSimpleList*     m_pPendingErrorList;
  348.         CHXGenericCallback* m_pErrorCallback;
  349.         static void ErrorCallback(void* pParam);
  350. };
  351. #endif /* _SINKCTL_ */