@ -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 :