]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/yadif_common.c
avfilter/vf_ssim: remove unnecessary check
[ffmpeg] / libavfilter / yadif_common.c
index 19e8ac5281923c4b86bef1dfd72bb6a6fac49973..a10cf7a17fd8a6efe1844940092e1cee01f3de71 100644 (file)
@@ -44,6 +44,8 @@ static int return_frame(AVFilterContext *ctx, int is_second)
 
         av_frame_copy_props(yadif->out, yadif->cur);
         yadif->out->interlaced_frame = 0;
+        if (yadif->current_field == YADIF_FIELD_BACK_END)
+            yadif->current_field = YADIF_FIELD_END;
     }
 
     yadif->filter(ctx, yadif->out, tff ^ !is_second, tff);
@@ -103,9 +105,12 @@ int ff_yadif_filter_frame(AVFilterLink *link, AVFrame *frame)
     yadif->cur  = yadif->next;
     yadif->next = frame;
 
-    if (!yadif->cur &&
-        !(yadif->cur = av_frame_clone(yadif->next)))
-        return AVERROR(ENOMEM);
+    if (!yadif->cur) {
+        yadif->cur = av_frame_clone(yadif->next);
+        if (!yadif->cur)
+            return AVERROR(ENOMEM);
+        yadif->current_field = YADIF_FIELD_END;
+    }
 
     if (checkstride(yadif, yadif->next, yadif->cur)) {
         av_log(ctx, AV_LOG_VERBOSE, "Reallocating frame due to differing stride\n");
@@ -173,6 +178,7 @@ int ff_yadif_request_frame(AVFilterLink *link)
         if (!next)
             return AVERROR(ENOMEM);
 
+        yadif->current_field = YADIF_FIELD_BACK_END;
         next->pts = yadif->next->pts * 2 - yadif->cur->pts;
 
         ff_yadif_filter_frame(ctx->inputs[0], next);