You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
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
This commit is contained in:
@@ -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)
|
||||||
|
Reference in New Issue
Block a user