Skip to content

Latest commit

 

History

History
2599 lines (1571 loc) · 53.6 KB

K230_视频输出_API参考.md

File metadata and controls

2599 lines (1571 loc) · 53.6 KB

K230视频输出API参考

cover

版权所有©2023北京嘉楠捷思信息技术有限公司

免责声明

您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。

由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。

商标声明

logo、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。

版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

目录

[TOC]

前言

概述

本文档主要介绍视频输出系统控制模块的功能和用法,其它模块的功能和用法将各有专门的文档加以论述。

读者对象

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师
  • 软件开发工程师

缩略词定义

简称 说明
VO Video output
DSI Display Serial Interface

修订记录

文档版本号 修改说明 修改者 日期
V1.0 初版 系统软件部 2023-03-10

1. 概述

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
独立开关

1.1 硬件描述

本次硬件介绍是以evblp3 做的介绍

1.1.1 Mipi接口

在evblp3 上的硬件引脚如下:

图片包含 图示 描述已自动生成

  • 屏幕触摸iic用的iic4 (scl:gpio7,sda gpio8)
  • 屏幕触摸 rst:gpio29, int:gpio30
  • 屏幕的rst:gpio9,backlight:gpio31
  • Mipi的引脚和屏幕的引脚一一对应

1.1.2 实物图

图片包含 游戏机, 电子, 电路 描述已自动生成

  • 图中1为mipi接口,采用的是软排线
  • 图中2为mipi信号测试点、包含四路data线和一路clk线

1.2 软件描述

视频输出软件配置分为3部分配置:phy 配置、dsi配置、VO配置,

1.2.1 PHY的配置流程

phy的频率需要配置三个参数、计算PLL、配置voc、配置freq,根据这三个参数就可以确定txphy的频率,每一个的参数计算如下。

1.2.1.1 计算phy的pll

数据速率由 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处理、反推回去看哪个频率理你需要的最近,再去验证是否可用,不可以就重复上边的操作。

1.2.1.2 配置phy的voc

配置phy 的voc 可以根据表格查询即可:

表格 描述已自动生成

表格 描述已自动生成

Example:

mipi 的速率为 445.5M:所以pll的速率就是222.75M,voc = 010111 = 0x17

1.2.1.3 配置freq

配置phy 的freq 可以根据表格查询即可:

表格 描述已自动生成

表格 描述已自动生成

表格 描述已自动生成

Example:

mipi 的速率为 445.5M:pll的速率就是222.75M,freq 选择0100101, 配置这个的时候需要将最高位bit[7] = 1,所有freq = 10100101= 0xa5

1.2.2 DSI的配置

DSI(Display Serial Interface)是MIPI 定义的一组通信协议的一部分联盟,主要实现 MIPI DSI 规范中定义的所有协议功能的数字控制器,包含了具有两个和四个通道的双向 PHY。

DSI在软件中主要配置屏幕显示用的timing和发送命令的功能。

1.2.2.1 配置显示器的timing

每个厂家的屏幕都会有一组时序用来做屏幕的控制,主要包含了帧的控制时序和一行的控制时序,如下图所示:

图示 描述已自动生成

图示, 示意图 描述已自动生成

DSI中也会用到这些参数、配置的时序和屏幕一致即可。

1.2.2.2 DSI的命令下发

需要dsi 先进入lp模式、然后就可以发送命令,需要的api如下:

发送的数据是按照8位发送的,会根据数量自动选择发送长包还是短包。

1.2.2.3 DSI 的自测模式

DSI 自测模式会按照自己配置的dsi timing 产生color bar 的数据发送出去,这样不依赖vo从ddr读取数据,测试模式显示如下图:

背景图案 中度可信度描述已自动生成

DSI 和vo之间采用的是24位接口,所以配置出来的color bar 是上图的效果,使用方法只需要配置完成dsi之后使能color bar即可,api如下

1.2.3 VO的配置

