aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Bultel <thierry.bultel@iot.bzh>2019-02-13 14:40:03 +0100
committerThierry Bultel <thierry.bultel@iot.bzh>2019-05-13 13:55:58 +0200
commit622096c841403b4756f04692cd4fa20eff5417ed (patch)
tree413e2c79b9c41a561b8ab0385f64673777e00797
parentc950295c56a93d77734769229571eebef4a2deaa (diff)
plug route: added a calculation for the number of physical channels
Adds (mainly for debug purpose) a calculation on the actual number of physical channels that are used by the created ttable Change-Id: I5717046003851ebe297a494dcdd97c4d67e34d0b Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
-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 df39698..021ef44 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_ApiDebug(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 7b98b5b..ea3e201 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;