diff options
author | Thierry Bultel <thierry.bultel@iot.bzh> | 2018-07-11 17:50:44 +0200 |
---|---|---|
committer | Thierry Bultel <thierry.bultel@iot.bzh> | 2018-07-11 17:50:44 +0200 |
commit | 283bf0a4ab7dbd6f4393f6a1b4ef5a201ee92f62 (patch) | |
tree | d0ece00821901244465ef5fb3694389430db3085 /plugins/alsa/alsa-softmixer.h | |
parent | afd9f87786fe0cc3070ec976b89399603112c845 (diff) |
stops the read/write loop when the stream is muted
when the stream is muted (due to the configuration, or
due to a HAL request), the read/write loop is stopped.
The benefit is that muting will work with capture devices
that do not implement the mute in their driver.
The inconvenient of stopping the read loop is that it
has made appear an unexpected side-effect: the poll on
capture does not trig for further incoming frames.
The workaround is to completely close, then reopen
and configure the capture PCM.
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
Diffstat (limited to 'plugins/alsa/alsa-softmixer.h')
-rw-r--r-- | plugins/alsa/alsa-softmixer.h | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/plugins/alsa/alsa-softmixer.h b/plugins/alsa/alsa-softmixer.h index 481188b..8a8ad40 100644 --- a/plugins/alsa/alsa-softmixer.h +++ b/plugins/alsa/alsa-softmixer.h @@ -79,8 +79,37 @@ typedef enum { } RegistryNumidT; typedef struct { - snd_pcm_t *pcmIn; - snd_pcm_t *pcmOut; + int cardidx; + const char *devpath; + const char *cardid; + const char *name; + const char *longname; + int device; + int subdev; +} AlsaDevInfoT; + +typedef struct { + unsigned int rate; + unsigned int channels; + const char *formatS; + snd_pcm_format_t format; + snd_pcm_access_t access; + size_t sampleSize; +} AlsaPcmHwInfoT; + +typedef struct { + int ccount; + bool mute; + AlsaDevInfoT cid; + snd_pcm_t *handle; + AlsaPcmHwInfoT *params; + + void * mixer; +} AlsaPcmCtlT; + +typedef struct { + AlsaPcmCtlT *pcmIn; + AlsaPcmCtlT *pcmOut; AFB_ApiT api; sd_event_source* evtsrc; @@ -121,14 +150,7 @@ typedef struct { int port; } AlsaPcmChannelT; -typedef struct { - unsigned int rate; - unsigned int channels; - const char *formatS; - snd_pcm_format_t format; - snd_pcm_access_t access; - size_t sampleSize; -} AlsaPcmHwInfoT; + typedef struct { const char *uid; @@ -137,23 +159,9 @@ typedef struct { int stepUp; // linear % } AlsaVolRampT; -typedef struct { - int cardidx; - const char *devpath; - const char *cardid; - const char *name; - const char *longname; - int device; - int subdev; -} AlsaDevInfoT; -typedef struct { - int ccount; - AlsaDevInfoT cid; - snd_pcm_t *handle; - AlsaPcmHwInfoT *params; - uint32_t avail_min; -} AlsaPcmCtlT; + + typedef struct { int numid; @@ -274,7 +282,7 @@ PUBLIC int AlsaCtlSubscribe(SoftMixerT *mixer, const char *uid, AlsaSndCtlT *snd PUBLIC int AlsaCtlRegister(SoftMixerT *mixer, AlsaSndCtlT *sndcard, AlsaPcmCtlT *pcmdev, RegistryNumidT type, int numid); // alsa-core-pcm.c -PUBLIC int AlsaPcmConf(SoftMixerT *mixer, AlsaPcmCtlT *pcm, AlsaPcmHwInfoT *opts, int mode); +PUBLIC int AlsaPcmConf(SoftMixerT *mixer, AlsaPcmCtlT *pcm, int mode); PUBLIC int AlsaPcmCopy(SoftMixerT *mixer, AlsaStreamAudioT *stream, AlsaPcmCtlT *pcmIn, AlsaPcmCtlT *pcmOut, AlsaPcmHwInfoT * opts); // alsa-plug-*.c _snd_pcm_PLUGIN_open_ see macro ALSA_PLUG_PROTO(plugin) |