Ipu 与多显——yocto跟android下的简介

来源:互联网 发布:单片机管脚图 编辑:程序博客网 时间:2024/06/03 16:40

注:由于跟平台相关,所以一些内容不会说得太直白,跳步比较多。

至今,cpu里面使用到ipu的厂家不多,目前freescale是其中一家。所以,以下的分析是基于freescale平台的ipu情况的基本讲解。

IPU是什么?IPU是显卡中的CPU,GPU的一种,由英伟达首先提出,以减少CPU的开销。最初由英伟达提出。目前实现IPU的厂家不多,freescale就是其中之一。接下来是freescale官方资料里面对IPU在显示里面所处的角色的描述。


如上图,ipu,gpu,vpu之间的关系。

其中VPU负责对视频流进行处理(通过vpu,能实现多路视频流的处理),然后通过GPU做渲染加速,最终输出到ipu显示到屏幕上。所以简单来说,ipu是用来显示的。

上文说到,ipu是gpu中的cpu,那么想当然ipu也存在多核的情况。实际上也是这样的,我们假设存在着两个ipu,分别是ipu0和ipu1。在ipu里面,一个ipu对应两个DI(display interface)。而一个DI对于两个fb(这是平台的特殊性,既然有两个fb,那么可以猜想到这个平台一个屏幕里面是分为前屏,和后屏)。那么按照这样的猜想,我们得知:如果有两个ipu的话,理论上能有8个fb,按照一个屏有两个fb的话,那么可以支持4路的显示。这也是官方给出的支持4路独立显示的数据,不过实际上fb的数量只能注册到6路,到底是为什么?下文会说到。


如上图,是ipu与fb的对于情况。还有补充一点,官方说法是4路显示,但实际中很难实现,有兴趣的话可以去研究一下。

Ipu在dts里面的描述:

当注册fb的时候,驱动会去dts里面寻找关于fb的描述:



在ipu驱动的注册阶段,ipu驱动会根据dts里面不同屏幕的描述去获取fb的排号,把fb关联到相应的ipu_id上去,其中fb0 是系统默认的主屏幕。


在注册驱动的时候绑定ipu_id


其中,注册ipu前会对ipu的使用情况进行检查,我们看到probe函数里面:


这段代码,也是解释了上面说到的为什么fb的数量只能注册到6个。

好,接下来我们看看在文件系统里面的情况。

但系统起来后,假设我们设置了相关显示的环境变量:video0:ldb  , video1:Hdmi,video2:lcd

那么会有以下的对于关系:

Ldb   fb0 , fb1Hdmi  fb2Lcd  fb3 , fb4

同样的,我们可以看到 /dev/video下对于的video节点数:

ls /dev/videovideo16  video17  video18  video19  video20

对于前屏和后屏,开启关闭动作可以通过blank来操作:

如:

# echo 0 > /sys/class/graphic/fb1/blank

我们就可以看到fb1开启。

在yocto上的操作:

Freescale Yocto上有集成gst的框架,还有各种各样的插件。我们可以参考freescale上给出的参考,在不同屏幕上播放视频:

gst-launch playbin2 uri=file:///$file1 video-sink="mfw_v4lsink device=$VIDEO_DEVICE1 disp-width=$width disp-height=$height" &gst-launch playbin2 uri=file:///$file2 video-sink="mfw_v4lsink device=$VIDEO_DEVICE2 disp-width=$width disp-height=$height"    

当然,在yocto的系统上,还可以通过配置文件来指定输出等等,有兴趣的话可以自行研究一下。

接下来我们看看在android下是如何处理多显的。

在android下,linux层面上大同小异,但在android层面上异显的方式更加灵活,因为在framework下有成熟的api。不多说,看看以下用法。

更android使用异显api的详细情况可以查看freescale的community参考例程。







0 0
原创粉丝点击