ffplay单帧播放step_to_next_frame的代码实现分析

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标识巧妙实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值