Index: libavcodec/resample.c
===================================================================
--- libavcodec/resample.c	(revision 10814)
+++ libavcodec/resample.c	(working copy)
@@ -109,6 +109,27 @@
     }
 }
 
+static void quad_to_stereo(short *output, short *input, int n)
+{
+    int i;
+    for(i=0; i<n; i++) {
+        *output++ = (input[0] + input[2]) >> 1;
+        *output++ = (input[1] + input[3]) >> 1;
+        input += 4;
+    }
+}
+
+static void ac3_5p1_to_stereo(short *output, short *input, int n)
+{
+    short *p = input;
+
+    while(n-- > 0) {
+        *output++ = (p[0] + p[1] + p[3] + p[5]) / 3;
+        *output++ = (p[1] + p[2] + p[4] + p[5]) / 3;
+        p += 6;
+    }
+}
+
 static void ac3_5p1_mux(short *output, short *input1, short *input2, int n)
 {
     int i;
@@ -131,7 +152,7 @@
 {
     ReSampleContext *s;
 
-    if ( input_channels > 2)
+    if (input_channels > 2 && output_rate != input_rate)
       {
         av_log(NULL, AV_LOG_ERROR, "Resampling with input channels greater than 2 unsupported.");
         return NULL;
@@ -177,6 +198,16 @@
     short *buftmp2[2], *buftmp3[2];
     int lenout;
 
+    if (s->input_channels == 4 && s->output_channels == 2) {
+        quad_to_stereo(output, input, nb_samples);
+        return nb_samples;
+    }
+
+    if (s->input_channels == 6 && s->output_channels == 2) {
+        ac3_5p1_to_stereo(output, input, nb_samples);
+        return nb_samples;
+    }
+
     if (s->input_channels == s->output_channels && s->ratio == 1.0 && 0) {
         /* nothing to do */
         memcpy(output, input, nb_samples * s->input_channels * sizeof(short));