VO(video output)主要是VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形,VO这部分包含两个配置、一个是timing 的配置、另一个是视频层的配置

1.2.3.1 VO 时序配置

VO的时序配置和dsi 的时序配置采用的一样的配置参数,具体的行和列一样,看dsi timing 介绍即可

V1.2.3.2 O的layer层配置

VO layer 层目前支持3个layer层、4个osd层。Layer层只能显示yuv的图像格式(layer0 和 layer1 支持的功能在概述中的图表)。

1.2.3.3 VO 的回写功能配置

VO 还支持回写功能、这个可以验证VO配置的是否正确,VO配置完成之后会将数据写回到ddr 当中,方便验证VO的配置是否出现异常

1.2.4 VO模块的调试方法

1.2.4.1 屏幕的测试方法
  • 可以通过LP命令配置屏幕进入自测模式、看产生的图像是否正常
  • 通过LP命令读取屏幕寄存器看是否有返回
1.2.4.2 DSI 的测试方法
  • 配置完dsi之后,让屏幕进入自测模式,量取信号看时候正常,也可以看屏幕是否产生color bar 的图像
  • 查看phy的err 状态寄存器、看是否有err 状态,可以通过proc查看
1.2.4.3 VO的测试方法
  • VO配置完成之后、打开writeback 功能,查看是否和配置的要求一致
  • 读取DSI的err状态寄存器,查看VO和dsi之间数据传输是否出现underflow和overflow,如果出现、适当的调整timing再次尝试

2. API 参考

2.1 TXPHY

该功能模块提供以下API:

2.1.1 kd_mpi_set_mipi_phy_attr

【描述】

设置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

【注意】

【举例】

【相关主题】

2.2 DSI

该功能模块提供以下API:

2.2.1 kd_mpi_dsi_set_attr

【描述】

配置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

【注意】

【举例】

【相关主题】

2.2.2 kd_mpi_dsi_enable

【描述】

打开dsi

【语法】

k_s32 kd_mpi_dsi_enable(void)

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件: mpi_vo_api.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.2.3 kd_mpi_dsi_send_cmd

【描述】

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

【注意】

【举例】

【相关主题】

2.2.4 kd_mpi_dsi_read_pkg

【描述】

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

【注意】

【举例】

【相关主题】

2.2.5 kd_mpi_dsi_set_test_pattern

【描述】

配置dsi 进入自测模式

【语法】

k_s32 kd_mpi_dsi_set_test_pattern(void)

【参数】、

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件: mpi_vo_api.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.2.6 kd_mpi_dsi_set_lp_mode_send_cmd

【描述】

配置dsi 进入lp mode 发送命令

【语法】

k_s32 kd_mpi_dsi_set_lp_mode_send_cmd(void)

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件: mpi_vo_api.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.3 VO

2.3.1 kd_mpi_vo_init

【描述】

Vo 初始化默认参数

【语法】

k_s32 kd_mpi_vo_init(void);

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件: mpi_vo_api.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.3.2 kd_mpi_vo_set_dev_param

【描述】

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

【注意】

【举例】

【相关主题】

2.3.3 kd_mpi_vo_enable_video_layer

【描述】

配置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

【注意】

【举例】

【相关主题】

2.3.4 kd_mpi_vo_disable_video_layer

【描述】

关闭视频层

【语法】

k_s32 kd_mpi_vo_disable_video_layer(k_vo_layer layer)

【参数】

参数名称 描述 输入/输出
layer 视频输出视频层号 取值范围 【0 – K_MAX_VO_LAYER_NUM】 输入

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件:
  • 库文件:

【注意】

【举例】

【相关主题】

2.3.5 kd_mpi_vo_enable

【描述】

打开vo

【语法】

k_u8 kd_mpi_vo_enable(void);

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件:
  • 库文件:

【注意】

【举例】

【相关主题】

2.3.6 kd_mpi_vo_chn_insert_frame

【描述】

插入帧到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

【注意】

【举例】

【相关主题】

