diff --git a/libavcodec/crystalhd.c b/libavcodec/crystalhd.c index 3c8021748f..851abd7ddd 100644 --- a/libavcodec/crystalhd.c +++ b/libavcodec/crystalhd.c @@ -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;