diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-06-08 01:30:51 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-06-08 01:31:15 +0200 |
commit | 476692abdb3207b722c2cbbd9ea3720004aae440 (patch) | |
tree | e8b6239290da2a3583e6ea7a05e27b15290a6d8b /libavcodec/aacdec.c | |
parent | 8eb2c411c1e56be522cce65b8acf92dd8b9fbfdd (diff) | |
parent | a188108ebf28ebac9d2b8fc7d5b391aef45698b3 (diff) | |
download | ffmpeg-476692abdb3207b722c2cbbd9ea3720004aae440.tar.gz |
Merge commit 'a188108ebf28ebac9d2b8fc7d5b391aef45698b3'
* commit 'a188108ebf28ebac9d2b8fc7d5b391aef45698b3':
aac: Support channel configurations 11 and 12
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/aacdec.c')
-rw-r--r-- | libavcodec/aacdec.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index 94fb5f051b..eab889f789 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -539,7 +539,8 @@ static int set_default_channel_config(AVCodecContext *avctx, int *tags, int channel_config) { - if (channel_config < 1 || channel_config > 7) { + if (channel_config < 1 || (channel_config > 7 && channel_config < 11) || + channel_config > 12) { av_log(avctx, AV_LOG_ERROR, "invalid default channel configuration (%d)\n", channel_config); @@ -619,11 +620,19 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) /* For indexed channel configurations map the channels solely based * on position. */ switch (ac->oc[1].m4ac.chan_config) { + case 12: case 7: if (ac->tags_mapped == 3 && type == TYPE_CPE) { ac->tags_mapped++; return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2]; } + case 11: + if (ac->tags_mapped == 2 && + ac->oc[1].m4ac.chan_config == 11 && + type == TYPE_SCE) { + ac->tags_mapped++; + return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1]; + } case 6: /* Some streams incorrectly code 5.1 audio as * SCE[0] CPE[0] CPE[1] SCE[1] @@ -2897,7 +2906,7 @@ static int aac_decode_er_frame(AVCodecContext *avctx, void *data, ac->tags_mapped = 0; - if (chan_config < 0 || chan_config >= 8) { + if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) { avpriv_request_sample(avctx, "Unknown ER channel configuration %d", chan_config); return AVERROR_INVALIDDATA; |