]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/video.c
lavfi/field: switch to filter_frame API
[ffmpeg] / libavfilter / video.c
index 4d8804ba10ccde76602afffa95b1202d52b0d674..46c4190a545fdcd053ee87f56b2c677f11845f84 100644 (file)
@@ -210,7 +210,7 @@ static int default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
     if (inlink->dst->nb_outputs)
         outlink = inlink->dst->outputs[0];
 
-    if (outlink) {
+    if (outlink && (inlink->dstpad->start_frame || inlink->dstpad->end_frame || inlink->dstpad->draw_slice)) {
         AVFilterBufferRef *buf_out;
         outlink->out_buf = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
         if (!outlink->out_buf)
@@ -328,7 +328,17 @@ static int default_end_frame(AVFilterLink *inlink)
         outlink = inlink->dst->outputs[0];
 
     if (outlink) {
-        return ff_end_frame(outlink);
+        if (inlink->dstpad->filter_frame) {
+            int ret = inlink->dstpad->filter_frame(inlink, inlink->cur_buf);
+            inlink->cur_buf = NULL;
+            return ret;
+        } else if (inlink->dstpad->start_frame || inlink->dstpad->end_frame || inlink->dstpad->draw_slice){
+            return ff_end_frame(outlink);
+        } else {
+            int ret = ff_filter_frame(outlink, inlink->cur_buf);
+            inlink->cur_buf = NULL;
+            return ret;
+        }
     }
     return 0;
 }
@@ -360,7 +370,7 @@ static int default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
     if (inlink->dst->nb_outputs)
         outlink = inlink->dst->outputs[0];
 
-    if (outlink)
+    if (outlink && (inlink->dstpad->start_frame || inlink->dstpad->end_frame || inlink->dstpad->draw_slice))
         return ff_draw_slice(outlink, y, h, slice_dir);
     return 0;
 }