alsa_wrapper.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. //
  5. // AlsaWrapper is a simple stateless class that wraps the alsa library commands
  6. // we want to use. It's purpose is to allow injection of a mock so that the
  7. // higher level code is testable.
  8. #ifndef MEDIA_AUDIO_ALSA_ALSA_WRAPPER_H_
  9. #define MEDIA_AUDIO_ALSA_ALSA_WRAPPER_H_
  10. #include <alsa/asoundlib.h>
  11. #include "media/base/media_export.h"
  12. namespace media {
  13. class MEDIA_EXPORT AlsaWrapper {
  14. public:
  15. AlsaWrapper();
  16. AlsaWrapper(const AlsaWrapper&) = delete;
  17. AlsaWrapper& operator=(const AlsaWrapper&) = delete;
  18. virtual ~AlsaWrapper();
  19. virtual int DeviceNameHint(int card, const char* iface, void*** hints);
  20. virtual char* DeviceNameGetHint(const void* hint, const char* id);
  21. virtual int DeviceNameFreeHint(void** hints);
  22. virtual int CardNext(int* rcard);
  23. virtual int PcmOpen(snd_pcm_t** handle,
  24. const char* name,
  25. snd_pcm_stream_t stream,
  26. int mode);
  27. virtual int PcmClose(snd_pcm_t* handle);
  28. virtual int PcmPrepare(snd_pcm_t* handle);
  29. virtual int PcmDrain(snd_pcm_t* handle);
  30. virtual int PcmDrop(snd_pcm_t* handle);
  31. virtual int PcmDelay(snd_pcm_t* handle, snd_pcm_sframes_t* delay);
  32. virtual int PcmResume(snd_pcm_t* handle);
  33. virtual snd_pcm_sframes_t PcmWritei(snd_pcm_t* handle,
  34. const void* buffer,
  35. snd_pcm_uframes_t size);
  36. virtual snd_pcm_sframes_t PcmReadi(snd_pcm_t* handle,
  37. void* buffer,
  38. snd_pcm_uframes_t size);
  39. virtual int PcmRecover(snd_pcm_t* handle, int err, int silent);
  40. virtual int PcmSetParams(snd_pcm_t* handle,
  41. snd_pcm_format_t format,
  42. snd_pcm_access_t access,
  43. unsigned int channels,
  44. unsigned int rate,
  45. int soft_resample,
  46. unsigned int latency);
  47. virtual int PcmGetParams(snd_pcm_t* handle,
  48. snd_pcm_uframes_t* buffer_size,
  49. snd_pcm_uframes_t* period_size);
  50. virtual int PcmHwParamsMalloc(snd_pcm_hw_params_t** hw_params);
  51. virtual int PcmHwParamsAny(snd_pcm_t* handle, snd_pcm_hw_params_t* hw_params);
  52. virtual int PcmHwParamsCanResume(snd_pcm_hw_params_t* hw_params);
  53. virtual int PcmHwParamsSetRateResample(snd_pcm_t* handle,
  54. snd_pcm_hw_params_t* hw_params,
  55. unsigned int value);
  56. virtual int PcmHwParamsSetRateNear(snd_pcm_t* handle,
  57. snd_pcm_hw_params_t* hw_params,
  58. unsigned int* rate,
  59. int* direction);
  60. virtual int PcmHwParamsTestFormat(snd_pcm_t* handle,
  61. snd_pcm_hw_params_t* hw_params,
  62. snd_pcm_format_t format);
  63. virtual int PcmFormatSize(snd_pcm_format_t format, size_t samples);
  64. virtual int PcmHwParamsGetChannelsMin(const snd_pcm_hw_params_t* hw_params,
  65. unsigned int* min_channels);
  66. virtual int PcmHwParamsGetChannelsMax(const snd_pcm_hw_params_t* hw_params,
  67. unsigned int* max_channels);
  68. virtual int PcmHwParamsSetFormat(snd_pcm_t* handle,
  69. snd_pcm_hw_params_t* hw_params,
  70. snd_pcm_format_t format);
  71. virtual int PcmHwParamsSetAccess(snd_pcm_t* handle,
  72. snd_pcm_hw_params_t* hw_params,
  73. snd_pcm_access_t access);
  74. virtual int PcmHwParamsSetChannels(snd_pcm_t* handle,
  75. snd_pcm_hw_params_t* hw_params,
  76. unsigned int channels);
  77. virtual int PcmHwParamsSetBufferSizeNear(snd_pcm_t* handle,
  78. snd_pcm_hw_params_t* hw_params,
  79. snd_pcm_uframes_t* buffer_size);
  80. virtual int PcmHwParamsSetPeriodSizeNear(snd_pcm_t* handle,
  81. snd_pcm_hw_params_t* hw_params,
  82. snd_pcm_uframes_t* period_size,
  83. int* direction);
  84. virtual int PcmHwParams(snd_pcm_t* handle, snd_pcm_hw_params_t* hw_params);
  85. virtual void PcmHwParamsFree(snd_pcm_hw_params_t* hw_params);
  86. virtual int PcmSwParamsMalloc(snd_pcm_sw_params_t** sw_params);
  87. virtual int PcmSwParamsCurrent(snd_pcm_t* handle,
  88. snd_pcm_sw_params_t* sw_params);
  89. virtual int PcmSwParamsSetStartThreshold(snd_pcm_t* handle,
  90. snd_pcm_sw_params_t* sw_params,
  91. snd_pcm_uframes_t start_threshold);
  92. virtual int PcmSwParamsSetAvailMin(snd_pcm_t* handle,
  93. snd_pcm_sw_params_t* sw_params,
  94. snd_pcm_uframes_t period_size);
  95. virtual int PcmSwParams(snd_pcm_t* handle, snd_pcm_sw_params_t* sw_params);
  96. virtual void PcmSwParamsFree(snd_pcm_sw_params_t* sw_params);
  97. virtual const char* PcmName(snd_pcm_t* handle);
  98. virtual snd_pcm_sframes_t PcmAvailUpdate(snd_pcm_t* handle);
  99. virtual snd_pcm_state_t PcmState(snd_pcm_t* handle);
  100. virtual int PcmStart(snd_pcm_t* handle);
  101. virtual int MixerOpen(snd_mixer_t** mixer, int mode);
  102. virtual int MixerAttach(snd_mixer_t* mixer, const char* name);
  103. virtual int MixerElementRegister(snd_mixer_t* mixer,
  104. struct snd_mixer_selem_regopt* options,
  105. snd_mixer_class_t** classp);
  106. virtual void MixerFree(snd_mixer_t* mixer);
  107. virtual int MixerDetach(snd_mixer_t* mixer, const char* name);
  108. virtual int MixerClose(snd_mixer_t* mixer);
  109. virtual int MixerLoad(snd_mixer_t* mixer);
  110. virtual snd_mixer_elem_t* MixerFirstElem(snd_mixer_t* mixer);
  111. virtual snd_mixer_elem_t* MixerNextElem(snd_mixer_elem_t* elem);
  112. virtual int MixerSelemIsActive(snd_mixer_elem_t* elem);
  113. virtual const char* MixerSelemName(snd_mixer_elem_t* elem);
  114. virtual int MixerSelemSetCaptureVolumeAll(snd_mixer_elem_t* elem, long value);
  115. virtual int MixerSelemGetCaptureVolume(snd_mixer_elem_t* elem,
  116. snd_mixer_selem_channel_id_t channel,
  117. long* value);
  118. virtual int MixerSelemHasCaptureVolume(snd_mixer_elem_t* elem);
  119. virtual int MixerSelemGetCaptureVolumeRange(snd_mixer_elem_t* elem,
  120. long* min,
  121. long* max);
  122. virtual void* MixerElemGetCallbackPrivate(const snd_mixer_elem_t* obj);
  123. virtual void MixerElemSetCallback(snd_mixer_elem_t* obj,
  124. snd_mixer_elem_callback_t val);
  125. virtual void MixerElemSetCallbackPrivate(snd_mixer_elem_t* obj, void* val);
  126. virtual snd_mixer_elem_t* MixerFindSelem(snd_mixer_t* mixer,
  127. const snd_mixer_selem_id_t* id);
  128. virtual int MixerHandleEvents(snd_mixer_t* mixer);
  129. virtual int MixerPollDescriptors(snd_mixer_t* mixer,
  130. struct pollfd* pfds,
  131. unsigned int space);
  132. virtual int MixerPollDescriptorsCount(snd_mixer_t* mixer);
  133. virtual int MixerSelemGetPlaybackSwitch(snd_mixer_elem_t* elem,
  134. snd_mixer_selem_channel_id_t channel,
  135. int* value);
  136. virtual int MixerSelemGetPlaybackVolume(snd_mixer_elem_t* elem,
  137. snd_mixer_selem_channel_id_t channel,
  138. long* value);
  139. virtual int MixerSelemGetPlaybackVolumeRange(snd_mixer_elem_t* elem,
  140. long* min,
  141. long* max);
  142. virtual int MixerSelemAskPlaybackVolDb(snd_mixer_elem_t* elem,
  143. long value,
  144. long* db_value);
  145. virtual int MixerSelemAskPlaybackDbVol(snd_mixer_elem_t* elem,
  146. long db_value,
  147. long* value);
  148. virtual int MixerSelemHasPlaybackSwitch(snd_mixer_elem_t* elem);
  149. virtual int MixerSelemHasPlaybackVolume(snd_mixer_elem_t* elem);
  150. virtual void MixerSelemIdSetIndex(snd_mixer_selem_id_t* obj,
  151. unsigned int val);
  152. virtual void MixerSelemIdSetName(snd_mixer_selem_id_t* obj, const char* val);
  153. virtual int MixerSelemSetPlaybackSwitch(snd_mixer_elem_t* elem,
  154. snd_mixer_selem_channel_id_t channel,
  155. int value);
  156. virtual int MixerSelemSetPlaybackSwitchAll(snd_mixer_elem_t* elem,
  157. int value);
  158. virtual int MixerSelemSetPlaybackVolumeAll(snd_mixer_elem_t* elem,
  159. long value);
  160. virtual int MixerSelemIdMalloc(snd_mixer_selem_id_t** ptr);
  161. virtual void MixerSelemIdFree(snd_mixer_selem_id_t* obj);
  162. virtual const char* StrError(int errnum);
  163. };
  164. } // namespace media
  165. #endif // MEDIA_AUDIO_ALSA_ALSA_WRAPPER_H_