mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
aacsbr: don't call sbr_dequant twice without intermediate read_sbr_data
Doing that doesn't make sense, because the only purpose of sbr_dequant is to process the data from read_sbr_data. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
This commit is contained in:
parent
b885d9ced5
commit
1c3e43a627
@ -72,6 +72,7 @@ av_cold void AAC_RENAME(ff_aac_sbr_init)(void)
|
|||||||
/** Places SBR in pure upsampling mode. */
|
/** Places SBR in pure upsampling mode. */
|
||||||
static void sbr_turnoff(SpectralBandReplication *sbr) {
|
static void sbr_turnoff(SpectralBandReplication *sbr) {
|
||||||
sbr->start = 0;
|
sbr->start = 0;
|
||||||
|
sbr->ready_for_dequant = 0;
|
||||||
// Init defults used in pure upsampling mode
|
// Init defults used in pure upsampling mode
|
||||||
sbr->kx[1] = 32; //Typo in spec, kx' inits to 32
|
sbr->kx[1] = 32; //Typo in spec, kx' inits to 32
|
||||||
sbr->m[1] = 0;
|
sbr->m[1] = 0;
|
||||||
@ -179,6 +180,7 @@ static unsigned int read_sbr_header(SpectralBandReplication *sbr, GetBitContext
|
|||||||
SpectrumParameters old_spectrum_params;
|
SpectrumParameters old_spectrum_params;
|
||||||
|
|
||||||
sbr->start = 1;
|
sbr->start = 1;
|
||||||
|
sbr->ready_for_dequant = 0;
|
||||||
|
|
||||||
// Save last spectrum parameters variables to compare to new ones
|
// Save last spectrum parameters variables to compare to new ones
|
||||||
memcpy(&old_spectrum_params, &sbr->spectrum_params, sizeof(SpectrumParameters));
|
memcpy(&old_spectrum_params, &sbr->spectrum_params, sizeof(SpectrumParameters));
|
||||||
@ -1041,6 +1043,7 @@ static unsigned int read_sbr_data(AACContext *ac, SpectralBandReplication *sbr,
|
|||||||
unsigned int cnt = get_bits_count(gb);
|
unsigned int cnt = get_bits_count(gb);
|
||||||
|
|
||||||
sbr->id_aac = id_aac;
|
sbr->id_aac = id_aac;
|
||||||
|
sbr->ready_for_dequant = 1;
|
||||||
|
|
||||||
if (id_aac == TYPE_SCE || id_aac == TYPE_CCE) {
|
if (id_aac == TYPE_SCE || id_aac == TYPE_CCE) {
|
||||||
if (read_sbr_single_channel_element(ac, sbr, gb)) {
|
if (read_sbr_single_channel_element(ac, sbr, gb)) {
|
||||||
@ -1458,6 +1461,12 @@ void AAC_RENAME(ff_sbr_apply)(AACContext *ac, SpectralBandReplication *sbr, int
|
|||||||
sbr_turnoff(sbr);
|
sbr_turnoff(sbr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sbr->start && !sbr->ready_for_dequant) {
|
||||||
|
av_log(ac->avctx, AV_LOG_ERROR,
|
||||||
|
"No quantized data read for sbr_dequant.\n");
|
||||||
|
sbr_turnoff(sbr);
|
||||||
|
}
|
||||||
|
|
||||||
if (!sbr->kx_and_m_pushed) {
|
if (!sbr->kx_and_m_pushed) {
|
||||||
sbr->kx[0] = sbr->kx[1];
|
sbr->kx[0] = sbr->kx[1];
|
||||||
sbr->m[0] = sbr->m[1];
|
sbr->m[0] = sbr->m[1];
|
||||||
@ -1467,6 +1476,7 @@ void AAC_RENAME(ff_sbr_apply)(AACContext *ac, SpectralBandReplication *sbr, int
|
|||||||
|
|
||||||
if (sbr->start) {
|
if (sbr->start) {
|
||||||
sbr_dequant(sbr, id_aac);
|
sbr_dequant(sbr, id_aac);
|
||||||
|
sbr->ready_for_dequant = 0;
|
||||||
}
|
}
|
||||||
for (ch = 0; ch < nch; ch++) {
|
for (ch = 0; ch < nch; ch++) {
|
||||||
/* decode channel */
|
/* decode channel */
|
||||||
|
@ -139,6 +139,7 @@ typedef struct AACSBRContext {
|
|||||||
struct SpectralBandReplication {
|
struct SpectralBandReplication {
|
||||||
int sample_rate;
|
int sample_rate;
|
||||||
int start;
|
int start;
|
||||||
|
int ready_for_dequant;
|
||||||
int id_aac;
|
int id_aac;
|
||||||
int reset;
|
int reset;
|
||||||
SpectrumParameters spectrum_params;
|
SpectrumParameters spectrum_params;
|
||||||
|
Loading…
Reference in New Issue
Block a user