aacenc: Multiple distortion by lambda after it's summed and not each individual
authorAlex Converse <alex.converse@gmail.com>
Mon, 21 Sep 2009 03:50:59 +0000 (03:50 +0000)
committerAlex Converse <alex.converse@gmail.com>
Mon, 21 Sep 2009 03:50:59 +0000 (03:50 +0000)
term before.

Originally committed as revision 19945 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/aaccoder.c

index b32c854..e5a7a8e 100644 (file)
@@ -121,10 +121,10 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in,
 
     if (!cb) {
         for (i = 0; i < size; i++)
-            cost += in[i]*in[i]*lambda;
+            cost += in[i]*in[i];
         if (bits)
             *bits = 0;
-        return cost;
+        return cost * lambda;
     }
 #ifndef USE_REALLY_FULL_SEARCH
     offs[0] = 1;
@@ -141,10 +141,10 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in,
         int (*quants)[2] = &s->qcoefs[i];
         mincost = 0.0f;
         for (j = 0; j < dim; j++)
-            mincost += in[i+j]*in[i+j]*lambda;
+            mincost += in[i+j]*in[i+j];
         minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
         minbits = ff_aac_spectral_bits[cb-1][minidx];
-        mincost += minbits;
+        mincost = mincost * lambda + minbits;
         for (j = 0; j < (1<<dim); j++) {
             float rd = 0.0f;
             int curbits;
@@ -192,15 +192,15 @@ static float quantize_band_cost(struct AACEncContext *s, const float *in,
                     }
                     if (vec[k] != 0.0f)
                         curbits++;
-                    rd += di*di*lambda;
+                    rd += di*di;
                 }
             } else {
                 for (k = 0; k < dim; k++) {
                     float di = in[i+k] - vec[k]*IQ;
-                    rd += di*di*lambda;
+                    rd += di*di;
                 }
             }
-            rd += curbits;
+            rd = rd * lambda + curbits;
             if (rd < mincost) {
                 mincost = rd;
                 minidx  = j;
@@ -255,10 +255,10 @@ static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb,
         int (*quants)[2] = &s->qcoefs[i];
         mincost = 0.0f;
         for (j = 0; j < dim; j++)
-            mincost += in[i+j]*in[i+j]*lambda;
+            mincost += in[i+j]*in[i+j];
         minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
         minbits = ff_aac_spectral_bits[cb-1][minidx];
-        mincost += minbits;
+        mincost = mincost * lambda + minbits;
         for (j = 0; j < (1<<dim); j++) {
             float rd = 0.0f;
             int curbits;
@@ -307,15 +307,15 @@ static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb,
                     }
                     if (vec[k] != 0.0f)
                         curbits++;
-                    rd += di*di*lambda;
+                    rd += di*di;
                 }
             } else {
                 for (k = 0; k < dim; k++) {
                     float di = in[i+k] - vec[k]*IQ;
-                    rd += di*di*lambda;
+                    rd += di*di;
                 }
             }
-            rd += curbits;
+            rd = rd * lambda + curbits;
             if (rd < mincost) {
                 mincost = rd;
                 minidx  = curidx;