aacsbr_template: fix SBR USAC coupling

This issue hid under the radar since the codebooks between coupling
modes very often result in identical bit counts regardless of the encoded
data, leading to no frame-level bitstream desyncs except in rare cases.

AAC Mps212 data is parsed immediately after the SBR data, where a loss
of sync in SBR will result in Mps212 being wildly different.
This commit is contained in:
Lynne
2026-01-22 19:58:31 +01:00
parent a93cb79da2
commit 8349565d52

View File

@@ -1287,6 +1287,8 @@ int ff_aac_sbr_decode_usac_data(AACDecContext *ac, ChannelElement *che,
if ((sbr->data[0].bs_add_harmonic_flag = get_bits1(gb)))
get_bits1_vector(gb, sbr->data[0].bs_add_harmonic, sbr->n[1]);
} else if (get_bits1(gb)) { /* bs_coupling == 1 */
sbr->bs_coupling = 1;
/* if (harmonicSBR) ... */
if (read_sbr_grid(ac, sbr, gb, &sbr->data[0]))
@@ -1317,7 +1319,10 @@ int ff_aac_sbr_decode_usac_data(AACDecContext *ac, ChannelElement *che,
if ((sbr->data[1].bs_add_harmonic_flag = get_bits1(gb)))
get_bits1_vector(gb, sbr->data[1].bs_add_harmonic, sbr->n[1]);
} else { /* bs_coupling == 0 */
sbr->bs_coupling = 0;
/* if (harmonicSBR) ... */
if (read_sbr_grid(ac, sbr, gb, &sbr->data[0]))
return -1;
if (read_sbr_grid(ac, sbr, gb, &sbr->data[1]))