# HG changeset patch # User kostya # Date 1255498104 0 # Node ID 136334ad62b338b9e03bbea6030f2ce11b056021 # Parent 11b685acd280325fa92d7f1ccc02c16e7b2657f1 Release frame after decoding is done diff -r 11b685acd280 -r 136334ad62b3 indeo2.c --- a/indeo2.c Tue Oct 13 20:48:51 2009 +0000 +++ b/indeo2.c Wed Oct 14 05:28:24 2009 +0000 @@ -213,6 +213,17 @@ return 0; } +static av_cold int ir2_decode_end(AVCodecContext *avctx){ + Ir2Context * const ic = avctx->priv_data; + AVFrame *pic = &ic->picture; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&ic->picture); + + return 0; +} + AVCodec indeo2_decoder = { "indeo2", CODEC_TYPE_VIDEO, @@ -220,7 +231,7 @@ sizeof(Ir2Context), ir2_decode_init, NULL, - NULL, + ir2_decode_end, ir2_decode_frame, CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Intel Indeo 2"), diff -r 11b685acd280 -r 136334ad62b3 loco.c --- a/loco.c Tue Oct 13 20:48:51 2009 +0000 +++ b/loco.c Wed Oct 14 05:28:24 2009 +0000 @@ -275,6 +275,17 @@ return 0; } +static av_cold int decode_end(AVCodecContext *avctx){ + LOCOContext * const l = avctx->priv_data; + AVFrame *pic = &l->pic; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&l->pic); + + return 0; +} + AVCodec loco_decoder = { "loco", CODEC_TYPE_VIDEO, @@ -282,7 +293,7 @@ sizeof(LOCOContext), decode_init, NULL, - NULL, + decode_end, decode_frame, CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("LOCO"), diff -r 11b685acd280 -r 136334ad62b3 qdrw.c --- a/qdrw.c Tue Oct 13 20:48:51 2009 +0000 +++ b/qdrw.c Wed Oct 14 05:28:24 2009 +0000 @@ -140,6 +140,17 @@ return 0; } +static av_cold int decode_end(AVCodecContext *avctx){ + QdrawContext * const a = avctx->priv_data; + AVFrame *pic = &a->pic; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&a->pic); + + return 0; +} + AVCodec qdraw_decoder = { "qdraw", CODEC_TYPE_VIDEO, @@ -147,7 +158,7 @@ sizeof(QdrawContext), decode_init, NULL, - NULL, + decode_end, decode_frame, CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Apple QuickDraw"), diff -r 11b685acd280 -r 136334ad62b3 truemotion2.c --- a/truemotion2.c Tue Oct 13 20:48:51 2009 +0000 +++ b/truemotion2.c Wed Oct 14 05:28:24 2009 +0000 @@ -845,6 +845,7 @@ static av_cold int decode_end(AVCodecContext *avctx){ TM2Context * const l = avctx->priv_data; + AVFrame *pic = &l->pic; int i; if(l->last) @@ -862,6 +863,11 @@ av_free(l->U2); av_free(l->V2); } + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&l->pic); + return 0; } diff -r 11b685acd280 -r 136334ad62b3 ulti.c --- a/ulti.c Tue Oct 13 20:48:51 2009 +0000 +++ b/ulti.c Wed Oct 14 05:28:24 2009 +0000 @@ -55,6 +55,17 @@ return 0; } +static av_cold int ulti_decode_end(AVCodecContext *avctx){ + UltimotionDecodeContext *s = avctx->priv_data; + AVFrame *pic = &s->frame; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&s->frame); + + return 0; +} + static const int block_coords[8] = // 4x4 block coords in 8x8 superblock { 0, 0, 0, 4, 4, 4, 4, 0}; @@ -401,7 +412,7 @@ sizeof(UltimotionDecodeContext), ulti_decode_init, NULL, - NULL, + ulti_decode_end, ulti_decode_frame, CODEC_CAP_DR1, NULL, diff -r 11b685acd280 -r 136334ad62b3 wnv1.c --- a/wnv1.c Tue Oct 13 20:48:51 2009 +0000 +++ b/wnv1.c Wed Oct 14 05:28:24 2009 +0000 @@ -143,6 +143,17 @@ return 0; } +static av_cold int decode_end(AVCodecContext *avctx){ + WNV1Context * const l = avctx->priv_data; + AVFrame *pic = &l->pic; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&l->pic); + + return 0; +} + AVCodec wnv1_decoder = { "wnv1", CODEC_TYPE_VIDEO, @@ -150,7 +161,7 @@ sizeof(WNV1Context), decode_init, NULL, - NULL, + decode_end, decode_frame, CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Winnov WNV1"), diff -r 11b685acd280 -r 136334ad62b3 xl.c --- a/xl.c Tue Oct 13 20:48:51 2009 +0000 +++ b/xl.c Wed Oct 14 05:28:24 2009 +0000 @@ -128,6 +128,17 @@ return 0; } +static av_cold int decode_end(AVCodecContext *avctx){ + VideoXLContext * const a = avctx->priv_data; + AVFrame *pic = &a->pic; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + av_freep(&a->pic); + + return 0; +} + AVCodec xl_decoder = { "xl", CODEC_TYPE_VIDEO, @@ -135,7 +146,7 @@ sizeof(VideoXLContext), decode_init, NULL, - NULL, + decode_end, decode_frame, CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Miro VideoXL"),