summaryrefslogtreecommitdiffstats
path: root/oss.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-05-14 11:03:37 +0000
committerLennart Poettering <lennart@poettering.net>2007-05-14 11:03:37 +0000
commit3dd71bd5abeae01d55a06a97ec6f4a69f12e05b1 (patch)
treed787b76e26e4be9e2b9c7b019f11fb31e8e8cabc /oss.c
parent91f2fea297381a64939c7f2d4ddb4728a3d42aa8 (diff)
also downgrade channel map when downgrading channel number
git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@15 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce
Diffstat (limited to 'oss.c')
-rw-r--r--oss.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/oss.c b/oss.c
index 8c46884..50063bd 100644
--- a/oss.c
+++ b/oss.c
@@ -340,8 +340,17 @@ int driver_open(sa_stream_t *s) {
printf("Chosen: %u channels, %uHz, format=%u\n", oss->real_pcm_attrs.nchannels, oss->real_pcm_attrs.rate, oss->real_pcm_attrs.format);
- if (s->adjust_nchannels != 0)
+ if (s->adjust_nchannels != 0) {
+ sa_channel_t *cm;
+
+ if (!(cm = sa_newdup(sa_channel_t, oss->real_pcm_attrs.channel_map, oss->real_pcm_attrs.nchannels)))
+ return SA_ERROR_OOM;
+
+ sa_free(s->pcm_attrs.channel_map);
+ s->pcm_attrs.channel_map = cm;
+
s->pcm_attrs.nchannels = oss->real_pcm_attrs.nchannels;
+ }
if (s->adjust_rate != 0)
s->pcm_attrs.rate = oss->real_pcm_attrs.rate;
if (s->adjust_pcm_format != 0)