-----------------------------------------------------------------------
本文系本站原创,欢迎转载!
转载请注明出处:http://blog.csdn.net/android_huber
交流邮箱:dp.shao@gmail.com
-----------------------------------------------------------------------
mx51的framebuffer driver中现在实现了三个fb,创建的设备节点如下,在/dev/gralloc目录下
bash-3.2# cd /dev/graphics/
bash-3.2# ls
fb2
fb1
fb0
其中fb0是主framebuffer,用于显示主屏UI,
fb1用于tvout,双屏显示的时候UI走这个fb
fb2则是用于显示overlay,拍照和播放视频的时候会用到这个fb
开启和关闭tvout的操作是在hal层中进行的,如果开启了tvout,则hal中会读出rw.SECOND_DISPLAY_CONNECTED这个property为1,然后会调用mapSecFrameBuffer(ctx)去初始化fb1,执行一些操作,将tvout开启,并将sys.SECOND_DISPLAY_ENABLED置1。
在framebuffer.cpp中开启了一个线程去刷新fb1,
pthread_create(&ctx->thread_id, NULL, &secDispShowFrames, (void *)ctx);
framebuffer.cpp只对UI显示有效,视频播放并不是走的这边。
在freescale的原生代码中,对双屏显示的支持并不好,透明度部分没有处理好,在适当的位置设置global alpha可以调节。对于second display的显示,默认是按照fb0的宽高比例来显示的,这样就会导致一些问题,比如有的上下会空出一些区域没有显示。这些可以修改,不让它调整显示比例来修改。
还有双屏显示的时候,好像并没有从原点开始显示,这边比较纠结,不知道是我这个显示器的问题,还是ipu的问题,可以通过修改dstRect.x和dstRect.y来调整显示偏移,fb1的显示好像是走的copybit,所以可以调节显示偏移。这两天为了一个需求想调节fb0的显示偏移并没有成功,想研究一下SurfaceFlinger,看能否通过上层来调节图层的偏移以达到我要的效果。
说到fsl的framebuffer就不得不说它的ipu,ipu全称Image porcess unit,是mx51的图像处理单元,所有的显示都要走这个模块里面的DI Unit来将图像数据输送到显示屏。对于ipu部分,以后有空的话再写几篇文章来说它,ipu的channel部分当时看的时候搞得人头都大了,所以很有必要去深入研究一下,不然对于mx51的framebuffer只会是知道一些皮毛,具体细节会很难搞清楚。