Home | History | Annotate | Download | only in alsa
      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 
      9 #ifndef MEDIA_AUDIO_ALSA_ALSA_WRAPPER_H_
     10 #define MEDIA_AUDIO_ALSA_ALSA_WRAPPER_H_
     11 
     12 #include <alsa/asoundlib.h>
     13 
     14 #include "base/basictypes.h"
     15 #include "media/base/media_export.h"
     16 
     17 namespace media {
     18 
     19 class MEDIA_EXPORT AlsaWrapper {
     20  public:
     21   AlsaWrapper();
     22   virtual ~AlsaWrapper();
     23 
     24   virtual int DeviceNameHint(int card, const char* iface, void*** hints);
     25   virtual char* DeviceNameGetHint(const void* hint, const char* id);
     26   virtual int DeviceNameFreeHint(void** hints);
     27   virtual int CardNext(int* rcard);
     28 
     29   virtual int PcmOpen(snd_pcm_t** handle, const char* name,
     30                       snd_pcm_stream_t stream, int mode);
     31   virtual int PcmClose(snd_pcm_t* handle);
     32   virtual int PcmPrepare(snd_pcm_t* handle);
     33   virtual int PcmDrop(snd_pcm_t* handle);
     34   virtual int PcmDelay(snd_pcm_t* handle, snd_pcm_sframes_t* delay);
     35   virtual snd_pcm_sframes_t PcmWritei(snd_pcm_t* handle,
     36                                       const void* buffer,
     37                                       snd_pcm_uframes_t size);
     38   virtual snd_pcm_sframes_t PcmReadi(snd_pcm_t* handle,
     39                                      void* buffer,
     40                                      snd_pcm_uframes_t size);
     41   virtual int PcmRecover(snd_pcm_t* handle, int err, int silent);
     42   virtual int PcmSetParams(snd_pcm_t* handle, snd_pcm_format_t format,
     43                            snd_pcm_access_t access, unsigned int channels,
     44                            unsigned int rate, int soft_resample,
     45                            unsigned int latency);
     46   virtual int PcmGetParams(snd_pcm_t* handle, snd_pcm_uframes_t* buffer_size,
     47                            snd_pcm_uframes_t* period_size);
     48   virtual const char* PcmName(snd_pcm_t* handle);
     49   virtual snd_pcm_sframes_t PcmAvailUpdate(snd_pcm_t* handle);
     50   virtual snd_pcm_state_t PcmState(snd_pcm_t* handle);
     51   virtual int PcmStart(snd_pcm_t* handle);
     52 
     53   virtual int MixerOpen(snd_mixer_t** mixer, int mode);
     54   virtual int MixerAttach(snd_mixer_t* mixer, const char* name);
     55   virtual int MixerElementRegister(snd_mixer_t* mixer,
     56                                    struct snd_mixer_selem_regopt* options,
     57                                    snd_mixer_class_t** classp);
     58   virtual void MixerFree(snd_mixer_t* mixer);
     59   virtual int MixerDetach(snd_mixer_t* mixer, const char* name);
     60   virtual int MixerClose(snd_mixer_t* mixer);
     61   virtual int MixerLoad(snd_mixer_t* mixer);
     62   virtual snd_mixer_elem_t* MixerFirstElem(snd_mixer_t* mixer);
     63   virtual snd_mixer_elem_t* MixerNextElem(snd_mixer_elem_t* elem);
     64   virtual int MixerSelemIsActive(snd_mixer_elem_t* elem);
     65   virtual const char* MixerSelemName(snd_mixer_elem_t* elem);
     66   virtual int MixerSelemSetCaptureVolumeAll(snd_mixer_elem_t* elem, long value);
     67   virtual int MixerSelemGetCaptureVolume(snd_mixer_elem_t* elem,
     68                                          snd_mixer_selem_channel_id_t channel,
     69                                          long* value);
     70   virtual int MixerSelemHasCaptureVolume(snd_mixer_elem_t* elem);
     71   virtual int MixerSelemGetCaptureVolumeRange(snd_mixer_elem_t* elem,
     72                                               long* min, long* max);
     73 
     74   virtual const char* StrError(int errnum);
     75 
     76  private:
     77   int ConfigureHwParams(snd_pcm_t* handle, snd_pcm_hw_params_t* hw_params,
     78                         snd_pcm_format_t format, snd_pcm_access_t access,
     79                         unsigned int channels, unsigned int rate,
     80                         int soft_resample, unsigned int latency);
     81   DISALLOW_COPY_AND_ASSIGN(AlsaWrapper);
     82 };
     83 
     84 }  // namespace media
     85 
     86 #endif  // MEDIA_AUDIO_ALSA_ALSA_WRAPPER_H_
     87