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

Symbian

开发平台:

Visual C++

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