huffman: use a simple assignment instead of FFSWAP.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 29 Jan 2012 20:45:19 +0000 (21:45 +0100)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Mon, 30 Jan 2012 17:39:08 +0000 (18:39 +0100)
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
libavcodec/huffman.c

index 42f2885..fd9fa95 100644 (file)
@@ -91,16 +91,18 @@ int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
     nodes[nb_codes*2-1].count = 0;
     for(i = 0; i < nb_codes*2-1; i += 2){
         uint32_t cur_count = nodes[i].count + nodes[i+1].count;
-        nodes[cur_node].sym = HNODE;
-        nodes[cur_node].count = cur_count;
-        nodes[cur_node].n0 = i;
+        // find correct place to insert new node, and
+        // make space for the new node while at it
         for(j = cur_node; j > i + 2; j--){
             if(cur_count > nodes[j-1].count ||
                (cur_count == nodes[j-1].count &&
                 !(flags & FF_HUFFMAN_FLAG_HNODE_FIRST)))
                 break;
-            FFSWAP(Node, nodes[j], nodes[j-1]);
+            nodes[j] = nodes[j - 1];
         }
+        nodes[j].sym = HNODE;
+        nodes[j].count = cur_count;
+        nodes[j].n0 = i;
         cur_node++;
     }
     if(build_huff_tree(vlc, nodes, nb_codes*2-2, flags) < 0){