最近在ubuntu 12.04 上做了一个基于SDL 1.3版本的多路视频按策略显示的程序,最早是想通过寻找到某种规律来通过程序内部自己来决议显示策略,后来发现,还是使用配置文件比较好。这个项目接触到的新东西不太多,最关键的几个点:
1. 串口读写
打开设备,配置参数,write/read,需要注意的是,串口读写不能简单的只调用一次read或者write,要判断返回值,确保读写内容完整。
2. ffmpeg解码+SDL显示(全屏和分屏切换)
解码+显示在多线程的时候特别占CPU,SDL的多线程分屏,只需要在不同的线程中创建各自的Overlay即可,ffmpeg的解码在解I(DR)帧时,需要sps+pps+I(DR)帧。SDL 2.0出来了,从官方文档来看,基本已经放弃1.2和1.3版本了,很想升级,但是由于2.0的API已经大不一样,而又是个赶时间的项目,所以暂时还是没改动。
3. 共享内存+信号量
共享内存+信号量的使用,几乎已是标配了,而且man的内容就已经很丰富了,这里就不谈了。
整个项目使用了4个线程作为数据源,5个线程作为解码显示,1个线程做串口通信
由于开发机CPU性能不够,只好装了块GT630,结果为了解决ubuntu如何安装NVIDIA显卡驱动,花了我1/3的时间,最终显卡装好了,但是SDL显示依然使用X11,囧,不过听说X11会自动调用显卡驱动,虽然我没有体会到。。。ubuntu安装nvdia显卡,需要在“可读写”的恢复模式下进行,在grub界面,使用ctrl+e,将恢复模式中的“ro” 改成“rw”后,再使用root进入控制台,运行安装,和网上其他人说的太不一样了。。。