mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/cllc: Improve creating VLCs
One can offload the computation of the codes to ff_init_vlc_from_lengths(); this also improves performance: The number of decicycles for one call to read_code_table() decreased from 198343 to 148338 with the sample sample-cllc-rgb.avi from the FATE suite; it has been looped 100 times and the test repeated ten times to test it sufficiently often. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
4df5144102
commit
09062eece2
|
@ -46,11 +46,9 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
|
||||||
{
|
{
|
||||||
uint8_t symbols[256];
|
uint8_t symbols[256];
|
||||||
uint8_t bits[256];
|
uint8_t bits[256];
|
||||||
uint16_t codes[256];
|
int num_lens, num_codes, num_codes_sum;
|
||||||
int num_lens, num_codes, num_codes_sum, prefix;
|
|
||||||
int i, j, count;
|
int i, j, count;
|
||||||
|
|
||||||
prefix = 0;
|
|
||||||
count = 0;
|
count = 0;
|
||||||
num_codes_sum = 0;
|
num_codes_sum = 0;
|
||||||
|
|
||||||
|
@ -74,19 +72,13 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
|
||||||
for (j = 0; j < num_codes; j++) {
|
for (j = 0; j < num_codes; j++) {
|
||||||
symbols[count] = get_bits(gb, 8);
|
symbols[count] = get_bits(gb, 8);
|
||||||
bits[count] = i + 1;
|
bits[count] = i + 1;
|
||||||
codes[count] = prefix++;
|
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (prefix > (65535 - 256)/2) {
|
|
||||||
return AVERROR_INVALIDDATA;
|
|
||||||
}
|
|
||||||
|
|
||||||
prefix <<= 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ff_init_vlc_sparse(vlc, VLC_BITS, count, bits, 1, 1,
|
return ff_init_vlc_from_lengths(vlc, VLC_BITS, count, bits, 1,
|
||||||
codes, 2, 2, symbols, 1, 1, 0);
|
symbols, 1, 1, 0, 0, ctx->avctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue