summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/aacdec.c57
1 files changed, 16 insertions, 41 deletions
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index b3bbc4b162..1100a61d3e 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -409,56 +409,31 @@ static av_cold int output_configure(AACContext *ac,
{
AVCodecContext *avctx = ac->avctx;
int i, channels = 0, ret;
+ uint64_t layout = 0;
if (ac->layout_map != layout_map) {
memcpy(ac->layout_map, layout_map, tags * sizeof(layout_map[0]));
ac->layout_map_tags = tags;
}
- if (channel_config) {
- if (avctx->request_channel_layout != AV_CH_LAYOUT_NATIVE)
- sniff_channel_order(layout_map, tags);
- for (i = 0; i < tags_per_config[channel_config]; i++) {
- int type = layout_map[i][0];
- int id = layout_map[i][1];
- int position = layout_map[i][2];
- if ((ret = che_configure(ac, position,
- type, id,
- &channels)))
- return ret;
- }
-
- memset(ac->tag_che_map, 0, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
-
- avctx->channel_layout = aac_channel_layout[channel_config - 1];
- } else {
- /* Allocate or free elements depending on if they are in the
- * current program configuration.
- *
- * Try to sniff a reasonable channel order, otherwise output the
- * channels in the order the PCE declared them.
- */
-
- uint64_t layout = 0;
- if (avctx->request_channel_layout != AV_CH_LAYOUT_NATIVE)
- layout = sniff_channel_order(layout_map, tags);
- for (i = 0; i < tags; i++) {
- int type = layout_map[i][0];
- int id = layout_map[i][1];
- int position = layout_map[i][2];
- if ((ret = che_configure(ac, position,
- type, id,
- &channels)))
- return ret;
- }
-
- memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
-
- avctx->channel_layout = layout;
+ // Try to sniff a reasonable channel order, otherwise output the
+ // channels in the order the PCE declared them.
+ if (avctx->request_channel_layout != AV_CH_LAYOUT_NATIVE)
+ layout = sniff_channel_order(layout_map, tags);
+ for (i = 0; i < tags; i++) {
+ int type = layout_map[i][0];
+ int id = layout_map[i][1];
+ int position = layout_map[i][2];
+ // Allocate or free elements depending on if they are in the
+ // current program configuration.
+ ret = che_configure(ac, position, type, id, &channels);
+ if (ret < 0)
+ return ret;
}
+ memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
+ avctx->channel_layout = layout;
avctx->channels = channels;
-
ac->output_configured = oc_type;
return 0;