private static bool HUFF_DECODE(out int result, ref bitread_working_state state, d_derived_tbl htbl, ref int get_buffer, ref int bits_left)
{
int nb = 0;
bool doSlow = false;
if (bits_left < JpegConstants.HUFF_LOOKAHEAD)
{
if (!jpeg_fill_bit_buffer(ref state, get_buffer, bits_left, 0))
{
result = -1;
return false;
}
get_buffer = state.get_buffer;
bits_left = state.bits_left;
if (bits_left < JpegConstants.HUFF_LOOKAHEAD)
{
nb = 1;
doSlow = true;
}
}
if (!doSlow)
{
int look = PEEK_BITS(JpegConstants.HUFF_LOOKAHEAD, get_buffer, bits_left);
if ((nb = htbl.look_nbits[look]) != 0)
{
DROP_BITS(nb, ref bits_left);
result = htbl.look_sym[look];
return true;
}
nb = JpegConstants.HUFF_LOOKAHEAD + 1;
}
result = jpeg_huff_decode(ref state, get_buffer, bits_left, htbl, nb);
if (result < 0)
return false;
get_buffer = state.get_buffer;
bits_left = state.bits_left;
return true;
}