2.3.7 kd_mpi_vo_chn_dump_frame

【描述】

从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

【注意】

【举例】

【相关主题】

2.3.8 kd_mpi_vo_chn_dump_release

【描述】

释放抓取帧

【语法】

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

【注意】

【举例】

【相关主题】

2.3.9 kd_mpi_vo_osd_enable

【描述】

打开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

【注意】

【举例】

【相关主题】

2.3.10 kd_mpi_vo_osd_disable

【描述】

关闭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

【注意】

【举例】

【相关主题】

2.3.11 kd_mpi_vo_set_video_osd_attr

【描述】

设置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

【注意】

【举例】

【相关主题】

2.3.12 kd_mpi_vo_set_wbc_attr

【描述】

设置回写属性

【语法】

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

【注意】

【举例】

【相关主题】

2.3.13 kd_mpi_vo_enable_wbc

【描述】

使能writeback

【语法】

k_s32 kd_mpi_vo_enable_wbc(void)

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件:mpi_vo_api.h k_vo_comm.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.3.14 kd_mpi_vo_disable_wbc

【描述】

关闭writeback

【语法】

k_s32 kd_mpi_vo_disable_wbc(void)

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件:mpi_vo_api.h k_vo_comm.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.3.15 kd_display_reset

【描述】

复位视频输出子系统

【语法】

k_s32 kd_display_reset(void)

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件:mpi_vo_api.h k_vo_comm.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.3.16 kd_display_set_backlight

【描述】

复位屏幕和打开背光

【语法】

k_s32 kd_display_set_backlight(void)

【参数】

【返回值】

返回值 描述
0 成功。
非0 失败,参见错误码。

【芯片差异】

【需求】

  • 头文件:mpi_vo_api.h k_vo_comm.h
  • 库文件:libvo.a

【注意】

【举例】

【相关主题】

2.3.17 kd_mpi_vo_set_user_sync_info

【描述】

设置用户接口时序信息,用于配置时钟源、时钟大小和时钟分频比

【语法】

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

【注意】

【举例】

【相关主题】

2.3.18 kd_mpi_vo_draw_frame

【描述】

画框

【语法】

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

【注意】

【举例】

【相关主题】

2.3.19 kd_mpi_get_connector_info

【描述】

获取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

【注意】

【举例】

【相关主题】

2.3.20 kd_mpi_connector_open

【描述】

获取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

【注意】

【举例】

【相关主题】

2.3.21 kd_mpi_connector_power_set

【描述】

打开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

【注意】

【举例】

【相关主题】

2.3.22 kd_mpi_connector_init

【描述】

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

【注意】

【举例】

【相关主题】

2.3.23 kd_mpi_connector_get_negotiated_data

【描述】

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模块上

【举例】

【相关主题】

2.3.24 kd_mpi_connector_adapt_resolution

【描述】

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()重新设置输出分辨率

【举例】

【相关主题】

2.3.25 kd_mpi_connector_set_mirror

【描述】

设置屏幕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()重新设置输出分辨率

【举例】

【相关主题】

3. 数据类型

3.1 VO

3.1.1 k_vo_intf_sync

【说明】

定义视频中的分辨率和帧率

【定义】

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

【注意事项】

【相关数据类型及接口】

3.1.2 k_vo_intf_type

【说明】

定义视频中的分辨率和帧率

【定义】

typedef enum {
 K_VO_INTF_MIPI = 0,
} k_vo_intf_type;

【成员】

成员名称 描述
K_VO_INTF_MIPI Mipi 接口

【注意事项】

【相关数据类型及接口】

3.1.3 k_pixel_format

【说明】

显示中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

【注意事项】

【相关数据类型及接口】

3.1.4 k_vo_osd

【说明】

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 层最大数量标志

【注意事项】

【相关数据类型及接口】

3.1.5 k_vo_layer

【说明】

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 层最大数量标志

【注意事项】

【相关数据类型及接口】

