类
GdkDmabufTextureBuilder
自:4.14
描述 [源码]
final class Gdk.DmabufTextureBuilder : GObject.Object
{
/* No available fields */
}
GdkDmabufTextureBuilder
是用于从DMA缓冲区构建GdkTexture
对象的构建器。
DMA缓冲区通常称为dma-buf。
DMA缓冲区是Linux内核的一个特性,用于实现硬件(如编解码器、GPU、显示器、摄像头及其控制它们的内核驱动程序)之间的有效缓冲区和内存共享。例如,解码器可能希望其输出直接与显示服务器共享,以便在没有副本的情况下渲染。
任何参与DMA缓冲区共享的设备驱动程序都可以作为缓冲区的导出方或导入方(或两者兼有)。
通过DMA缓冲区共享的内存通常存储在非系统内存中(可能是设备的本地内存或其他无法直接通过CPU访问的内容),并且从CPU访问此内存可能会产生高于通常的开销。
对于图形数据,数据由多个独立的内存块组成并不罕见,比如,分别为红色、绿色和蓝色通道的块。这些块被称为平面。DMA 缓冲区最多可以有四个平面。即使内存是一个单独的块,数据也可以通过从数据开头指定偏移量,组织成多个平面。
DMA 缓冲区向用户空间公开为文件描述符,以便在进程之间传递。如果DMA 缓冲区有多个平面,则每个平面都有一个文件描述符。
数据格式(对于图形数据,主要是其颜色空间)由一个 32 位整数描述。这些格式标识符在头文件 drm_fourcc.h
中定义,并且通常称为fourcc 值,因为它们由 4 个 ASCII 字符标识。此外,每个 DMA 缓冲区都有一个修饰符,它是一个 64 位整数,描述内存布局的驱动程序特定的详细信息,比如平铺或压缩。
出于历史原因,一些 dma-buf 的生成器不会提供显式修饰符,而是返回 DMA_FORMAT_MOD_INVALID
来表明它们的修饰符是隐式的。GTK 尝试接受 DMA_FORMAT_MOD_INVALID
作为修饰符,来适应这种情况。
GdkDmabufTextureBuilder
的操作非常简单:创建一个纹理生成器,设置所有必需的属性,然后调用 gdk_dmabuf_texture_builder_build()
来创建新纹理。
dma-buf 纹理的必需属性为:
-
以像素为单位的宽度和高度
-
标识 dma-buf 的格式和内存布局的
fourcc
代码和modifier
-
每个平面的文件描述符、偏移量和步长
GdkDmabufTextureBuilder
既可用于快速一次性构建纹理,也可保留并重复使用以构建多个纹理。
如需更多信息,请查看:
-
Linux 内核 文档
-
头文件 drm_fourcc.h。
自版本 4.14 起可用
实例方法
gdk_dmabuf_texture_builder_get_color_state
获取先前通过 gdk_dmabuf_texture_builder_set_color_state() 设置的颜色状态。
自 4.16 起提供
gdk_dmabuf_texture_builder_get_fourcc
获取先前通过 gdk_dmabuf_texture_builder_set_fourcc()
设置的格式,或在未设置格式时获取 0。
自:4.14
gdk_dmabuf_texture_builder_get_height
获取先前通过 gdk_dmabuf_texture_builder_set_height()
设置的高度,或在未设置高度时获取 0。
自:4.14
gdk_dmabuf_texture_builder_get_update_region
获取先前通过 gdk_dmabuf_texture_builder_set_update_region()
或 NULL
(如果没有设置)设置的区域。
自:4.14
gdk_dmabuf_texture_builder_get_update_texture
获取先前通过 gdk_dmabuf_texture_builder_set_update_texture()
或 NULL
(如果没有设置)设置的纹理。
自:4.14
gdk_dmabuf_texture_builder_get_width
获取先前通过 gdk_dmabuf_texture_builder_set_width()
设置的宽度,或在没有设置宽度时获取 0。
自:4.14
gdk_dmabuf_texture_builder_set_update_region
设置这个纹理要更新的区域。通过 GdkDmabufTextureBuilder:update-texture
结合使用,可以描述先前纹理的更新。
自:4.14
gdk_dmabuf_texture_builder_set_update_texture
设置这个纹理要更新的纹理。参见 gdk_dmabuf_texture_builder_set_update_region()
了解说明。
自:4.14
信号
从 GObject (1) 继承的信号
GObject::notify
当对象通过 g_object_set_property()、g_object_set() 等方式设置其一个属性的值时,就会对它发出 notify 信号。