aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/crystalhd.c
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2011-06-12 20:21:28 -0700
committerPhilip Langdale <philipl@overt.org>2011-06-13 22:25:09 -0700
commit7d2714d1abb432575e667870e0248e2ee77ed9a4 (patch)
treea00a2c804b4de234c767aa8745178aa135d1e58f /libavcodec/crystalhd.c
parent173cd695cbb79a50a0738ce7bcc966cb40f4a28a (diff)
downloadffmpeg-7d2714d1abb432575e667870e0248e2ee77ed9a4.tar.gz
CrystalHD: Keep mp4toannexb filter around for entire decoder lifetime.
In preparation for using the filter on the actual bitstream, we need to extend it's lifetime to match that of the decoder. Signed-off-by: Philip Langdale <philipl@overt.org>
Diffstat (limited to 'libavcodec/crystalhd.c')
-rw-r--r--libavcodec/crystalhd.c12
1 files changed, 7 insertions, 5 deletions
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;