avcodec/cfhd, cfhddata: Free VLC as soon as it is not needed

The VLC is only used to initialize RL VLC.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-09-03 18:02:17 +02:00
parent 320c36d9c7
commit 9e9c99366a
3 changed files with 10 additions and 14 deletions

View File

@ -1404,9 +1404,6 @@ static av_cold int cfhd_close(AVCodecContext *avctx)
free_buffers(s);
ff_free_vlc(&s->vlc_9);
ff_free_vlc(&s->vlc_18);
return 0;
}

View File

@ -26,7 +26,6 @@
#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "vlc.h"
#include "cfhddsp.h"
enum CFHDParam {
@ -141,10 +140,7 @@ typedef struct CFHDContext {
AVCodecContext *avctx;
CFHD_RL_VLC_ELEM table_9_rl_vlc[2088];
VLC vlc_9;
CFHD_RL_VLC_ELEM table_18_rl_vlc[4572];
VLC vlc_18;
int lut[2][256];

View File

@ -23,6 +23,7 @@
#include "libavutil/attributes.h"
#include "cfhd.h"
#include "vlc.h"
#define NB_VLC_TABLE_9 (71 + 3)
#define NB_VLC_TABLE_18 (263 + 1)
@ -126,11 +127,12 @@ static const CFHD_RL_ELEM table_18_vlc[NB_VLC_TABLE_18] = {
static av_cold int cfhd_init_vlc(CFHD_RL_VLC_ELEM out[], unsigned out_size,
const CFHD_RL_ELEM table_vlc[], unsigned table_size,
VLC *vlc, void *logctx)
void *logctx)
{
uint8_t new_cfhd_vlc_len[NB_VLC_TABLE_18 * 2];
uint16_t new_cfhd_vlc_run[NB_VLC_TABLE_18 * 2];
int16_t new_cfhd_vlc_level[NB_VLC_TABLE_18 * 2];
VLC vlc;
unsigned j;
int ret;
@ -151,15 +153,15 @@ static av_cold int cfhd_init_vlc(CFHD_RL_VLC_ELEM out[], unsigned out_size,
}
}
ret = ff_init_vlc_from_lengths(vlc, VLC_BITS, j, new_cfhd_vlc_len,
ret = ff_init_vlc_from_lengths(&vlc, VLC_BITS, j, new_cfhd_vlc_len,
1, NULL, 0, 0, 0, 0, logctx);
if (ret < 0)
return ret;
av_assert0(vlc->table_size == out_size);
av_assert0(vlc.table_size == out_size);
for (unsigned i = 0; i < out_size; i++) {
int code = vlc->table[i].sym;
int len = vlc->table[i].len;
int code = vlc.table[i].sym;
int len = vlc.table[i].len;
int level, run;
if (len < 0) { // more bits needed
@ -173,6 +175,7 @@ static av_cold int cfhd_init_vlc(CFHD_RL_VLC_ELEM out[], unsigned out_size,
out[i].level = level;
out[i].run = run;
}
ff_free_vlc(&vlc);
return 0;
}
@ -184,13 +187,13 @@ av_cold int ff_cfhd_init_vlcs(CFHDContext *s)
/* Table 9 */
ret = cfhd_init_vlc(s->table_9_rl_vlc, FF_ARRAY_ELEMS(s->table_9_rl_vlc),
table_9_vlc, FF_ARRAY_ELEMS(table_9_vlc),
&s->vlc_9, s->avctx);
s->avctx);
if (ret < 0)
return ret;
/* Table 18 */
ret = cfhd_init_vlc(s->table_18_rl_vlc, FF_ARRAY_ELEMS(s->table_18_rl_vlc),
table_18_vlc, FF_ARRAY_ELEMS(table_18_vlc),
&s->vlc_18, s->avctx);
s->avctx);
if (ret < 0)
return ret;
return 0;