mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/cllc: Don't unnecessarily free VLC
The Canopus Lossless decoder uses several VLCs and if initializing the ith VLC fails, all the VLCs 0..i have been freed; the ith VLC's table is initialized to NULL for this purpose. Yet it is totally unnecessary to free the ith VLC table at all: ff_init_vlc_sparse() cleans up after itself on error and if an error happens before ff_init_vlc_sparse(), the ith VLC hasn't been touched yet and doesn't need freeing. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
1d658e65ab
commit
c72a29df6b
@ -57,8 +57,6 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
|
||||
num_lens = get_bits(gb, 5);
|
||||
|
||||
if (num_lens > VLC_BITS * VLC_DEPTH) {
|
||||
vlc->table = NULL;
|
||||
|
||||
av_log(ctx->avctx, AV_LOG_ERROR, "To long VLCs %d\n", num_lens);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
@ -68,8 +66,6 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
|
||||
num_codes_sum += num_codes;
|
||||
|
||||
if (num_codes_sum > 256) {
|
||||
vlc->table = NULL;
|
||||
|
||||
av_log(ctx->avctx, AV_LOG_ERROR,
|
||||
"Too many VLCs (%d) to be read.\n", num_codes_sum);
|
||||
return AVERROR_INVALIDDATA;
|
||||
@ -83,7 +79,6 @@ static int read_code_table(CLLCContext *ctx, GetBitContext *gb, VLC *vlc)
|
||||
count++;
|
||||
}
|
||||
if (prefix > (65535 - 256)/2) {
|
||||
vlc->table = NULL;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
@ -247,7 +242,7 @@ static int decode_argb_frame(CLLCContext *ctx, GetBitContext *gb, AVFrame *pic)
|
||||
for (i = 0; i < 4; i++) {
|
||||
ret = read_code_table(ctx, gb, &vlc[i]);
|
||||
if (ret < 0) {
|
||||
for (j = 0; j <= i; j++)
|
||||
for (j = 0; j < i; j++)
|
||||
ff_free_vlc(&vlc[j]);
|
||||
|
||||
av_log(ctx->avctx, AV_LOG_ERROR,
|
||||
@ -290,7 +285,7 @@ static int decode_rgb24_frame(CLLCContext *ctx, GetBitContext *gb, AVFrame *pic)
|
||||
for (i = 0; i < 3; i++) {
|
||||
ret = read_code_table(ctx, gb, &vlc[i]);
|
||||
if (ret < 0) {
|
||||
for (j = 0; j <= i; j++)
|
||||
for (j = 0; j < i; j++)
|
||||
ff_free_vlc(&vlc[j]);
|
||||
|
||||
av_log(ctx->avctx, AV_LOG_ERROR,
|
||||
@ -343,7 +338,7 @@ static int decode_yuv_frame(CLLCContext *ctx, GetBitContext *gb, AVFrame *pic)
|
||||
for (i = 0; i < 2; i++) {
|
||||
ret = read_code_table(ctx, gb, &vlc[i]);
|
||||
if (ret < 0) {
|
||||
for (j = 0; j <= i; j++)
|
||||
for (j = 0; j < i; j++)
|
||||
ff_free_vlc(&vlc[j]);
|
||||
|
||||
av_log(ctx->avctx, AV_LOG_ERROR,
|
||||
|
Loading…
Reference in New Issue
Block a user