ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | Thu Apr 17 15:43:31 2025 +0200| [3e21df2353ac5f0d2880bf0f6fbd64c19fcd5e49] | committer: Andreas Rheinhardt
avcodec/huffman: Switch to ff_vlc_init_from_lengths() Avoids having to create the codes ourselves. Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3e21df2353ac5f0d2880bf0f6fbd64c19fcd5e49 --- libavcodec/huffman.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/libavcodec/huffman.c b/libavcodec/huffman.c index d47fe10087..0de3097a82 100644 --- a/libavcodec/huffman.c +++ b/libavcodec/huffman.c @@ -115,40 +115,36 @@ end: return ret; } -static void get_tree_codes(uint32_t *bits, int16_t *lens, uint8_t *xlat, - Node *nodes, int node, - uint32_t pfx, int pl, int *pos, int no_zero_count) +static void get_tree_codes(int8_t *lens, uint8_t *xlat, + Node *nodes, int node, int pl, int *pos, int no_zero_count) { int s; s = nodes[node].sym; if (s != HNODE || (no_zero_count && !nodes[node].count)) { - bits[*pos] = pfx; lens[*pos] = pl; xlat[*pos] = s; (*pos)++; } else { - pfx <<= 1; pl++; - get_tree_codes(bits, lens, xlat, nodes, nodes[node].n0, pfx, pl, + get_tree_codes(lens, xlat, nodes, nodes[node].n0, pl, pos, no_zero_count); - pfx |= 1; - get_tree_codes(bits, lens, xlat, nodes, nodes[node].n0 + 1, pfx, pl, + get_tree_codes(lens, xlat, nodes, nodes[node].n0 + 1, pl, pos, no_zero_count); } } -static int build_huff_tree(VLC *vlc, Node *nodes, int head, int flags, int nb_bits) +static int build_huff_tree(VLC *vlc, Node *nodes, int head, int flags, int nb_bits, void *logctx) { int no_zero_count = !(flags & FF_HUFFMAN_FLAG_ZERO_COUNT); - uint32_t bits[256]; - int16_t lens[256]; + int8_t lens[256]; uint8_t xlat[256]; int pos = 0; - get_tree_codes(bits, lens, xlat, nodes, head, 0, 0, + get_tree_codes(lens, xlat, nodes, head, 0, &pos, no_zero_count); - return ff_vlc_init_sparse(vlc, nb_bits, pos, lens, 2, 2, bits, 4, 4, xlat, 1, 1, 0); + return ff_vlc_init_from_lengths(vlc, nb_bits, pos, lens, 1, + xlat, 1, 1, 0, 0, logctx); } @@ -194,7 +190,7 @@ int ff_huff_build_tree(void *logctx, VLC *vlc, int nb_codes, int nb_bits, nodes[j].n0 = i; cur_node++; } - if (build_huff_tree(vlc, nodes, nb_codes * 2 - 2, flags, nb_bits) < 0) { + if (build_huff_tree(vlc, nodes, nb_codes * 2 - 2, flags, nb_bits, logctx) < 0) { av_log(logctx, AV_LOG_ERROR, "Error building tree\n"); return -1; } _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".