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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxaudev.h,v 1.4.32.1 2004/07/09 02:02:10 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 _HXAUDEV_H_
  50. #define _HXAUDEV_H_
  51. #include "hxprefs.h"
  52. // forward decls
  53. struct IHXAudioDeviceResponse;
  54. struct IHXScheduler;
  55. class CHXAudioSession;
  56. typedef struct _HXAudioFormat HXAudioFormat;
  57. typedef struct _HXAudioData HXAudioData;
  58. typedef enum device_state
  59. {
  60.     E_DEV_CLOSED,
  61.     E_DEV_OPENED,
  62.     E_DEV_PAUSED,
  63.     E_DEV_RESUMED
  64. } E_DEVICE_STATE;
  65. /****************************************************************************
  66.  *
  67.  *  Class:
  68.  *
  69.  *      CHXAudioDevice
  70.  *
  71.  *  Purpose:
  72.  *
  73.  *      PN implementation of audio device object.
  74.  *
  75.  */
  76. class CHXAudioDevice: public IHXAudioDevice
  77. {
  78. private:
  79. LONG32 m_lRefCount;
  80. BOOL m_bBuffer;
  81. HX_RESULT m_wLastError;
  82. IHXAudioDeviceResponse* m_pDeviceResponse;
  83. protected:
  84. IUnknown* m_pContext; // context.
  85. UINT16 m_uMinVolume; // Client's min volume
  86. UINT16 m_uMaxVolume; // Client's max volume
  87.      UINT16 m_uCurVolume; // Current volume
  88.      UINT16 m_uSampFrameSize; // Frame size.
  89. HXAudioFormat m_AudioFmt; // Device format
  90. BOOL m_bPaused; // Whether device is supposed to be paused!
  91. ULONG32 m_ulCurrentTime;
  92. ULONG32 m_ulLastSysTime;
  93. ULONG32 m_ulGranularity;
  94. ULONG32 m_ulBytesPerGran;
  95.         IHXScheduler* m_pScheduler;
  96. E_DEVICE_STATE m_eState;
  97. char* m_pdevName;
  98. virtual HX_RESULT _Imp_Open(const HXAudioFormat* pAudioFormat ) = 0;
  99. virtual HX_RESULT _Imp_Close(void) = 0;
  100. virtual HX_RESULT _Imp_Seek(ULONG32 ulSeekTime) = 0;
  101. virtual HX_RESULT _Imp_Pause(void) = 0;
  102. virtual HX_RESULT _Imp_Resume(void) = 0;
  103. virtual HX_RESULT _Imp_Write(const HXAudioData* pAudioData) = 0;
  104. virtual BOOL     _Imp_SupportsVolume(void) = 0;
  105. virtual HX_RESULT _Imp_SetVolume(const UINT16 uVolume) = 0;
  106. virtual UINT16 _Imp_GetVolume(void) = 0;
  107. virtual HX_RESULT _Imp_Reset(void) = 0;
  108. virtual HX_RESULT _Imp_Drain(void) = 0;
  109. virtual HX_RESULT _Imp_CheckFormat(const HXAudioFormat* pAudioFormat) = 0;
  110. virtual HX_RESULT _Imp_GetCurrentTime(ULONG32& ulCurrentTime) = 0;
  111. virtual INT16 _Imp_GetAudioFd(void) = 0;
  112. virtual UINT16 _NumberOfBlocksRemainingToPlay(void) = 0;
  113. virtual BOOL _IsWaveOutDevice(void);
  114. virtual ~CHXAudioDevice();
  115. PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  116.         //This give the audio devices a chance to init themselves after
  117.         //the context has been set. This is called from Init() and defaults
  118.         //to a noop.
  119.         virtual void _initAfterContext();
  120.         
  121. public:
  122. char* getDevName(void)
  123. {
  124.     return m_pdevName;
  125. }
  126. static CHXAudioDevice *Create(IHXPreferences* pPrefs);
  127. CHXAudioDevice()
  128. :  m_lRefCount(0)
  129. , m_pDeviceResponse(0)
  130. , m_uMinVolume(0)
  131. , m_uMaxVolume(0)
  132. , m_uCurVolume(0)
  133. , m_uSampFrameSize(0)
  134. , m_ulCurrentTime(0)
  135. , m_ulLastSysTime(0)
  136. , m_ulGranularity(0)
  137. , m_ulBytesPerGran(0)
  138.         , m_bPaused(0)
  139.         , m_pScheduler(0)
  140.         , m_pContext(0)
  141. ,  m_eState(E_DEV_CLOSED)
  142. ,  m_pdevName(0)
  143. {
  144. };
  145. /* This function calls GetCurrentAudioTime() to get the
  146.  * an accurate time from the audio playback system.
  147.  */
  148. HX_RESULT            OnTimeSync();
  149. /* A HACK until GetCurrentTime() is implemented.
  150.  */
  151. void            SetGranularity(ULONG32 ulGranularity, ULONG32 ulBytesPerGran)
  152.    m_ulGranularity  = ulGranularity; 
  153.    m_ulBytesPerGran = ulBytesPerGran; 
  154. };
  155. /*
  156.    * IUnknown methods
  157.    */
  158. STDMETHOD(QueryInterface)   (THIS_
  159.                                 REFIID riid,
  160.                                 void** ppvObj);
  161. STDMETHOD_(ULONG32,AddRef)  (THIS);
  162. STDMETHOD_(ULONG32,Release) (THIS);
  163. void Init(IUnknown* pContext);
  164. /*
  165.  *      IHXAudioDevice methods
  166.  */
  167. STDMETHOD(Open) (THIS_
  168. const HXAudioFormat*  pAudioFormat,
  169.       IHXAudioDeviceResponse* pDeviceResponse
  170. );
  171. STDMETHOD(Close) (THIS_
  172. const BOOL      bFlush ) ;
  173. STDMETHOD(Pause) (THIS);
  174. STDMETHOD(Resume) (THIS);
  175. STDMETHOD(Write) (THIS_
  176. const HXAudioData* pAudioData
  177. );
  178. STDMETHOD(SetBuffering) (THIS_
  179. const BOOL      bSetBuffering) ;
  180. STDMETHOD_(BOOL,InitVolume) (THIS_
  181. const UINT16    uMinVolume,
  182. const UINT16    uMaxVolume) ;
  183. STDMETHOD(SetVolume) (THIS_
  184. const UINT16    uVolume) ;
  185. STDMETHOD_(UINT16,GetVolume) (THIS);
  186. STDMETHOD(Reset) (THIS);
  187. STDMETHOD(Drain) (THIS);
  188. STDMETHOD(CheckFormat) (THIS_
  189.  const HXAudioFormat* pAudioFormat);
  190. /* This function returns the most accurate audio playback time 
  191.     * that can be ascertained from platform specific calls.
  192.  */
  193. STDMETHOD(GetCurrentAudioTime) (THIS_
  194.  REF(ULONG32) ulCurrentTime);
  195. STDMETHOD(GetAudioFd) (THIS);
  196. HX_RESULT Seek( UINT32  ulSeekTime);
  197. E_DEVICE_STATE GetState(void)
  198. {
  199.     return m_eState;
  200. };
  201. UINT16     NumberOfBlocksRemainingToPlay();
  202. BOOL     IsWaveOutDevice();
  203. };
  204. #endif /* HXAUDEV_H_ */