SBR encoder improvement

SBR encoder: Introduce coupling energy ratio limitation to prevent undesirable SBR band
     amplification while decoding.

Bug 9428126

Change-Id: I18a77cd1a178fff7531b490779a29a0df7d993af
This commit is contained in:
Jean-Michel Trivi 2013-08-08 17:47:33 -07:00
parent 60a27b7fe5
commit fc4d7b0e73
3 changed files with 11 additions and 11 deletions

View File

@ -98,7 +98,7 @@ amm-info@iis.fraunhofer.de
/* Encoder library info */
#define AACENCODER_LIB_VL0 3
#define AACENCODER_LIB_VL1 4
#define AACENCODER_LIB_VL2 3
#define AACENCODER_LIB_VL2 4
#define AACENCODER_LIB_TITLE "AAC Encoder"
#define AACENCODER_LIB_BUILD_DATE __DATE__
#define AACENCODER_LIB_BUILD_TIME __TIME__

View File

@ -817,22 +817,22 @@ calculateSbrEnvelope (FIXP_DBL **RESTRICT YBufferLeft, /*! energy buffer left *
}
/* ld64 to integer conversion */
nrgLeft = fixMin(fixMax(nrgLeft,FL2FXCONST_DBL(0.0f)),FL2FXCONST_DBL(0.5f));
nrgLeft = fixMin(fixMax(nrgLeft,FL2FXCONST_DBL(0.0f)),(FL2FXCONST_DBL(0.5f)>>oneBitLess));
nrgLeft = (FIXP_DBL)(LONG)nrgLeft >> (DFRACT_BITS-1-LD_DATA_SHIFT-1-oneBitLess-1);
sfb_nrgLeft[m] = ((INT)nrgLeft+1)>>1; /* rounding */
if (stereoMode == SBR_COUPLING) {
FIXP_DBL scaleFract;
int sc0, sc1;
if (nrgRight != FL2FXCONST_DBL(0.0f)) {
int sc0 = CountLeadingBits(nrgLeft2);
int sc1 = CountLeadingBits(nrgRight);
nrgLeft2 = fixMax((FIXP_DBL)0x1, nrgLeft2);
nrgRight = fixMax((FIXP_DBL)0x1, nrgRight);
sc0 = CountLeadingBits(nrgLeft2);
sc1 = CountLeadingBits(nrgRight);
scaleFract = ((FIXP_DBL)(sc0-sc1)) << (DFRACT_BITS-1-LD_DATA_SHIFT); /* scale value in ld64 representation */
nrgRight = CalcLdData(nrgLeft2<<sc0) - CalcLdData(nrgRight<<sc1) - scaleFract;
}
else
nrgRight = FL2FXCONST_DBL(0.5f); /* ld64(4294967296.0f) */
/* ld64 to integer conversion */
nrgRight = (FIXP_DBL)(LONG)(nrgRight) >> (DFRACT_BITS-1-LD_DATA_SHIFT-1-oneBitLess);

View File

@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de
#define SBRENCODER_LIB_VL0 3
#define SBRENCODER_LIB_VL1 3
#define SBRENCODER_LIB_VL2 0
#define SBRENCODER_LIB_VL2 1