[SCM] libav/experimental: Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:51:38 UTC 2013


The following commit has been merged in the experimental branch:
commit f8a6a56a75cdec7cecedf234f139487288eafc68
Author: Oded Shimon <ods15 at ods15.dyndns.org>
Date:   Mon Oct 2 06:09:41 2006 +0000

    Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
    
    5% speed improovement by changing put_vector
    
    Originally committed as revision 6513 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c
index cff661d..8c57128 100644
--- a/libavcodec/vorbis_enc.c
+++ b/libavcodec/vorbis_enc.c
@@ -22,6 +22,7 @@
  * @author Oded Shimon <ods15 at ods15.dyndns.org>
  */
 
+#include <float.h>
 #include "avcodec.h"
 #include "dsputil.h"
 #include "vorbis.h"
@@ -40,6 +41,7 @@ typedef struct {
     int lookup;
     int * quantlist;
     float * dimentions;
+    float * pow2;
 } codebook_t;
 
 typedef struct {
@@ -645,10 +647,11 @@ static void ready_codebook(codebook_t * cb) {
 
     ff_vorbis_len2vlc(cb->lens, cb->codewords, cb->nentries);
 
-    if (!cb->lookup) cb->dimentions = NULL;
+    if (!cb->lookup) cb->pow2 = cb->dimentions = NULL;
     else {
         int vals = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
         cb->dimentions = av_malloc(sizeof(float) * cb->nentries * cb->ndimentions);
+        cb->pow2 = av_mallocz(sizeof(float) * cb->nentries);
         for (i = 0; i < cb->nentries; i++) {
             float last = 0;
             int j;
@@ -660,8 +663,10 @@ static void ready_codebook(codebook_t * cb) {
 
                 cb->dimentions[i * cb->ndimentions + j] = last + cb->min + cb->quantlist[off] * cb->delta;
                 if (cb->seq_p) last = cb->dimentions[i * cb->ndimentions + j];
+                cb->pow2[i] += cb->dimentions[i * cb->ndimentions + j]*cb->dimentions[i * cb->ndimentions + j];
                 div *= vals;
             }
+            cb->pow2[i] /= 2.;
         }
     }
 
@@ -1218,19 +1223,15 @@ static void floor_encode(venc_context_t * venc, floor_t * fc, PutBitContext * pb
 }
 
 static float * put_vector(codebook_t * book, PutBitContext * pb, float * num) {
-    int i;
-    int entry = -1;
-    float distance = 0;
+    int i, entry = -1;
+    float distance = FLT_MAX;
     assert(book->dimentions);
     for (i = 0; i < book->nentries; i++) {
-        float d = 0.;
+        float * vec = book->dimentions + i * book->ndimentions, d = book->pow2[i];
         int j;
         if (!book->lens[i]) continue;
-        for (j = 0; j < book->ndimentions; j++) {
-            float a = (book->dimentions[i * book->ndimentions + j] - num[j]);
-            d += a*a;
-        }
-        if (entry == -1 || distance > d) {
+        for (j = 0; j < book->ndimentions; j++) d -= vec[j] * num[j];
+        if (distance > d) {
             entry = i;
             distance = d;
         }
@@ -1459,6 +1460,7 @@ static int vorbis_encode_close(AVCodecContext * avccontext)
         av_freep(&venc->codebooks[i].codewords);
         av_freep(&venc->codebooks[i].quantlist);
         av_freep(&venc->codebooks[i].dimentions);
+        av_freep(&venc->codebooks[i].pow2);
     }
     av_freep(&venc->codebooks);
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list