[FFmpeg-cvslog] aacsbr: don't call sbr_dequant twice without intermediate read_sbr_data
Andreas Cadhalpun
git at videolan.org
Thu Nov 26 01:42:18 CET 2015
ffmpeg | branch: release/2.8 | Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com> | Fri Nov 20 20:15:21 2015 +0100| [34f2d74555876b0596f2b0a59b8e1adf67e65ea1] | committer: Andreas Cadhalpun
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 at niedermayer.cc>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
(cherry picked from commit 1c3e43a6273822e1369818b80f34c8464e1009d5)
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=34f2d74555876b0596f2b0a59b8e1adf67e65ea1
---
libavcodec/aacsbr_template.c | 10 ++++++++++
libavcodec/sbr.h | 1 +
2 files changed, 11 insertions(+)
diff --git a/libavcodec/aacsbr_template.c b/libavcodec/aacsbr_template.c
index 8a0268d..a49940a 100644
--- a/libavcodec/aacsbr_template.c
+++ b/libavcodec/aacsbr_template.c
@@ -70,6 +70,7 @@ av_cold void AAC_RENAME(ff_aac_sbr_init)(void)
/** Places SBR in pure upsampling mode. */
static void sbr_turnoff(SpectralBandReplication *sbr) {
sbr->start = 0;
+ sbr->ready_for_dequant = 0;
// Init defults used in pure upsampling mode
sbr->kx[1] = 32; //Typo in spec, kx' inits to 32
sbr->m[1] = 0;
@@ -177,6 +178,7 @@ static unsigned int read_sbr_header(SpectralBandReplication *sbr, GetBitContext
SpectrumParameters old_spectrum_params;
sbr->start = 1;
+ sbr->ready_for_dequant = 0;
// Save last spectrum parameters variables to compare to new ones
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);
sbr->id_aac = id_aac;
+ sbr->ready_for_dequant = 1;
if (id_aac == TYPE_SCE || id_aac == TYPE_CCE) {
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);
}
+ 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) {
sbr->kx[0] = sbr->kx[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) {
sbr_dequant(sbr, id_aac);
+ sbr->ready_for_dequant = 0;
}
for (ch = 0; ch < nch; ch++) {
/* decode channel */
diff --git a/libavcodec/sbr.h b/libavcodec/sbr.h
index 66a88a2..91ab82c 100644
--- a/libavcodec/sbr.h
+++ b/libavcodec/sbr.h
@@ -137,6 +137,7 @@ typedef struct AACSBRContext {
struct SpectralBandReplication {
int sample_rate;
int start;
+ int ready_for_dequant;
int id_aac;
int reset;
SpectrumParameters spectrum_params;
More information about the ffmpeg-cvslog
mailing list