huffman: pass hnode_first as a flag instead of as an argument on its own

Originally committed as revision 12373 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Aurelien Jacobs 17 years ago
parent 409e1d71ea
commit bac02ed3c5
  1. 5
      libavcodec/huffman.c
  2. 4
      libavcodec/huffman.h
  3. 3
      libavcodec/vp6.c

@ -64,7 +64,7 @@ static int build_huff_tree(VLC *vlc, Node *nodes, int head)
* first nb_codes nodes.count must be set * first nb_codes nodes.count must be set
*/ */
int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes, int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
Node *nodes, huff_cmp_t cmp, int hnode_first) Node *nodes, huff_cmp_t cmp, int flags)
{ {
int i, j; int i, j;
int cur_node; int cur_node;
@ -90,7 +90,8 @@ int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
for(j = cur_node; j > 0; j--){ for(j = cur_node; j > 0; j--){
if(nodes[j].count > nodes[j-1].count || if(nodes[j].count > nodes[j-1].count ||
(nodes[j].count == nodes[j-1].count && (nodes[j].count == nodes[j-1].count &&
(!hnode_first || nodes[j].n0==j-1 || nodes[j].n0==j-2 || (!(flags & FF_HUFFMAN_FLAG_HNODE_FIRST) ||
nodes[j].n0==j-1 || nodes[j].n0==j-2 ||
(nodes[j].sym!=HNODE && nodes[j-1].sym!=HNODE)))) (nodes[j].sym!=HNODE && nodes[j-1].sym!=HNODE))))
break; break;
FFSWAP(Node, nodes[j], nodes[j-1]); FFSWAP(Node, nodes[j], nodes[j-1]);

@ -32,8 +32,10 @@ typedef struct {
uint32_t count; uint32_t count;
} Node; } Node;
#define FF_HUFFMAN_FLAG_HNODE_FIRST 0x01
typedef int (*huff_cmp_t)(const void *va, const void *vb); typedef int (*huff_cmp_t)(const void *va, const void *vb);
int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes, int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
Node *nodes, huff_cmp_t cmp, int hnode_first); Node *nodes, huff_cmp_t cmp, int flags);
#endif /* FFMPEG_HUFFMAN_H */ #endif /* FFMPEG_HUFFMAN_H */

@ -224,7 +224,8 @@ static void vp6_build_huff_tree(vp56_context_t *s, uint8_t coeff_model[],
} }
/* then build the huffman tree accodring to probabilities */ /* then build the huffman tree accodring to probabilities */
ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp, 1); ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp,
FF_HUFFMAN_FLAG_HNODE_FIRST);
} }
static void vp6_parse_coeff_models(vp56_context_t *s) static void vp6_parse_coeff_models(vp56_context_t *s)

Loading…
Cancel
Save