DRM全解析 —— encoder详解(1)

news2024/12/29 10:42:21

本文参考以下博文:

Linux内核4.14版本——drm框架分析(3)——encoder分析

特此致谢!

1. 简介

encoder是编码器/输出转换器,负责将CRTC输出的timing时序转换成外部设备所需要的信号,如HDMI转换器或DSI Controller。

具体来讲,encoder的作用就是将内存的pixel像素编码(转换)为显示器所需要的信号(因为画面显示到不同的设备(Display Device)上,需要将画面转化为不同的电信号)。如RGB、LVDS、DSI、eDP、HDMI、CVBS、VGA等显示接口。另外,encoder与CRTC之间的交互就是我们所说的ModeSetting,其中包含了前面提到的色彩模式、还有时序(timing)等。

encoder在系统中的位置和作用如下所示:

2. 核心结构

在Linux内核的DRM中,encoder对应的核心结构体为:struct drm_encoder。该结构体在include/drm/drm_encoder.h中定义,代码如下(Linux内核版本:6.1):

/**
 * struct drm_encoder - central DRM encoder structure
 * @dev: parent DRM device
 * @head: list management
 * @base: base KMS object
 * @name: human readable name, can be overwritten by the driver
 * @funcs: control functions, can be NULL for simple managed encoders
 * @helper_private: mid-layer private data
 *
 * CRTCs drive pixels to encoders, which convert them into signals
 * appropriate for a given connector or set of connectors.
 */
struct drm_encoder {
	struct drm_device *dev;
	struct list_head head;

	struct drm_mode_object base;
	char *name;
	/**
	 * @encoder_type:
	 *
	 * One of the DRM_MODE_ENCODER_<foo> types in drm_mode.h. The following
	 * encoder types are defined thus far:
	 *
	 * - DRM_MODE_ENCODER_DAC for VGA and analog on DVI-I/DVI-A.
	 *
	 * - DRM_MODE_ENCODER_TMDS for DVI, HDMI and (embedded) DisplayPort.
	 *
	 * - DRM_MODE_ENCODER_LVDS for display panels, or in general any panel
	 *   with a proprietary parallel connector.
	 *
	 * - DRM_MODE_ENCODER_TVDAC for TV output (Composite, S-Video,
	 *   Component, SCART).
	 *
	 * - DRM_MODE_ENCODER_VIRTUAL for virtual machine displays
	 *
	 * - DRM_MODE_ENCODER_DSI for panels connected using the DSI serial bus.
	 *
	 * - DRM_MODE_ENCODER_DPI for panels connected using the DPI parallel
	 *   bus.
	 *
	 * - DRM_MODE_ENCODER_DPMST for special fake encoders used to allow
	 *   mutliple DP MST streams to share one physical encoder.
	 */
	int encoder_type;

	/**
	 * @index: Position inside the mode_config.list, can be used as an array
	 * index. It is invariant over the lifetime of the encoder.
	 */
	unsigned index;

	/**
	 * @possible_crtcs: Bitmask of potential CRTC bindings, using
	 * drm_crtc_index() as the index into the bitfield. The driver must set
	 * the bits for all &drm_crtc objects this encoder can be connected to
	 * before calling drm_dev_register().
	 *
	 * You will get a WARN if you get this wrong in the driver.
	 *
	 * Note that since CRTC objects can't be hotplugged the assigned indices
	 * are stable and hence known before registering all objects.
	 */
	uint32_t possible_crtcs;

	/**
	 * @possible_clones: Bitmask of potential sibling encoders for cloning,
	 * using drm_encoder_index() as the index into the bitfield. The driver
	 * must set the bits for all &drm_encoder objects which can clone a
	 * &drm_crtc together with this encoder before calling
	 * drm_dev_register(). Drivers should set the bit representing the
	 * encoder itself, too. Cloning bits should be set such that when two
	 * encoders can be used in a cloned configuration, they both should have
	 * each another bits set.
	 *
	 * As an exception to the above rule if the driver doesn't implement
	 * any cloning it can leave @possible_clones set to 0. The core will
	 * automagically fix this up by setting the bit for the encoder itself.
	 *
	 * You will get a WARN if you get this wrong in the driver.
	 *
	 * Note that since encoder objects can't be hotplugged the assigned indices
	 * are stable and hence known before registering all objects.
	 */
	uint32_t possible_clones;

