diff mbox

[FFmpeg-devel,1/2] WIP lavfi/framesync2: add dualinput helper function.

Message ID 20170730104810.19068-1-george@nsup.org
State New
Headers show

Commit Message

Nicolas George July 30, 2017, 10:48 a.m. UTC
Signed-off-by: Nicolas George <george@nsup.org>
---
 libavfilter/framesync2.c | 20 ++++++++++++++++++++
 libavfilter/framesync2.h | 14 ++++++++++++++
 2 files changed, 34 insertions(+)


Both patches work in progress. They work, but the code needs to be enhanced,
otherwise the other filters will require boilerplace code.
diff mbox

Patch

diff --git a/libavfilter/framesync2.c b/libavfilter/framesync2.c
index 0e9f6f210c..ed8f913b7d 100644
--- a/libavfilter/framesync2.c
+++ b/libavfilter/framesync2.c
@@ -311,3 +311,23 @@  int ff_framesync2_activate(FFFrameSync *fs)
 
     return 0;
 }
+
+int ff_framesync2_get_dualinput(FFFrameSync *fs, AVFrame **f0, AVFrame **f1)
+{
+    AVFilterContext *ctx = fs->parent;
+    AVFrame *mainpic = NULL, *secondpic = NULL;
+    int ret = 0;
+
+    if ((ret = ff_framesync2_get_frame(fs, 0, &mainpic,   1)) < 0 ||
+        (ret = ff_framesync2_get_frame(fs, 1, &secondpic, 0)) < 0) {
+        av_frame_free(&mainpic);
+        return ret;
+    }
+    av_assert0(mainpic);
+    mainpic->pts = av_rescale_q(fs->pts, fs->time_base, ctx->outputs[0]->time_base);
+    if (ctx->is_disabled)
+        secondpic = NULL;
+    *f0 = mainpic;
+    *f1 = secondpic;
+    return 0;
+}
diff --git a/libavfilter/framesync2.h b/libavfilter/framesync2.h
index 2b37636ebb..07e422b309 100644
--- a/libavfilter/framesync2.h
+++ b/libavfilter/framesync2.h
@@ -245,4 +245,18 @@  int ff_framesync2_get_frame(FFFrameSync *fs, unsigned in, AVFrame **rframe,
  */
 int ff_framesync2_activate(FFFrameSync *fs);
 
+/**
+ * Get dualinput frames.
+ *
+ * Compared to generic framesync, dualinput assumes the first input is the
+ * main one and the filtering is performed on it. The first input will be
+ * the only one with sync set and generic timeline support will just pass it
+ * unchanged when disabled.
+ *
+ * @param f0  used to return the main frame
+ * @param f1  used to return the second frame, or NULL if disabled
+ * @return  >=0 for success or AVERROR code
+ */
+int ff_framesync2_get_dualinput(FFFrameSync *fs, AVFrame **f0, AVFrame **f1);
+
 #endif /* AVFILTER_FRAMESYNC2_H */