DRM KMS 子系统(2)Framebuffer

文章目录

  • [1. Framebuffer](#1. Framebuffer)
  • [2. drm_framebuffer数据结构](#2. drm_framebuffer数据结构)
  • [3. pixel_format](#3. pixel_format)

1. Framebuffer

  • 这是一个标准目标存储了需要显示的内容的信息,信息包括:
    • 内存(显存)用于存储显示内容存区域的引用
    • 内存(显存)中存储的帧的格式
    • 内存(显存)区域中活跃区域(被显示部分的内容)
  • Framebuffer实现依赖于:
    • 当前在是使用的内存(显存)管理如GEM或TTM
    • 显示控制器的能力:
      • 支持DMA传输类型(Contiguous Memory or Scatter Gather)
      • 支持IOMMU
  • GEM实体的默认实现为使用CMA(Contiguous Memory Allocator),代码在drivers/gpu/drm/drm_fb_cma_helper.c
  • 其他实现通常依赖于显示控制器:
    • 散聚(Scatter Gather)示例 :drivers/gpu/drm/tegra/
    • IOMMU示例:drivers/gpu/drm/exynos/

2. drm_framebuffer数据结构

c 复制代码
#define DRM_FORMAT_MAX_PLANES	4u

pitches/offsets数组大小的4为最大的plane的个数,这里涉及图像格式的知识,如YUV格式的图像,存在多平面如3个平面(Y平面/U平面/V平面)。

  • pitches:代表显示控制器中的一行的长度(字节数),通常4字节对齐
  • offsets:以字节为单位,从buffer开始到实际像素数据的偏移

3. pixel_format

c 复制代码
struct drm_framebuffer {
[...]
uint32_t pixel_format; /* fourcc format */
[...]
};

pixel_format描述了内存(显存)buffer的组织方式,使用FOURCC编码格式,支持的格式定义在:include/drm/drm_fourcc.h或<uapi/drm/drm_fourcc.h>中

这些FOURCC编码格式并非一种标准化,因此只在DRM KMS子系统里是有效。

  • DRM KMS子系统使用三种图像编码格式:

    • RGB:每个像素都使用一个RGB元组
    • YUV:类似的元组,维度上为Y,U和V组件
    • C8:使用一个转换表来映射一个值到一个RGB元组
  • 视频影像中格式多为YUV,它又可细分为多种格式:

    • Packed(紧凑类型):一块内存(显存)区域存储所有组件(Y,U和V)

      紧凑型格式,只使用offsets[0]和pitches[0]

    • Semiplanar(半平面型):一块内存(显存)区域存储Y组件和另一块存储UV组件

      半平面型格式,offsets和pitches均使用前两个数组

    • Planar(多平面型):每个组件都需要一块内存(显存)区域存储

      多平面型格式,offsets和pitches均使用前三个数组

每个内存(显存)区域存储一个帧的组件(Y, U or V)被称作一个plane

相关推荐
嵌入式×边缘AI:打怪升级日志1 小时前
100ASK-T113 Pro 开发板 Bootloader 完全开发指南
linux·ubuntu·bootloader
iCxhust2 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
qeen872 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
charlie1145141912 小时前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler012 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1132 小时前
Linux进程与线程编程详解
linux·c++
我星期八休息3 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
热心网友俣先生3 小时前
2026年第二十三届五一数学建模竞赛C题超详细解题思路+各问题可用模型推荐+部分模型结果展示
c语言·开发语言·数学建模
切糕师学AI3 小时前
深入解析 Zsh 与 Oh-My-Zsh:打造高效现代化终端
linux·终端·zsh
li1670902704 小时前
第二十七章:智能指针
c语言·数据结构·c++·visual studio