alsa: add some debugging output to alsa_detect_channels_mapping()
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 21 Mar 2016 10:58:13 +0000 (11:58 +0100)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 12 Apr 2016 18:48:30 +0000 (14:48 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=763985

ext/alsa/gstalsa.c

index ea4b74b..b9bb291 100644 (file)
@@ -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 */