版权所有©2023北京嘉楠捷思信息技术有限公司
您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。
由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。
、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。
版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
[TOC]
本文档主要介绍视频输出系统控制模块的功能和用法,其它模块的功能和用法将各有专门的文档加以论述。
本文档(本指南)主要适用于以下人员:
- 技术支持工程师
- 软件开发工程师
简称 | 说明 |
---|---|
VO | Video output |
DSI | Display Serial Interface |
文档版本号 | 修改说明 | 修改者 | 日期 |
---|---|---|---|
V1.0 | 初版 | 系统软件部 | 2023-03-10 |
VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形。芯片支持的显示/回写设备、视频层和图形层情况。
LAYER层支持:
LAYER0 | LAYER1 | LAYER2 | |
---|---|---|---|
输入格式 | YUV420 NV12 | YUV420 NV12 | YUV420 NV12 YUV422 NV16 ? |
最大分辨率 | 1920x1080 | 1920x1080 | 1920x1080 |
叠加显示 | 支持可配置叠加顺序 | 支持可配置叠加顺序 | 支持可配置叠加顺序 |
Rotation | √ | √ | - |
Scaler | √ | - | - |
Mirror | √ | √ | - |
Gray | √ | √ | - |
独立开关 | √ | √ | √ |
OSD 层支持
OSD0 | OSD1 | OSD2 | OSD3 | |
---|---|---|---|---|
输入格式 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 |
最大分辨率 | 1920x1080 | 1920x1080 | 1920x1080 | 1920x1080 |
叠加显示 | 支持可配置叠加顺序 | 支持可配置叠加顺序 | 支持可配置叠加顺序 | 支持可配置叠加顺序 |
ARGB 265 等级ALPHA | √ | √ | √ | √ |
独立开关 | √ | √ | √ | √ |
本次硬件介绍是以evblp3 做的介绍
在evblp3 上的硬件引脚如下:
- 屏幕触摸iic用的iic4 (scl:gpio7,sda gpio8)
- 屏幕触摸 rst:gpio29, int:gpio30
- 屏幕的rst:gpio9,backlight:gpio31
- Mipi的引脚和屏幕的引脚一一对应
- 图中1为mipi接口,采用的是软排线
- 图中2为mipi信号测试点、包含四路data线和一路clk线
视频输出软件配置分为3部分配置:phy 配置、dsi配置、VO配置,
phy的频率需要配置三个参数、计算PLL、配置voc、配置freq,根据这三个参数就可以确定txphy的频率,每一个的参数计算如下。
数据速率由 PLL 输出时钟相位频率的两倍给出:数据速率 (Gbps) = PLL Fout(GHz) * 2,输出频率是输入参考频率和倍频/分频比的函数。 计算phy 的pll共分为4种范围做的计算,不同的频率对应着不同的频率,它可以通过以下方式确定:
M | m+2 |
---|---|
N | n+1 |
Fclkin | 24M |
For:
然而在这个需要遵循下边的限制:
For:
For:
For:
上边的每一个for 对应着一个pll的等级、不同的等级对应着不同的计算公式和限制,计算示例如下:
Example:
mipi 的速率为 445.5M:所以pll的速率就是222.75M,应该选择第二个公式,计算如下
222750000 = 1M / 2N = (m+2) / 2(n+1) * 24000000 , 整理完成公式如下:
222.75n + 198.75 = 12m ,通过excel 计算如下:
得出来的m = 295 ,n = 15。
配置pll中的m 和n都是整数值、如果所有的值都不是整数,就需要在m 和 n的值做加1和减1处理、反推回去看哪个频率理你需要的最近,再去验证是否可用,不可以就重复上边的操作。
配置phy 的voc 可以根据表格查询即可:
Example:
mipi 的速率为 445.5M:所以pll的速率就是222.75M,voc = 010111 = 0x17
配置phy 的freq 可以根据表格查询即可:
Example:
mipi 的速率为 445.5M:pll的速率就是222.75M,freq 选择0100101, 配置这个的时候需要将最高位bit[7] = 1,所有freq = 10100101= 0xa5
DSI(Display Serial Interface)是MIPI 定义的一组通信协议的一部分联盟,主要实现 MIPI DSI 规范中定义的所有协议功能的数字控制器,包含了具有两个和四个通道的双向 PHY。
DSI在软件中主要配置屏幕显示用的timing和发送命令的功能。
每个厂家的屏幕都会有一组时序用来做屏幕的控制,主要包含了帧的控制时序和一行的控制时序,如下图所示:
DSI中也会用到这些参数、配置的时序和屏幕一致即可。
需要dsi 先进入lp模式、然后就可以发送命令,需要的api如下:
发送的数据是按照8位发送的,会根据数量自动选择发送长包还是短包。
DSI 自测模式会按照自己配置的dsi timing 产生color bar 的数据发送出去,这样不依赖vo从ddr读取数据,测试模式显示如下图:
DSI 和vo之间采用的是24位接口,所以配置出来的color bar 是上图的效果,使用方法只需要配置完成dsi之后使能color bar即可,api如下
VO(video output)主要是VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形,VO这部分包含两个配置、一个是timing 的配置、另一个是视频层的配置
VO的时序配置和dsi 的时序配置采用的一样的配置参数,具体的行和列一样,看dsi timing 介绍即可
VO layer 层目前支持3个layer层、4个osd层。Layer层只能显示yuv的图像格式(layer0 和 layer1 支持的功能在概述中的图表)。
VO 还支持回写功能、这个可以验证VO配置的是否正确,VO配置完成之后会将数据写回到ddr 当中,方便验证VO的配置是否出现异常
- 可以通过LP命令配置屏幕进入自测模式、看产生的图像是否正常
- 通过LP命令读取屏幕寄存器看是否有返回
- 配置完dsi之后,让屏幕进入自测模式,量取信号看时候正常,也可以看屏幕是否产生color bar 的图像
- 查看phy的err 状态寄存器、看是否有err 状态,可以通过proc查看
- VO配置完成之后、打开writeback 功能,查看是否和配置的要求一致
- 读取DSI的err状态寄存器,查看VO和dsi之间数据传输是否出现underflow和overflow,如果出现、适当的调整timing再次尝试
该功能模块提供以下API:
【描述】
设置phy 的频率
【语法】
k_s32 kd_mpi_set_mipi_phy_attr(k_vo_mipi_phy_attr *attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | Phy 的频率结构描述 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
该功能模块提供以下API:
- kd_mpi_dsi_set_attr
- kd_mpi_dsi_enable
- kd_mpi_dsi_send_cmd
- kd_mpi_dsi_read_pkg
- kd_mpi_dsi_set_test_pattern
- kd_mpi_dsi_set_lp_mode_send_cmd
【描述】
配置dsi 属性参数
【语法】
k_s32 kd_mpi_dsi_set_attr(k_display_mode *attr)【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | dsi 属性参数 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
打开dsi
【语法】
k_s32 kd_mpi_dsi_enable(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
Dsi 发送命令
【语法】
k_s32 kd_mpi_dsi_send_cmd(k_u8 *data, k_s32 cmd_len)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
data | 发送的数据 | 输入 |
cmd_len | 数据长度 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
Dsi 读取命令
【语法】
k_s32 kd_mpi_dsi_read_pkg(k_u8 *rx_buf, k_s32 cmd_len)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
rx_buf, | 接受的数据 | 输入 |
cmd_len | 数据长度 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
配置dsi 进入自测模式
【语法】
k_s32 kd_mpi_dsi_set_test_pattern(void)
【参数】、
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
配置dsi 进入lp mode 发送命令
【语法】
k_s32 kd_mpi_dsi_set_lp_mode_send_cmd(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
- kd_mpi_vo_init
- kd_mpi_vo_set_dev_param
- kd_mpi_vo_enable_video_layer
- kd_mpi_vo_disable_video_layer
- kd_mpi_vo_enable
- kd_mpi_vo_chn_insert_frame
- kd_mpi_vo_chn_dump_frame
- kd_mpi_vo_chn_dump_release
- kd_mpi_vo_osd_enable
- kd_mpi_vo_osd_disable
- kd_mpi_vo_set_video_osd_attr
- kd_mpi_vo_set_wbc_attr
- kd_mpi_vo_enable_wbc
- kd_mpi_vo_disable_wbc
- kd_display_reset
- kd_display_set_backlight
- kd_mpi_vo_set_user_sync_info
- kd_mpi_vo_draw_frame
【描述】
Vo 初始化默认参数
【语法】
k_s32 kd_mpi_vo_init(void);
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
Dsi 发送命令
【语法】
k_s32 kd_mpi_vo_set_dev_param(k_vo_pub_attr *attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | 视频输出设备公共属性结构体指针。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
配置layer 层属性参数
【语法】
k_s32 kd_mpi_vo_enable_video_layer(k_vo_layer layer)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
layer | 视频输出视频层号 取值范围 【0 – K_MAX_VO_LAYER_NUM】 | 输入 |
attr | 视频层属性结构体指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
关闭视频层
【语法】
k_s32 kd_mpi_vo_disable_video_layer(k_vo_layer layer)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
layer | 视频输出视频层号 取值范围 【0 – K_MAX_VO_LAYER_NUM】 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:
- 库文件:
【注意】
无
【举例】
无
【相关主题】
无
【描述】
打开vo
【语法】
k_u8 kd_mpi_vo_enable(void);
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:
- 库文件:
【注意】
无
【举例】
无
【相关主题】
无
【描述】
插入帧到vo的通道
【语法】
k_s32 kd_mpi_vo_chn_insert_frame(k_u32 chn_num, k_video_frame_info *vf_info)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
chn_num | 通道数量 | 输入 |
vf_info | 视频帧的结构体指针。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_video_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
从vo 的通道中抓取一帧数据
【语法】
k_s32 kd_mpi_vo_chn_dump_frame(k_u32 chn_num, k_video_frame_info *vf_info, k_u32 timeout_ms);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
chn_num | 通道id | 输入 |
vf_info | 视频帧的结构体指针 | 输入 |
timeout_ms | 超时时间 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_video_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
释放抓取帧
【语法】
k_s32 kd_mpi_vo_chn_dump_release(k_u32 chn_num, const k_video_frame_info *vf_info);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
chn_num | 通道id | 输入 |
vf_info | 视频帧的结构体指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_video_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
打开osd层
【语法】
k_s32 kd_mpi_vo_osd_enable(k_vo_osd layer)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
layer | 视频输出视频层号 取值范围 【0 – K_MAX_VO_OSD_NUM】 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
关闭osd层
【语法】
k_s32 kd_mpi_vo_osd_disable(k_vo_osd layer)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
layer | 视频输出视频层号 取值范围 【0 – K_MAX_VO_OSD_NUM】 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
设置osd层属性
【语法】
k_s32 kd_mpi_vo_set_video_osd_attr(k_vo_osd layer, k_vo_video_osd_attr *attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
layer | 视频输出视频层号 取值范围 【0 – K_MAX_VO_OSD_NUM】 | 输入 |
osd 层属性参数 | osd 层属性参数 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
设置回写属性
【语法】
k_s32 kd_mpi_vo_set_wbc_attr(k_vo_wbc_attr *attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | writeback 属性参数 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
使能writeback
【语法】
k_s32 kd_mpi_vo_enable_wbc(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
关闭writeback
【语法】
k_s32 kd_mpi_vo_disable_wbc(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
复位视频输出子系统
【语法】
k_s32 kd_display_reset(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
复位屏幕和打开背光
【语法】
k_s32 kd_display_set_backlight(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
设置用户接口时序信息,用于配置时钟源、时钟大小和时钟分频比
【语法】
k_s32 kd_mpi_vo_set_user_sync_info(k_vo_user_sync_info *sync_info)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pre_div | 用户分频数 | 输入 |
clk_en | 分频enable 使能 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
画框
【语法】
k_s32 kd_mpi_vo_draw_frame(k_vo_draw_frame *frame)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
frame | 画框的属性参数 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
获取connecor 连接器的数据结构通过连接类型
【语法】
k_s32 kd_mpi_get_connector_info(k_connector_type connector_type, k_connector_info *connector_info)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
connector_type | 连接器的类型 | 输入 |
connector_info | 连接器的数据结构 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
获取connecor 连接器的数据结构通过连接类型
【语法】
k_s32 kd_mpi_connector_open(const char *connector_name)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
connector_name | 连接器的设备节点 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
fd | 成功返回打开fd 的id |
小于0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
打开connector 的电源
【语法】
k_s32 kd_mpi_connector_power_set(k_s32 fd, k_bool on)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
fd | 连接器的设备节点 | 输入 |
on | 连接器设备的开关 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
vo connector 初始化
【语法】
k_s32 kd_mpi_connector_init(k_s32 fd, k_connector_info info)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
fd | 连接器的设备节点 | 输入 |
info | 连接器初始化的参数 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
无
【举例】
无
【相关主题】
无
【描述】
Display驱动和显示器自动协商分辨率,协商成功后会将协商后的数据保存到negotiated_data变量
【语法】
k_s32 kd_mpi_connector_get_negotiated_data(k_s32 fd, k_connector_negotiated_data *negotiated_data);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
fd | 文件描述符 | 输入 |
negotiated_data | Display驱动和HDMI显示器协商后的数据 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
>= 1 | 成功,自适应成功后Display驱动支持的分辨率数量 |
-1 | 失败,参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
kd_mpi_connector_get_negotiated_data()仅仅只会和显示器进行协商,协商成功后不会将最佳分辨率设置到VO、DSI、HDMI模块上
【举例】
无
【相关主题】
无
【描述】
Display驱动和显示器自动协商分辨率,协商成功后会将协商后的数据保存到negotiated_data变量,同时会将最佳的分辨率设置到VO、DSI、HDMI模块
【语法】
k_s32 kd_mpi_connector_adapt_resolution(k_connector_type type, k_connector_negotiated_data *negotiated_data)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
type | 连接器的设备节点,HDMI接口通常设置为LT9611_MIPI_ADAPT_RESOLUTION | 输入 |
negotiated_data | Display驱动和HDMI显示器协商后的数据 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
-1 | 失败,参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
1 kd_mpi_connector_adapt_resolution()内部通过调用kd_mpi_connector_get_negotiated_data()和显示器进行协商
2 当应用程序调用kd_mpi_connector_adapt_resolution()函数完成自适应设置后,仍然可以调用 kd_mpi_get_connector_info()、kd_mpi_connector_open()、kd_mpi_connector_power_set()、kd_mpi_connector_init()重新设置输出分辨率
【举例】
无
【相关主题】
无
【描述】
设置屏幕mirror 功能
【语法】
k_s32 kd_mpi_connector_set_mirror(k_s32 fd, k_connector_mirror mirror)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
fd | 文件描述符 | 输入 |
mirror | 屏幕mirror 的功能 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
-1 | 失败,参见错误码 |
【芯片差异】
无
【需求】
- 头文件:mpi_vo_api.h k_vo_comm.h k_connector_comm.h
- 库文件:libvo.a libconnector.a
【注意】
1 kd_mpi_connector_adapt_resolution()内部通过调用kd_mpi_connector_get_negotiated_data()和显示器进行协商
2 当应用程序调用kd_mpi_connector_adapt_resolution()函数完成自适应设置后,仍然可以调用 kd_mpi_get_connector_info()、kd_mpi_connector_open()、kd_mpi_connector_power_set()、kd_mpi_connector_init()重新设置输出分辨率
【举例】
无
【相关主题】
无
【说明】
定义视频中的分辨率和帧率
【定义】
typedef enum {
K_VO_OUT_1080P30,
K_VO_OUT_1080P60,
} k_vo_intf_sync;
【成员】
成员名称 | 描述 |
---|---|
K_VO_OUT_1080P30 | 1080 是表示1920x1080 个pix。30 表示 30fps |
K_VO_OUT_1080P60 | 1080 是表示1920x1080 个pix。60 表示 60fps |
K_VO_OUT_1080x1920P30 | 1080x1920 是表示1080x1920 个pix。30 表示 30fps |
K_VO_OUT_11080x1920P60 | 1080x1920 是表示1080x1920 个pix。60 表示 60fps |
【注意事项】
无
【相关数据类型及接口】
【说明】
定义视频中的分辨率和帧率
【定义】
typedef enum {
K_VO_INTF_MIPI = 0,
} k_vo_intf_type;
【成员】
成员名称 | 描述 |
---|---|
K_VO_INTF_MIPI | Mipi 接口 |
【注意事项】
无
【相关数据类型及接口】
【说明】
显示中layer 支持的数据格式,下边结构体中只列举了显示支持的数据格式,并不是所有的数据格式
【定义】
typedef enum {
PIXEL_FORMAT_YVU_PLANAR_420,
PIXEL_FORMAT_YVU_PLANAR_422,
PIXEL_FORMAT_RGB_565,
PIXEL_FORMAT_RGB_888,
PIXEL_FORMAT_ARGB_8888,
PIXEL_FORMAT_ARGB_4444,
PIXEL_FORMAT_ARGB_1555,
PIXEL_FORMAT_RGB_MONOCHROME_8BPP,
} k_pixel_format;
【成员】
成员名称 | 描述 |
---|---|
PIXEL_FORMAT_YVU_PLANAR_420 | YUV420 NV12 |
PIXEL_FORMAT_YVU_PLANAR_422 | YUV422 NV16 |
PIXEL_FORMAT_RGB_565 | RGB565 |
PIXEL_FORMAT_RGB_888 | RGB888 |
PIXEL_FORMAT_RGB_MONOCHROME_8BPP | 8 BIT RGB |
PIXEL_FORMAT_ARGB_8888 | ARGB8888 |
PIXEL_FORMAT_ARGB_4444 | ARGB4444 |
PIXEL_FORMAT_ARGB_1555 | ARGB1444 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
OSD 的数量和每一个osd 的编号
【定义】
typedef enum {
K_VO_OSD0,
K_VO_OSD1,
K_VO_OSD2,
K_VO_OSD3,
K_MAX_VO_OSD_NUM,
} k_vo_osd;
【成员】
成员名称 | 描述 |
---|---|
K_VO_OSD0 | 第0层osd |
K_VO_OSD1 | 第1层osd |
K_VO_OSD2 | 第2层osd |
K_VO_OSD3 | 第3层osd |
K_MAX_VO_OSD_NUM | Osd 层最大数量标志 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
layer 的数量和每一个layer的编号
【定义】
typedef enum {
K_VO_LYAER0 = 0,
K_VO_LYAER1,
K_VO_LYAER2,
K_MAX_VO_LAYER_NUM,
} k_vo_layer;
成员】
成员名称 | 描述 |
---|---|
K_VO_LYAER0 | 第0层layer |
K_VO_LYAER1 | 第1层layer |
K_VO_LYAER2 | 第2层layer |
K_VO_LYAER3 | 第3层layer |
K_MAX_VO_LAYER_NUM | layer 层最大数量标志 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
Layer rotation 支持的功能
【定义】
typedef enum {
K_ROTATION_0 = (0x01L << 0),
K_ROTATION_90 = (0x01L << 1),
K_ROTATION_180 = (0x01L << 2),
K_ROTATION_270 = (0x01L << 3),
} k_vo_rotation;
【注意事项】
无
【相关数据类型及接口】
无
【说明】
Layer mirror 支持的功能。
【定义】
typedef enum {
K_VO_MIRROR_NONE = (0x01L << 4),
K_VO_MIRROR_HOR = (0x01L << 5),
K_VO_MIRROR_VER = (0x01L << 6),
K_VO_MIRROR_BOTH = (0x01L << 7),
} k_vo_mirror_mode;
【成员】
成员名称 | 描述 |
---|---|
K_VO_MIRROR_NONE | Layer 不做mirror |
K_VO_MIRROR_HOR | Layer 只做水平mirrot |
K_VO_MIRROR_VER | Layer只做垂直mirror |
K_VO_MIRROR_BOTH | Layer做垂直和水平mirror |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
用户自定义做时钟分频。
【定义】
typedef struct {
k_u32 ext_div;
k_u32 dev_div;
k_u32 clk_en;
} k_vo_user_sync_info;
【成员】
成员名称 | 描述 |
---|---|
ext_div; | Clkext 分频 |
dev_div | Clk 分频 |
clk_en | Display 时钟使能 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
定义坐标信息结构体。
【定义】
typedef struct {
k_u32 x;
k_u32 y;
}k_vo_point;
【成员】
成员名称 | 描述 |
---|---|
x | 横坐标 |
y | 纵坐标 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
定义大小信息结构体。
【定义】
typedef struct {
k_u32 width;
k_u32 height;
} k_vo_size;
【成员】
成员名称 | 描述 |
---|---|
width | 宽度 |
height | 高度 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
定义 display layer 层属性
【定义】
typedef struct {
k_point display_rect;
k_size img_size;
k_pixel_format pixel_format;
k_u32 stride;
k_u32 uv_swap_en;
k_u32 alptha_tpye;
} k_vo_video_layer_attr;
【成员】
成员名称 | 描述 |
---|---|
display_rect; | OSD图层的的起始位置 |
img_size | 图像分辨率结构体,即合成画面的尺寸 |
pixel_format | 视频层支持的数据格式 |
stride | 图像的stride |
uv_swap_en | Uv 交换 |
alptha_tpye | Alptha 的类型,仅osd层使用。分为固定alpha(可分为256等级)、以 RGB 中R作为alpha 通道、以 RGB 中G作为alpha 通道、以 RGB 中B作为alpha 通道、以alpha 通道作为alpha |
【注意事项】
alptha_tpye 仅对osd 层使用
【相关数据类型及接口】
无
【说明】
定义 writeback属性。
【定义】
typedef struct {
k_vo_size target_size;
k_pixel_format pixel_format;
k_u32 stride;
k_u32 y_phy_addr;
} k_vo_wbc_attr;
【成员】
成员名称 | 描述 |
---|---|
target_size | 回写的目标大小 |
pixel_format | 回写的数据格式 |
pixel_format | 数据格式 |
stride; | 回写的stride |
y_addr | 图像回写的物理地址 |
【注意事项】
y_addr 需要分配空间
【相关数据类型及接口】
无
【说明】
配置视频输出设备的公共属性。
【定义】
typedef struct {
k_u32 bg_color;
k_vo_intf_type intf_type;
k_vo_intf_sync intf_sync;
k_vo_display_resolution *sync_info;
}k_vo_pub_attr;
【成员】
成员名称 | 描述 |
bg_color | 背景色 |
type | 接口类型,目前只支持mipi |
intf_sync | 视频中的分辨率和帧率 |
sync_info | 图像输出的时序 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
定义 scaler 属性
【定义】
typedef struct{
k_size in_size;
k_size out_size;
k_u32 stride;
}k_vo_scaler_attr;
【成员】
成员名称 | 描述 |
---|---|
in_size | 输入的尺寸 |
out_size | 输出的尺寸 |
stride | 输入的stride |
y_addr | 图像回写的物理地址 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
定义 画框的 属性
【定义】
typedef struct {
k_u32 draw_en;
k_u32 line_x_start;
k_u32 line_y_start;
k_u32 line_x_end;
k_u32 line_y_end;
k_u32 frame_num;
}k_vo_draw_frame;
【成员】
成员名称 | 描述 |
---|---|
draw_en | 画框使能 |
line_x_start | X 方向的起始 |
line_y_start | y方向的起始 |
line_x_end | X方向的终点未知 |
line_y_end | y方向的终点未知 |
frame_num | 当前框的num号 【0 - 16】 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
Display timing属性。
【定义】
typedef struct{
k_u32 pclk;
k_u32 phyclk;
k_u32 htotal;
k_u32 hdisplay;
k_u32 hsync_len;
k_u32 hback_porch;
k_u32 hfront_porch;
k_u32 vtotal;
k_u32 vdisplay;
k_u32 vsync_len;
k_u32 vback_porch;
k_u32 vfront_porch;
} k_vo_display_resolution;
【成员】
成员名称 | 描述 |
---|---|
pclk | Vo 的pix clk 频率 |
phyclk | d-phy 的频率 |
htotal | 一行的总像素 |
hdisplay | 一行的有效像素个数 |
hsync_len | 行同步的像素个数 |
hback_porch | 后肩 的像素个数 |
hfront_porch | 前肩 的像素个数 |
vtotal | 总行数 |
vdisplay | 一帧有效的行数 |
vsync_len | 帧同步的像素个数 |
vback_porch | 后肩 的行数 |
vfront_porch | 前肩 的行数 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
定义 mipi phy 频率的结构体
【定义】
typedef struct {
k_u32 n;
k_u32 m;
k_u32 voc;
k_u32 phy_lan_num;
k_u32 hs_freq;
}k_vo_mipi_phy_attr;
【成员】
成员名称 | 描述 |
---|---|
n | Pll 系数 |
m | Pll 系数 |
voc | Pll 系数 |
hs_freq | Phy 的频率范围 |
phy_lan_num | Phy 的lan 数量 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
配置osd层的公共属性。
【定义】
typedef struct {
k_vo_point display_rect;
k_vo_size img_size;
k_pixel_format pixel_format;
k_u32 stride;
k_u8 global_alptha;
} k_vo_video_osd_attr;
【成员】
成员名称 | 描述 |
---|---|
display_rect | 位置信息 |
img_size | 有效的size |
pixel_format | 数据格式 |
stride; | Stride |
global_alptha | 透明度 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
一帧的信息。
【定义】
typedef struct {
k_video_frame v_frame;
k_u32 pool_id;
k_mod_id mod_id;
} k_video_frame_info;
【成员】
成员名称 | 描述 |
---|---|
v_frame | 帧的信息 |
pool_id | VB pool ID |
mod_id | Video帧的id |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
连接屏幕的类型。
【定义】
typedef enum {
HX8377_V2_MIPI_4LAN_1080X1920_30FPS;
LT9611_MIPI_4LAN_1920X1080_60FPS;
LT9611_MIPI_4LAN_1920X1080_30FPS;
} k_connector_type;
【成员】
成员名称 | 描述 |
---|---|
v_frame | 帧的信息 |
HX8377_V2_MIPI_4LAN_1080X1920_30FPS | hx8377屏幕初始化 |
LT9611_MIPI_4LAN_1920X1080_60FPS | hdmi 1080p60 初始化 |
LT9611_MIPI_4LAN_1920X1080_30FPS | hdmi 1080p30 初始化 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
dsi 的 lane 数量。
【定义】
typedef enum {
K_DSI_1LAN = 0,
K_DSI_2LAN = 1,
K_DSI_4LAN = 3,
} k_dsi_lan_num;
【成员】
成员名称 | 描述 |
---|---|
K_DSI_1LAN | 1线模式 |
K_DSI_2LAN | 2线模式 |
K_DSI_4LAN | 4线模式 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
dsi 的工作模式
【定义】
typedef enum{
K_BURST_MODE = 0,
K_NON_BURST_MODE_WITH_SYNC_EVENT = 1,
K_NON_BURST_MODE_WITH_PULSES = 2,
} k_dsi_work_mode;
【成员】
成员名称 | 描述 |
---|---|
K_BURST_MODE | dsi 工作在brust mode |
K_NON_BURST_MODE_WITH_SYNC_EVENT | dsi 工作在 non brust event mode |
K_NON_BURST_MODE_WITH_PULSES | dsi 工作在 non brust pulses mode |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
dsi 发送命令的模式。
【定义】
typedef enum {
K_VO_LP_MODE,
K_VO_HS_MODE,
} k_vo_dsi_cmd_mode;
【成员】
成员名称 | 描述 |
---|---|
K_VO_LP_MODE | lp 模式发送命令 |
K_VO_HS_MODE | hs 模式发送命令 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
connector 连接器 配置phy 的信息。
【定义】
typedef struct {
k_u32 n;
k_u32 m;
k_u32 voc;
k_u32 hs_freq;
} k_connectori_phy_attr;
【成员】
成员名称 | 描述 |
---|---|
n | Pll 系数 |
m | Pll 系数 |
voc | Pll 系数 |
hs_freq | Phy 的频率范围 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
连接器的信息。
【定义】
typedef struct {
const char *connector_name;
k_u32 screen_test_mode;
k_u32 dsi_test_mode;
k_u32 bg_color;
k_u32 intr_line;
k_dsi_lan_num lan_num;
k_dsi_work_mode work_mode;
k_vo_dsi_cmd_mode cmd_mode;
k_connectori_phy_attr phy_attr;
k_vo_display_resolution resolution;
k_connector_type type;
} k_connector_info;
【成员】
成员名称 | 描述 |
---|---|
v_frame | 帧的信息 |
pool_id | VB pool ID |
mod_id | Video帧的id |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
Display驱动和HDMI显示器协商后的数据
【定义】
typedef struct {
 k_u32 connection_status;
 k_u32 negotiated_count;
 k_connector_type negotiated_types[256];
} k_connector_negotiated_data;
【成员】
成员名称 | 描述 |
---|---|
connection_status | HDMI接口连接状态 |
negotiated_count | Display驱动和HDMI显示器协商后,Display驱动支持的分辨率数量 |
negotiated_types[256] | Display驱动和HDMI显示器协商后,Display驱动支持的分辨率列表, negotiated_types[0]表示最佳分辨率 |
【注意事项】
无
【相关数据类型及接口】
无
【说明】
Display驱动的mirror 功能
【定义】
typedef enum {
 K_CONNECTOR_MIRROR_HOR = 1,
 K_CONNECTOR_MIRROR_VER,
 K_CONNECTOR_MIRROR_BOTH,
}k_connector_mirror;
【成员】
成员名称 | 描述 |
---|---|
K_CONNECTOR_MIRROR_HOR | 横向mirror |
K_CONNECTOR_MIRROR_VER | 纵向mirror |
K_CONNECTOR_MIRROR_BOTH | 横向和纵向都mirror |
【注意事项】
无
【相关数据类型及接口】
无
表 41 VO API 错误码
错误代码 | 宏定义 | 描述 |
---|---|---|
0xa00b8006 | K_ERR_VO_NULL_PTR | 参数空指针错误 |
0xa00b8001 | K_ERR_VO_INVALID_DEVID | 无效dev id |
0xa00b8002 | K_ERR_VO_INVALID_CHNID | 无效 chn id |
0xa00b8005 | K_ERR_VO_UNEXIST | 视频缓存不存在 |
0xa00b8004 | K_ERR_VO_EXIST | 视频缓存存在 |
0xa00b8003 | K_ERR_VO_ILLEGAL_PARAM | 参数设置无效 |
0xa00b8010 | K_ERR_VO_NOTREADY | vo还未就绪 |
0xa00b8012 | K_ERR_VO_BUSY | 系统忙 |
0xa00b8007 | K_ERR_VO_NOT_CONFIG | 不允许配置 |
0xa00b8008 | K_ERR_VO_NOT_SUPPORT | 不支持的操作 |
0xa00b8009 | K_ERR_VO_NOT_PERM | 操作不允许 |
0xa00b800c | K_ERR_VO_NOMEM | 分配内存失败 |
0xa00b800d | K_ERR_VO_NOBUF | 没有buff |
0xa00b800e | K_ERR_VO_BUF_EMPTY | Buf 为空 |
0xa00b800f | K_ERR_VO_BUF_FULL | Buf 为满 |
0xa00b8011 | K_ERR_VO_BADADDR | 错误的地址 |
0xa00b8012 | K_ERR_VO_BUSY | 系统忙 |