diff libvorbis.c @ 11977:032a8dc03ced libavcodec

Fix libvorbis encoding with more than 2 channels Patch by James Darnley, james dot darnley at gmail
author mstorsjo
date Sun, 27 Jun 2010 09:25:05 +0000
parents defe337cf643
children 189c04335897
line wrap: on
line diff
--- a/libvorbis.c	Sun Jun 27 02:52:43 2010 +0000
+++ b/libvorbis.c	Sun Jun 27 09:25:05 2010 +0000
@@ -28,6 +28,7 @@
 
 #include "avcodec.h"
 #include "bytestream.h"
+#include "vorbis.h"
 
 #undef NDEBUG
 #include <assert.h>
@@ -146,16 +147,14 @@
     if(data) {
         int samples = OGGVORBIS_FRAME_SIZE;
         float **buffer ;
+        int c, channels = context->vi.channels;
 
         buffer = vorbis_analysis_buffer(&context->vd, samples) ;
-        if(context->vi.channels == 1) {
+        for (c = 0; c < channels; c++) {
+            int co = (channels > 8) ? c :
+                ff_vorbis_encoding_channel_layout_offsets[channels-1][c];
             for(l = 0 ; l < samples ; l++)
-                buffer[0][l]=audio[l]/32768.f;
-        } else {
-            for(l = 0 ; l < samples ; l++){
-                buffer[0][l]=audio[l*2]/32768.f;
-                buffer[1][l]=audio[l*2+1]/32768.f;
-            }
+                buffer[c][l]=audio[l*channels+co]/32768.f;
         }
         vorbis_analysis_wrote(&context->vd, samples) ;
     } else {