用于使用 LibDRM 进行渲染的辅助类。
渲染器需要缓冲区的文件描述符作为输入。调用者必须以每秒帧数 (FPS) 为单位设置渲染速率。
调用者指定宽度、高度连接器和 CRTC 索引。基于连接器和 CRTC 索引,渲染器找到合适的编码器并配置 CRTC 模式。
定义位于文件 67 行 NvDrmRenderer.h。
公共成员函数 | |
~NvDrmRenderer () | |
int | enqueBuffer (int fd) |
将缓冲区文件描述符排队以进行渲染。 更多... | |
int | dequeBuffer () |
将先前渲染的缓冲区出队。 更多... | |
int | setFPS (float fps) |
以每秒帧数设置渲染速率。 更多... | |
bool | enableUniversalPlanes (int enable) |
启用/禁用 DRM 通用平面客户端功能,例如 DRM_CLIENT_CAP_UNIVERSAL_PLANES 。 更多... | |
uint32_t | createDumbFB (uint32_t width, uint32_t height, uint32_t drm_format, NvDrmFB *fb) |
分配大小为 (w, h) 的帧缓冲区。 更多... | |
int | removeFB (uint32_t fb_id) |
销毁(释放)先前由 createDumbFB() 分配的帧缓冲区。 更多... | |
int | drmUtilCloseGemBo (int fd, uint32_t bo_handle) |
关闭 GEM (图形执行管理器) 句柄。 更多... | |
int | setPlane (uint32_t pl_index, uint32_t fb_id, 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) |
更改平面的帧缓冲区和位置。 更多... | |
int | getPlaneCount () |
获取可用平面的总数。 更多... | |
int | getPlaneIndex (uint32_t crtc_index, int32_t *plane_index) |
获取给定 crtc 索引支持的平面索引。 更多... | |
int | getCrtcCount () |
获取可用 CRTC 的计数。 更多... | |
int | getEncoderCount () |
获取可用编码器的计数。 更多... | |
bool | hdrSupported () |
检查 DRM 渲染器是否支持 HDR 模式。 更多... | |
int | setHDRMetadataSmpte2086 (struct drm_tegra_hdr_metadata_smpte_2086) |
设置从解码器检索的 HDR 元数据。 更多... | |
virtual int | isInError () |
指示元素在其操作期间是否遇到错误。 更多... | |
void | getProfilingData (NvElementProfiler::NvElementProfilerData &data) |
获取元素的性能分析数据。 更多... | |
void | printProfilingStats (std::ostream &out_stream=std::cout) |
将元素的性能分析数据打印到输出流。 更多... | |
virtual void | enableProfiling () |
启用元素的性能分析。 更多... | |
bool | isProfilingEnabled () |
检查是否为元素启用了性能分析。 更多... | |
静态公共成员函数 | |
static NvDrmRenderer * | createDrmRenderer (const char *name, uint32_t width, uint32_t height, uint32_t w_x, uint32_t w_y, uint32_t connector, uint32_t crtc, struct drm_tegra_hdr_metadata_smpte_2086 metadata, bool streamHDR) |
创建一个名为 name 的新 DRM 渲染器。 更多... | |
受保护的属性 | |
int | is_in_error |
指示元素操作期间是否遇到错误。 更多... | |
const char * | comp_name |
指定组件的名称,用于调试。 更多... | |
NvElementProfiler | profiler |
元素的性能分析器。 更多... | |
NvDrmRenderer::~NvDrmRenderer | ( | ) |
|
static |
创建一个名为 name 的新 DRM 渲染器。
[in] | name | 标识元素实例的唯一名称。 |
[in] | width | 窗口的宽度(像素)。 |
[in] | height | 窗口的高度(像素)。 |
[in] | w_x | 窗口位置的 x 偏移量。 |
[in] | w_y | 窗口位置的 y 偏移量。 |
[in] | connector | 要使用的连接器的索引。 |
[in] | crtc | 要使用的 CRTC 的索引。 |
[in] | metadata | 包含 HDR 元数据。 |
[in] | streamHDR | 指示当前流是否具有 HDR 元数据的标志,因此设置了 metadata。 |
uint32_t NvDrmRenderer::createDumbFB | ( | uint32_t | width, |
uint32_t | height, | ||
uint32_t | drm_format, | ||
NvDrmFB * | fb | ||
) |
分配大小为 (w, h) 的帧缓冲区。
[in] | width | 帧缓冲区的宽度(像素)。 |
[in] | height | 帧缓冲区的高度(像素)。 |
[in] | drm_format | *fb 中 _NvDrmBO::bo_handle 的 DRM 格式。 |
[out] | fb | 指向 NvDrmFB 结构的指针,该结构包含帧缓冲区 ID 和缓冲区映射。 |
int NvDrmRenderer::dequeBuffer | ( | ) |
将先前渲染的缓冲区出队。
这是一个阻塞函数,它等待直到有可用的空闲缓冲区。渲染器保留一个缓冲区,该缓冲区不得被任何其他组件覆盖。当渲染器关闭或在向组件发送 EOS 后,可以使用此缓冲区。
int NvDrmRenderer::drmUtilCloseGemBo | ( | int | fd, |
uint32_t | bo_handle | ||
) |
关闭 GEM (图形执行管理器) 句柄。
fd | 缓冲区的 FD。 |
bo_handle | 要关闭的 gem 句柄。 |
|
virtualinherited |
启用元素的性能分析。
在 NvV4l2Element 中重新实现。
bool NvDrmRenderer::enableUniversalPlanes | ( | int | enable | ) |
启用/禁用 DRM 通用平面客户端功能,例如 DRM_CLIENT_CAP_UNIVERSAL_PLANES
。
[in] | enable | 1 表示启用这些功能,0 表示禁用它们。 |
int NvDrmRenderer::enqueBuffer | ( | int | fd | ) |
将缓冲区文件描述符排队以进行渲染。
这是一个非阻塞调用。该函数等待下一个缓冲区的估计渲染时间。估计的渲染时间是根据上一个缓冲区的渲染时间和渲染速率计算得出的。
[in] | fd | 要渲染的导出缓冲区的文件描述符。 |
int NvDrmRenderer::getCrtcCount | ( | ) |
获取可用 CRTC 的计数。
int NvDrmRenderer::getEncoderCount | ( | ) |
获取可用编码器的计数。
int NvDrmRenderer::getPlaneCount | ( | ) |
获取可用平面的总数。
默认情况下,返回的计数仅包括“Overlay”类型(常规)平面,而不包括“Primary”和“Cursor”平面。如果已使用 enableUniversalPlanes() 启用了 DRM_CLIENT_CAP_UNIVERSAL_PLANES
,则返回的计数也包括“Primary”和“Cursor”平面。
int NvDrmRenderer::getPlaneIndex | ( | uint32_t | crtc_index, |
int32_t * | plane_index | ||
) |
获取给定 crtc 索引支持的平面索引。
[in] | crtc_index | 要查找平面索引的 crtc 的索引。 |
[in,out] | plane_index | 指向包含平面索引的数组的指针。此数组应由调用者根据 getPlaneCount() API 返回的平面计数大小进行分配。 |
|
inherited |
获取元素的性能分析数据。
bool NvDrmRenderer::hdrSupported | ( | ) |
检查 DRM 渲染器是否支持 HDR 模式。
|
inlinevirtualinherited |
|
inherited |
检查是否为元素启用了性能分析。
|
inherited |
将元素的性能分析数据打印到输出流。
[in] | out_stream | 要将数据打印到的 std::ostream 类型的输出流。如果未指定,则采用默认值 std::cout。 |
int NvDrmRenderer::removeFB | ( | uint32_t | fb_id | ) |
int NvDrmRenderer::setFPS | ( | float | fps | ) |
以每秒帧数设置渲染速率。
[in] | fps | 每秒帧数的渲染速率。 |
int NvDrmRenderer::setHDRMetadataSmpte2086 | ( | struct drm_tegra_hdr_metadata_smpte_2086 | ) |
设置从解码器检索的 HDR 元数据。
int NvDrmRenderer::setPlane | ( | uint32_t | pl_index, |
uint32_t | fb_id, | ||
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 | ||
) |
更改平面的帧缓冲区和位置。
-ERANGE
。)setPlane
() 操作都同步到垂直消隐并进行阻塞。pl_index | 要更改的平面的平面索引。 |
fb_id | 要在平面上显示的帧缓冲区的帧缓冲区 ID,或 -1 以保持帧缓冲区不变。 |
crtc_x | 从活动显示区域的左侧到显示平面的偏移量。 |
crtc_y | 从活动显示区域的顶部到显示平面的偏移量。 |
crtc_w | 显示器上输出矩形的宽度。 |
crtc_h | 显示器上输出矩形的高度。 |
src_x | 从源帧缓冲区的左侧裁剪偏移量(Q16.16 定点)。 |
src_y | 从源帧缓冲区的顶部裁剪偏移量(Q16.16 定点)。 |
src_w | 源矩形的宽度(Q16.16 定点)。 |
src_h | 源矩形的高度(Q16.16 定点)。 |
0 | 如果成功。 |
-EINVAL | 如果 pl_index 无效。 |
-errno | 否则。 |
|
protectedinherited |
指定组件的名称,用于调试。
定义位于文件 122 行 NvElement.h。
|
protectedinherited |
|
protectedinherited |
元素的性能分析器。
定义位于文件 124 行 NvElement.h。