iec61937: force hw_param channels to stereo
In case of pass-through, iec frames are sent over a stereo PCM
stream. So alsa device should be configured with channels = 2.
This is needed to be compatible with SPDIF electrical/optical output
that supports only stereo in PCM mode and up to 8 channels in iec61937 mode.
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@st.com>
diff --git a/ext/alsa/gstalsasink.c b/ext/alsa/gstalsasink.c
index 579791e..756b1a2 100644
--- a/ext/alsa/gstalsasink.c
+++ b/ext/alsa/gstalsasink.c
@@ -811,12 +811,15 @@
default:
goto error;
}
+ alsa->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
break;
case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW:
alsa->format = SND_PCM_FORMAT_A_LAW;
+ alsa->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
break;
case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW:
alsa->format = SND_PCM_FORMAT_MU_LAW;
+ alsa->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
break;
case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3:
case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3:
@@ -824,13 +827,14 @@
case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG:
alsa->format = SND_PCM_FORMAT_S16_BE;
alsa->iec958 = TRUE;
+ /* Set channels to stereo as iec playload are rendered on a stereo stream */
+ alsa->channels = 2;
break;
default:
goto error;
}
alsa->rate = GST_AUDIO_INFO_RATE (&spec->info);
- alsa->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
alsa->buffer_time = spec->buffer_time;
alsa->period_time = spec->latency_time;
alsa->access = SND_PCM_ACCESS_RW_INTERLEAVED;