|
|
@@ -272,8 +272,8 @@ static int cllc_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
CLLCContext *ctx = avctx->priv_data; |
|
|
|
AVFrame *pic = avctx->coded_frame; |
|
|
|
uint8_t *src = avpkt->data; |
|
|
|
uint8_t *swapped_buf_new; |
|
|
|
uint32_t info_tag, info_offset; |
|
|
|
int data_size; |
|
|
|
GetBitContext gb; |
|
|
|
int coding_type, ret; |
|
|
|
|
|
|
@@ -282,16 +282,6 @@ static int cllc_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
|
|
|
pic->reference = 0; |
|
|
|
|
|
|
|
/* Make sure our bswap16'd buffer is big enough */ |
|
|
|
swapped_buf_new = av_fast_realloc(ctx->swapped_buf, |
|
|
|
&ctx->swapped_buf_size, avpkt->size + |
|
|
|
FF_INPUT_BUFFER_PADDING_SIZE); |
|
|
|
if (!swapped_buf_new) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Could not realloc swapped buffer.\n"); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
ctx->swapped_buf = swapped_buf_new; |
|
|
|
|
|
|
|
/* Skip the INFO header if present */ |
|
|
|
info_offset = 0; |
|
|
|
info_tag = AV_RL32(src); |
|
|
@@ -310,15 +300,21 @@ static int cllc_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
av_log(avctx, AV_LOG_DEBUG, "Skipping INFO chunk.\n"); |
|
|
|
} |
|
|
|
|
|
|
|
data_size = (avpkt->size - info_offset) & ~1; |
|
|
|
|
|
|
|
/* Make sure our bswap16'd buffer is big enough */ |
|
|
|
av_fast_padded_malloc(&ctx->swapped_buf, |
|
|
|
&ctx->swapped_buf_size, data_size); |
|
|
|
if (!ctx->swapped_buf) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Could not allocate swapped buffer.\n"); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|
|
|
|
/* bswap16 the buffer since CLLC's bitreader works in 16-bit words */ |
|
|
|
ctx->dsp.bswap16_buf((uint16_t *) ctx->swapped_buf, (uint16_t *) src, |
|
|
|
(avpkt->size - info_offset) / 2); |
|
|
|
|
|
|
|
/* Initialize padding to 0 */ |
|
|
|
memset(ctx->swapped_buf + avpkt->size - info_offset, |
|
|
|
0, FF_INPUT_BUFFER_PADDING_SIZE); |
|
|
|
data_size / 2); |
|
|
|
|
|
|
|
init_get_bits(&gb, ctx->swapped_buf, (avpkt->size - info_offset) * 8); |
|
|
|
init_get_bits(&gb, ctx->swapped_buf, data_size * 8); |
|
|
|
|
|
|
|
/* |
|
|
|
* Read in coding type. The types are as follows: |
|
|
|