	/**
	 * @crtc: Currently bound CRTC, only really meaningful for non-atomic
	 * drivers.  Atomic drivers should instead check
	 * &drm_connector_state.crtc.
	 */
	struct drm_crtc *crtc;

	/**
	 * @bridge_chain: Bridges attached to this encoder. Drivers shall not
	 * access this field directly.
	 */
	struct list_head bridge_chain;

	const struct drm_encoder_funcs *funcs;
	const struct drm_encoder_helper_funcs *helper_private;
};

3. drm_encoder结构释义

(0)总述

/**
 * struct drm_encoder - central DRM encoder structure
……
 * CRTCs drive pixels to encoders, which convert them into signals
 * appropriate for a given connector or set of connectors.
 */

struct drm_encoder —— 核心DRM encoder结构。

CRTC将像素驱动到encoder,encoder将像素转换为适用于给定连接器或连接器组的信号。

(1)struct drm_device *dev

    /** @dev: parent DRM device */
	struct drm_device *dev;

父DRM设备。

(2)struct list_head head

    /** @head: list management */
    struct list_head head;

链表管理。

(3)struct drm_mode_object base

    /** @base: base KMS object */
    struct drm_mode_object base;

基本KMS对象。

(4)char *name

    /** @name: human readable name, can be overwritten by the driver */
    char *name;

人类可读的名称(名字),可以被驱动程序覆盖。

drm_crtc结构的其余成员将在下一篇文章中继续深入释义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【生成模型】解决生成模型面对长尾类型物体时的问题 RE-IMAGEN: RETRIEVAL-AUGMENTED TEXT-TO-IMAGE GENERATOR

介绍 尽管最先进的模型可以生成常见实体的高质量图像&#xff0c;但它们通常难以生成不常见实体的图像&#xff0c;例如“Chortai&#xff08;狗&#xff09;”或“Picarones&#xff08;食物&#xff09;”。为了解决这个问题&#xff0c;我们提出了检索增强文本到图像生成器…

超实用的蓄电池小技巧,不会用就太可惜了!

蓄电池在现代社会中扮演着重要的角色&#xff0c;用于供电备份、电动交通工具、可再生能源储存等各种应用。然而&#xff0c;蓄电池的性能监控和维护管理对于确保其可靠性和寿命至关重要。 随着科技的不断进步&#xff0c;蓄电池监控系统成为了一种关键工具&#xff0c;帮助用户…

3D目标检测:DFA3D: 3D Deformable Attention For 2D-to-3D Feature Lifting

论文作者&#xff1a;Hongyang Li,Hao Zhang,Zhaoyang Zeng,Shilong Liu,Feng Li,Tianhe Ren,Lei Zhang 作者单位&#xff1a;South China University of Technology; The Hong Kong University of Science and Technology; International Digital Economy Academy (IDEA); Ts…

大数据软件项目的数据清洗

大数据软件项目中的数据清洗是数据预处理过程中的重要环节&#xff0c;用于识别和纠正数据集中的错误、不一致性和不完整性。虽然没有专门的"数据清洗开发框架"&#xff0c;但有许多工具和库可用于数据清洗任务。以下是一些常见的数据清洗工具和库&#xff0c;可以与…

RK3588 DDR电源电路设计详解

RK3588 VCC_DDR电源PCB设计 1、VCC_DDR覆铜宽度需满足芯片的电流需求&#xff0c;连接到芯片电源管脚的覆铜足够宽&#xff0c;路径不能被过孔分割太严重&#xff0c;必须计算有效线宽&#xff0c;确认连接到CPU每个电源PIN脚的路径都足够。 2、VCC_DDR的电源在外围换层时&am…

数学模型水动力模拟、水质建模、复杂河网构建技术在环境影响评价、排污口论证及防洪评价中的实践技术应用

数学模型在水环境评价、防洪评价和排污口论证等领域中的重要作用&#xff0c;随着人类活动的不断增加和环境问题的日益突出&#xff0c;对水资源和水环境的保护与管理变得至关重要。为了更好地理解和应对这些挑战&#xff0c;数学模型成为一种强大的工具&#xff0c;能够提供量…

docker搭建jenkins

1.拉取镜像 docker pull jenkinsci/blueocean 2.启动容器 docker run -d -u root -p 8666:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name MyJenkins jenkinsci/blueocean 3.访问ip:port,就能访问了 4.docker logs 容器…

