|
|
|
@ -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); |
|
|
|
|