diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 4c9819c6b7..fca5b0e0ea 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -540,6 +540,7 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, float **samples = s->planar_samples, *samples2, *la, *overlap; ChannelElement *cpe; SingleChannelElement *sce; + IndividualChannelStream *ics; int i, its, ch, w, chans, tag, start_ch, ret, frame_bits; int target_bits, rate_bits, too_many_bits, too_few_bits; int ms_mode = 0, is_mode = 0, tns_mode = 0, pred_mode = 0; @@ -569,10 +570,11 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, chans = tag == TYPE_CPE ? 2 : 1; cpe = &s->cpe[i]; for (ch = 0; ch < chans; ch++) { - IndividualChannelStream *ics = &cpe->ch[ch].ics; - int cur_channel = start_ch + ch; + sce = &cpe->ch[ch]; + ics = &sce->ics; + s->cur_channel = start_ch + ch; float clip_avoidance_factor; - overlap = &samples[cur_channel][0]; + overlap = &samples[s->cur_channel][0]; samples2 = overlap + 1024; la = samples2 + (448+64); if (!frame) @@ -589,7 +591,7 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, */ ics->num_swb = s->samplerate_index >= 8 ? 1 : 3; } else { - wi[ch] = s->psy.model->window(&s->psy, samples2, la, cur_channel, + wi[ch] = s->psy.model->window(&s->psy, samples2, la, s->cur_channel, ics->window_sequence[0]); } ics->window_sequence[1] = ics->window_sequence[0]; @@ -622,12 +624,12 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, ics->clip_avoidance_factor = 1.0f; } - apply_window_and_mdct(s, &cpe->ch[ch], overlap); + apply_window_and_mdct(s, sce, overlap); if (isnan(cpe->ch->coeffs[0])) { av_log(avctx, AV_LOG_ERROR, "Input contains NaN\n"); return AVERROR(EINVAL); } - avoid_clipping(s, &cpe->ch[ch]); + avoid_clipping(s, sce); } start_ch += chans; }