环境:
OS: Android4.1
Chipset:MSM8X25Q
mdp:3.03
背景:
屏幕反着打,需要显示旋转180°。
旋转方案:
1. 通过lcd driver ic直接让屏幕旋转。
2. 通过mdp旋转。
3. Framework旋转。
调试过程:
方案1:
由于玻璃是单扫描方向,如果直接将driver IC反着扫,也就是说从IC
的memory里反着取数据,而玻璃还是正着扫描的话,结果就会产生
Tearing。此方案理论上直接行不通。
方案2:
在mdp_ppp.c传参数flip_v+flip_h给mdp register,告诉ppp模块
在使用mdp composition旋转180°。
考虑到GPU的composition会绕过mdp的ppp模块,因此将debug.composition.type
改成mdp,也就是想让系统全部用mdp去做composition.
事实上,有些特殊情况,mdp是无法处理的,像alpha不是完全透明的,
旋转太复杂的等。这也可以从framework中的代码里的注释看到:
voidLayer::setGeometry(hwc_layer_t* hwcl)
{
~~snip
//we can't do alpha-fade with the hw