[FFmpeg-cvslog] r21001 - trunk/libavcodec/elbg.c

vitor subversion
Sat Jan 2 13:15:10 CET 2010


Author: vitor
Date: Sat Jan  2 13:15:09 2010
New Revision: 21001

Log:
Small ELBG optimization: use last pixel as a initial guess for the codebook
entry.

Modified:
   trunk/libavcodec/elbg.c

Modified: trunk/libavcodec/elbg.c
==============================================================================
--- trunk/libavcodec/elbg.c	Sat Jan  2 00:56:09 2010	(r21000)
+++ trunk/libavcodec/elbg.c	Sat Jan  2 13:15:09 2010	(r21001)
@@ -355,6 +355,7 @@ void ff_do_elbg(int *points, int dim, in
     int *size_part = av_malloc(numCB*sizeof(int));
     cell *list_buffer = av_malloc(numpoints*sizeof(cell));
     cell *free_cells;
+    int best_dist, best_idx = 0;
 
     elbg->error = INT_MAX;
     elbg->dim = dim;
@@ -380,14 +381,16 @@ void ff_do_elbg(int *points, int dim, in
         /* This loop evaluate the actual Voronoi partition. It is the most
            costly part of the algorithm. */
         for (i=0; i < numpoints; i++) {
-            dist_cb[i] = INT_MAX;
+            best_dist = distance_limited(elbg->points + i*elbg->dim, elbg->codebook + best_idx*elbg->dim, dim, INT_MAX);
             for (k=0; k < elbg->numCB; k++) {
-                dist = distance_limited(elbg->points + i*elbg->dim, elbg->codebook + k*elbg->dim, dim, dist_cb[i]);
-                if (dist < dist_cb[i]) {
-                    dist_cb[i] = dist;
-                    elbg->nearest_cb[i] = k;
+                dist = distance_limited(elbg->points + i*elbg->dim, elbg->codebook + k*elbg->dim, dim, best_dist);
+                if (dist < best_dist) {
+                    best_dist = dist;
+                    best_idx = k;
                 }
             }
+            elbg->nearest_cb[i] = best_idx;
+            dist_cb[i] = best_dist;
             elbg->error += dist_cb[i];
             elbg->utility[elbg->nearest_cb[i]] += dist_cb[i];
             free_cells->index = i;



More information about the ffmpeg-cvslog mailing list