diff --git a/libavcodec/webp.c b/libavcodec/webp.c index d531a78a39..f9f8bfcbff 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -277,10 +277,26 @@ static int huff_reader_get_symbol(HuffReader *r, GetBitContext *gb) static int huff_reader_build_canonical(HuffReader *r, int *code_lengths, int alphabet_size) { - int len, sym, code, ret; + int len = 0, sym, code = 0, ret; int max_code_length = 0; uint16_t *codes; + /* special-case 1 symbol since the vlc reader cannot handle it */ + for (sym = 0; sym < alphabet_size; sym++) { + if (code_lengths[sym] > 0) { + len++; + code = sym; + if (len > 1) + break; + } + } + if (len == 1) { + r->nb_symbols = 1; + r->simple_symbols[0] = code; + r->simple = 1; + return 0; + } + for (sym = 0; sym < alphabet_size; sym++) max_code_length = FFMAX(max_code_length, code_lengths[sym]);