]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/zerocodec.c
avcodec: Constify AVCodecs
[ffmpeg] / libavcodec / zerocodec.c
index e67eee4f7d8f0f515ecd921ffed965aaf3ddf46a..3bd04567a1ebdffcd9595ba11809bbb19e02b88d 100644 (file)
@@ -131,15 +131,20 @@ static av_cold int zerocodec_decode_init(AVCodecContext *avctx)
     }
 
     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"),
@@ -147,7 +152,9 @@ AVCodec ff_zerocodec_decoder = {
     .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,
 };