aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/alsa/alsa-plug-rate.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/alsa/alsa-plug-rate.c')
-rw-r--r--plugins/alsa/alsa-plug-rate.c51
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