V2D
介绍 SpacemiT 平台 V2D 模块的功能和使用方法。
模块介绍
SpacemiT 平台 V2D 驱动提供 2D 图形的硬件加速。
功能介绍
驱动模型
V2D 驱动使用字符设备驱动模型,用户空间通过 /dev/v2d_dev
设备文件与用户空间进行交互。支持的标准接口包括:
- open(): 设备打开时调用的函数。
- read(): 从设备读取数据的函数。
- write(): 向设备写入数据的函数。
- ioctl(): 处理控制命令的函数。
- release(): 设备关闭时调用的函数。
基本功能 V2D 驱动支持以下 2D 图像处理操作:
- 区域填充
- 缩放
- 旋转
- 裁剪
- 图像格式转换
源码结构介绍
SpacemiT 平台 V2D 驱动源码结构,内核目录如下:
drivers/soc/spacemit$ tree v2d
v2d
|-- csc_matrix.h
|-- Kconfig
|-- Makefile
|-- v2d_drv.c // v2d 驱动
|-- v2d_drv.h
|-- v2d_hw.c
|-- v2d_iommu.c // v2d iommu 驱动
|-- v2d_priv.h
|-- v2d_reg.h
关键特性
特性
特性 | 特性说明 |
---|---|
颜色填充 | 支持图像颜色填充功能。 |
旋转 | 支持图像 0°,90°,180°,270° 旋转,及镜像功能。 |
裁剪 | 支持图像裁剪功能。 |
缩放 | 支持图像 1/8 ~ 8 倍的缩放功能功能。 |
格式转换 | 支持 YUV,RGB 颜色空间转换功能。 |
性能参数
功能 | 性能规格 |
---|---|
颜色填充 | 1920x1080@200 FPS |
格式转换 | 1920x1080@200 FPS |
配置介绍
主要包括 V2D 驱动使能配置 和 DTS 配置。
CONFIG 配置
CONFIG_SPACEMIT_V2D
:SpacemiT 平台 V2D 驱动配置选项,默认情况,此选项为 Y
。
Device Drivers --->
SOC (System On Chip) specific Drivers --->
<*> Spacemit V2D Engine Driver
DTS 配置
clock配置
V2D 使用两个主时钟源:v2d-io
和 v2d-core
,其中 v2d-io
支持 204.8/307.2/409.6 MHz 四个不同挡位,默认使用 409.6 MHz。可通过写入 /sys/bus/platform/devices/c0100000.v2d/clkrate
实现动态调整。
配置平台 V2D 相关 clock 和 reset 示例如下。
// linux-6.6\arch\riscv\boot\dts\spacemit\k1-x.dtsi
v2d@c0100000 {
compatible = "spacemit,v2d";
reg = <0x0 0xc0100000 0x0 0x1000>;
reg-names = "v2dreg";
clocks = <&ccu CLK_DPU_MCLK>, // v2d clock 配置
<&ccu CLK_V2D>;
clock-names = "v2d-io", "v2d-core";
resets = <&reset RESET_V2D>; // v2d reset 配置
reset-names= "v2d_reset";
interrupt-parent = <&intc>;
interrupts = <86>;
interconnects = <&dram_range3>;
interconnect-names = "dma-mem";
status = "ok";
};
接口描述
API 介绍
应用端通过 API 调用实现 V2D 功能。主要实现 2D 图形的 Fill
,Bitblit
,Blend
三个功能。
V2D_BeginJob
int32_t V2D_BeginJob(V2D_HANDLE *phHandle);
功能说明 | 创建一个 V2D 工作队列。 |
---|---|
参数定义 | phHandle:句柄指针 |
返回值 | 0:成功; -1: 失败 |
V2D_EndJob
int32_t V2D_EndJob(V2D_HANDLE hHandle);
功能说明 | 提交工作队列到 V2D 驱动,并启动工作。 |
---|---|
参数定义 | hHandle:句柄 |
返回值 | 0:成功; -1: 失败 |
V2D_AddFillTask
int32_t V2D_AddFillTask(V2D_HANDLE hHandle,
V2D_SURFACE_S *pstDst,
V2D_AREA_S *pstDstRect,
V2D_FILLCOLOR_S *pstFillColor);
功能说明 | 提交任务到 V2D 工作队列,向目标位图的操作区填充颜色。 |
---|---|
参数定义 | hHandle:句柄;pstDst:目标位图;pstDstRect:目标位图操作区;pstFillColor:颜色填充结构体 |
返回值 | 0:成功; -1: 失败 |
V2D_AddBitblitTask
int32_t V2D_AddBitblitTask(V2D_HANDLE hHandle,
V2D_SURFACE_S *pstDst,
V2D_AREA_S *pstDstRect,
V2D_SURFACE_S *pstSrc,
V2D_AREA_S *pstSrcRect, V2D_CSC_MODE_E enCSCMode);
功能说明 | 提交任务到 V2D 工作队列,源位图的操作区域搬运到目标位图的操作区域。 |
---|---|
参数定义 | hHandle:句柄;pstDst:目标位图;pstDstRect:目标位图操作区;pstSrc: 源位图;pstSrcRect:源位图操作区;enCSCMode:是否需要进行色域转换标志 |
返回值 | 0:成功; -1: 失败 |
2D_AddBlendTask
int32_t V2D_AddBlendTask(V2D_HANDLE hHandle,
V2D_SURFACE_S *pstBackGround,
V2D_AREA_S *pstBackGroundRect,
V2D_SURFACE_S *pstForeGround,
V2D_AREA_S *pstForeGroundRect,
V2D_SURFACE_S *pstMask,
V2D_AREA_S *pstMaskRect,
V2D_SURFACE_S *pstDst,
V2D_AREA_S *pstDstRect,
V2D_BLEND_CONF_S *pstBlendConf,
V2D_ROTATE_ANGLE_E enForeRotateAngle,
V2D_ROTATE_ANGLE_E enBackRotateAngle,
V2D_CSC_MODE_E enForeCSCMode,
V2D_CSC_MODE_E enBackCSCMode,
V2D_PALETTE_S *pstPalette,
V2D_DITHER_E dither);
功能说明 | 提交任务到V2D工作队列,源位图到目标位图完成裁剪,旋转,格式转换,缩放等功能。 |
---|---|
参数定义 | hHandle:句柄;pstBackGround:背景位图;pstBackGroundRect:背景位图操作区;pstForeGround: 前景位图;pstForeGroundRect:前景位图操作区;pstMask:Mask位图;pstMaskRect:Mask位图操作区;pstDst: 目标位图;pstDstRect:目标位图操作区;pstBlendConf:blend配置结构体;enForeRotateAngle:前景操作旋转角度;enBackRotateAngle:背景操作旋转角度;enForeCSCMode:前景CSC转换模式;enBackCSCMode:背景CSC转换模式;pstPalette:L8格式调色板数据结构指针;dither:选择dither模式 |
返回值 | 0:成功; -1: 失败 |