@ -1174,6 +1174,15 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
return samplecount * bpp ;
}
static void wavpack_decode_flush ( AVCodecContext * avctx )
{
WavpackContext * s = avctx - > priv_data ;
int i ;
for ( i = 0 ; i < s - > fdec_num ; i + + )
wv_reset_saved_context ( s - > fdec [ i ] ) ;
}
static int wavpack_decode_frame ( AVCodecContext * avctx ,
void * data , int * data_size ,
AVPacket * avpkt )
@ -1206,11 +1215,14 @@ static int wavpack_decode_frame(AVCodecContext *avctx,
if ( frame_size < 0 | | frame_size > buf_size ) {
av_log ( avctx , AV_LOG_ERROR , " Block %d has invalid size (size %d vs. %d bytes left) \n " ,
s - > block , frame_size , buf_size ) ;
wavpack_decode_flush ( avctx ) ;
return - 1 ;
}
if ( ( samplecount = wavpack_decode_block ( avctx , s - > block , data ,
data_size , buf , frame_size ) ) < 0 )
data_size , buf , frame_size ) ) < 0 ) {
wavpack_decode_flush ( avctx ) ;
return - 1 ;
}
s - > block + + ;
buf + = frame_size ; buf_size - = frame_size ;
}
@ -1219,15 +1231,6 @@ static int wavpack_decode_frame(AVCodecContext *avctx,
return s - > samples_left > 0 ? 0 : avpkt - > size ;
}
static void wavpack_decode_flush ( AVCodecContext * avctx )
{
WavpackContext * s = avctx - > priv_data ;
int i ;
for ( i = 0 ; i < s - > fdec_num ; i + + )
wv_reset_saved_context ( s - > fdec [ i ] ) ;
}
AVCodec ff_wavpack_decoder = {
. name = " wavpack " ,
. type = AVMEDIA_TYPE_AUDIO ,