3.1.6 k_vo_rotation

【说明】

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;

【注意事项】

【相关数据类型及接口】

3.1.7 k_vo_mirror_mode

【说明】

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

【注意事项】

【相关数据类型及接口】

3.1.8 k_vo_user_sync_info

【说明】

用户自定义做时钟分频。

【定义】

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 时钟使能

【注意事项】

【相关数据类型及接口】

3.1.9 k_vo_point

【说明】

定义坐标信息结构体。

【定义】

typedef struct {
 k_u32 x;
 k_u32 y;
}k_vo_point;

【成员】

成员名称 描述
x 横坐标
y 纵坐标

【注意事项】

【相关数据类型及接口】

3.1.10 k_vo_size

【说明】

定义大小信息结构体。

【定义】

typedef struct {
 k_u32 width;
 k_u32 height;
} k_vo_size;

【成员】

成员名称 描述
width 宽度
height 高度

【注意事项】

【相关数据类型及接口】

3.1.11 k_vo_video_layer_attr

【说明】

定义 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 层使用

【相关数据类型及接口】

3.1.12 k_vo_wbc_attr

【说明】

定义 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 需要分配空间

【相关数据类型及接口】

3.1.13 k_vo_pub_attr

【说明】

配置视频输出设备的公共属性。

【定义】

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 图像输出的时序

【注意事项】

【相关数据类型及接口】

3.1.14 k_vo_scaler_attr

【说明】

定义 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 图像回写的物理地址

【注意事项】

【相关数据类型及接口】

3.1.15 k_vo_draw_frame

【说明】

定义 画框的 属性

【定义】

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】

【注意事项】

【相关数据类型及接口】

3.1.16 k_vo_display_resolution

【说明】

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 前肩 的行数

【注意事项】

【相关数据类型及接口】

3.1.17 k_vo_mipi_phy_attr

【说明】

定义 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 数量

【注意事项】

【相关数据类型及接口】

3.1.18 k_vo_video_osd_attr

【说明】

配置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 透明度

【注意事项】

【相关数据类型及接口】

3.1.19 k_video_frame_info

【说明】

一帧的信息。

【定义】

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

【注意事项】

【相关数据类型及接口】

3.1.20 k_connector_type

【说明】

连接屏幕的类型。

【定义】

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 初始化

【注意事项】

【相关数据类型及接口】

3.1.21 k_dsi_lan_num

【说明】

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线模式

【注意事项】

【相关数据类型及接口】

3.1.22 k_dsi_work_mode

【说明】

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

【注意事项】

【相关数据类型及接口】

3.1.23 k_vo_dsi_cmd_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 模式发送命令

【注意事项】

【相关数据类型及接口】

3.1.24 k_connectori_phy_attr

【说明】

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 的频率范围

【注意事项】

【相关数据类型及接口】

3.1.25 k_connector_info

【说明】

连接器的信息。

【定义】

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

【注意事项】

【相关数据类型及接口】

3.1.26 k_connector_negotiated_data

【说明】

Display驱动和HDMI显示器协商后的数据

【定义】

typedef struct {  
&emsp;k_u32 connection_status;  
&emsp;k_u32 negotiated_count;  
&emsp;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]表示最佳分辨率

【注意事项】

【相关数据类型及接口】

3.1.27 k_connector_mirror

【说明】

Display驱动的mirror 功能

【定义】

typedef enum {  
&emsp;K_CONNECTOR_MIRROR_HOR = 1,  
&emsp;K_CONNECTOR_MIRROR_VER,  
&emsp;K_CONNECTOR_MIRROR_BOTH,  
}k_connector_mirror;

【成员】

成员名称 描述
K_CONNECTOR_MIRROR_HOR 横向mirror
K_CONNECTOR_MIRROR_VER 纵向mirror
K_CONNECTOR_MIRROR_BOTH 横向和纵向都mirror

【注意事项】

【相关数据类型及接口】

4. 错误码

表 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 系统忙