@ -1888,12 +1888,14 @@ static av_cold int xma_decode_init(AVCodecContext *avctx)
s - > num_streams = avctx - > extradata [ 1 ] ;
if ( avctx - > extradata_size ! = ( 32 + ( ( avctx - > extradata [ 0 ] = = 3 ) ? 0 : 8 ) + 4 * s - > num_streams ) ) {
av_log ( avctx , AV_LOG_ERROR , " Incorrect XMA2 extradata size \n " ) ;
s - > num_streams = 0 ;
return AVERROR ( EINVAL ) ;
}
} else if ( avctx - > codec_id = = AV_CODEC_ID_XMA1 & & avctx - > extradata_size > = 4 ) { /* XMAWAVEFORMAT */
s - > num_streams = avctx - > extradata [ 4 ] ;
if ( avctx - > extradata_size ! = ( 8 + 20 * s - > num_streams ) ) {
av_log ( avctx , AV_LOG_ERROR , " Incorrect XMA1 extradata size \n " ) ;
s - > num_streams = 0 ;
return AVERROR ( EINVAL ) ;
}
} else {
@ -1906,6 +1908,7 @@ static av_cold int xma_decode_init(AVCodecContext *avctx)
s - > num_streams < = 0
) {
avpriv_request_sample ( avctx , " More than %d channels in %d streams " , XMA_MAX_CHANNELS , s - > num_streams ) ;
s - > num_streams = 0 ;
return AVERROR_PATCHWELCOME ;
}
@ -1938,6 +1941,7 @@ static av_cold int xma_decode_end(AVCodecContext *avctx)
decode_end ( & s - > xma [ i ] ) ;
av_frame_free ( & s - > frames [ i ] ) ;
}
s - > num_streams = 0 ;
return 0 ;
}
@ -1993,6 +1997,7 @@ AVCodec ff_wmapro_decoder = {
. close = wmapro_decode_end ,
. decode = wmapro_decode_packet ,
. capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 ,
. caps_internal = FF_CODEC_CAP_INIT_CLEANUP ,
. flush = wmapro_flush ,
. sample_fmts = ( const enum AVSampleFormat [ ] ) { AV_SAMPLE_FMT_FLTP ,
AV_SAMPLE_FMT_NONE } ,
@ -2008,6 +2013,7 @@ AVCodec ff_xma1_decoder = {
. close = xma_decode_end ,
. decode = xma_decode_packet ,
. capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY ,
. caps_internal = FF_CODEC_CAP_INIT_CLEANUP ,
. sample_fmts = ( const enum AVSampleFormat [ ] ) { AV_SAMPLE_FMT_FLTP ,
AV_SAMPLE_FMT_NONE } ,
} ;
@ -2023,6 +2029,7 @@ AVCodec ff_xma2_decoder = {
. decode = xma_decode_packet ,
. flush = xma_flush ,
. capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY ,
. caps_internal = FF_CODEC_CAP_INIT_CLEANUP ,
. sample_fmts = ( const enum AVSampleFormat [ ] ) { AV_SAMPLE_FMT_FLTP ,
AV_SAMPLE_FMT_NONE } ,
} ;