@ -70,6 +70,17 @@ static const AVClass vorbis_class = {
. version = LIBAVUTIL_VERSION_INT ,
. version = LIBAVUTIL_VERSION_INT ,
} ;
} ;
static const uint8_t vorbis_encoding_channel_layout_offsets [ 8 ] [ 8 ] = {
{ 0 } ,
{ 0 , 1 } ,
{ 0 , 2 , 1 } ,
{ 0 , 1 , 2 , 3 } ,
{ 0 , 2 , 1 , 3 , 4 } ,
{ 0 , 2 , 1 , 4 , 5 , 3 } ,
{ 0 , 2 , 1 , 5 , 6 , 4 , 3 } ,
{ 0 , 2 , 1 , 6 , 7 , 4 , 5 , 3 } ,
} ;
static int vorbis_error_to_averror ( int ov_err )
static int vorbis_error_to_averror ( int ov_err )
{
{
switch ( ov_err ) {
switch ( ov_err ) {
@ -287,7 +298,7 @@ static int libvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
buffer = vorbis_analysis_buffer ( & s - > vd , samples ) ;
buffer = vorbis_analysis_buffer ( & s - > vd , samples ) ;
for ( c = 0 ; c < channels ; c + + ) {
for ( c = 0 ; c < channels ; c + + ) {
int co = ( channels > 8 ) ? c :
int co = ( channels > 8 ) ? c :
ff_ vorbis_encoding_channel_layout_offsets[ channels - 1 ] [ c ] ;
vorbis_encoding_channel_layout_offsets [ channels - 1 ] [ c ] ;
memcpy ( buffer [ c ] , frame - > extended_data [ co ] ,
memcpy ( buffer [ c ] , frame - > extended_data [ co ] ,
samples * sizeof ( * buffer [ c ] ) ) ;
samples * sizeof ( * buffer [ c ] ) ) ;
}
}