}
zc->previous_frame = av_frame_alloc();
- if (!zc->previous_frame) {
- zerocodec_decode_close(avctx);
+ if (!zc->previous_frame)
return AVERROR(ENOMEM);
- }
return 0;
}
-AVCodec ff_zerocodec_decoder = {
+static void zerocodec_decode_flush(AVCodecContext *avctx)
+{
+ ZeroCodecContext *zc = avctx->priv_data;
+
+ av_frame_unref(zc->previous_frame);
+}
+
+const AVCodec ff_zerocodec_decoder = {
.type = AVMEDIA_TYPE_VIDEO,
.name = "zerocodec",
.long_name = NULL_IF_CONFIG_SMALL("ZeroCodec Lossless Video"),
.priv_data_size = sizeof(ZeroCodecContext),
.init = zerocodec_decode_init,
.decode = zerocodec_decode_frame,
+ .flush = zerocodec_decode_flush,
.close = zerocodec_decode_close,
.capabilities = AV_CODEC_CAP_DR1,
- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
+ FF_CODEC_CAP_INIT_CLEANUP,
};