From 4051ae7617f450e604ee951eb8e362bbf9f05211 Mon Sep 17 00:00:00 2001 From: Thilo Borgmann Date: Mon, 8 Nov 2010 15:22:15 +0000 Subject: Allow clean initialization of lut_status array by changing type to signed int. Originally committed as revision 25710 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/bgmc.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'libavcodec/bgmc.c') diff --git a/libavcodec/bgmc.c b/libavcodec/bgmc.c index ffe3cea4a6..b9041d080e 100644 --- a/libavcodec/bgmc.c +++ b/libavcodec/bgmc.c @@ -426,8 +426,8 @@ static const uint16_t * const cf_table[16] = { /** Initialize a given lookup table using a given delta */ -static void bgmc_lut_fillp(uint8_t *lut, unsigned int *lut_status, - unsigned int delta) +static void bgmc_lut_fillp(uint8_t *lut, int *lut_status, + int delta) { unsigned int sx, i; @@ -448,8 +448,8 @@ static void bgmc_lut_fillp(uint8_t *lut, unsigned int *lut_status, /** Retune the index of a suitable lookup table for a given delta */ -static uint8_t* bgmc_lut_getp(uint8_t *lut, unsigned int *lut_status, - unsigned int delta) +static uint8_t* bgmc_lut_getp(uint8_t *lut, int *lut_status, + int delta) { unsigned int i = av_clip(delta, 0, LUT_BUFF - 1); @@ -464,7 +464,7 @@ static uint8_t* bgmc_lut_getp(uint8_t *lut, unsigned int *lut_status, /** Initialize the lookup table arrays */ -int ff_bgmc_init(AVCodecContext *avctx, uint8_t **cf_lut, unsigned int **cf_lut_status) +int ff_bgmc_init(AVCodecContext *avctx, uint8_t **cf_lut, int **cf_lut_status) { *cf_lut = av_malloc(sizeof(*cf_lut ) * LUT_BUFF * 16 * LUT_SIZE); *cf_lut_status = av_malloc(sizeof(*cf_lut_status) * LUT_BUFF); @@ -473,6 +473,9 @@ int ff_bgmc_init(AVCodecContext *avctx, uint8_t **cf_lut, unsigned int **cf_lut_ ff_bgmc_end(cf_lut, cf_lut_status); av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n"); return AVERROR(ENOMEM); + } else { + // initialize lut_status buffer to a value never used to compare against + memset(*cf_lut_status, -1, sizeof(*cf_lut_status) * LUT_BUFF); } return 0; @@ -481,7 +484,7 @@ int ff_bgmc_init(AVCodecContext *avctx, uint8_t **cf_lut, unsigned int **cf_lut_ /** Release the lookup table arrays */ -void ff_bgmc_end(uint8_t **cf_lut, unsigned int **cf_lut_status) +void ff_bgmc_end(uint8_t **cf_lut, int **cf_lut_status) { av_freep(cf_lut); av_freep(cf_lut_status); @@ -510,9 +513,9 @@ void ff_bgmc_decode_end(GetBitContext *gb) /** Read and decode a block Gilbert-Moore coded symbol */ void ff_bgmc_decode(GetBitContext *gb, unsigned int num, int32_t *dst, - unsigned int delta, unsigned int sx, + int delta, unsigned int sx, unsigned int *h, unsigned int *l, unsigned int *v, - uint8_t *cf_lut, unsigned int *cf_lut_status) + uint8_t *cf_lut, int *cf_lut_status) { unsigned int i; uint8_t *lut = bgmc_lut_getp(cf_lut, cf_lut_status, delta); -- cgit v1.2.3