diff options
Diffstat (limited to 'plugins/alsa/alsa-plug-rate.c')
-rw-r--r-- | plugins/alsa/alsa-plug-rate.c | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/plugins/alsa/alsa-plug-rate.c b/plugins/alsa/alsa-plug-rate.c index a9b9e23..4c83c7f 100644 --- a/plugins/alsa/alsa-plug-rate.c +++ b/plugins/alsa/alsa-plug-rate.c @@ -23,59 +23,60 @@ ALSA_PLUG_PROTO(rate); +PUBLIC AlsaPcmCtlT* AlsaCreateRate(SoftMixerT *mixer, const char* pcmName, AlsaPcmCtlT *pcmSlave, AlsaPcmHwInfoT *params, int open) { -PUBLIC AlsaPcmInfoT* AlsaCreateRate(CtlSourceT *source, const char* pcmName, AlsaPcmInfoT *pcmSlave, int open) { - snd_config_t *rateConfig, *slaveConfig, *elemConfig, *pcmConfig; - AlsaPcmInfoT *pcmPlug= calloc(1,sizeof(AlsaPcmInfoT)); - pcmPlug->uid= strdup(pcmName); - pcmPlug->cardid=pcmPlug->uid; + AlsaPcmCtlT *pcmPlug = calloc(1, sizeof (AlsaPcmCtlT)); + pcmPlug->cid.cardid = pcmName; - int error=0; + int error = 0; // refresh global alsalib config and create PCM top config snd_config_update(); error += snd_config_top(&rateConfig); - error += snd_config_set_id (rateConfig, pcmPlug->cardid); - error += snd_config_imake_string(&elemConfig, "type", "plug"); + error += snd_config_set_id(rateConfig, pcmPlug->cid.cardid); + error += snd_config_imake_string(&elemConfig, "type", "rate"); error += snd_config_add(rateConfig, elemConfig); if (error) goto OnErrorExit; error += snd_config_make_compound(&slaveConfig, "slave", 0); - error += snd_config_imake_string(&elemConfig, "pcm", pcmSlave->cardid); - if (pcmSlave->params.rate) { + error += snd_config_imake_string(&elemConfig, "pcm", pcmSlave->cid.cardid); + error += snd_config_add(slaveConfig, elemConfig); + if (params->rate) { + error += snd_config_imake_integer(&elemConfig, "rate", params->rate); + error += snd_config_add(slaveConfig, elemConfig); + } + if (params->format) { + error += snd_config_imake_string(&elemConfig, "format", params->formatS); error += snd_config_add(slaveConfig, elemConfig); - // *** error += snd_config_imake_integer(&elemConfig, "rate", pcmSlave->params.rate); - error += snd_config_imake_integer(&elemConfig, "rate", 48000); } - error += snd_config_add(slaveConfig, elemConfig); if (error) goto OnErrorExit; // add leaf into config error += snd_config_add(rateConfig, slaveConfig); if (error) goto OnErrorExit; - - error += snd_config_search(snd_config, "pcm", &pcmConfig); + + error += snd_config_search(snd_config, "pcm", &pcmConfig); error += snd_config_add(pcmConfig, rateConfig); if (error) { - AFB_ApiError(source->api, "AlsaCreateRate: fail to add configRATE=%s", pcmPlug->cardid); + AFB_ApiError(mixer->api, "AlsaCreateRate: fail to add configRATE=%s", pcmPlug->cid.cardid); goto OnErrorExit; } - - if (open) error = _snd_pcm_rate_open(&pcmPlug->handle, pcmPlug->cardid, snd_config, rateConfig, SND_PCM_STREAM_PLAYBACK , SND_PCM_NONBLOCK); + + if (open) error = _snd_pcm_rate_open(&pcmPlug->handle, pcmPlug->cid.cardid, snd_config, rateConfig, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); if (error) { - AFB_ApiError(source->api, "AlsaCreateRate: fail to create Rate=%s Slave=%s Error=%s", pcmPlug->cardid, pcmSlave->cardid, snd_strerror(error)); + AFB_ApiError(mixer->api, "AlsaCreateRate: fail to create Rate=%s Slave=%s Error=%s", pcmPlug->cid.cardid, pcmSlave->cid.cardid, snd_strerror(error)); goto OnErrorExit; } - + // Debug config & pcm - AlsaDumpCtlConfig (source, "plug-rate", pcmConfig, 1); - //AlsaDumpCtlConfig (source, "plug-rate", rateConfig, 1); - AFB_ApiNotice(source->api, "AlsaCreateRate: %s done\n", pcmPlug->cardid); + AlsaDumpCtlConfig(mixer, "plug-rate", pcmConfig, 1); + //AlsaDumpCtlConfig (mixer, "plug-rate", rateConfig, 1); + AFB_ApiNotice(mixer->api, "AlsaCreateRate: %s done\n", pcmPlug->cid.cardid); return pcmPlug; OnErrorExit: - AlsaDumpCtlConfig(source, "plug-rate", rateConfig, 1); - AFB_ApiNotice(source->api, "AlsaCreateRate: OnErrorExit\n"); + AlsaDumpCtlConfig(mixer, "plug-rate", rateConfig, 1); + AFB_ApiNotice(mixer->api, "AlsaCreateRate: OnErrorExit\n"); return NULL; }
\ No newline at end of file |