Mercurial > libavcodec.hg
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 {