Commit 0e3d2496 authored by Nicolas George's avatar Nicolas George

lavfi: add ff_inlink_process_commands().

parent 846f1421
...@@ -1100,7 +1100,6 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame) ...@@ -1100,7 +1100,6 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
AVFilterContext *dstctx = link->dst; AVFilterContext *dstctx = link->dst;
AVFilterPad *dst = link->dstpad; AVFilterPad *dst = link->dstpad;
int ret; int ret;
AVFilterCommand *cmd= link->dst->command_queue;
int64_t pts; int64_t pts;
if (!(filter_frame = dst->filter_frame)) if (!(filter_frame = dst->filter_frame))
...@@ -1112,14 +1111,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame) ...@@ -1112,14 +1111,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
goto fail; goto fail;
} }
while(cmd && cmd->time <= frame->pts * av_q2d(link->time_base)){ ff_inlink_process_commands(link, frame);
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;
}
pts = frame->pts; pts = frame->pts;
if (dstctx->enable_str) { if (dstctx->enable_str) {
...@@ -1568,6 +1560,21 @@ int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe) ...@@ -1568,6 +1560,21 @@ int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe)
return 0; 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) const AVClass *avfilter_get_class(void)
{ {
return &avfilter_class; return &avfilter_class;
......
...@@ -39,6 +39,13 @@ ...@@ -39,6 +39,13 @@
*/ */
void ff_filter_set_ready(AVFilterContext *filter, unsigned priority); 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. * Make sure a frame is writable.
* This is similar to av_frame_make_writable() except it uses the link's * This is similar to av_frame_make_writable() except it uses the link's
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment