hxbufctl.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-2003 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 HXBUFCTL_H
  36. #define HXBUFCTL_H
  37. class HXSource;
  38. /****************************************************************************
  39.  * 
  40.  *  Interface:
  41.  * 
  42.  * IHXBufferControl
  43.  * 
  44.  *  Purpose:
  45.  *      Common interface for buffer control objects. These objects attempt
  46.  *      to control a data source so that the amount of data buffered is 
  47.  *      bounded.
  48.  * 
  49.  * 
  50.  *  IID_IHXBufferControl:
  51.  *  
  52.  * {68B2AEF9-1384-46ec-A4D0-00680A7DBBAE}
  53.  *
  54.  */
  55. DEFINE_GUID(IID_IHXBufferControl, 0x68b2aef9, 0x1384, 0x46ec, 0xa4, 0xd0, 0x0,
  56.     0x68, 0xa, 0x7d, 0xbb, 0xae);
  57. #undef  INTERFACE
  58. #define INTERFACE   IHXBufferControl
  59. DECLARE_INTERFACE_(IHXBufferControl, IUnknown)
  60. {
  61.     /*
  62.      * IUnknown methods
  63.      */
  64.     STDMETHOD(QueryInterface)   (THIS_
  65.                                 REFIID riid,
  66.                                 void** ppvObj) PURE;
  67.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  68.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  69.     /*
  70.      * IHXBufferControl methods
  71.      */
  72.     /************************************************************************
  73.      * Method:
  74.      *     IHXBufferControl::Init
  75.      * Purpose:
  76.      *      Initialize the buffer control object with a context
  77.      *      so it can find the interfaces it needs to do buffer
  78.      *      control
  79.      */
  80.     STDMETHOD(Init) (THIS_ IUnknown* pContext) PURE;
  81.     /************************************************************************
  82.      * Method:
  83.      *     IHXBufferControl::OnBuffering
  84.      * Purpose:
  85.      *      Called while buffering
  86.      */
  87.     STDMETHOD(OnBuffering) (THIS_ UINT32 ulRemainingInMs,
  88.     UINT32 ulRemainingInBytes) PURE;
  89.     /************************************************************************
  90.      * Method:
  91.      *     IHXBufferControl::OnBufferingDone
  92.      * Purpose:
  93.      *      Called when buffering is done
  94.      */
  95.     STDMETHOD(OnBufferingDone)(THIS) PURE;
  96.     /************************************************************************
  97.      * Method:
  98.      *     IHXBufferControl::OnResume
  99.      * Purpose:
  100.      *      Called when playback is resumed
  101.      */
  102.     STDMETHOD(OnResume) (THIS) PURE;
  103.     
  104.     /************************************************************************
  105.      * Method:
  106.      *     IHXBufferControl::OnPause
  107.      * Purpose:
  108.      *      Called when playback is paused
  109.      */
  110.     STDMETHOD(OnPause) (THIS) PURE;
  111.     /************************************************************************
  112.      * Method:
  113.      *     IHXBufferControl::OnSeek
  114.      * Purpose:
  115.      *      Called when a seek occurs
  116.      */
  117.     STDMETHOD(OnSeek) (THIS) PURE;
  118.     /************************************************************************
  119.      * Method:
  120.      *     IHXBufferControl::OnClipEnd
  121.      * Purpose:
  122.      *      Called when we get the last packet in the clip
  123.      */
  124.     STDMETHOD(OnClipEnd) (THIS) PURE;
  125.     /************************************************************************
  126.      * Method:
  127.      *     IHXBufferControl::Close()
  128.      * Purpose:
  129.      *      Called when the owner of this object wishes to shutdown
  130.      *      and destroy this object. This call causes the buffer control
  131.      *      object to release all it's interfaces references.
  132.      */
  133.     STDMETHOD(Close)(THIS) PURE;
  134. };
  135. /****************************************************************************
  136.  * 
  137.  *  Interface:
  138.  * 
  139.  * IHXWatermarkBufferControl
  140.  * 
  141.  *  Purpose:
  142.  *      This buffer control object uses a set of watermarks to determine
  143.  *      when it should adjust the source bandwidth. This is the buffer
  144.  *      control algorithm historically used by the Helix Engine.
  145.  * 
  146.  * 
  147.  *  IID_IHXWatermarkBufferControl:
  148.  *  
  149.  * {68B2AEF9-1384-46ec-A4D0-00680A7DBBAF}
  150.  *
  151.  */
  152. DEFINE_GUID(IID_IHXWatermarkBufferControl, 0x68b2aef9, 0x1384, 0x46ec, 0xa4, 
  153.     0xd0, 0x0, 0x68, 0xa, 0x7d, 0xbb, 0xaf);
  154. #undef  INTERFACE
  155. #define INTERFACE   IHXWatermarkBufferControl
  156. DECLARE_INTERFACE_(IHXWatermarkBufferControl, IHXBufferControl)
  157. {
  158.     /*
  159.      * IUnknown methods
  160.      */
  161.     STDMETHOD(QueryInterface)   (THIS_
  162.                                 REFIID riid,
  163.                                 void** ppvObj) PURE;
  164.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  165.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  166.     /*
  167.      * IHXBufferControl methods
  168.      */
  169.     /************************************************************************
  170.      * Method:
  171.      *     IHXBufferControl::Init
  172.      * Purpose:
  173.      *      Initialize the buffer control object with a context
  174.      *      so it can find the interfaces it needs to do buffer
  175.      *      control
  176.      */
  177.     STDMETHOD(Init) (THIS_ IUnknown* pContext) PURE;
  178.     /************************************************************************
  179.      * Method:
  180.      *     IHXBufferControl::OnBuffering
  181.      * Purpose:
  182.      *      Called while buffering
  183.      */
  184.     STDMETHOD(OnBuffering) (THIS_ UINT32 ulRemainingInMs,
  185.     UINT32 ulRemainingInBytes) PURE;
  186.     /************************************************************************
  187.      * Method:
  188.      *     IHXBufferControl::OnBufferingDone
  189.      * Purpose:
  190.      *      Called when buffering is done
  191.      */
  192.     STDMETHOD(OnBufferingDone)(THIS) PURE;
  193.     /************************************************************************
  194.      * Method:
  195.      *     IHXBufferControl::OnResume
  196.      * Purpose:
  197.      *      Called when playback is resumed
  198.      */
  199.     STDMETHOD(OnResume) (THIS) PURE;
  200.     
  201.     /************************************************************************
  202.      * Method:
  203.      *     IHXBufferControl::OnPause
  204.      * Purpose:
  205.      *      Called when playback is paused
  206.      */
  207.     STDMETHOD(OnPause) (THIS) PURE;
  208.     /************************************************************************
  209.      * Method:
  210.      *     IHXBufferControl::OnSeek
  211.      * Purpose:
  212.      *      Called when a seek occurs
  213.      */
  214.     STDMETHOD(OnSeek) (THIS) PURE;
  215.     /************************************************************************
  216.      * Method:
  217.      *     IHXBufferControl::OnClipEnd
  218.      * Purpose:
  219.      *      Called when we get the last packet in the clip
  220.      */
  221.     STDMETHOD(OnClipEnd) (THIS) PURE;
  222.     
  223.     /************************************************************************
  224.      * Method:
  225.      *     IHXBufferControl::Close()
  226.      * Purpose:
  227.      *      Called when the owner of this object wishes to shutdown
  228.      *      and destroy this object. This call causes the buffer control
  229.      *      object to release all it's interfaces references.
  230.      */
  231.     STDMETHOD(Close)(THIS) PURE;
  232.     /*
  233.      * IHXWatermarkBufferControl methods
  234.      */
  235.     /************************************************************************
  236.      * Method:
  237.      *     IHXWatermarkBufferControl::SetSource
  238.      * Purpose:
  239.      *      Tells the object what HXSource object it is associated with.
  240.      */
  241.     STDMETHOD(SetSource)(THIS_ HXSource* pSource) PURE;
  242.     /************************************************************************
  243.      * Method:
  244.      *     IHXWatermarkBufferControl::OnBufferReport
  245.      * Purpose:
  246.      *      Initiates control operations based on buffering information.
  247.      *      
  248.      */
  249.     STDMETHOD(OnBufferReport)(THIS_ UINT32 ulBufferInMs,
  250.       UINT32 ulBuffer) PURE;
  251.     /************************************************************************
  252.      * Method:
  253.      *     IHXWatermarkBufferControl::ClearChillState
  254.      * Purpose:
  255.      *      Sets the chill state to NONE
  256.      *      
  257.      */
  258.     STDMETHOD(ClearChillState)(THIS) PURE;
  259. };
  260. /****************************************************************************
  261.  * 
  262.  *  Interface:
  263.  * 
  264.  * IHXTransportBufferLimit
  265.  * 
  266.  *  Purpose:
  267.  *      This interface allows you to control the number of bytes that
  268.  *      are allowed to be buffered in the transport buffers. If the
  269.  *      number of bytes exceeds the set limit, the packets will be replaced
  270.  *      with loss packets.
  271.  * 
  272.  * 
  273.  *  IID_IHXTransportBufferLimit:
  274.  *  
  275.  * {68B2AEF9-1384-46ec-A4D0-00680A7DBBB0}
  276.  *
  277.  */
  278. DEFINE_GUID(IID_IHXTransportBufferLimit, 0x68b2aef9, 0x1384, 0x46ec, 0xa4, 
  279.     0xd0, 0x0, 0x68, 0xa, 0x7d, 0xbb, 0xb0);
  280. #undef  INTERFACE
  281. #define INTERFACE   IHXTransportBufferLimit
  282. DECLARE_INTERFACE_(IHXTransportBufferLimit, IUnknown)
  283. {
  284.     /*
  285.      * IUnknown methods
  286.      */
  287.     STDMETHOD(QueryInterface)   (THIS_
  288.                                 REFIID riid,
  289.                                 void** ppvObj) PURE;
  290.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  291.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  292.     /*
  293.      * IHXTransportBufferLimit methods
  294.      */
  295.     /************************************************************************
  296.      * Method:
  297.      *     IHXTransportBufferLimit::SetByteLimit
  298.      * Purpose:
  299.      *      Sets the maximum number of bytes that can be buffered in the
  300.      *      transport buffer. If incomming packets would put us over this
  301.      *      limit, then they are replaced with lost packets. A byte limit
  302.      *      of 0 means unlimited buffering.
  303.      */
  304.     STDMETHOD(SetByteLimit) (THIS_ UINT16 uStreamNumber, 
  305.      UINT32 uByteLimit) PURE;
  306.     /************************************************************************
  307.      * Method:
  308.      *     IHXTransportBufferLimit::GetByteLimit
  309.      * Purpose:
  310.      *      Returns the current byte limit in effect. A value of 0 means
  311.      *      unlimited buffering is allowed
  312.      */
  313.     STDMETHOD_(UINT32,GetByteLimit) (THIS_ UINT16 uStreamNumber) PURE;
  314. };
  315. #endif /* HXBUFCTL_H */