关于linux定时器和Hi3536的VDEC解码
最近做Hi3536的VDEC解码,由于测试需求,需要从磁盘中读视频文件,给到VDEC进行解码。
Hi3536的VDEC解码,有两种播放模式,预览模式和回放模式。
顾名思义,预览模式是实时的,VDEC尽最大努力解码,如果VPSS缓冲满了,VDEC就丢掉后续的解码帧,直道VPSS缓冲有空闲
回放模式不是实时的,根据后端的使用决定,如果后端缓冲满了,VDEC就暂停解码,保证所有帧都能送出去,不丢帧。
使用中,遇到如下一些限制,至今未能搞懂是不是我的使用有问题:
使用回放模式,VDEC的解码帧率可以通过VO来控制,但是VPSS通道不能为user模式,所以VPSS通道无法自定义分辨率,这个不能忍。
使用预览模式,VPSS可以自由设定,但是解码帧率不能用VO来控制。
当使用VDEC的pts控制解码帧率时,播放一段时间后,视频卡顿。
于是想到使用linux的定时器来控制帧率。如需要30fps,那么就定时33ms读取一次视频文件,送给VDEC进行解码。经测试可行。
以下是linux定时器的使用。
1、使用select或usleep,将时间设置为33ms。这样时间会不准确,33ms的定时是准确的,但是定时到后,需要调用发送码流给VDEC的函数,
这就需要额外的时间,所以总体上不精确。
2、使用settimer函数,用这个函数可以达到精确定时的目的,当时间到后,产生闹钟信号,就会调用信号处理函数,在信号处理函数中发送码流给VDEC
但是,这里需要产生闹钟中断信号,其他系统调用会被打断,影响软件运行。
3、使用timer_create函数,这个方法不仅可以达到settimer的精确定时目的,而且不用产生中断信号,不影响其他系统调用的运行。
代码举例如下:( COMM_VDEC_SendStream_timerProc,是发送码流给VDEC的函数)
// 设置定时器
timer_t timerid;
struct sigevent evp;
memset(&evp, 0, sizeof(struct sigevent)); //清零初始化
evp.sigev_value.sival_int = 111; //也是标识定时器的,这和timerid有什么区别?回调函数可以获得
evp.sigev_notify = SIGEV_THREAD; //线程通知的方式,派驻新线程
evp.sigev_notify_function = COMM_VDEC_SendStream_timerProc; //线程函数地址
if (timer_create(CLOCK_REALTIME, &evp, &timerid) == -1)
{
perror("fail to timer_create");
exit(-1);
}
// 设置定时时间
struct itimerspec it;
it.it_interval.tv_sec = 0;
it.it_interval.tv_nsec = 33333333;
it.it_value.tv_sec = 0;
it.it_value.tv_nsec = 33333333;
// 启动定时器
if (timer_settime(timerid, 0, &it, NULL) == -1)
{
perror("fail to timer_settime");
exit(-1);
}
while(1)
{
pause();
}
原文链接:https://blog.csdn.net/zzw_awen/article/details/75947593
推荐阅读
- 分享
- 举报
-
浏览量:1578次2020-08-03 13:41:44
-
浏览量:2986次2020-08-03 13:44:18
-
浏览量:454次2023-12-16 14:33:01
-
浏览量:1468次2020-08-03 13:39:09
-
浏览量:2354次2024-01-18 15:01:07
-
浏览量:7961次2020-11-24 23:06:59
-
浏览量:3166次2020-06-02 18:50:46
-
浏览量:1239次2022-12-16 12:31:41
-
浏览量:754次2023-11-06 18:27:35
-
浏览量:748次2023-08-04 13:41:07
-
浏览量:993次2024-01-24 18:13:58
-
浏览量:3575次2020-07-27 15:12:15
-
浏览量:2381次2022-01-10 09:00:16
-
2019-06-19 16:48:17
-
2018-06-18 22:47:22
-
浏览量:4947次2020-11-30 09:50:53
-
浏览量:6117次2017-12-12 21:37:12
-
浏览量:5767次2018-04-03 09:53:34
-
浏览量:2898次2018-04-03 09:48:45
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
哗啦啦~
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明