From eef7312169f0de0d48dc857dbace01fcc2ce1315 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Mon, 21 Mar 2016 11:58:13 +0100 Subject: [PATCH] alsa: add some debugging output to alsa_detect_channels_mapping() https://bugzilla.gnome.org/show_bug.cgi?id=763985 --- ext/alsa/gstalsa.c | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c index ea4b74b..b9bb291 100644 --- a/ext/alsa/gstalsa.c +++ b/ext/alsa/gstalsa.c @@ -766,14 +766,41 @@ void alsa_detect_channels_mapping (GstObject * obj, snd_pcm_t * handle, GstAudioRingBufferSpec * spec, guint channels, GstAudioRingBuffer * buf) { - if (spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW && channels < 9) { - snd_pcm_chmap_t *chmap = snd_pcm_get_chmap (handle); - if (chmap && chmap->channels == channels) { - GstAudioChannelPosition pos[8]; - if (alsa_chmap_to_channel_positions (chmap, pos)) - gst_audio_ring_buffer_set_channel_positions (buf, pos); + snd_pcm_chmap_t *chmap; + GstAudioChannelPosition pos[8]; + + if (spec->type != GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW || channels >= 9) + return; + + chmap = snd_pcm_get_chmap (handle); + if (!chmap) { + GST_LOG_OBJECT (obj, "ALSA driver does not implement channels mapping API"); + return; + } + + if (chmap->channels != channels) { + GST_LOG_OBJECT (obj, + "got channels mapping for %u channels but stream has %u channels; ignoring", + chmap->channels, channels); + goto out; + } + + if (alsa_chmap_to_channel_positions (chmap, pos)) { +#ifndef GST_DISABLE_GST_DEBUG + { + gchar *tmp = gst_audio_channel_positions_to_string (pos, channels); + + GST_LOG_OBJECT (obj, "got channels mapping %s", tmp); + g_free (tmp); } - free (chmap); +#endif /* GST_DISABLE_GST_DEBUG */ + + gst_audio_ring_buffer_set_channel_positions (buf, pos); + } else { + GST_LOG_OBJECT (obj, "failed to convert ALSA channels mapping"); } + +out: + free (chmap); } #endif /* SND_CHMAP_API_VERSION */ -- 2.7.4