相关函数英文版请查看:nvidia-Direct Rending Manager
函数原型请查看:xf86drm.c
函数原型请查看:xf86drmMode.c
文章目录
相关函数
int drmGetCap (int fd, uint64_t capability,uint64_t * value )
drmModeResPtr drmModeGetResources (int fd )
void drmModeFreeResources(drmModeResPtr ptr)
drmModeConnectorPtr drmModeGetConnector(int fd,uint32_t connector_id )
void drmModeFreeConnector(drmModeConnectorPtr ptr )
drmModeEncoderPtr drmModeGetEncoder (int fd,uint32_t encoder_id )
void drmModeFreeEncoder(drmModeEncoderPtr ptr)
int drmIoctl(int fd, unsigned long request, void * arg )
int drmModeAddFB (int fd, uint32_t width, uint32_t height, uint8_t depth, uint8_t bpp, uint32_t pitch, uint32_t bo_handle, uint32_t * buf_id )
int drmModeRmFB(int fd, uint32_t fb_id )
drmModeCrtcPtr drmModeGetCrtc(int fd,uint32_t crtc_id)
int drmModeSetCrtc (int fd,uint32_t crtc_id,uint32_t fb_id,uint32_t x,uint32_t y,uint32_t * connectors,int count,drmModeModeInfoPtr drm_mode )
void drmModeFreeCrtc ( drmModeCrtcPtr ptr )
int drmSetClientCap ( int fd, uint64_t capability, uint64_t value )
int drmModeCreatePropertyBlob ( int fd, const void * data, size_t size, uint32_t * id )
drmModePlanePtr drmModeGetPlane ( int fd, uint32_t plane_id )
drmModeObjectPropertiesPtr drmModeObjectGetProperties ( int fd,uint32_t object_id, uint32_t object_type )
drmModePropertyPtr drmModeGetProperty ( int fd, uint32_t propertyId )
int drmModeAtomicAddProperty ( drmModeAtomicReqPtr req, uint32_t object_id, uint32_t property_id, uint64_t value )
drmModePlaneResPtr drmModeGetPlaneResources ( int fd )
int drmHandleEvent ( int fd, drmEventContextPtr evctx )
int drmModePageFlip ( int fd, uint32_t crtc_id, uint32_t fb_id, uint32_t flags, void * user_data )
int drmModeSetPlane ( int fd, uint32_t plane_id, uint32_t crtc_id, uint32_t fb_id, uint32_t flags, uint32_t crtc_x, uint32_t crtc_y, uint32_t crtc_w, uint32_t crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h )
drm
相关结构体
设备:dev、drmModeModeInfo
资源:drmModeRes
连接器:drmModeConnector
编码器:drmModeEncoder
CRTC:drmModeCrtc
标题
————————————————
相关函数
int drmGetCap (int fd, uint64_t capability,uint64_t * value )
说明:
获取DRM驱动程序的功能。
参数:
[in] fd:打开的DRM设备的文件描述符
[in] capability:需要从设备获取的DRM能力。支持功能:
DRM_CAP_ASYNC_PAGE_FLIP:如果不支持,value设置为0,如果支持,value设置为1。
DRM_CAP_DUMB_BUFFER:如果不支持,value设置为0,如果支持,value设置为1。
DRM_CAP_CURSOR_WIDTH:如果支持该能力,“value”中存储DRM-NVDC允许的最大游标宽度,如果不支持,则为0。
DRM_CAP_CURSOR_HEIGHT:如果支持该能力,“value”中存储DRM-NVDC允许的最大游标高度,如果不支持,则为0。
DRM_CAP_TIMESTAMP_MONOTONIC:如果不支持,value设置为0,如果支持,value设置为1。仅支持Linux。
[out] value:返回capability指定的capability值。
返回值:
如果成功则为0,否则为-EINVAL。
函数原型
/---------------------------drm.h-----------------------------------/
/** DRM_IOCTL_GET_CAP ioctl argument type */
struct drm_get_cap {
__u64 capability;
__u64 value;
};
/---------------------------xf86drm.c-----------------------------------/
drm_public int drmGetCap(int fd, uint64_t capability, uint64_t *value)
{
struct drm_get_cap cap;
int ret;
memclear(cap);
cap.capability = capability;
ret = drmIoctl(fd, DRM_IOCTL_GET_CAP, &cap);
if (ret)
return ret;
*value = cap.value;
return 0;
}
drmModeResPtr drmModeGetResources (int fd )
说明:
获取有关DRM设备的crtc、编码器和连接器的信息。
获取DRM设备的主要资源的列表。DRM应用程序通常在早期调用此函数来识别可用的显示和其他资源。但是,该函数不报告平面资源。这些可以通过drmModeGetPlaneResources查询。
参数:
fd:打开的DRM设备的文件描述符。
返回值:
如果成功,则为drmModeResPtr
结构,否则为空。
注意:
drmModeResPtr
结构的min_width、min_height、max_width和max_height
成员被设置为占位符值。
drmModeResPtr
其实就是_drmModeRes *
,结构体下面有。
后置条件:
如果调用成功,应用程序必须通过调用drmModeFreeResources
释放资源信息结构。
—————————————————————————————————————————
void drmModeFreeResources(drmModeResPtr ptr)
说明:
释放资源信息结构。
释放由drmModeGetResources分配的drmModeResPtr结构。
参数:
ptr:一个指向待释放资源的指针。
—————————————————————————————————————————
drmModeConnectorPtr drmModeGetConnector(int fd,uint32_t connector_id )
说明:
获取连接器的信息。
如果connector_id是有效的,获取一个drmModeConnectorPtr结构,该结构包含连接器的信息,例如可用模式、连接状态、连接器类型和附加的编码器(如果有的话)。
参数:
fd:打开的DRM设备的文件描述符。
connector_id:要检索的连接器的连接器ID。
返回值:
如果成功,则为drmModeConnectorPtr结构;如果找不到连接器或API内存不足,则为NULL。
注意:
连接器->mmWidth和连接器->mmHeight目前设置为占位符值。
后置条件:
如果调用成功,应用程序必须通过调用drmModeFreeConnector释放连接器信息结构。
—————————————————————————————————————————
void drmModeFreeConnector(drmModeConnectorPtr ptr )
说明:
释放一个连接器。
释放drmModeGetConnector分配的drmModeConnectorPtr结构。
参数:
ptr:一个指向待释放资源的指针。
—————————————————————————————————————————
drmModeEncoderPtr drmModeGetEncoder (int fd,uint32_t encoder_id )
说明:
获取编码器的信息。
获取一个drmModeEncoderPtr结构,它包含关于指定编码器的信息,例如当前的CRTC和兼容的CRTC。
参数:
fd:打开的DRM设备的文件描述符。
crtc_id:要检索的CRTC的CRTC ID。
返回值:
如果成功,则为drmModeEncoderPtr结构;如果找不到编码器或API内存不足,则为NULL。
注意:
DRM-NVDC中的编码器在启动时连接到单个CRTC,并且不能重新配置。在possible_crtcs中只设置了一个位,而在possible_cloning中没有设置位(也就是说,possible_cloning的值为0)。
后置条件:
如果调用成功,应用程序必须调用drmModeFreeEncoder来释放分配的结构。
—————————————————————————————————————————
void drmModeFreeEncoder(drmModeEncoderPtr ptr)
说明:
释放一个编码器。
释放drmModeEncoderPtr由drmModeGetEncoder分配的结构。
参数:
ptr:一个指向待释放资源的指针。
—————————————————————————————————————————
int drmIoctl(int fd, unsigned long request, void * arg )
说明:
发出DRM输入/输出控制(IOCTL)。
这个函数主要用于LIBDRM不支持执行所需操作的函数的情况。LIBDRM在特性上可能落后于内核接口,这个函数允许尽早访问新接口。
参数:
[in] fd:打开的DRM设备的文件描述符。
[in] reques:一个支持的DRM IOCTL…常量。
[in,out] arg:指向ioctl数据结构的指针:
如果请求是DRM_IOCTL_MODE_CREATE_DUMB
,一个drm_mode_create_dumb
结构
如果请求是DRM_IOCTL_MODE_MAP_DUMB
, drm_mode_map_dumb
结构
如果请求是DRM_IOCTL_MODE_DESTROY_DUMB
,一个drm_mode_destroy_dumb
结构
返回值:
如果成功,则为0,否则为-1。
注意:
DRM- nvdc
不支持内核DRM的所有功能,所以只实现了一小部分IOCTL
操作。
DRM-NVDC支持以下应用程序使用的IOCTL操作:
DRM_IOCTL_MODE_CREATE_DUMB:创建一个哑(CPU)缓冲区。用于调试和简单的显示测试。加速渲染不可用。
DRM_IOCTL_MODE_MAP_DUMB::映射一个用于CPU访问的哑缓冲区。与内核DRM不同,DRM- nvdc用mmap函数映射dumb缓冲区,并在返回的偏移量中返回一个有效的内存指针。应用程序不能在返回的偏移量上调用mmap。
DRM_IOCTL_MODE_DESTROY_DUMB:销毁一个哑缓冲区。
DRM_IOCTL_TEGRA_GEM_CREATE:创建一个HW缓冲区。
—————————————————————————————————————————
int drmModeAddFB (int fd, uint32_t width, uint32_t height, uint8_t depth, uint8_t bpp, uint32_t pitch, uint32_t bo_handle, uint32_t * buf_id )
说明:
创建一个framebuffer.
。
该函数使用指定的缓冲区对象作为内存后备存储,以指定的大小和格式创建一个framebuffer
。buffer
对象可以是通过调用drmIoctl
创建的“哑缓冲区”,请求参数设置为DRM_IOCTL_MODE_CREATE_DUMB
,也可以是通过调用drmPrimeFDToHandle
函数导入的dma-buf
。
参数:
[in] fd:打开的DRM设备的文件描述符。
[in] width:framebuffer的宽度以像素为单位。
[in] height:framebuffer高度(像素)。
[in] depth:framebuffer.深度,以比特为单位。
[in] bpp:framebuffer.每像素位。
[in] pitch:framebuffer间距,以字节为单位。
[in] bo_handle:提供内存支持的缓冲区对象的句柄。
[out] buf_id:在创建成功时接收到创建的framebuffer的ID。
返回值:
如果framebuffer创建成功,则为0,否则为-1。
后置条件:
如果调用成功,应用程序必须通过调用drmModeRmFB来删除(释放)framebuffer。
—————————————————————————————————————————
int drmModeRmFB(int fd, uint32_t fb_id )
说明:
破坏一个framebuffer.。
销毁(释放)由drmModeAddFB或drmModeAddFB2分配的帧缓冲区。
参数:
fd:打开的DRM设备的文件描述符。
fb_id:要销毁的framebuffer的ID。
返回值:
如果销毁成功则为0,如果没有找到framebuffer则为-ENOENT。
—————————————————————————————————————————
drmModeCrtcPtr drmModeGetCrtc(int fd,uint32_t crtc_id)
说明:
获取CRTC的信息。
如果指定的CRTC ID有效,则获取一个drmModeCrtcPtr结构,该结构包含关于CRTC的信息,例如当前framebuffer、模式、位置、大小和gamma LUT元素的数量。
参数:
fd:打开的DRM设备的文件描述符。
crtc_id:要检索的CRTC的CRTC ID。
返回值:
如果成功,则为drmModeCrtcPtr结构;如果找不到CRTC或API内存不足,则为NULL。
后置条件:
如果调用成功,应用程序必须调用drmModeFreeCrtc来释放它返回的结构。
—————————————————————————————————————————
int drmModeSetCrtc (int fd,uint32_t crtc_id,uint32_t fb_id,uint32_t x,uint32_t y,uint32_t * connectors,int count,drmModeModeInfoPtr drm_mode )
说明:
设置CRTC配置。
如果指定了DRM模式(如果drm_mode不为NULL),在CRTC和指定的连接器上设置显示模式。新的fb_id, x,和y属性将设置在vblank。
参数:
fd:打开的DRM设备的文件描述符。
crtc_id:要设置的CRTC的ID。
fb_id:此CRTC显示的帧缓冲区id,或者-1使用与前面操作相同的CRTC。
x:从活动显示区域左侧到放置framebuffer的x偏移量。如果x是-1,x的偏移量不会改变。
y:从活动显示区域顶部到放置framebuffer的y偏移量。如果y是-1,y的偏移量不会改变。
connectors:一个指向要绑定到CRTC的连接器列表的指针。
count:连接器列表中的连接器数量。
drm_mode:设置模式,或NULL使用与前面操作相同的模式。
返回值:
0:如果成功
-EINVAL:如果无效的“crtc id”。
-1:如果count无效,或者连接器指定的列表与CRTC不兼容。
-errno:另外
—————————————————————————————————————————
void drmModeFreeCrtc ( drmModeCrtcPtr ptr )
说明:
释放一个CRTC。
释放由drmModeGetCrtc分配的drmModeCrtcPtr结构。
参数:
ptr:一个指向需要释放的CRTC的指针。
—————————————————————————————————————————
int drmSetClientCap ( int fd, uint64_t capability, uint64_t value )
说明:
启用或禁用DRM特性(功能)。
参数:
fd:打开的DRM设备的文件描述符。
capability:指定要启用或禁用的功能。支持的值是:
DRM_CLIENT_CAP_ATOMIC (disabled by default)
DRM_CLIENT_CAP_UNIVERSAL_PLANES (disabled by default)
value:0表示禁用,1表示启用。
返回值:
0表示成功,否则为-EINVAL。
—————————————————————————————————————————
int drmModeCreatePropertyBlob ( int fd, const void _ data, size_t size, uint32_t _ id )
说明:
创建一个属性斑点( property blob)。
存储一个不透明的内存块并返回它的ID。然后,可以将ID用于原子模式设置。.
注意:
DRM-NVDC中,data
必须为drmModeModeInfoPtr
。当从drmModeModeInfoPtr
创建属性blob
时,返回的ID
将成为CRTC
属性中匹配名称MODE_ID
的有效值。原子地将MODE_ID
属性提交到创建的blob
的ID
会导致在该CRTC
上设置模式。新的CRTC
模式将是drmModeModeInfoPtr
作为输入drmModeCreatePropertyBlob
的模式。
后置条件
如果调用成功,应用程序必须通过调用drmModeDestroyPropertyBlob
销毁(释放)属性blob。
参数:
fd:打开的DRM设备的文件描述符。
data:属性blob的内容。什么数据是可接受的取决于实现。在DRM-NVDC中,数据必须是drmModeModeInfoPtr结构。
size:data的大小
id:返回blob的属性ID
返回值:
0: 如果操作成功。
-1:如果data不是一个有效的指针,或者如果size或id无效。
-ENOMEM:如果不能分配块内存。
—————————————————————————————————————————
drmModePlanePtr drmModeGetPlane ( int fd, uint32_t plane_id )
说明:
获取有关plane的信息。
:如果plane_id有效,则获取一个drmModePlanePtr结构,该结构包含关于指定平面的信息,例如它当前的CRTC和兼容的CRTC,当前绑定的framebuffer, gamma步数,以及平面的位置。
注意:
在DRM-NVDC中,平面在启动时连接到单个CRTC,且不可重构。drmModePlanePtr结构的possible_crtc成员总是恰好设置了一位。
后置条件
如果调用成功,应用程序必须通过调用drmModeFreePlane释放平面信息结构。
参数:
fd:打开的DRM设备的文件描述符。
fd::Plane待检索的planeID。
返回值:
如果成功,则为drmModePlanePtr结构,如果没有找到平面或API内存不足,则为NULL。
—————————————————————————————————————————
drmModeObjectPropertiesPtr drmModeObjectGetProperties ( int fd,uint32_t object_id, uint32_t object_type )
说明:
获取DRM对象的所有属性。
获取对象属性结构,该结构描述指定DRM
对象的所有原子性可修改属性,以及不包含在相应drmModeCrtcPtr
、drmModeConnectorPtr
和drmModePlanePtr
结构中的只读属性。然后,你可以通过drmModeGetProperty
来检索单个属性,并通过drmModeAtomicAddProperty
来改变它们的值。
drmModeObjectPropertiesPtr
结构包含一个属性id数组(props
)、一个对应属性值数组(prop_values
)和每个数组中的元素数(count_props
)。您可以通过在属性ID上调用drmModeGetProperty
并查看返回的drmModePropertyPtr
结构的名称字段来获得属性的名称。
要以原子方式修改属性,可以通过调用drmModeAtomicAlloc
创建一个drmModeAtomicReqPtr
请求对象,然后调用drmModeAtomicAddProperty
,指定drmModeAtomicReqPtr
对象、要修改对象的对象ID、要修改属性的属性ID和属性的新值。然后使用drmModeAtomicCommit
提交请求。您可以在原子请求中设置多个属性,并在单个操作中提交它们。
注意:
并不是所有对象类型都受支持。
后置条件
如果调用成功,应用程序必须通过调用drmModeFreeObjectProperties
释放drmModeObjectPropertiesPtr
结构体。
参数:
fd:打开的DRM设备的文件描述符。
object_id:要检索其属性的DRM对象的对象ID。
object_type:表示对象类型的符号。支持以下对象类型:
DRM_MODE_OBJECT_CRTC
DRM_MODE_OBJECT_CONNECTOR
DRM_MODE_OBJECT_PLANE
返回值:
如果成功,则为drmModeObjectPropertiesPtr
对象,否则为NULL
。
—————————————————————————————————————————
drmModePropertyPtr drmModeGetProperty ( int fd, uint32_t propertyId )
说明:
获取描述DRM对象的属性的属性结构。
DRM对象可以是一个平面、一个CRTC或一个连接器。
这个函数操作drmModeObjectPropertiesPtr
结构体,该结构体由drmModeObjectGetProperties()
返回。
可修改的属性取决于DRM对象类型:
①对于一个平面(对象类型DRM_MODE_OBJECT_PLANE
):
"SRC_X", "SRC_Y", "SRC_W", "SRC_H", "zpos", "alpha" "CRTC_X",
"CRTC_Y", "CRTC_W", "CRTC_H", "CRTC_ID", "FB_ID"
②对于一个CRTC(对象类型DRM_MODE_OBJECT_CRTC
),支持的值是:
"MODE_ID", "ACTIVE", "HDR_SUPPORTED"
③对于连接器(对象类型DRM_MODE_OBJECT_CONNECTOR
),支持的值是:
"CRTC_ID"
对于DRM平面,enum
字段保存了定义属性的关键字对(名称:值)列表。
drmModePropertyPtr->enums[ ].
namedrmModePropertyPtr->enums[ ].value
名称字段支持的值在上面定义(例如,“SRC_X”,“SRC_Y”,或“SRC_W”
)。该字段是可修改的。
value
字段支持的值为:
"Primary", "Overlay", "Cursor"
该字段是只读的.
要识别平面类型,请遍历下面的列表来定位值字段与您要查找的值字段匹配的枚举。然后,从对应的名称字段获取值。
drmModePropertyPtr->enums[ ]
注意:
一个平面的zpos值初始化为相对于下一个平面的偏移量10。这是为了允许头部的灵活配置。例如:“Primary”类
•"Primary" type Plane zpos = 10
•First "Overlay" Plane zpos = 20
•Next "Overlay" Plane zpos = 30
•Etc.
zpos
的允许范围是[0,255]
。数值上较大的平面遮挡数值上较小的平面。一个平面的alpha值将导致一个平面范围的透明度以及包含在缓冲区对象中的像素alpha
被应用。alph
a的允许范围是[0,255]
,其中0
是完全透明的
后置条件
如果调用成功,应用程序必须通过调用drmModeFreeProperty
释放属性信息结构。
参数:
fd:打开的DRM设备的文件描述符
propertyId:要获取的属性对象的属性ID。
返回值:
如果成功,则为drmModePropertyPtr
,否则为NULL。
—————————————————————————————————————————
int drmModeAtomicAddProperty ( drmModeAtomicReqPtr req, uint32_t object_id, uint32_t property_id, uint64_t value )
说明:
向原子请求添加属性。
向原子请求添加属性和值。
参数:
req:一个原子请求。
object_id:需要修改的CRTC、平面或连接器的对象ID。
property_id:属性需要修改的属性ID。
value:属性的新值。
返回值:
0:如果成功
-1:如果req是NULL或者API内存不足。
-EINVAL:如果DRM_CLIENT_CAP_ATOMIC未启用。
—————————————————————————————————————————
drmModePlaneResPtr drmModeGetPlaneResources ( int fd )
说明:
获取Plane的有关信息。
获取DRM设备的平面资源列表。DRM应用程序通常会提前调用这个函数来识别可用的显示层。
默认情况下,返回的信息只包括“叠加”类型(常规)平面,而不是“主”和“光标”平面。如果DRM_CLIENT_CAP_UNIVERSAL_PLANES
已被drmSetClientCap
启用,则返回的信息包括“Primary”平面表示CTRCs,“Cursor”平面表示Cursors。这允许使用平面函数(如drmModeSetPlane
)来操作crtc和游标。
注意:
DRM-NVDC
目前不实现“游标”类型平面。
后置条件
打开DRM设备的文件描述符。
参数:
fd:打开的DRM设备的文件描述符。
返回值:
如果成功,则为drmModeResPtr
结构,否则为NULL
。
—————————————————————————————————————————
int drmHandleEvent ( int fd, drmEventContextPtr evctx )
说明:
轮询事件,指定回调函数。
如果发生了指定类型的事件,则调用回调函数。
注意:
DRM-NVDC仅支持Linux操作系统。支持evctx结构的vblank_handler字段。
后置条件
参数:
fd:打开的DRM设备的文件描述符。
evctx:包含回调指针的事件上下文
返回值:
如果成功则为0,否则为-1。
—————————————————————————————————————————
int drmModePageFlip ( int fd, uint32_t crtc_id, uint32_t fb_id, uint32_t flags, void * user_data )
说明:
请求指定CRTC上的页面翻转(framebuffer更改)。
在指定的CRTC上安排翻页。默认情况下,CRTC将被重新编程,以在下一次垂直刷新后显示指定的framebuffer。
注意:
drmModePageFlip不会等待呈现完成,也不会在翻转完成之前阻止未来的呈现。这与利用隐式同步的基于KMS的实现不同。当使用EGLOutput和DRM-NVDC时,同步是在内部处理的。
参数:
fd:打开的DRM设备的文件描述符。
crtc_id:CRTC要修改framebuffer的CRTC ID。
fb_id:Framebuffer要显示的Framebuffer ID。
flags:影响操作的标志。支持的值是:
DRM_MODE_PAGE_FLIP_ASYNC:立即翻转,而不是vblank
DRM_MODE_PAGE_FLIP_EVENT:发送翻页事件。
user_data:如果请求vblank事件,则页面翻转处理程序使用的数据。
返回值:
0 if successful.
-EINVAL if crtc_id or fb_id is invalid.
-errno otherwise
—————————————————————————————————————————
int drmModeSetPlane ( int fd, uint32_t plane_id, uint32_t crtc_id, uint32_t fb_id, uint32_t flags, uint32_t crtc_x, uint32_t crtc_y, uint32_t crtc_w, uint32_t crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h )
说明:
更改平面的framebuffer和位置
注意:
crtc_……和src_……参数接受特殊的输入值-1,这表示不改变硬件偏移值。(当给定这个值时,基于内核的DRM驱动程序返回错误代码-ERANGE。)平面上设置的framebuffer显示在crtc的顶部。平面的堆叠顺序由drmModeGetPlaneResources报告平面的顺序表示。所有drmModeSetPlane操作都同步到vblank并阻塞。
参数:
fd::打开的DRM设备的文件描述符。
plane_id:平面需要修改的平面ID。
crtc_id:CRTC该平面所在CRTC的ID
fb_id:Framebuffer在平面上显示的Framebuffer ID,或-1表示保持Framebuffer不变。
flags:控制函数行为的标志。目前不支持外部使用标志。
crtc_x:从有源显示区域左侧显示平面的偏移量
crtc_y:从有源显示区域顶部到显示平面的偏移量。
crtc_w:显示输出矩形的宽度。
crtc_h:显示输出矩形的高度
src_x:从源framebuffer左侧的剪辑偏移量(Q16.16固定点)。
src_y:来自源framebuffer顶部的剪辑偏移量(Q16.16固定点)。
src_w:源矩形的宽度(Q16.16固定点)。
src_h:源矩形的高度(Q16.16固定点)。
返回值:
0 : 如果成功
-EINVAL:plane_id或crtc_id无效
-errno:otherwise
—————————————————————————————————————————
drm
说明:
注意:
后置条件
参数:
fd:
fd:
返回值:
—————————————————————————————————————————
相关结构体
设备:dev、drmModeModeInfo
struct modeset_dev {
struct modeset_dev *next; /指向下一个设备指针
uint32_t width; /缓冲区对象的宽度
uint32_t height; /缓冲区对象的高度
uint32_t stride; /缓冲区对象的步幅
uint32_t size; /缓冲区对象的大小
uint32_t handle; /
uint8_t *map; /指向内存映射缓冲区的指针
drmModeModeInfo mode; /显示模式
uint32_t fb; /
uint32_t conn; /连接器ID
uint32_t crtc; /crtc ID
drmModeCrtc *saved_crtc; /更改crtc前的配置
};
typedef struct _drmModeModeInfo {
uint32_t clock;
uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
uint32_t vrefresh;
uint32_t flags;
uint32_t type;
char name[DRM_DISPLAY_MODE_LEN];
} drmModeModeInfo, *drmModeModeInfoPtr;
资源:drmModeRes
typedef struct _drmModeRes {
int count_fbs; /
uint32_t *fbs;
int count_crtcs; /显示控制器总数
uint32_t *crtcs;
int count_connectors; /连接器总数
uint32_t *connectors;
int count_encoders; /编码器总数
uint32_t *encoders;
uint32_t min_width, max_width;
uint32_t min_height, max_height;
} drmModeRes, *drmModeResPtr;
连接器:drmModeConnector
typedef struct _drmModeConnector {
uint32_t connector_id; /当前连接到的连接器ID
uint32_t encoder_id; /当前连接到的编码器ID
uint32_t connector_type; /当前连接到的连接器类型
uint32_t connector_type_id; /当前连接到的连接器类型ID
drmModeConnection connection; /当前连接器的连接状态(可看下面enum)
uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
drmModeSubPixel subpixel;
int count_modes; /连接器的模式
drmModeModeInfoPtr modes;
int count_props;
uint32_t *props; /**< List of property ids */
uint64_t *prop_values; /**< List of property values */
int count_encoders;
uint32_t *encoders; /**< List of encoder ids */
} drmModeConnector, *drmModeConnectorPtr;
typedef enum {
DRM_MODE_CONNECTED = 1,
DRM_MODE_DISCONNECTED = 2,
DRM_MODE_UNKNOWNCONNECTION = 3
} drmModeConnection;
编码器:drmModeEncoder
typedef struct _drmModeEncoder {
uint32_t encoder_id;
uint32_t encoder_type;
uint32_t crtc_id;
uint32_t possible_crtcs;
uint32_t possible_clones;
} drmModeEncoder, *drmModeEncoderPtr;
CRTC:drmModeCrtc
typedef struct _drmModeCrtc {
uint32_t crtc_id;
uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
uint32_t x, y; /**< Position on the framebuffer */
uint32_t width, height;
int mode_valid;
drmModeModeInfo mode;
int gamma_size; /**< Number of gamma stops */
} drmModeCrtc, *drmModeCrtcPtr;
标题
/---------------drm_mode.h-------------/
/* create a dumb scanout buffer */
struct drm_mode_create_dumb {
__u32 height;
__u32 width;
__u32 bpp;
__u32 flags;
/* handle, pitch, size will be returned */
__u32 handle;
__u32 pitch;
__u64 size;
};
struct drm_mode_destroy_dumb {
__u32 handle;
};
/* set up for mmap of a dumb scanout buffer */
struct drm_mode_map_dumb {
/** Handle for the object being mapped. */
__u32 handle;
__u32 pad;
/**
* Fake offset to use for subsequent mmap call
*
* This is a fixed-size type for 32/64 compatibility.
*/
__u64 offset;
};
评论(0)
您还未登录,请登录后发表或查看评论