[FFmpeg-cvslog] lavfi: add ff_inlink_process_commands().

Nicolas George git at videolan.org
Thu Jan 12 15:15:31 EET 2017


ffmpeg | branch: master | Nicolas George <george at nsup.org> | Tue Dec 20 16:53:23 2016 +0100| [0e3d2496e2eec1c911b169682067d53ea9a0388c] | committer: Nicolas George

lavfi: add ff_inlink_process_commands().

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0e3d2496e2eec1c911b169682067d53ea9a0388c
---

 libavfilter/avfilter.c | 25 ++++++++++++++++---------
 libavfilter/filters.h  |  7 +++++++
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 590ffa8..1699df8 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -1100,7 +1100,6 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
     AVFilterContext *dstctx = link->dst;
     AVFilterPad *dst = link->dstpad;
     int ret;
-    AVFilterCommand *cmd= link->dst->command_queue;
     int64_t pts;
 
     if (!(filter_frame = dst->filter_frame))
@@ -1112,14 +1111,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
             goto fail;
     }
 
-    while(cmd && cmd->time <= frame->pts * av_q2d(link->time_base)){
-        av_log(link->dst, AV_LOG_DEBUG,
-               "Processing command time:%f command:%s arg:%s\n",
-               cmd->time, cmd->command, cmd->arg);
-        avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);
-        ff_command_queue_pop(link->dst);
-        cmd= link->dst->command_queue;
-    }
+    ff_inlink_process_commands(link, frame);
 
     pts = frame->pts;
     if (dstctx->enable_str) {
@@ -1568,6 +1560,21 @@ int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)
     return 0;
 }
 
+int ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame)
+{
+    AVFilterCommand *cmd = link->dst->command_queue;
+
+    while(cmd && cmd->time <= frame->pts * av_q2d(link->time_base)){
+        av_log(link->dst, AV_LOG_DEBUG,
+               "Processing command time:%f command:%s arg:%s\n",
+               cmd->time, cmd->command, cmd->arg);
+        avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);
+        ff_command_queue_pop(link->dst);
+        cmd= link->dst->command_queue;
+    }
+    return 0;
+}
+
 const AVClass *avfilter_get_class(void)
 {
     return &avfilter_class;
diff --git a/libavfilter/filters.h b/libavfilter/filters.h
index 3036ba2..7535f1d 100644
--- a/libavfilter/filters.h
+++ b/libavfilter/filters.h
@@ -40,6 +40,13 @@
 void ff_filter_set_ready(AVFilterContext *filter, unsigned priority);
 
 /**
+ * Process the commands queued in the link up to the time of the frame.
+ * Commands will trigger the process_command() callback.
+ * @return  >= 0 or AVERROR code.
+ */
+int ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame);
+
+/**
  * Make sure a frame is writable.
  * This is similar to av_frame_make_writable() except it uses the link's
  * buffer allocation callback, and therefore allows direct rendering.



More information about the ffmpeg-cvslog mailing list