赞
踩
一、问题描述
仪表屏的弹窗会被中控的投屏内容覆盖,导致在投屏的时候看不到仪表的弹窗内容,不符合实际使用需求,需要弹窗显示在投屏内容的上层。
二、问题分析与解决
1. 打入硬件投屏补丁(补丁如附件),仪表会显示在中控上层,但是打入后仪表屏显示完开机动画后就没有显示了,AP2 kernel 一直打印以下 log:
[drm] sdrv_set_frameinfo skip layer, format[XR24]
经过分析,该 log 是更新了 PTG4.3 版本的 drm 后才会有,在 PTG4.3 drm 中遇到 XRGB8888 的数据会直接返回,不进行投屏:
if (layer->format == DRM_FORMAT_XRGB8888) {
DRM_INFO("%s skip layer, format[%c%c%c%c]\n", __func__,
layer->format & 0xff, (layer->format >> 8) & 0xff, (layer->format >> 16) & 0xff,(layer->format >> 24) & 0xff);
return 0;
}
2. 把以上代码注释,让投屏消息继续发送,并且在 R 核添加了打印确认有收到投屏消息以及确认了图层分辨率都是没问题的,此时仪表屏仍然没有显示。
3. 把 dts 还原,只修改 drm 版本,测试仪表屏有显示,排除问题跟 drm 版本的关系。
4. 向原厂咨询得知 XRGB8888 格式的数据不支持投屏,需要更换仪表的数据格式。仪表使用 weston 进行显示,因为需要在 Android 投屏的时候实现仪表的部分透明来显示 Android 的投屏内容,所以建议使用 ARGB8888 格式的数据来设置 alpha 通道。在 weston.ini 更改 gbm-format 项为 ARGB8888 发现不能显示,改成 RGB565 则可以显示。后续发现是 weston 源码不支持 ARGB8888 的输入,确认到 kernel 是支持该格式的,然后修改 weston 源码使其支持ARGB8888 的配置:
- diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
- index 8e1e788..b7fb606 100644
- --- a/libweston/compositor-drm.c
- +++ b/libweston/compositor-drm.c
- @@ -2159,6 +2159,9 @@ drm_output_init_pixman(struct drm_output *output, struct drm_backend *b)
- case GBM_FORMAT_RGB565:
- pixman_format = PIXMAN_r5g6b5;
- break;
+ case GBM_FORMAT_ARGB8888:
+ pixman_format = PIXMAN_a8r8g8b8;
+ break;
default:
weston_log("Unsupported pixman format 0x%x\n", format);
return -1;
@@ -2440,6 +2443,8 @@ parse_gbm_format(const char *s, uint32_t default_value, uint32_t *gbm_format)
*gbm_format = GBM_FORMAT_RGB565;
else if (strcmp(s, "xrgb2101010") == 0)
*gbm_format = GBM_FORMAT_XRGB2101010;
+ else if (strcmp(s, "argb8888") == 0)
+ *gbm_format = GBM_FORMAT_ARGB8888;
else {
weston_log("fatal: unrecognized pixel format: %s\n", s);
ret = -1;
5. 修改后 ARGB8888 格式的仪表可以正常显示了,但发现 weston 的背景图无法设置为透明,并且 R5 的 MASK 合成不能满足显示需求(需要显示不规则形状的透明区域,并且透明的区域可变,而我了解的 MASK 区域是一个规则的图形并且是在初始化的时候就固定下来存放在 ddr 里面的),在开发板设置 weston.ini 的 background-color=0x0 来测试,R5 那边收到的数据是 0xff000000,并且无论如何修改 background-color 的值,R5 那边的 alpha 值都是 0xff。随后更换了一张本来就透明的背景图,经过 weston 传到 R5 后 alpha 值就变成了 0xff。
6. 咨询了原厂并查询资料得知 weston 源生应用不支持将背景图透明,该功能需要更换为其他显示架构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。