audio: Add support again for more than 64 channels with NONE layouts
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 4 Jan 2012 13:35:48 +0000 (14:35 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 5 Jan 2012 09:34:25 +0000 (10:34 +0100)
gst-libs/gst/audio/audio.c

index e8ba262..b7a8e23 100644 (file)
@@ -404,7 +404,6 @@ check_valid_channel_positions (const GstAudioChannelPosition * position,
 {
   gint i, j;
   guint64 channel_mask = 0;
-  gboolean none_layout = FALSE;
 
   if (channels == 1 && position[0] == GST_AUDIO_CHANNEL_POSITION_MONO) {
     if (channel_mask_out)
@@ -412,6 +411,12 @@ check_valid_channel_positions (const GstAudioChannelPosition * position,
     return TRUE;
   }
 
+  if (channels > 0 && position[0] == GST_AUDIO_CHANNEL_POSITION_NONE) {
+    if (channel_mask_out)
+      *channel_mask_out = 0;
+    return TRUE;
+  }
+
   j = 0;
   for (i = 0; i < channels; i++) {
     while (j < G_N_ELEMENTS (default_channel_order)
@@ -422,11 +427,6 @@ check_valid_channel_positions (const GstAudioChannelPosition * position,
         position[i] == GST_AUDIO_CHANNEL_POSITION_MONO)
       return FALSE;
 
-    if (position[i] == GST_AUDIO_CHANNEL_POSITION_NONE) {
-      none_layout = TRUE;
-      continue;
-    }
-
     /* Is this in valid channel order? */
     if (enforce_order && j == G_N_ELEMENTS (default_channel_order))
       return FALSE;
@@ -438,9 +438,6 @@ check_valid_channel_positions (const GstAudioChannelPosition * position,
     channel_mask |= (G_GUINT64_CONSTANT (1) << position[i]);
   }
 
-  if (none_layout && channel_mask != 0)
-    return FALSE;
-
   if (channel_mask_out)
     *channel_mask_out = channel_mask;