Index: gst/audioconvert/gstaudioconvert.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-base/gst/audioconvert/gstaudioconvert.c,v
retrieving revision 1.119
diff -u -r1.119 gstaudioconvert.c
--- gst/audioconvert/gstaudioconvert.c	28 Jun 2007 20:37:58 -0000	1.119
+++ gst/audioconvert/gstaudioconvert.c	26 Oct 2007 10:07:10 -0000
@@ -668,8 +668,9 @@
     GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
 {
   GstStructure *ins, *outs;
-  gint rate, endianness, depth, width, channels;
+  gint rate, endianness, depth, width, channels_in, channels_out;
   gboolean signedness;
+  GstAudioChannelPosition *positions;
 
   g_return_if_fail (gst_caps_is_fixed (caps));
 
@@ -679,10 +680,26 @@
   ins = gst_caps_get_structure (caps, 0);
   outs = gst_caps_get_structure (othercaps, 0);
 
-  if (gst_structure_get_int (ins, "channels", &channels)) {
+  if (gst_structure_get_int (ins, "channels", &channels_in)) {
     if (gst_structure_has_field (outs, "channels")) {
-      gst_structure_fixate_field_nearest_int (outs, "channels", channels);
+      gst_structure_get_int (outs, "channels", &channels_out);
+      gst_structure_fixate_field_nearest_int (outs, "channels", channels_in);
     }
+    if ( channels_in == channels_out)
+    {
+      /* we are not up/downmixing so we take the same 
+       * positions if there are no known positions 
+       * create default positions */
+      positions = gst_audio_get_channel_positions( ins);
+    } else
+    {
+      /* we are up/downmixing so we ask the othercaps
+       * for the positions, if he does not have positions
+       * we take the default positions */ 
+      positions = gst_audio_get_channel_positions( outs);
+    }
+    gst_audio_set_channel_positions(outs, positions);
+    g_free( positions);
   }
   if (gst_structure_get_int (ins, "rate", &rate)) {
     if (gst_structure_has_field (outs, "rate")) {
Index: gst-libs/gst/audio/multichannel.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/audio/multichannel.c,v
retrieving revision 1.8
diff -u -r1.8 multichannel.c
--- gst-libs/gst/audio/multichannel.c	3 Aug 2006 14:16:06 -0000	1.8
+++ gst-libs/gst/audio/multichannel.c	26 Oct 2007 10:07:15 -0000
@@ -23,8 +23,6 @@
 
 #include "multichannel.h"
 
-#define GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME "channel-positions"
-
 /*
  * This function checks if basic assumptions apply:
  *  - does each position occur at most once?
Index: gst-libs/gst/audio/multichannel.h
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/audio/multichannel.h,v
retrieving revision 1.4
diff -u -r1.4 multichannel.h
--- gst-libs/gst/audio/multichannel.h	3 Aug 2006 14:16:06 -0000	1.4
+++ gst-libs/gst/audio/multichannel.h	26 Oct 2007 10:07:15 -0000
@@ -25,6 +25,8 @@
 
 G_BEGIN_DECLS
 
+#define GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME "channel-positions"
+
 typedef enum {
   GST_AUDIO_CHANNEL_POSITION_INVALID = -1,
 
