diff options
author | Robert Swain <robert.swain@gmail.com> | 2010-01-29 13:51:25 +0000 |
---|---|---|
committer | Robert Swain <robert.swain@gmail.com> | 2010-01-29 13:51:25 +0000 |
commit | 4a27f326c538ffcbb484aca67e4120b03091a85a (patch) | |
tree | f9b8e23310fab32f06c2aa6ef0fda0da17ddfcee /libavcodec | |
parent | 012dc2c426e02b688837d3d7477da55f4db032e6 (diff) | |
download | ffmpeg-4a27f326c538ffcbb484aca67e4120b03091a85a.tar.gz |
Add support for vorbis 6.1 and 7.1 channel configurations as per the new spec
http://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9
Originally committed as revision 21527 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/vorbis.h | 4 | ||||
-rw-r--r-- | libavcodec/vorbis_data.c | 10 | ||||
-rw-r--r-- | libavcodec/vorbis_dec.c | 4 |
3 files changed, 11 insertions, 7 deletions
diff --git a/libavcodec/vorbis.h b/libavcodec/vorbis.h index cd4dc55974..03d448a640 100644 --- a/libavcodec/vorbis.h +++ b/libavcodec/vorbis.h @@ -25,8 +25,8 @@ extern const float ff_vorbis_floor1_inverse_db_table[256]; extern const float * const ff_vorbis_vwin[8]; -extern const uint8_t ff_vorbis_channel_layout_offsets[6][6]; -extern const int64_t ff_vorbis_channel_layouts[7]; +extern const uint8_t ff_vorbis_channel_layout_offsets[8][8]; +extern const int64_t ff_vorbis_channel_layouts[9]; typedef struct { uint_fast16_t x; diff --git a/libavcodec/vorbis_data.c b/libavcodec/vorbis_data.c index d9e3594ae8..2df8566631 100644 --- a/libavcodec/vorbis_data.c +++ b/libavcodec/vorbis_data.c @@ -21,22 +21,26 @@ #include "dsputil.h" #include "vorbis.h" -const uint8_t ff_vorbis_channel_layout_offsets[6][6] = { +const uint8_t ff_vorbis_channel_layout_offsets[8][8] = { { 0, }, { 0, 1, }, { 0, 2, 1, }, { 0, 1, 2, 3, }, { 0, 2, 1, 3, 4, }, - { 0, 2, 1, 5, 3, 4, } + { 0, 2, 1, 5, 3, 4, }, + { 0, 2, 1, 6, 5, 3, 4, }, + { 0, 2, 1, 7, 5, 6, 3, 4}, }; -const int64_t ff_vorbis_channel_layouts[7] = { +const int64_t ff_vorbis_channel_layouts[9] = { CH_LAYOUT_MONO, CH_LAYOUT_STEREO, CH_LAYOUT_SURROUND, CH_LAYOUT_QUAD, CH_LAYOUT_5POINT0_BACK, CH_LAYOUT_5POINT1_BACK, + CH_LAYOUT_5POINT1|CH_BACK_CENTER, + CH_LAYOUT_7POINT1, 0 }; diff --git a/libavcodec/vorbis_dec.c b/libavcodec/vorbis_dec.c index 93fafc1178..31d5092528 100644 --- a/libavcodec/vorbis_dec.c +++ b/libavcodec/vorbis_dec.c @@ -984,7 +984,7 @@ static av_cold int vorbis_decode_init(AVCodecContext *avccontext) return -1; } - if (vc->audio_channels > 6) + if (vc->audio_channels > 8) avccontext->channel_layout = 0; else avccontext->channel_layout = ff_vorbis_channel_layouts[vc->audio_channels - 1]; @@ -1616,7 +1616,7 @@ static int vorbis_decode_frame(AVCodecContext *avccontext, AV_DEBUG("parsed %d bytes %d bits, returned %d samples (*ch*bits) \n", get_bits_count(gb)/8, get_bits_count(gb)%8, len); - if (vc->audio_channels > 6) { + if (vc->audio_channels > 8) { for (i = 0; i < vc->audio_channels; i++) channel_ptrs[i] = vc->channel_floors + i * len; } else { |