Skip to content

Commit

Permalink
webp: add a special case for a huffman table with only 1 symbol
Browse files Browse the repository at this point in the history
The vlc reader cannot handle 0-bit huffman codes. For most
situations WebP uses the "simple" huffman coding for this case,
but that will only handle symbols up to 255. For the LZ77 distance
codes, larger symbol values are needed, so it can happen in rare
cases that a normal huffman table is used that only has a single
symbol.
  • Loading branch information
justinruggles committed Dec 6, 2013
1 parent f51e3a1 commit d085f80
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion libavcodec/webp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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]);

Expand Down

0 comments on commit d085f80

Please sign in to comment.