BUUCTF Basic 解题记录--BUU XXE COURSE

1、XXE漏洞 初步学习&#xff0c;可参考链接&#xff1a; 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 2、了解了XXE漏洞&#xff0c;用burpsuite获取到的url转发给repeater&#xff0c;修改XML的信息&#xff0c;引入外部实体漏洞&#xff0c;修改发送内容&#xff0c;…

uni-app:服务器端数据绘制多个echarts图标(renderjs解决手机端无法显示问题)

效果 代码 <template><view><view :prop"option1" :change:prop"echarts.updateEcharts1" id"echarts1"class"echarts"></view><view :prop"option2" :change:prop"echarts.updateEchart…

飞轮储能系统的建模与Simulink仿真(永磁同步电机作为飞轮驱动电机)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

termius mac版无需登录注册直接永久使用

1. 下载地址&#xff1a;termius下载 2. 解压安装 3. 当出现 “termius”已损坏,无法打开 则输入以下命令即可&#xff1a;sudo xattr -r -d com.apple.quarantine /Applications/Termius.app 最后去 系统设置-> 隐私与安全性-> 仍要打开 4. 删除app-update.yml文件&…

ICCV23中的域泛化相关研究

ICCV23中的域泛化相关研究 【OCR】Order-preserving Consistency Regularization for Domain Adaptation and Generalization【iDAG】iDAG: Invariant DAG Searching for Domain Generalization【RIDG】Domain Generalization via Rationale Invariance【3DLabelProp】Domain G…

一张图搞定英文星期、月份、季节总也搞不定的星期,月份,季节,一张图搞定,还有必用的常见搭配,再也不担心用错介词了~

一张图搞定英文星期、月份、季节 总也搞不定的星期&#xff0c;月份&#xff0c;季节&#xff0c;一张图搞定&#xff0c;还有必用的常见搭配&#xff0c;再也不担心用错介词了~

无序数组计算排序后最大相邻差

如题目所示&#xff0c;给定数组[2,6,3,4,5,10,9]&#xff0c;排序后的最大相邻差为9-63。想必你想到的方法是先运用冒泡或者快速排序&#xff0c;先将数组进行排序&#xff0c;然后循环求出来最大相邻差。这个时间复杂度为nlogn。 我们可以使用桶排序的方式计算最大相邻差&…

prettier代码格式化配置文件

项目默认配置文件 自定义配置文件

ubuntu系统开机黑屏(只显示logo、左上角光标闪烁)问题

问题背景 在使用pycharm的时候&#xff0c;我使用了pycharm的快捷键ctrlaltF7&#xff0c;结果进入了ubuntu的ttf界面&#xff0c;由于之前不知道这个东西&#xff0c;百度一顿乱搜&#xff0c;以为显卡驱动出问题了&#xff0c;就把驱动删了&#xff0c;其实我完全可以ctrlal…

[计算机入门] Windows附件程序介绍(游戏类)

3.16 Windows附件程序介绍(游戏类) 3.16.1 扫雷&#xff1a;MineSweeper.exe 扫雷是一款经典的单人益智游戏&#xff0c;最初于1990年代由微软公司首次发布在Windows操作系统上。它成为了Windows自带游戏程序的一部分&#xff0c;并广受欢迎。 游戏的目标是通过逻辑和推理&am…

跨考408的C语言需要什么水平?

跨考408的C语言需要什么水平? 其实C语言了解一下就可以了&#xff0c;复习之前可以在b站上面随便找个视频看一下&#xff0c;指针部分重点学习一下就 行&#xff0c;C语言主要是数据结构代码部分的基础&#xff0c;对于跨考生来说&#xff0c;先看一下C语言对数据结构的复习有…

Windows技巧

Windows应用 无限延长Windows10 自动更新时间 管理员身份打开cmd 输入以下代码 这里设置的是3000天&#xff0c;需要恢复更新可以将其设置为1天 reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings” /v FlightSettingsMaxPauseDays /t reg_dword…

理解一致性哈希算法

摘要&#xff1a;一致性哈希是什么&#xff0c;使用场景&#xff0c;解决了什么问题&#xff1f; 本文分享自华为云社区《16 张图解 &#xff5c; 一致性哈希算法》&#xff0c;作者&#xff1a;小林coding。 如何分配请求&#xff1f; 大多数网站背后肯定不是只有一台服务器…