[FFmpeg-cvslog] aacdec_usac: always zero out alpha_q values for stereo streams

Lynne git at videolan.org
Wed Jun 12 04:34:23 EEST 2024


ffmpeg | branch: master | Lynne <dev at lynne.ee> | Wed Jun 12 03:31:58 2024 +0200| [bdd3c6ca5015e29d12fa3d317a6d8b6958156a93] | committer: Lynne

aacdec_usac: always zero out alpha_q values for stereo streams

The issue is that if a frame has no complex stereo prediction,
the alpha values must all be assumed to be zero if the next frame
has complex prediction and uses delta coding.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bdd3c6ca5015e29d12fa3d317a6d8b6958156a93
---

 libavcodec/aac/aacdec_usac.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c
index 81aba5ddf4..98e8c1c0bc 100644
--- a/libavcodec/aac/aacdec_usac.c
+++ b/libavcodec/aac/aacdec_usac.c
@@ -690,10 +690,6 @@ static int decode_usac_stereo_cplx(AACDecContext *ac, AACUsacStereo *us,
     if (!indep_flag)
         delta_code_time = get_bits1(gb);
 
-    /* Alpha values must be zeroed out if pred_used is 0. */
-    memset(us->alpha_q_re, 0, sizeof(us->alpha_q_re));
-    memset(us->alpha_q_im, 0, sizeof(us->alpha_q_im));
-
     /* TODO: shouldn't be needed */
     for (int g = 0; g < num_window_groups; g++) {
         for (int sfb = 0; sfb < cpe->max_sfb_ste; sfb += SFB_PER_PRED_BAND) {
@@ -828,6 +824,11 @@ static int decode_usac_stereo_info(AACDecContext *ac, AACUSACConfig *usac,
     us->common_window = 0;
     us->common_tw = 0;
 
+    /* Alpha values must always be zeroed out for the current frame,
+     * as they are propagated to the next frame and may be used. */
+    memset(us->alpha_q_re, 0, sizeof(us->alpha_q_re));
+    memset(us->alpha_q_im, 0, sizeof(us->alpha_q_im));
+
     if (!(!ue1->core_mode && !ue2->core_mode))
         return 0;
 



More information about the ffmpeg-cvslog mailing list