hxaudev.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

Symbian

开发平台:

C/C++

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