avcodec/mobiclip: Reduce size of VLCs, inline constants

The longest motion vector VLC for mobiclip is six bits long, so using
eight bits for the VLC table is wasteful. Furthermore, the length can be
inlined.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
Andreas Rheinhardt 2020-10-24 11:41:37 +02:00
parent 3a836f38f6
commit c4229ad074
1 changed files with 6 additions and 4 deletions

View File

@ -31,6 +31,8 @@
#include "golomb.h"
#include "internal.h"
#define MOBI_MV_VLC_BITS 6
static const uint8_t zigzag4x4_tab[] =
{
0x00, 0x04, 0x01, 0x02, 0x05, 0x08, 0x0C, 0x09, 0x06, 0x03, 0x07, 0x0A,
@ -364,14 +366,14 @@ static av_cold int mobiclip_init(AVCodecContext *avctx)
}
for (int j = 0; j < 16; j++) {
ret = ff_init_vlc_sparse(&s->mv_vlc[0][j], 8, mv_len[j],
ret = ff_init_vlc_sparse(&s->mv_vlc[0][j], MOBI_MV_VLC_BITS, mv_len[j],
mv_bits_mods[j], sizeof(*mv_bits_mods[j]), sizeof(*mv_bits_mods[j]),
mv_codes_mods[j], sizeof(*mv_codes_mods[j]), sizeof(*mv_codes_mods[j]),
mv_syms_mods[j], sizeof(*mv_syms_mods[j]), sizeof(*mv_syms_mods[j]), 0);
if (ret < 0)
return ret;
ret = ff_init_vlc_sparse(&s->mv_vlc[1][j], 8, mv_len[j],
ret = ff_init_vlc_sparse(&s->mv_vlc[1][j], MOBI_MV_VLC_BITS, mv_len[j],
mv_bits[j], sizeof(*mv_bits[j]), sizeof(*mv_bits[j]),
mv_codes[j], sizeof(*mv_codes[j]), sizeof(*mv_codes[j]),
mv_syms[j], sizeof(*mv_syms[j]), sizeof(*mv_syms[j]), 0);
@ -1259,7 +1261,7 @@ static int predict_motion(AVCodecContext *avctx,
int ret, idx2;
idx2 = get_vlc2(gb, s->mv_vlc[s->moflex][tidx].table,
s->mv_vlc[s->moflex][tidx].bits, 1);
MOBI_MV_VLC_BITS, 1);
if (idx2 < 0)
return AVERROR_INVALIDDATA;
@ -1335,7 +1337,7 @@ static int mobiclip_decode(AVCodecContext *avctx, void *data,
motion[x / 16 + 2].y = 0;
idx = get_vlc2(gb, s->mv_vlc[s->moflex][0].table,
s->mv_vlc[s->moflex][0].bits, 1);
MOBI_MV_VLC_BITS, 1);
if (idx < 0)
return AVERROR_INVALIDDATA;