ffplay单帧播放代码实现
提示:单帧播放的功能和暂停是很像的:
**单帧播放:**每按下一次s键,就播放下一帧图像一次
**暂停播放:**一直播放当前帧,感觉上是停止播放。
一、单帧播放的函数入口
static void step_to_next_frame(VideoState *is)
{
/* if the stream is paused unpause it, then step */
if (is->paused)
stream_toggle_pause(is);
is->step = 1;
}
这个入口函数做2件事情:
1.如果是暂停状态,则进入非暂停状态
2.将step的值赋值为1
二、代码作用处
搜索:is->step = 1 发现4处相关代码
其中与单帧播放的代码如下,就是实现1个操作
1.如果是正常播放状态,进行下一帧播放,立马进入暂停状态:
static void video_refresh(void *opaque, double *remaining_time)里面的这段代码实现:
if (is->step && !is->paused)
stream_toggle_pause(is);
}
总结
最后总结:
单帧播放,是在暂停播放功能上通过一个is->step的flag标识巧妙实现的。