summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/alsa/alsa-plug-route.c21
-rw-r--r--plugins/alsa/alsa-softmixer.h1
2 files changed, 17 insertions, 5 deletions
diff --git a/plugins/alsa/alsa-plug-route.c b/plugins/alsa/alsa-plug-route.c
index 72dee68..ce17b86 100644
--- a/plugins/alsa/alsa-plug-route.c
+++ b/plugins/alsa/alsa-plug-route.c
@@ -167,11 +167,15 @@ PUBLIC AlsaPcmCtlT* AlsaCreateRoute(SoftMixerT *mixer, AlsaSndZoneT *zone, int o
snd_config_t **cports = alloca(zone->nbSinks * sizeof (void*));
memset(cports, 0, zone->nbSinks * sizeof (void*));
- int zcount = 0;
+ int portCount = 0;
// We create 1st ttable to retrieve sndcard slave and channel count
(void)snd_config_make_compound(&tableConfig, "ttable", 0);
+ // used physical ports
+ bool targets[16];
+ memset(targets, 0, sizeof(targets));
+
cds_list_for_each_entry(channel, &zone->sinks.list, list) {
AFB_API_DEBUG(mixer->api, "%s: zone->sink channel %s ", __func__, channel->uid);
@@ -192,12 +196,17 @@ PUBLIC AlsaPcmCtlT* AlsaCreateRoute(SoftMixerT *mixer, AlsaSndZoneT *zone, int o
int target = channelCardPort.port;
int port = channel->port;
+ if (!targets[target]) {
+ zone->physicalChannelCount++;
+ targets[target] = true;
+ }
+
double volume = 1.0; // currently only support 100%
// if channel entry does not exist into ttable create it now
if (!cports[port]) {
- char channelS[4]; // 999 channel should be more than enough
+ char channelS[4]; // 999 channels should be more than enough
snprintf(channelS, sizeof (channelS), "%d", port);
error = snd_config_make_compound(&cports[port], channelS, 0);
@@ -213,7 +222,7 @@ PUBLIC AlsaPcmCtlT* AlsaCreateRoute(SoftMixerT *mixer, AlsaSndZoneT *zone, int o
}
}
- zcount++;
+ portCount++;
// ttable require target port as a table and volume as a value
char targetS[4];
@@ -239,8 +248,10 @@ PUBLIC AlsaPcmCtlT* AlsaCreateRoute(SoftMixerT *mixer, AlsaSndZoneT *zone, int o
}
// update zone with route channel count and sndcard params
- pcmRoute->ccount = zcount;
- zone->ccount=zcount;
+ pcmRoute->ccount = portCount;
+ zone->ccount=portCount;
+
+ AFB_API_DEBUG(mixer->api, "%s: ZONE has %d ports and %d hardware channels", __func__, zone->ccount, zone->physicalChannelCount);
// refresh global alsalib config and create PCM top config
snd_config_update();
diff --git a/plugins/alsa/alsa-softmixer.h b/plugins/alsa/alsa-softmixer.h
index 384d1b0..c72f3a8 100644
--- a/plugins/alsa/alsa-softmixer.h
+++ b/plugins/alsa/alsa-softmixer.h
@@ -228,6 +228,7 @@ typedef struct {
unsigned int nbSinks;
AlsaPcmChannelT sinks;
int ccount;
+ int physicalChannelCount;
AlsaPcmHwInfoT *params;
struct cds_list_head list;