即使像 S3C2440 这种不带真实 Plane 硬件的 Display Controller,我们也认为它的 Primary Plane 就是 LCDC 本身,因为它实现了从 Framebuffer 到 CRTC 的数据搬运工作,而这正是一个 Plane 最基本的功能。 为什么要设置DRM_CLIENT_CAP_UNIVERSAL_PLANES ? 因为如果不设置,drmModeGetPlaneResources() 就只会返回 Overl...
drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); plane_res = drmModeGetPlaneResources(fd); plane_id = plane_res->planes[0]; conn = drmModeGetConnector(fd, conn_id); buf.width = conn->modes[0].hdisplay; buf.height = conn->modes[0].vdisplay; modeset_create_fb(fd, &buf...
./drm-planes 按下按键 屏幕显示红绿蓝三条横 18.4.4. 程序分析: 新增初始化代码 1 2 3 4 5 6 7 8 9 10 drmModePlaneRes *plane_res;//图层资源 uint32_t plane_id[3]; //图层id数组 drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); plane_res = drmModeGetPlaneResources(fd); ...
intdrmSetClientCap(intfd,uint64_tcapability,uint64_tvalue); 代码调用实例如下: ret=drmSetClientCap(fd,DRM_CLIENT_CAP_UNIVERSAL_PLANES,1);if(ret){fprintf(stderr,"drmSetClientCap DRM_CLIENT_CAP_UNIVERSAL_PLANES error\n");return-1;}ret=drmSetClientCap(fd,DRM_CLIENT_CAP_ATOMIC,1);if(ret)...
--> drmSetClientCap(DRM_CLIENT_CAP_UNIVERSAL_PLANES) --> drmSetClientCap(DRM_CLIENT_CAP_ATOMIC) --> drmModeGetResources() --> drmModeGetConnector() //found connector DSI --> drmModeObjectGetProperties() //found connector dpms prop ...
} // 设置DRM_CLIENT_CAP_UNIVERSAL_PLANES,获取所有支持的Plane资源 int ret = drmSetClientCap(GetFd(), DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); if (ret != 0) { ALOGE("Failed to set universal plane cap %d", ret); return ret; } // 设置DRM_CLIENT_CAP_ATOMIC,告知DRM驱动该应用程序支持Atomic...
在学习DRM驱动之前,应该首先了解如何使用DRM驱动。以下使用伪代码的方式,简单介绍如何编写一个最简单的DRM应用程序。 伪代码: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 intmain(int argc,char**argv){/* open the drm device */open("/dev/dri/card0");/* get crtc/encoder/connector id */drm...
There isn't a separate atomic and non-atomic version of the kmsdrm backend in this PR; it's now one codebase that will decide to use the atomic features if it can set the DRM_CLIENT_CAP_ATOMIC and DRM_CLIENT_CAP_UNIVERSAL_PLANES client capabilities. If not, it'll use the "legacy"...
*/structdrm_gem_object*obj[DRM_FORMAT_MAX_PLANES];}; 该结构体包括以下成员: dev:该framebuffer所属的DRM设备; head:链表节点,用于将当前节点添加到drm_mode_config.fb_list链表; base:该framebuffer的基类,struct drm_mode_object类型; comn:char数组,数组长度为32,用于存放分配该fb的进程的名字; ...
ret = drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); if (ret) { printf("failed to set client cap\n"); return -1; } plane_res = drmModeGetPlaneResources(fd); plane_id = plane_res->planes[0]; printf("get plane count %d,plane_id %d\n",plane_res->count_pla...