diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-11-30 19:59:07 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-05-02 04:09:18 +0200 |
commit | 5b4aa634f207d765ffc57c49e0177fe8c0f19d3b (patch) | |
tree | 47f24879e6be69218c8dc6e066e75913ae4ebb57 /libavcodec/vqavideo.c | |
parent | c4c077ada5dcd206f99c6c816f6e20861672dd61 (diff) |
avcodec/vqavideo: Cleanup generically on init failure
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/vqavideo.c')
-rw-r--r-- | libavcodec/vqavideo.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/libavcodec/vqavideo.c b/libavcodec/vqavideo.c index f690f7464a..12698dc2e8 100644 --- a/libavcodec/vqavideo.c +++ b/libavcodec/vqavideo.c @@ -171,17 +171,17 @@ static av_cold int vqa_decode_init(AVCodecContext *avctx) s->codebook_size = MAX_CODEBOOK_SIZE; s->codebook = av_malloc(s->codebook_size); if (!s->codebook) - goto fail; + return AVERROR(ENOMEM); s->next_codebook_buffer = av_malloc(s->codebook_size); if (!s->next_codebook_buffer) - goto fail; + return AVERROR(ENOMEM); /* allocate decode buffer */ s->decode_buffer_size = (s->width / s->vector_width) * (s->height / s->vector_height) * 2; s->decode_buffer = av_mallocz(s->decode_buffer_size); if (!s->decode_buffer) - goto fail; + return AVERROR(ENOMEM); /* initialize the solid-color vectors */ if (s->vector_height == 4) { @@ -198,11 +198,6 @@ static av_cold int vqa_decode_init(AVCodecContext *avctx) s->next_codebook_buffer_index = 0; return 0; -fail: - av_freep(&s->codebook); - av_freep(&s->next_codebook_buffer); - av_freep(&s->decode_buffer); - return AVERROR(ENOMEM); } #define CHECK_COUNT() \ @@ -653,5 +648,5 @@ const AVCodec ff_vqa_decoder = { .decode = vqa_decode_frame, .capabilities = AV_CODEC_CAP_DR1, .defaults = vqa_defaults, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; |