[FFmpeg-cvslog] avcodec/cllc: Don't unnecessarily free VLC
Andreas Rheinhardt
git at videolan.org
Thu Oct 29 16:20:26 EET 2020
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Sat Oct 24 18:05:34 2020 +0200| [c72a29df6b4ec2858575bd8b6c3874784209c7b2] | committer: Andreas Rheinhardt
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 at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c72a29df6b4ec2858575bd8b6c3874784209c7b2
---
libavcodec/cllc.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
index 1f2c98ef73..8b1bc75faa 100644
--- a/libavcodec/cllc.c
+++ b/libavcodec/cllc.c
@@ -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,
More information about the ffmpeg-cvslog
mailing list