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>
(cherry picked from commit 1c3e43a627)
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
			
			
This commit is contained in:
		@@ -70,6 +70,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;
 | 
				
			||||||
@@ -177,6 +178,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));
 | 
				
			||||||
@@ -1032,6 +1034,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)) {
 | 
				
			||||||
@@ -1449,6 +1452,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];
 | 
				
			||||||
@@ -1458,6 +1467,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 */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,6 +137,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;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user