diff options
Diffstat (limited to 'libavcodec/vble.c')
-rw-r--r-- | libavcodec/vble.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/libavcodec/vble.c b/libavcodec/vble.c index 839af2bfdc..09a9499361 100644 --- a/libavcodec/vble.c +++ b/libavcodec/vble.c @@ -34,8 +34,7 @@ typedef struct { int size; int flags; - uint8_t *len; - uint8_t *val; + uint8_t *val; /* First holds the lengths of vlc symbols and then their values */ } VBLEContext; static uint8_t vble_read_reverse_unary(GetBitContext *gb) @@ -63,23 +62,20 @@ static int vble_unpack(VBLEContext *ctx, GetBitContext *gb) /* Read all the lengths in first */ for (i = 0; i < ctx->size; i++) { - ctx->len[i] = vble_read_reverse_unary(gb); + ctx->val[i] = vble_read_reverse_unary(gb); - if (ctx->len[i] == UINT8_MAX) + if (ctx->val[i] == UINT8_MAX) return -1; } - /* For any values that have length 0 */ - memset(ctx->val, 0, ctx->size); - for (i = 0; i < ctx->size; i++) { /* Check we have enough bits left */ - if (get_bits_left(gb) < ctx->len[i]) + if (get_bits_left(gb) < ctx->val[i]) return -1; /* get_bits can't take a length of 0 */ - if (ctx->len[i]) - ctx->val[i] = (1 << ctx->len[i]) + get_bits(gb, ctx->len[i]) - 1; + if (ctx->val[i]) + ctx->val[i] = (1 << ctx->val[i]) + get_bits(gb, ctx->val[i]) - 1; } return 0; @@ -188,7 +184,6 @@ static av_cold int vble_decode_close(AVCodecContext *avctx) avctx->release_buffer(avctx, pic); av_freep(&avctx->coded_frame); - av_freep(&ctx->len); av_freep(&ctx->val); return 0; @@ -214,14 +209,6 @@ static av_cold int vble_decode_init(AVCodecContext *avctx) ctx->size = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height); - ctx->len = av_malloc(ctx->size * sizeof(*ctx->len)); - - if (!ctx->len) { - av_log(avctx, AV_LOG_ERROR, "Could not allocate lengths buffer.\n"); - vble_decode_close(avctx); - return AVERROR(ENOMEM); - } - ctx->val = av_malloc(ctx->size * sizeof(*ctx->val)); if (!ctx->val) { |