You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
aacsbr: break infinite loop in sbr_hf_calc_npatches
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
committed by
Michael Niedermayer
parent
7174df44fe
commit
584cc1ade1
@@ -514,7 +514,7 @@ static int sbr_make_f_master(AACContext *ac, SpectralBandReplication *sbr,
|
|||||||
/// High Frequency Generation - Patch Construction (14496-3 sp04 p216 fig. 4.46)
|
/// High Frequency Generation - Patch Construction (14496-3 sp04 p216 fig. 4.46)
|
||||||
static int sbr_hf_calc_npatches(AACContext *ac, SpectralBandReplication *sbr)
|
static int sbr_hf_calc_npatches(AACContext *ac, SpectralBandReplication *sbr)
|
||||||
{
|
{
|
||||||
int i, k, sb = 0;
|
int i, k, last_k = -1, last_msb = -1, sb = 0;
|
||||||
int msb = sbr->k[0];
|
int msb = sbr->k[0];
|
||||||
int usb = sbr->kx[1];
|
int usb = sbr->kx[1];
|
||||||
int goal_sb = ((1000 << 11) + (sbr->sample_rate >> 1)) / sbr->sample_rate;
|
int goal_sb = ((1000 << 11) + (sbr->sample_rate >> 1)) / sbr->sample_rate;
|
||||||
@@ -528,6 +528,12 @@ static int sbr_hf_calc_npatches(AACContext *ac, SpectralBandReplication *sbr)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
int odd = 0;
|
int odd = 0;
|
||||||
|
if (k == last_k && msb == last_msb) {
|
||||||
|
av_log(ac->avctx, AV_LOG_ERROR, "patch construction failed\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
last_k = k;
|
||||||
|
last_msb = msb;
|
||||||
for (i = k; i == k || sb > (sbr->k[0] - 1 + msb - odd); i--) {
|
for (i = k; i == k || sb > (sbr->k[0] - 1 + msb - odd); i--) {
|
||||||
sb = sbr->f_master[i];
|
sb = sbr->f_master[i];
|
||||||
odd = (sb + sbr->k[0]) & 1;
|
odd = (sb + sbr->k[0]) & 1;
|
||||||
|
Reference in New Issue
Block a user