1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00

lavfi: add ff_inlink_process_commands().

This commit is contained in:
Nicolas George 2016-12-20 16:53:23 +01:00
parent 846f142134
commit 0e3d2496e2
2 changed files with 23 additions and 9 deletions

View File

@ -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;

View File

@ -39,6 +39,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