mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/motionpixels: Use symbols table
If allows us to directly store the deltas in the VLC table and therefore avoids a level of indirection. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
d3fba74803
commit
cc18bcdd52
@ -192,10 +192,8 @@ static void mp_set_rgb_from_yuv(MotionPixelsContext *mp, int x, int y, const Yuv
|
||||
|
||||
static av_always_inline int mp_get_vlc(MotionPixelsContext *mp, GetBitContext *gb)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = (mp->codes_count == 1) ? 0 : get_vlc2(gb, mp->vlc.table, mp->max_codes_bits, 1);
|
||||
return mp->codes[i].delta;
|
||||
return mp->vlc.table ? get_vlc2(gb, mp->vlc.table, mp->max_codes_bits, 1)
|
||||
: mp->codes[0].delta;
|
||||
}
|
||||
|
||||
static void mp_decode_line(MotionPixelsContext *mp, GetBitContext *gb, int y)
|
||||
@ -322,9 +320,14 @@ static int mp_decode_frame(AVCodecContext *avctx,
|
||||
if (sz == 0)
|
||||
goto end;
|
||||
|
||||
if (mp->codes_count > 1)
|
||||
if (init_vlc(&mp->vlc, mp->max_codes_bits, mp->codes_count, &mp->codes[0].size, sizeof(HuffCode), 1, &mp->codes[0].code, sizeof(HuffCode), 4, 0))
|
||||
goto end;
|
||||
if (mp->codes_count > 1) {
|
||||
ret = ff_init_vlc_sparse(&mp->vlc, mp->max_codes_bits, mp->codes_count,
|
||||
&mp->codes[0].size, sizeof(HuffCode), 1,
|
||||
&mp->codes[0].code, sizeof(HuffCode), 4,
|
||||
&mp->codes[0].delta, sizeof(HuffCode), 1, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
}
|
||||
mp_decode_frame_helper(mp, &gb);
|
||||
ff_free_vlc(&mp->vlc);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user