@ -124,6 +124,7 @@ typedef struct {
AVFrame pic ;
HANDLE dev ;
AVBitStreamFilterContext * bsfc ;
AVCodecParserContext * parser ;
uint8_t is_70012 ;
@ -338,6 +339,9 @@ static av_cold int uninit(AVCodecContext *avctx)
DtsDeviceClose ( device ) ;
av_parser_close ( priv - > parser ) ;
if ( priv - > bsfc ) {
av_bitstream_filter_close ( priv - > bsfc ) ;
}
av_free ( priv - > sps_pps_buf ) ;
@ -397,7 +401,6 @@ static av_cold int init(AVCodecContext *avctx)
{
uint8_t * dummy_p ;
int dummy_int ;
AVBitStreamFilterContext * bsfc ;
uint32_t orig_data_size = avctx - > extradata_size ;
uint8_t * orig_data = av_malloc ( orig_data_size ) ;
@ -409,16 +412,15 @@ static av_cold int init(AVCodecContext *avctx)
memcpy ( orig_data , avctx - > extradata , orig_data_size ) ;
bsfc = av_bitstream_filter_init ( " h264_mp4toannexb " ) ;
if ( ! bsfc ) {
priv - > bsfc = av_bitstream_filter_init ( " h264_mp4toannexb " ) ;
if ( ! priv - > bsfc ) {
av_log ( avctx , AV_LOG_ERROR ,
" Cannot open the h264_mp4toannexb BSF! \n " ) ;
av_free ( orig_data ) ;
return AVERROR_BSF_NOT_FOUND ;
}
av_bitstream_filter_filter ( bsfc , avctx , NULL , & dummy_p ,
av_bitstream_filter_filter ( priv - > bsfc , avctx , NULL , & dummy_p ,
& dummy_int , NULL , 0 , 0 ) ;
av_bitstream_filter_close ( bsfc ) ;
priv - > sps_pps_buf = avctx - > extradata ;
priv - > sps_pps_size = avctx - > extradata_size ;