Linux上位机开发实践(MPP平台的核心构成)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
芯片行业是一个赢者通吃的行业。也就是说细分领域的前两名,相比较后来者而言,拥有很多无可比拟的优势。以安防市场的soc来说,曾经的某思基本上主导了国内安防soc的半壁江山。只是后来因为制裁的原因,让渡出来的市场,迅速被后来者占领。这些后来者为了兼容之前开发者的习惯,也快速复制了某思的软件开发模式,mpp就是其中的一个环节。
所谓的mpp,就是media process platform的意思,有的厂家叫其它名字,比如media development platform,或者叫smart video platform,其实都是差不多的意思。mpp平台是对video、audio、isp、encode、decode、npu做了一层封装,用户可以在用户层快速处理音视频,而不用知道实现的细节,大大降低了软件开发的成本。本身这些sdk,很多都是算法硬加速的部分,即使用在工业、医疗项目,也是非常合适的。
1、mpp的组成
mpp本身是对底层硬件加速的封装。这些硬件加速驱动是闭源的,厂家不提供源代码。mpp也一样,厂家只提供h、.a、.so文件。用户一般通过文档和demo去熟悉和了解。mpp是独立于uboot、kernel和rootfs的,属于应用层的范畴。底层驱动则是正常的ko文件形式。
2、视频输入
广义的视频输入包括好几个方面,例如mipi camera输入、usb camera输入、rtsp图像输入、文件输入等等。这些部分一般都可以通过demo code找到对应的使用方式。
3、视频输出
视频输出,就是把处理好的图像送出去显示,一般有mipi lcd、lvds lcd、bt1120输出、hdmi输出等等。其中soc本身未必支持hdmi,有时候需要通过mipi或者bt1120转一下,这方面有专门的芯片。有了视频输出api,我们就不再需要单独处理/dev/fb0节点了。
4、isp处理
所谓的isp处理,就是soc从mipi csi拿到图像之后,需要通过isp对图像进行处理下。经典的3a算法,即awb、ae、af就是isp处理的内容。当然,isp的处理不仅仅是这些。为了对这些sensor做tuning,除了基本的sensor驱动之外,soc厂家一般还会提供isp tuning工具,供用户调优处理。
5、视频编解码
传统的软件也可以对图像进行编解码处理。但是纯软件的图像编解码,速度比较慢,用硬件来做加速,则又好又快。低端的soc一般只是支持低分辨率的h264编解码,高端一点的soc则支持h265编解码。当然,除了视频之外,很多soc还支持图像jpg的编解码。
6、音频输入、输出
作为多媒体处理的另一个环节,音频的输入、输出也很重要。只是和视频相比较,音频数据量少,难度没有视频那么大,一般就是稍微提一下。
7、音频编解码
和视频一样,音频也需要进行编解码处理。这中间,如果涉及到多媒体的保存、网络传送,就会涉及到音视频的同步,处理的时候注意下即可。另外,对于多媒体来说,ffmpeg是标配,但是用好ffmpeg的前提,是需要把soc上面对应音视频的编解码api,和对应的ffmpeg接口做一个适配。这样开发出来的软件,才能又快又好地去执行。
8、NPU的使用
随着AI的流行,很多地soc都开始集成npu。为了用好这些npu,厂家也会提供一些model供用户使用,只不过一些model是收费的。除此之外,用户也可以自己训练model,最后通过厂家提供的翻译工具,把这些自己训练的model部署到npu上面。
9、模块直连、数据0拷贝
上面这些sdk里面的模块,一般的多媒体soc都会提供。另外一个比较有特色的地方,就是这些model,可以通过link的方式,直接进行关联处理。简单来说,用户通过进行模块关联,就可以让数据快速地在这些模块之间流动。一方面,简化了客户开发的流程;另外一方面,数据不需要模块之间来回copy和发送,减少拷贝次数,大大提供了数据处理速度,因为底层就实现了数据之间的快速处理。
10、proc调试
有开发就有调试。实际调试的时候,大部分调试都是放在/proc下面进行的。比如cat /proc/mpp/vi确认数据进来了没;cat /proc/mpp/venc确认编码有没有启动;cat /proc/mpp/vo确认有没有收到isp送过来的数据等等。大家如果多用几个厂家的soc,就会对调试有更加深刻的印象。
目前不管是安防,还是智慧出行,或者是消费类的soc,音视频领域的芯片竞争非常激烈。除了大家知道的某思、某芯微和某志,还有不是那么出名的soc公司也在做,比如某智、某正、某宸,某瀚,某科微等等。所以,把这些成熟的ipcam soc拿过来,换一个领域使用,无论是在成本上,还是在功能上都是非常合适的。对于我们来说,没有必要把视线都放在ti、nxp、nvidia、samsung这些国际大厂,一方面是成本未必能降下来,二是售后服务这块远没有国内好。