概述¶
VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形。解决方案支持的显示/回写设备、视频层和图形层情况如表1所示。
表 1 解决方案支持的显示/回写设备、视频层和图形层
解决方案 |
超高清显示设备DHD0 |
高清显示设备DHD1 |
标清显示设备DSD0 |
回写设备WD |
||||||
|---|---|---|---|---|---|---|---|---|---|---|
SS528V100 |
视频层VHD0 |
视频层VHD2 |
图形层G0 图形层G2 图形层G3 |
视频层VHD1 |
视频层VHD2 |
图形层G1 图形层G2 图形层G3 |
视频层VSD0 |
图形层G2 图形层G3 |
设备级回写自DHD0/DHD1 |
视频层回写自VHD0/VHD1 |
SS625V100 |
视频层VHD0 |
视频层VHD2 |
图形层G0 图形层G2 图形层G3 |
视频层VHD1 |
视频层VHD2 |
图形层G1 图形层G2 图形层G3 |
视频层VSD0 |
图形层G2 图形层G3 |
设备级回写自DHD0/DHD1 |
视频层回写自VHD0/VHD1 |
SS524V100 |
视频层VHD0 |
视频层VHD2 |
图形层G0 图形层G2 图形层G3 |
视频层VHD1 |
视频层VHD2 |
图形层G1 图形层G2 图形层G3 |
视频层VSD0 |
图形层G2 图形层G3 |
设备级回写自DHD0/DHD1 |
视频层回写自VHD0/VHD1 |
SS522V101 |
视频层VHD0 |
视频层VHD2 |
图形层G0 图形层G2 图形层G3 |
- |
- |
- |
视频层VSD0 |
图形层G2 图形层G3 |
设备级回写自DHD0 |
视频层回写自VHD0 |
SS928V100 |
视频层VHD0 |
视频层VHD2 |
图形层G0 图形层G3 |
视频层VHD1 |
视频层VHD2 |
图形层G1 图形层G3 |
- |
- |
- |
- |
SS626V100 |
视频层VHD0 |
视频层VHD2 |
图形层G0 图形层G2 图形层G3 |
视频层VHD1 |
视频层VHD2 视频层VSD0 |
图形层G1 图形层G2 图形层G3 图形层G4 |
视频层VSD0 |
图形层G2 图形层G4 |
设备级回写自DHD0/DHD1 |
视频层回写自VHD0/VHD1 |
注:缩写解释
DHD0:Device HD0,高清设备0。
DHD1:Device HD1,高清设备1。
DSD0:Device SD0,标清设备0。
VHD0:Video layer of DHD0,视频层0。
VHD1:Video layer of DHD1,视频层1。
VHD2:Video PIP layer,视频层2。
VSD0:Video layer of DSD0,标清视频层0。
图形层G0:Graphic layer 0,图形层0。
图形层G1:Graphic layer 1,图形层1。
图形层G2:Graphic layer 2,图形层2。
图形层G3:Graphic layer 3,图形层3。
图形层G4:Graphic layer 4,图形层4。
WD:Write Back Channel Device,回写通道设备。
基本概念¶
超高清、高清和标清显示设备
SDK将高清和标清显示设备分别标示为DHDx(Device High Definition x)和DSDx(Device Standard Definition x),其中,x为索引号,从0开始取值,表示第几路高清/标清显示设备。例如第0路高清设备标示为DHD0,第0路标清显示设备标示为DSD0。所有高清和标清显示设备又可分别简称为HD和SD设备。由于DHD0能够支持到4K(3840x2160)的时序,因此DHD0也可以称之为超高清显示设备。
视频层
对于固定在每个显示设备上面对应的视频层,SDK也对应采取VHDx(Video layer of HD x)和VSDx(Video layer of SD x)来标示。解决方案支持显示设备的情况请参见表1。HD设备功能对比参考表1。VHD视频层功能对比如表2所示。视频层和显示设备的实际显示分辨率依赖于具体输出接口,设备上视频输出接口支持的最大时序见表1所示。
表 1 解决方案设备和输出接口时序规格
解决方案 |
设备号 |
输出接口 |
最大输出时序 |
叠加拼接显示 |
|---|---|---|---|---|
SS528V100 |
DHD0 |
HDMI |
4096x2160@60 |
PIP层可绑定到此设备上,且可以修改VHD0和VHD2层的优先级,VGS叠加。 |
BT.1120 |
3840x2160@30 |
|||
VGA |
2560x1600@60 |
|||
DHD1 |
HDMI |
4096x2160@30 |
PIP层可绑定到此设备上,且可以修改VHD1和VHD2层的优先级,VGS叠加 |
|
BT.1120 |
3840x2160@30 |
|||
VGA |
2560x1600@60 |
|||
DSD0 |
CVBS |
PAL, NTSC |
VGS叠加 |
|
SS625V100 |
DHD0 |
HDMI |
4096x2160@30 |
PIP层可绑定到此设备上,且可以修改VHD0和VHD2层的优先级,VGS叠加。 |
BT.1120 |
1920x1080@60 |
|||
VGA |
2560x1600@60 |
|||
DHD1 |
HDMI |
2560x1600@60 |
PIP层可绑定到此设备上,且可以修改VHD1和VHD2层的优先级,VGS叠加 |
|
BT.1120 |
2560x1600@60 |
|||
VGA |
1920x1080@60 |
|||
DSD0 |
CVBS |
PAL, NTSC |
VGS叠加 |
|
SS524V100 |
DHD0 |
HDMI |
3840x2160@30 |
PIP层可绑定到此设备上,且可以修改VHD0和VHD2层的优先级,VGS叠加。 |
BT.1120 |
1920x1080@60 |
|||
VGA |
2560x1600@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
DHD1 |
HDMI |
1920x1080@60 |
PIP层可绑定到此设备上,且可以修改VHD1和VHD2层的优先级,VGS叠加 |
|
BT.1120 |
1920x1080@60 |
|||
VGA |
1920x1080@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
DSD0 |
CVBS |
PAL, NTSC |
VGS叠加 |
|
SS522V101 |
DHD0 |
HDMI |
3840x2160@30 |
PIP层可绑定到此设备上,且可以修改VHD0和VHD2层的优先级,VGS叠加。 |
BT.1120 |
1920x1080@60 |
|||
VGA |
1920x1080@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
RGB_16BIT RGB_18BIT RGB_24BIT |
1280x720@60(需配置用户时序) |
|||
DSD0 |
CVBS |
PAL, NTSC |
VGS叠加 |
|
SS928V100 |
DHD0 |
HDMI |
3840x2160@60 |
PIP层可绑定到此设备上,且可以修改VHD0和VHD2层的优先级,VGS叠加。 |
MIPI MIPI_SLAVE |
3840x2160@60 |
|||
BT.1120 |
1920x1080@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
RGB_6BIT RGB_8BIT RGB_16BIT RGB_18BIT RGB_24BIT |
1920x1080@60(需配置用户时序) |
|||
DHD1 |
MIPI MIPI_SLAVE |
1920x1080@60 |
PIP层可绑定到此设备上,且可以修改VHD1和VHD2层的优先级,VGS叠加 |
|
BT.1120 |
1920x1080@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
RGB_6BIT RGB_8BIT RGB_16BIT RGB_18BIT RGB_24BIT |
1920x1080@60(需配置用户时序) |
|||
CVBS |
PAL, NTSC |
|||
SS626V100 |
DHD0 |
HDMI HDMI1 |
4096x2160@60 |
PIP层可绑定到此设备上,且可以修改VHD0和VHD2层的优先级,VGS叠加。 |
BT.1120 |
3840x2160@30 |
|||
VGA |
2560x1600@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
DHD1 |
HDMI HDMI1 |
4096x2160@60 |
PIP层可绑定到此设备上,且可以修改VHD1和VHD2层的优先级,VGS叠加 |
|
BT.1120 |
3840x2160@30 |
|||
VGA |
2560x1600@60 |
|||
BT.656 |
1920x1080@30(需配置用户时序) |
|||
DSD0 |
CVBS |
PAL, NTSC |
VGS叠加 |
须知: 2160P@60fps时序输出时,存在性能限制:G0层ARGB8888格式所支持的最大分辨率为1080P。建议此时G0层采用1080P分辨率(格式不限)、同时开启图形层放大功能,将G0层在线放大到2160P进行显示;或者采用2160P分辨率、ARGB1555或ARGB4444格式。 所有时序参数配置时,接口都应该关闭,配置完成后再使能接口。
SS528V100输出性能受输入数据带宽限制,视频SP420格式最大支持总共2160p@90fps输入,图形ARGB1555格式最大支持总共2160p@75fps输入。具体使用可参照如下示例:
DHD0、DHD1、DSD0分别使用2160p@60fps、1080p@60fps、D1@60fps同时输出时,PIP层V2输入最大支持1080P,G0输入为ARGB8888格式时最大支持1080P(配合在线放大)、输入为ARGB1555格式时最大支持2160P。
DHD0、DHD1、DSD0分别使用2160p@30fps、2160p@30fps、D1@60fps同时输出时,PIP层V2输入最大支持2160P,G0输入为ARGB8888格式时最大支持1080P(配合在线放大)、输入为ARGB1555格式时最大支持2160P,G1输入为ARGB8888格式时最大支持1080P(非全屏)、ARGB1555格式时最大支持2160P。
DHD0、DHD1、DSD0分别使用2160p@30fps、1080p@60fps、D1@60fps同时输出时,PIP层V2输入最大支持2160P,G0输入为ARGB8888格式时最大支持1080P(配合在线放大)、输入为ARGB1555格式时最大支持2160P。
DHD0、DSD0分别使用2160p@60fps、D1@60fps同时输出,DHD1不输出时,PIP层V2输入最大支持2160P,G0输入为ARGB8888格式最大支持1080P(配合在线放大)、输入为ARGB1555格式时最大支持2160P。
表 2 解决方案视频层规格
解决方案
视频层
动态绑定能力
缩放能力
VO解压能力
支持通道数
SINGLE模式
MULTI模式
SS528V100
VHD0
不支持
(固定绑定在对应的DHD0设备上)
支持放大
支持通道解压,支持行解压
64
64
VHD1
不支持
(固定绑定在对应的DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
64
64
VHD2
支持
(可以选择绑定在DHD0、DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
64
-
VSD0
不支持
(固定绑定在对应的DSD0设备上)
不支持
不支持
64
-
SS625V100
VHD0
不支持
(固定绑定在对应的DHD0设备上)
支持放大
支持通道解压,支持行解压
49
49
VHD1
不支持
(固定绑定在对应的DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
49
49
VHD2
支持
(可以选择绑定在DHD0、DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
49
-
VSD0
不支持
(固定绑定在对应的DSD0设备上)
不支持
不支持
49
-
SS524V100
VHD0
不支持
(固定绑定在对应的DHD0设备上)
支持放大
支持通道解压,支持行解压
64
16
VHD1
不支持
(固定绑定在对应的DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压(仅SINGLE模式支持非紧凑段解压)
64
16
VHD2
支持
(可以选择绑定在DHD0、DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
64
-
VSD0
不支持
(固定绑定在对应的DSD0设备上)
不支持
不支持
64
-
SS522V101
VHD0
不支持
(固定绑定在对应的DHD0设备上)
支持放大
支持通道解压,支持行解压
64
16
VHD2
支持
(可以选择绑定在DHD0设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
64
-
VSD0
不支持
(固定绑定在对应的DSD0设备上)
不支持
不支持
64
-
SS928V100
VHD0
不支持
(固定绑定在对应的DHD0设备上)
不支持
支持通道解压,支持紧凑段解压和非紧凑段解压(仅SINGLE模式支持解压)
64
64
VHD1
不支持
(固定绑定在对应的DHD1设备上)
不支持
不支持
64
-
VHD2
支持
(可以选择绑定在DHD0、DHD1设备上)
不支持
不支持
64
-
SS626V100
VHD0
不支持
(固定绑定在对应的DHD0设备上)
不支持
支持通道解压,支持行解压
128
64
VHD1
不支持
(固定绑定在对应的DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压(仅SINGLE模式支持非紧凑段解压)
128
64
VHD2
支持
(可以选择绑定在DHD0、DHD1设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
128
-
VSD0
支持
(可以选择绑定在DHD1、DSD0设备上)
不支持
支持通道解压,支持行解压和非紧凑段解压
128
-
视频回写
将回写设备称之为WD(Write Back Channel Device)。回写功能:捕获视频层和设备级的视频数据,可用于显示和编码。回写设备的使用依赖于被回写的设备,既可以回写设备级(视频层与图形层叠加后)的视频数据,也可以回写视频层的数据。
通道
SDK将通道归属于视频层管理,一个视频层上可显示多个视频,每一个视频显示区域称为一个通道,视频被限制通道内,通道被限制在视频层内。对于一个视频层,其上面的通道都是独立的。同时,不同的视频层上的通道也是独立的。对于通道的排号上面不存在跨层的连续。
对于系统绑定,应该使用视频层号和通道号来进行绑定配置;另外,对于回写的图像作为输出源时,需要使用回写内容所在的设备号和0通道号进行绑定配置。
SINGLE模式下:源图像缩放到通道区域大小。
MULTI模式下:显示为源图像与通道显示区域交集。
视频层放大
视频层支持放大情况下:img_size<display_rect时,img_size放大(最大放大15倍)到display_rect显示;img_size>display_rect时,显示为img_size与display_rect的交集。
视频层不支持放大情况下:显示为img_size与display_rect的交集。
对于SS528V100/SS625V100/SS928V100,所有视频层MULTI模式下不支持放大。对于SS524V100/SS522V101,支持放大的视频层在MULTI模式下仅支持全屏放大,即display_rect等于设备大小,否则显示为img_size与display_rect的交集。对于SS626V100,不支持视频层放大功能。
须知:
裁剪是指视频层属性中画布大小img_size中的宽高大于显示设备分辨率大小display_rect中的宽高时,对画布进行裁剪以符合显示分辨率大小。
缩放是指视频层属性中显示设备分辨率大小display_rect中的宽高大于画布大小img_size中的宽高时,对画布进行放大以符合显示分辨率大小。
通道优先级
VO软件上支持多个通道同时输出显示,按照优先级顺序对输出图像进行叠加,当各个通道的画面有重叠区域时,优先级高的图像显示在上层,如果各个通道优先级一致,则通道号越大的默认优先级越高。
分辨率
分辨率主要有以下3种概念:
设备分辨率指该设备的输出有效像素点数,由设备时序决定。
显示分辨率指画面在显示设备上的有效显示区域,由视频层属性中的display_rect成员决定。
画布分辨率指VGS拼接时使用的一块输出视频数据的内存区域,由视频层属性中的img_size决定。直通时无此定义。
图像分辨率指图像本身的有效像素点数,由实际的显示图像分辨率决定。
局部放大
通道支持将显示画面上的一部分图像进行放大显示,放大显示的源区域从源图像上截取,放大显示的目标区域是该显示通道的通道大小;
局部放大在水平方向和垂直方向所支持的最大比例为16倍。
视频层或图形层绑定
视频层或图形层绑定是指支持将特定的某个视频层或图形层绑定到某个设备上,可动态绑定的视频层或图形层默认绑定到的设备见ss_mpi_vo_bind_layer。
以SS528V100的图形层为例,支持4个图形层(G0,G1,G2,G3),G0固定绑定到DHD0上,G1固定绑定到DHD1上,即G0只能与VHD0叠加显示,G1只能与VHD1叠加显示;G2和G3可动态绑定到DHD0,DHD1,DSD0,即G2和G3或者与VHD0叠加显示,或者与VHD1叠加显示,或者与VSD0叠加显示,G2默认绑定在DHD0上,G3默认绑定在DSD0上。
单画面直通模式
单画面直通模式是指在SINGLE模式下,VO通道中的图像不经过VGS模块处理而直接显示出来,节省一次VGS搬移过程,并且VO无需申请私有内存,但是需要满足以下条件才会选择走直通模式:
VO通道使能,且只有一个通道显示;
VO没有显示OSD和COVER;
VO没有使能画线;
VO没有使能角框;
VO没有使能边框(或使能边框,且设置边框上下左右宽度全为0);
VO没有使能抗闪;
VO没有电子放大;
VO没有开启镜像;
VO通道图像像素格式和视频层设置的像素格式一致;
VO通道图像视频格式为LINEAR(包括LINEAR DISCRETE格式)
VO通道图像大小(FrameSize)=通道大小(ChnRect)=画布大小(ImageSize)
视频层输入图像帧起始地址要16字节对齐;
视频层输入图像压缩格式满足VO视频层硬件解压能力时,具体视频层支持解压能力见表2;
VO接收到的数据不具有以下特征:紧凑段压缩且带有mirror帧标记;mirror帧标记可通过VO的直接前级模块(如VPSS接口ss_mpi_vpss_set_chn_attr)设置。(仅适用于SS928V100)
如果不满足直通模式的条件,由于VO默认不分配内存,因此需要在使能视频层之前调ss_mpi_vo_set_video_layer_attr接口设置缓冲长度来确定分配内存,否则VO将不会输出视频显示。
解压和压缩
视频数据解压。支持输入源图像是压缩数据(格式为行压缩),VO会进行解压显示。解压功能是视频层的功能,在MULTI模式下(MULTI模式见基本概念“SINGLE模式和MULTI模式”)所有视频层支持的压缩模式或压缩模式组合见表3。SINGLE模式下,若VO支持解压缩能力,则由VO进行解压缩,否则将调用VGS进行解压缩。
表 3 解决方案视频层解压缩规格
解决方案 |
视频层 |
输入 |
MULTI模式 |
SINGLE模式 |
|---|---|---|---|---|
SS528V100/SS625V100 |
VHD0 |
非压缩图像 |
支持 |
支持 |
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
不支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
TILE压缩 |
不支持 |
|||
VHD1 |
非压缩图像 |
支持 |
同VHD0 |
|
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
TILE压缩 |
不支持 |
|||
VHD2/VSD0 |
非压缩图像 |
不涉及 (不支持MULTI模式) |
同VHD0 |
|
行压缩图像 |
||||
非紧凑段压缩图像 |
||||
紧凑型段压缩图像 |
||||
同时非压和行压 |
||||
同时非压和非紧凑段压 |
||||
同时行压和非紧凑段压 |
||||
同时非压,行压和非紧凑段压 |
||||
TILE压缩 |
||||
SS524V100 |
VHD0 |
非压缩图像 |
支持 |
支持 |
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
不支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
TILE压缩 |
不支持 |
|||
VHD1 |
非压缩图像 |
支持 |
同VHD0 |
|
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
不支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
其他LINEAR格式图像 |
不支持 |
|||
VHD2/VSD0 |
非压缩图像 |
不涉及 (不支持MULTI模式) |
同VHD0 |
|
行压缩图像 |
||||
非紧凑段压缩图像 |
||||
紧凑型段压缩图像 |
||||
同时非压和行压 |
||||
同时非压和非紧凑段压 |
||||
同时行压和非紧凑段压 |
||||
同时非压,行压和非紧凑段压 |
||||
TILE压缩 |
||||
SS522V101 |
VHD0 |
非压缩图像 |
支持 |
支持 |
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
不支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
TILE压缩 |
不支持 |
|||
VHD2/VSD0 |
非压缩图像 |
不涉及 (不支持MULTI模式) |
同VHD0 |
|
行压缩图像 |
||||
非紧凑段压缩图像 |
||||
紧凑型段压缩图像 |
||||
同时非压和行压 |
||||
同时非压和非紧凑段压 |
||||
同时行压和非紧凑段压 |
||||
同时非压,行压和非紧凑段压 |
||||
TILE压缩 |
||||
SS928V100 |
VHD0 |
非压缩图像 |
支持 |
支持 |
行压缩图像 |
不支持 |
不支持 |
||
非紧凑段压缩图像 |
支持 |
|||
紧凑型段压缩图像 |
||||
同时非压和行压 |
不支持 |
|||
同时非压和非紧凑段压 |
支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
||||
TILE压缩 |
支持 |
|||
VHD1/VHD2 |
非压缩图像 |
不涉及 (不支持MULTI模式) |
同VHD0 |
|
行压缩图像 |
||||
非紧凑段压缩图像 |
||||
紧凑型段压缩图像 |
||||
同时非压和行压 |
||||
同时非压和非紧凑段压 |
||||
同时行压和非紧凑段压 |
||||
同时非压,行压和非紧凑段压 |
||||
其他LINEAR格式图像 |
||||
SS626V100 |
VHD0 |
非压缩图像 |
支持 |
支持 |
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
不支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
TILE压缩 |
不支持 |
|||
VHD1 |
非压缩图像 |
支持 |
同VHD0 |
|
行压缩图像 |
支持 |
|||
非紧凑段压缩图像 |
不支持 |
|||
紧凑型段压缩图像 |
不支持 |
|||
同时非压和行压 |
支持 |
|||
同时非压和非紧凑段压 |
不支持 |
|||
同时行压和非紧凑段压 |
不支持 |
|||
同时非压,行压和非紧凑段压 |
不支持 |
|||
其他LINEAR格式图像 |
不支持 |
|||
VHD2/VSD0 |
非压缩图像 |
不涉及 (不支持MULTI模式) |
同VHD0 |
|
行压缩图像 |
||||
非紧凑段压缩图像 |
||||
紧凑型段压缩图像 |
||||
同时非压和行压 |
||||
同时非压和非紧凑段压 |
||||
同时行压和非紧凑段压 |
||||
同时非压,行压和非紧凑段压 |
||||
TILE压缩 |
低功耗策略
VO模块使用低功耗策略,在模块加载后或者设备禁用后VO时钟是关闭的,这时候手动读写VO模块的寄存器可能会有读写错误或者卡死的现象。
旋转
VO支持对进入通道前的图像进行旋转操作。对通道设置旋转角度,旋转是作用于进入通道前的图像的。旋转的典型应用是将DHD0上的图像回写出来,送到DHD1显示,若DHD1接的是竖屏,则可设置DHD1上的通道旋转90度或270度进行显示。
输入和输出数据格式
VO支持输入和输出指定格式的数据,其中,输出是指回写数据到DDR。支持的输入输出数据格式见解决方案支持的输入输出数据格式表。表中PIXEL FORMAT、VIDEO FORMAT、 COMPRESS MODE和DYNAMIC RANGE项分别列出了支持的输入输出像素格式、视频格式、压缩模式和视频动态范围,表中数据格式可参“2 系统控制”章节。
特别说明:
VO支持TILE格式仅在SINGLE模式时调用VGS支持。
VO支持LINEAR格式的SEG_COMPACT压缩模式仅在SINGLE模式时调用VGS支持。
表 4 解决方案支持的输入输出数据格式
解决方案 |
数据格式 |
输入 |
输出 |
|---|---|---|---|
SS528V100 |
PIXEL FORMAT |
|
|
VIDEO FORMAT |
|
LINEAR |
|
COMPRESS MODE |
|
NONE SEG |
|
DYNAMIC RANGE |
SDR8 |
SDR8 |
|
COLOR GAMUT |
|
|
|
SS625V100 |
PIXEL FORMAT |
|
|
VIDEO FORMAT |
|
LINEAR |
|
COMPRESS MODE |
|
|
|
DYNAMIC RANGE |
SDR8 |
SDR8 |
|
COLOR GAMUT |
|
|
|
SS524V100/SS522V101 |
PIXEL FORMAT |
|
|
VIDEO FORMAT |
|
LINEAR |
|
COMPRESS MODE |
|
|
|
DYNAMIC RANGE |
SDR8 |
SDR8 |
|
COLOR GAMUT |
|
|
|
SS928V100 |
PIXEL FORMAT |
|
- |
VIDEO FORMAT |
|
- |
|
COMPRESS MODE |
|
- |
|
DYNAMIC RANGE |
SDR8 |
- |
|
COLOR GAMUT |
|
- |
|
SS626V100 |
PIXEL FORMAT |
|
|
VIDEO FORMAT |
|
LINEAR |
|
COMPRESS MODE |
|
|
|
DYNAMIC RANGE |
SDR8 |
SDR8 |
|
COLOR GAMUT |
|
|
SINGLE模式和MULTI模式
SINGLE模式和MULTI模式是对支持多区域的视频层而言的,即硬件支持多区域,见解决方案视频层规格表的“支持通道数——MULTI模式”列,为区别于软件上的通道概念,此处称为多区域。SINGLE模式表示在硬件上配置一个显示区域,MULTI模式是在硬件上配置多个显示区域(大于等于1个区域)。注意将多区域与通道区别开来,SINGLE模式和MULTI模式下都可以实现多通道显示,前者其所有通道被组织成一幅图像显示在一个区域内,后者其每个通道独立并独占一个显示区域。另外,一个视频层只能工作在其中一种模式下。
像素格式转换
SINGLE模式非直通时支持像素格式转换,如果输入图像的像素格式和视频层的像素格式不相同,可调用VGS做像素格式转换。
MULTI模式下不支持像素格式转换,输入图像的像素格式须和视频层像素格式相同。
虚拟设备
虚拟设备是软件上的概念,没有实际对应的物理设备。
内部处理流程:虚拟设备只支持SINGLE模式,通过VGS实现缩放,并叠加为一整幅图像。
发送虚拟设备图像:虚拟设备支持通过用户态线程调用ss_mpi_vo_get_screen_frame接口获取虚拟设备对应视频层的图像,并发送给其他模块;也支持sys_bind的方式在内核态向其他模块发送虚拟设备图像。
时序限制:根据用户设置的时序,虚拟设备决定VGS最终叠加出来的图像大小和帧率。例如:虚拟设备的时序被设置为1080P60,虚拟设备将发送1920x1080@60fps的图像给其他模块。需要注意的是,这里是在理论情况下的假定,虚拟设备的输出时序,还需考虑VGS的性能和以及当前整系统的总业务量大小。
支持OT_VO_MAX_VIRT_DEV_NUM个虚拟设备,设备号为(OT_VO_VIRT_DEV_0)~(OT_VO_VIRT_DEV_0 + OT_VO_MAX_VIRT_DEV_NUM-1),对应的虚拟视频层为ot_vo_get_virt_layer (vo_virt_dev),每个虚拟视频层上最多支持OT_VO_MAX_CHN_NUM个通道。
负载检测
设备输出接口为OT_VO_INTF_CVBS和OT_VO_INTF_VGA时,支持自动负载检测。
基本原理:周期性检测CVBS和VGA接口是否有线缆连接,当检测到没有线缆连接时,驱动会自动将DAC下电从而达到降低功耗的目的。
配置检测周期:可通过配置VO模块参数vdac_detect_cycle来配置负载检测周期,检测周期以帧中断为单位,例如vdac_detect_cycle=50,设备CVBS接口输出配置时序为OT_VO_OUT_PAL时,检测周期为2秒(50/25), 当配置时序为OT_VO_OUT_NTSC时,检测周期为1.67秒(50/30)。当配置负载检测周期为0时,将关闭自动负载检测功能。
数据透传
数据透传,即vo bypass功能。数据输入VO,VO内部不对数据进行修改(不调用对数据有修改的接口),通过特定接口(BT.1120或MIPI)将数据传输出去,输入数据与输出数据保持不变,详见接口ss_mpi_vo_set_dev_param。
低延时
VO支持低延时帧输入,对接前端低延时输出帧。VO仅在single模式下支持输入低延时帧,且输入低延时帧时不能开启旋转。非bypass的情况下VO调用VGS后返回的是非低延时的帧。multi模式时VO会直接丢帧。SS626V100不支持低延时帧输入VGS。
注:仅SS928V100/SS626V100 VHD0、VHD1视频层支持。
角框功能
角框相关属性如图1所示,每个角框以下属性独立可配:x, y, width, height, hor_length, ver_length。在VO中,VGS一次任务或者一帧图像中所有角框的颜色和类型(角框、线框)一致,颜色和类型以区域层次最大的角框为准,区域层次相同时,则以最后一个角框为准。
图 1 角框示意图

API参考¶
视频输出(VO)实现启用视频输出设备或通道、发送视频数据到输出通道等功能。该功能模块提供以下API(Application Programming Interface,应用程序编程接口),下面分别从设备、视频层、通道、回写、图形层等方面进行介绍:
注意:以下接口参数中的设备号、接口类型、视频层号、通道号、回写设备号、图形层号取值范围为通用范围,对于不同解决方案,物理设备和接口的具体取值范围参见表1、表1和表2。
设备相关API如下:
ss_mpi_vo_enable:使能视频输出设备。
ss_mpi_vo_disable:禁用视频输出设备。
ss_mpi_vo_set_pub_attr:设置视频输出设备的公共属性。
ss_mpi_vo_get_pub_attr:获取视频输出设备的公共属性。
ss_mpi_vo_set_dev_param:设置视频输出设备的参数。
ss_mpi_vo_get_dev_param:获取视频输出设备的参数。
ss_mpi_vo_close_fd:关闭所有视频输出设备的Fd。
ss_mpi_vo_set_dev_frame_rate:设置设备用户时序下设备帧率。
ss_mpi_vo_get_dev_frame_rate:获取设备帧率。
ss_mpi_vo_set_user_sync_info:设置用户接口时序信息。
ss_mpi_vo_get_user_sync_info:获取用户接口时序信息。
ss_mpi_vo_set_mod_param:设置模块参数。
ss_mpi_vo_get_mod_param:获取模块参数。
ss_mpi_vo_set_vtth:设置设备垂直时序中断门限。
ss_mpi_vo_get_vtth:获取设备垂直时序中断门限。
ss_mpi_vo_set_less_buf_attr:设置设备省buffer属性信息。
ss_mpi_vo_get_less_buf_attr:获取设备省buffer属性信息。
ss_mpi_vo_set_user_notify_attr:设置设备用户通知属性信息。
ss_mpi_vo_get_user_notify_attr:获取设备用户通知属性信息。
接口相关API如下:
ss_mpi_vo_query_intf_status:查询设备接口的连接状态。
ss_mpi_vo_set_vga_param:设置设备VGA接口输出图像效果。
ss_mpi_vo_get_vga_param:获取设备VGA接口输出图像效果。
ss_mpi_vo_set_hdmi_param:设置设备HDMI接口输出图像效果。
ss_mpi_vo_get_hdmi_param:获取设备HDMI接口输出图像效果。
ss_mpi_vo_set_hdmi1_param:设置设备HDMI1接口输出图像效果。
ss_mpi_vo_get_hdmi1_param:获取设备HDMI1接口输出图像效果。
ss_mpi_vo_set_rgb_param:设置设备RGB输出图像效果。
ss_mpi_vo_get_rgb_param:获取设备RGB输出图像效果。
ss_mpi_vo_set_bt_param:设置设备BT.1120或BT.656输出图像效果。
ss_mpi_vo_get_bt_param:获取设备BT.1120或BT.656输出图像效果。
ss_mpi_vo_set_mipi_param:设置设备MIPI或MIPI_SLAVE输出图像效果。
ss_mpi_vo_get_mipi_param:获取设备MIPI或MIPI_SLAVE输出图像效果。
视频层相关API如下:
ss_mpi_vo_enable_video_layer:使能视频层。
ss_mpi_vo_disable_video_layer:禁用视频层。
ss_mpi_vo_set_video_layer_attr:设置视频层属性。
ss_mpi_vo_get_video_layer_attr:获取视频层属性。
ss_mpi_vo_set_video_layer_param:设置视频层参数。
ss_mpi_vo_get_video_layer_param:获取视频层参数。
ss_mpi_vo_set_video_layer_crop:设置视频层CROP功能属性。
ss_mpi_vo_get_video_layer_crop:获取视频层CROP功能属性。
ss_mpi_vo_set_video_layer_early_display:设置视频层是否开启提前显示功能。
ss_mpi_vo_get_video_layer_early_display:获取视频层是否开启提前显示功能。
ss_mpi_vo_set_play_toleration:设置视频层上的播放容忍度。
ss_mpi_vo_get_play_toleration:获取视频层上的播放容忍度。
ss_mpi_vo_batch_begin:设置视频层上的批处理开始。
ss_mpi_vo_batch_end:设置视频层上的批处理结束。
ss_mpi_vo_get_screen_frame:获取视频层上的输出图像帧。
ss_mpi_vo_release_screen_frame:释放视频层上的输出图像帧。
视频层和图形层公共相关API如下:
ss_mpi_vo_set_layer_priority:设置视频层或图形层优先级。
ss_mpi_vo_get_layer_priority:获取视频层或图形层优先级。
ss_mpi_vo_set_layer_csc:设置视频层或图形层输出图像效果。。
ss_mpi_vo_get_layer_csc:获取视频层或图形层输出图像效果。
ss_mpi_vo_bind_layer:绑定视频层和图形层到某个设备。
ss_mpi_vo_unbind_layer:从某个设备解绑定视频层或图形层。
通道相关API如下:
ss_mpi_vo_enable_chn:启用指定的视频输出通道。
ss_mpi_vo_disable_chn:禁用指定的视频输出通道。
ss_mpi_vo_set_chn_attr:设置指定视频输出通道的属性。
ss_mpi_vo_get_chn_attr:获取指定视频输出通道的属性。
ss_mpi_vo_set_chn_param:设置通道参数(幅型比参数)。
ss_mpi_vo_get_chn_param:获取通道参数(幅型比参数)。
ss_mpi_vo_set_chn_display_pos:设置指定视频输出通道的显示位置。
ss_mpi_vo_get_chn_display_pos:获取指定视频输出通道的显示位置。
ss_mpi_vo_get_chn_frame:获取输出通道图像数据。
ss_mpi_vo_release_chn_frame:释放输出通道图像数据。
ss_mpi_vo_send_frame:将视频图像送入指定视频输出通道显示。
ss_mpi_vo_set_chn_frame_rate:设置指定视频输出通道的显示帧率。
ss_mpi_vo_get_chn_frame_rate:获取指定视频输出通道的显示帧率。
ss_mpi_vo_pause_chn:暂停指定的视频输出通道。
ss_mpi_vo_resume_chn:恢复指定的视频输出通道。
ss_mpi_vo_step_chn:单帧播放指定的视频输出通道。
ss_mpi_vo_refresh_chn:刷新指定的视频输出通道。
ss_mpi_vo_show_chn:设置显示通道。
ss_mpi_vo_hide_chn:设置隐藏通道。
ss_mpi_vo_set_zoom_in_window:设置视频输出局部放大窗口。
ss_mpi_vo_get_zoom_in_window:获取视频输出局部放大窗口参数。
ss_mpi_vo_get_chn_pts:获取指定视频输出通道当前显示图像的时间戳。
ss_mpi_vo_query_chn_status:查询视频输出通道状态。
ss_mpi_vo_clear_chn_buf:清空指定输出通道的缓存buffer数据。
ss_mpi_vo_set_chn_border:设置指定输出通道的边框属性。
ss_mpi_vo_get_chn_border:获取指定输出通道的边框属性。
ss_mpi_vo_set_chn_recv_threshold:设置视频输出通道的显示门限值。
ss_mpi_vo_get_chn_recv_threshold:获取视频输出通道的显示门限值。
ss_mpi_vo_set_chn_rotation:设置视频输出通道旋转角度。
ss_mpi_vo_get_chn_rotation:获取视频输出通道旋转角度。
ss_mpi_vo_set_chn_mirror:设置视频输出通道镜像类型。
ss_mpi_vo_get_chn_mirror:获取视频输出通道镜像类型。
ss_mpi_vo_get_chn_rgn_luma:获取区域亮度信息。
回写相关API如下:
ss_mpi_vo_set_wbc_src:设置指定回写设备的回写源。
ss_mpi_vo_get_wbc_src:获取指定回写设备的回写源。
ss_mpi_vo_enable_wbc:启用指定的回写设备。
ss_mpi_vo_disable_wbc:禁用指定的回写设备。
ss_mpi_vo_set_wbc_attr:设置指定回写设备的属性。
ss_mpi_vo_get_wbc_attr:获取指定回写设备的属性。
ss_mpi_vo_set_wbc_mode:设置指定回写设备的回写模式。
ss_mpi_vo_get_wbc_mode:获取指定回写设备的回写模式。
ss_mpi_vo_set_wbc_depth:设置指定回写设备的回写深度。
ss_mpi_vo_get_wbc_depth:获取指定回写设备的回写深度。
ss_mpi_vo_get_wbc_frame:获取回写视频数据。
ss_mpi_vo_release_wbc_frame:释放回写视频数据。
级联相关API如下:
ss_mpi_vo_set_cas_attr:设置级联属性。
ss_mpi_vo_get_cas_attr:获取级联属性。
ss_mpi_vo_enable_cas_dev:使能级联扩展设备。
ss_mpi_vo_disable_cas_dev:禁用级联扩展设备。
ss_mpi_vo_set_cas_pattern:设置视频级联画面样式。
ss_mpi_vo_get_cas_pattern:获取视频级联画面样式。
ss_mpi_vo_bind_cas_chn:绑定级联区域与视频输出通道。
ss_mpi_vo_unbind_cas_chn:解绑定级联区域与视频输出通道。
ss_mpi_vo_enable_cas:使能视频级联。
ss_mpi_vo_disable_cas:禁用视频级联。
导出函数相关API如下:
ot_vo_enable_dev_export:内核态导出函数。
ot_vo_disable_dev_export:内核态导出函数。
ot_vo_get_export_symbol:内核态导出函数,用于注册中断回调函数。
设备相关API¶
ss_mpi_vo_enable¶
【描述】
使能视频输出设备。
【语法】
td_s32 ss_mpi_vo_enable(ot_vo_dev dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_DEV_NUM - OT_VO_MAX_CAS_DEV_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
由于系统没有初始化设备为使能状态,所以在使用视频输出功能前必须先进行设备使能操作。
在调用设备使能前,必须对设备公共属性进行配置,否则返回设备未配置错误。
如果设备已经使能,调用此接口则返回未禁用错误,不支持重复使能。
为使开机画面能够平滑地过渡到业务画面,此接口会检查VO硬件是否已经使能,如果已使能则返回成功,且业务画面将沿用开机画面已设置的设备、接口和时序配置进行显示。如果希望业务画面更改VO的设备或接口或时序配置,则需要先使用ss_mpi_vo_set_pub_attr设置设备属性,设备号dev、背景色bg_color、接口类型intf_type、时序类型intf_sync设置、用户时序信息sync_info(用户时序时有效)与开机画面一致,再调用ss_mpi_vo_disable接口,强制禁用VO硬件后再使能。具体开机画面过渡到业务画面可参考《MPP 媒体处理软件 V5.0 FAQ》。
各个dev的使用说明详见ot_vo_dev。
【举例】
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_pub_attr pub_attr;
ret = ss_mpi_vo_get_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf("Get device attributes failed with error code %#x!\n", ret);
return TD_FAILURE;
}
pub_attr.bg_color = 0xff;
pub_attr.intf_type = OT_VO_INTF_HDMI;
pub_attr.intf_sync = OT_VO_OUT_1280x1024_60;
ret = ss_mpi_vo_set_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf("Set device attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable(dev);
if (ret != TD_SUCCESS)
{
printf("Disable vo dev %d failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_disable(dev);
if (ret != TD_SUCCESS)
{
printf("Disable vo dev %d failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_close_fd();
if (ret != TD_SUCCESS)
{
printf("Some device is not disable with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_disable¶
【描述】
禁用视频输出设备。
【语法】
td_s32 ss_mpi_vo_disable(ot_vo_dev dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_DEV_NUM - OT_VO_MAX_CAS_DEV_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
设备禁用前必须先禁用该设备上的视频层。
设备禁用前,如果有使能WBC,则必须先禁用WBC。
设备禁用后需要重新设置设备公共属性,才可使能设备。
从开机画面过渡到业务画面的非平滑过渡场景时,需要先禁用设备。禁用设备前需要先设置设备公共属性,否则直接禁用设备会报错。用户需要保证公共属性和开机画面保持一致,否则可能会导致一些接口输出黑屏等异常问题。具体开机画面过渡到业务画面可参考《MPP 媒体处理软件 V5.0 FAQ》。
【举例】
请参见ss_mpi_vo_enable的举例。
【相关主题】
ss_mpi_sys_exit
ss_mpi_vo_set_pub_attr¶
【描述】
配置视频输出设备的公共属性。
【语法】
td_s32 ss_mpi_vo_set_pub_attr(ot_vo_dev dev, const ot_vo_pub_attr *pub_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_DEV_NUM - OT_VO_MAX_CAS_DEV_NUM)。 |
输入 |
pub_attr |
视频输出设备公共属性结构体指针。 静态属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
视频输出设备属性,必须在执行ss_mpi_vo_enable前配置。
各个dev的使用说明详见ot_vo_dev。
视频输出设备属性的使用说明详见ot_vo_pub_attr章节。
SS524V100、SS626V100 的输出接口 BT1120/BT656 不能在不同的VO设备上同时输出。
SS928V100 的输出接口 MIPI/BT1120/BT656/LCD 不能在不同的VO设备上同时输出。
【举例】
请参见ss_mpi_vo_enable的举例。
【相关主题】
ss_mpi_vo_get_pub_attr¶
【描述】
获取视频输出设备的公共属性。
【语法】
td_s32 ss_mpi_vo_get_pub_attr(ot_vo_dev dev, ot_vo_pub_attr *pub_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_DEV_NUM - OT_VO_MAX_CAS_DEV_NUM)。 |
输入 |
pub_attr |
视频输出设备公共属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
在设置设备公共属性前先获取属性,就可以只设置需要改变的配置项。
对于SS626V100,配置为OT_VO_OUT_7680x4320_30时序后,该接口获取的背景默认是黑色,即0x0。
【举例】
请参见ss_mpi_vo_enable的举例。
【相关主题】
ss_mpi_vo_set_dev_param¶
【描述】
配置视频输出设备的参数。
【语法】
td_s32 ss_mpi_vo_set_dev_param(ot_vo_dev dev, const ot_vo_dev_param *dev_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
dev_param |
视频输出设备参数结构体指针。 静态属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
必须在执行ss_mpi_vo_set_pub_attr之后配置。
视频输出设备参数,必须在执行ss_mpi_vo_enable前配置。
只有物理设备支持该接口。
仅在设备接口设置为BT.1120或MIPI或MIPI_SLAVE时支持设备参数的设置。
透传通用注意事项:
图像大小=通道大小=视频层img_size=视频层显示大小disp_rect=设备时序大小dev_size。
VO设置为single模式,视频层输入格式设置为OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422。
VO通道上未开旋转、OSD、COVER、LINE、角框、BORDER、抗闪等改变图像数据的功能。
VO视频层需要设置为单位矩阵。
未叠加PIP,未叠加图形层,仅一个视频层全屏显示。
MIPI或MIPI_SLAVE接口RAW16BIT格式透传注意事项:
支持像素格式OT_PIXEL_FORMAT_RGB_BAYER_16BPP的数据。
mipi接口上,未使用ss_mpi_vo_set_mipi_param进行亮度、对比度、色调、饱和度等转换,mipi接口需要设置为单位矩阵。
mipi tx配置为OUT_FORMAT_RAW_16BIT格式输出(通过调用mipi tx相关接口OT_MIPI_TX_SET_DEV_CFG)。
通过ss_mpi_vo_set_video_layer_attr接口,把display_buf_len设置为3或其他非0值。
MIPI或MIPI_SLAVE接口YVU422 SEMIPLANAR格式透传注意事项:
支持像素格式OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422的数据。
mipi接口上,未使用ss_mpi_vo_set_mipi_param进行亮度、对比度、色调、饱和度等转换,mipi接口需要设置为单位矩阵。
mipi tx配置为OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422格式输出(通过调用mipi tx相关接口OT_MIPI_TX_SET_DEV_CFG)。
BT.1120接口透传注意事项:
仅支持像素格式OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422的数据。
BT.1120接口上,未使用ss_mpi_vo_set_bt_param进行yc互换,bit位倒序。
要求数据本身是clip的,亮度Y范围[16, 235],色度C范围[16, 240],因为BT.1120接口对数据做了clip处理。
视频输出设备参数的使用说明详见 ot_vo_dev_param。
【举例】
无。
【相关主题】
ss_mpi_vo_get_dev_param¶
【描述】
获取视频输出设备的参数。
【语法】
td_s32 ss_mpi_vo_get_dev_param(ot_vo_dev dev, ot_vo_dev_param *dev_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
dev_param |
视频输出设备参数结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
必须在执行ss_mpi_vo_set_pub_attr之后获取。
仅在设备接口设置为BT.1120或MIPI或MIPI_SLAVE时支持设备参数的获取。
【举例】
无。
【相关主题】
ss_mpi_vo_close_fd¶
【描述】
关闭所有视频输出设备的Fd。
【语法】
td_s32 ss_mpi_vo_close_fd(td_void);
【参数】
无。
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
此接口不能与其它mpi接口同时调用,用户必须保证此接口与其它接口在时间上是串行调用的。
本接口用于关闭VO设备文件句柄,在设备都禁用后,建议使用该接口。
【举例】
请参见ss_mpi_vo_enable的举例。
【相关主题】
ss_mpi_vo_set_dev_frame_rate¶
【描述】
设置设备用户时序下设备帧率。
【语法】
td_s32 ss_mpi_vo_set_dev_frame_rate(ot_vo_dev dev, td_u32 frame_rate);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_DEV_NUM - OT_VO_MAX_CAS_DEV_NUM)。 |
输入 |
frame_rate |
设备帧率。 取值范围:(0, 240] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只能在用户时序下使用。
只能在调用ss_mpi_vo_set_pub_attr之后、ss_mpi_vo_enable之前调用。
【举例】
无。
【相关主题】
ss_mpi_vo_get_dev_frame_rate¶
【描述】
获取设备帧率。
【语法】
td_s32 ss_mpi_vo_get_dev_frame_rate(ot_vo_dev dev, td_u32 *frame_rate);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_DEV_NUM - OT_VO_MAX_CAS_DEV_NUM)。 |
输入 |
frame_rate |
td_u32类型的指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
ss_mpi_vo_set_user_sync_info¶
【描述】
设置用户接口时序信息,用于配置时钟源、时钟大小和时钟分频比。
【语法】
td_s32 ss_mpi_vo_set_user_sync_info(ot_vo_dev dev, const ot_vo_user_sync_info *sync_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
sync_info |
用户时序信息指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
在调用该接口前,必须对设备公共属性进行配置。
只有物理设备支持设置用户时序时钟信息。
只有设备接口时序是用户时序时才支持设置用户时序时钟信息。
时钟源类型和时钟大小为静态信息,必须在执行ss_mpi_vo_enable前配置。
具体用户时序调试方法可参考《MPP 媒体处理软件 V5.0 FAQ》,用户时序时钟相关的配置可参考ot_vo_user_sync_info。
【举例】
td_s32 ret = TD_SUCCESS;
td_u32 frame_rate = 60;
ot_vo_pub_attr pub_attr;
ot_vo_user_sync_info user_info = {0};
/* Fill pub attr */
pub_attr.intf_type = OT_VO_INTF_HDMI;
pub_attr.intf_sync = OT_VO_OUT_USER;
pub_attr.sync_info.syncm = 0;
pub_attr.sync_info.iop = 1;
pub_attr.sync_info.intfb = 1;
pub_attr.sync_info.vact = 1920;
pub_attr.sync_info.vbb = 36;
pub_attr.sync_info.vfb = 16;
pub_attr.sync_info.hact = 1080;
pub_attr.sync_info.hbb = 28;
pub_attr.sync_info.hfb = 130;
pub_attr.sync_info.hmid = 1;
pub_attr.sync_info.bvact = 1;
pub_attr.sync_info.bvbb = 1;
pub_attr.sync_info.bvfb = 1;
pub_attr.sync_info.hpw = 24;
pub_attr.sync_info.vpw = 4;
pub_attr.sync_info.idv = 0;
pub_attr.sync_info.ihs = 0;
pub_attr.sync_info.ivs = 0;
/* Set dev pub attr */
ret = ss_mpi_vo_set_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf(“Set dev pub attr failed with %x.\n”,ret);
return TD_FAILURE;
}
/* Fill user sync info */
user_info.user_sync_attr.clk_src = OT_VO_CLK_SRC_PLL;
user_info.user_sync_attr.vo_pll.fb_div = 99;
user_info.user_sync_attr.vo_pll.frac = 0;
user_info.user_sync_attr.vo_pll.ref_div = 2;
user_info.user_sync_attr.vo_pll.post_div1 = 2;
user_info.user_sync_attr.vo_pll.post_div2 = 1;
user_info.dev_div = 4;
/* Set user interface sync info */
ret = ss_mpi_vo_set_user_sync_info (dev, &user_info);
if (ret != TD_SUCCESS)
{
printf(“Set user interface sync info failed with %x.\n”,ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_set_dev_frame_rate(dev, frame_rate);
if (ret != TD_SUCCESS)
{
printf(“Set dev frame rate failed with %x.\n”,ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable(dev);
if (ret != TD_SUCCESS)
{
printf(“Enable vo dev failed with %x.\n”,ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_user_sync_info¶
【描述】
获取用户接口时序信息。
【语法】
td_s32 ss_mpi_vo_get_user_sync_info(ot_vo_dev dev, ot_vo_user_sync_info *sync_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
sync_info |
用户时序信息指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
在调用该接口前,必须对设备公共属性进行配置。
只有物理设备支持获取用户时序时钟信息。
只有设备接口时序是用户时序时才支持获取用户时序时钟信息。
【举例】
无
【相关主题】
ss_mpi_vo_set_mod_param¶
【描述】
设置模块参数。
【语法】
td_s32 ss_mpi_vo_set_mod_param(const ot_vo_mod_param *mod_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
mod_param |
模块参数结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用这个接口的时候不能有物理设备使能。
模块参数只会在加载VO驱动的时候进行初始化。
【举例】
无。
【相关主题】
ss_mpi_vo_get_mod_param¶
【描述】
获取模块参数。
【语法】
td_s32 ss_mpi_vo_get_mod_param(ot_vo_mod_param *mod_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
mod_param |
模块参数结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
无。
【举例】
无。
【相关主题】
ss_mpi_vo_set_vtth¶
【描述】
设置设备垂直时序中断门限。
【语法】
td_s32 ss_mpi_vo_set_vtth(ot_vo_dev dev, td_u32 vtth);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
vtth |
门限值,表示在时序的倒数第vtth行(包括消隐区)处上报垂直时序中断。 取值范围:[2, 8191] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
因业务量大,中断处理被延迟响应时,可能有花屏或者闪屏风险,可通过本接口调大门限值,使垂直时序中断提前上报。
低延时处理中可以调小门限值,减小延时,尽快显示。
调用前需保证设备未使能。
只有物理设备支持设置门限值。
用户必须保证设置的门限值不超过当前时序的垂直总行数(逐行:垂直有效区vact + 垂直消隐后肩vbb + 垂直消隐前肩vfb,隔行:(垂直有效区vact + 垂直消隐后肩vbb + 垂直消隐前肩vfb +底场垂直有效区bvact +底场垂直消隐后肩bvbb +底场垂直消隐前肩bvfb) /2行(向下取整)),如果超过,会在启动设备时报错:非法参数。
默认垂直时序中断门限为以下公式的计算结果(向下取整)为准,在ss_mpi_vo_enable中进行计算:
vtth1 = vtth_time x frame_vertical_all x dev_frame_rate / 1000ms;
公式参数名称 |
描述 |
|---|---|
vtth_time |
|
frame_vertical_all |
逐行:frame_vertical_all = vact + vbb + vfb 隔行:frame_vertical_all = vact + vbb + vfb + bvact + bvbb + bvfb |
dev_frame_rate |
设备时序帧率。 非用户时序下,逐行时序如:OT_VO_OUT_1080P60取60,隔行时序如:OT_VO_OUT_1080I60取30。 (用户时序时取60或接口ss_mpi_vo_set_dev_frame_rate设置的值) |
默认情况下,非用户时序各时序计算结果如下:
时序名称 |
默认vtth1值 |
时序名称 |
默认vtth1值 |
||
|---|---|---|---|---|---|
6ms |
8ms |
6ms |
8ms |
||
OT_VO_OUT_PAL OT_VO_OUT_NTSC OT_VO_OUT_960H_PAL OT_VO_OUT_960H_NTSC OT_VO_OUT_640x480_60 OT_VO_OUT_480P60 OT_VO_OUT_576P50 OT_VO_OUT_800x600_60 OT_VO_OUT_1024x768_60 OT_VO_OUT_720P50 OT_VO_OUT_720P60 OT_VO_OUT_1280x800_60 OT_VO_OUT_1280x1024_60 OT_VO_OUT_1366x768_60 OT_VO_OUT_1400x1050_60 OT_VO_OUT_1440x900_60 OT_VO_OUT_1600x1200_60 OT_VO_OUT_1680x1050_60 OT_VO_OUT_1080P24 OT_VO_OUT_1080P25 OT_VO_OUT_1080P30 OT_VO_OUT_1080I50 OT_VO_OUT_1080I60 OT_VO_OUT_1080P50 |
93 94 187 189 189 189 187 226 290 225 270 299 383 287 392 336 450 392 162 168 202 168 202 337 |
125 126 250 252 252 252 250 301 386 300 360 398 511 383 522 448 600 522 216 225 270 225 270 450 |
OT_VO_OUT_1080P60 OT_VO_OUT_1920x1200_60 OT_VO_OUT_1920x2160_30 OT_VO_OUT_2560x1440_30 OT_VO_OUT_2560x1440_60 OT_VO_OUT_2560x1600_60 OT_VO_OUT_3840x2160_24 OT_VO_OUT_3840x2160_25 OT_VO_OUT_3840x2160_30 OT_VO_OUT_3840x2160_50 OT_VO_OUT_3840x2160_60 OT_VO_OUT_4096x2160_24 OT_VO_OUT_4096x2160_25 OT_VO_OUT_4096x2160_30 OT_VO_OUT_4096x2160_50 OT_VO_OUT_4096x2160_60 OT_VO_OUT_7680x4320_30 OT_VO_OUT_240x320_50 OT_VO_OUT_320x240_50 OT_VO_OUT_240x320_60 OT_VO_OUT_320x240_60 OT_VO_OUT_800x600_50 OT_VO_OUT_720x1280_60 OT_VO_OUT_1080x1920_60 |
405 444 403 266 532 592 324 337 405 675 810 324 337 405 675 810 792 100 73 118 95 190 472 709 |
540 592 537 355 710 790 432 450 540 900 1080 432 450 540 900 1080 1056 133 97 157 126 254 629 946 |
默认情况下,设置为用户时序时,若计算结果超过垂直总行数,则默认值取:vertical_all -1
垂直总行数(逐行):vertical_all = vact + vbb + vfb
垂直总行数(隔行):vertical_all = (vact + vbb + vfb + bvact + bvbb + bvfb) / 2。
【举例】
无。
【相关主题】
ss_mpi_vo_get_vtth¶
【描述】
获取设备垂直时序中断门限值。
【语法】
td_s32 ss_mpi_vo_get_vtth(ot_vo_dev dev, td_u32 *vtth);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
vtth |
垂直时序门限值指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持获取门限值。
在ss_mpi_vo_enable之前,未曾调用过ss_mpi_vo_set_vtth,调用此接口获取到的初始值为240(高清设备),100(标清设备);在ss_mpi_vo_enable之后获取的是默认值(请见ss_mpi_vo_set_vtth)或者设置的值。
【举例】
无。
【相关主题】
ss_mpi_vo_set_less_buf_attr¶
【描述】
设置设备省buffer属性信息。
【语法】
td_s32 ss_mpi_vo_set_less_buf_attr(ot_vo_dev dev, const ot_vo_less_buf_attr *less_buf_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
less_buf_attr |
设备省BUF属性信息指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
属性less_buf_attr成员enable配置为使能,此时VO会增加一个中断来加快buf的轮转。
配合ss_mpi_vo_set_video_layer_attr接口使用,可以把display_buf_len设置为3(MULTI模式)或2(SINGLE模式),需根据具体场景来设置。
设备使能之后只支持动态修改省BUF属性中的VTTH值,不支持动态修改省BUF属性中的enable开关。
只有物理设备才支持设置省BUF属性。
less_buf_attr.vtth默认值为2,取值范围为[2, 8191]。
设置值不能大于ss_mpi_vo_set_vtth设置的vtth值或vtth的默认值,否则在接口ss_mpi_vo_enable报错:非法参数。
在SINGLE模式下,且buflen设置为2,如果设置less_buf_attr.vtth为[2, vfb](vfb为时序的垂直消隐前肩),使中断上报行数落在vfb内,可保证显示正常;如果设置less_buf_attr.vtth为[vfb, vtth],使中断上报行数落在vact内(vact为时序的垂直有效区),则可能发生花屏,原因是在less_buf_attr.vtth处VO会将正在显示的VB提交给VGS进行绘制,此时可适当调小less_buf_attr.vtth。
VO省buf的vtth值vtth2的取值范围是[2,vtth1],其中最大值vtth1为ss_mpi_vo_set_vtth设置的vtth值。在快速调度场景时,如果vtth2接近最小值2,可以保证VO无裂屏风险,但是可能会导致帧率不够或丢帧。如果vtth2接近最大值vtth1,快速调度可保证帧率足够,但是存在裂屏风险。当通道数目较少,图像分辨率较大,建议vtth2配置等于最大值vtth1。当通道数目较大,图像分辨率较小,建议vtth2配置接近最小值2,保证无裂屏风险。
VO省buf功能和VO用户通知功能不能同时开启,否则在接口处报错。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_less_buf_attr¶
【描述】
获取设备省buffer属性信息。
【语法】
td_s32 ss_mpi_vo_get_less_buf_attr(ot_vo_dev dev, ot_vo_less_buf_attr *less_buf_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
less_buf_attr |
设备省BUF属性信息指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_set_user_notify_attr¶
【描述】
设置设备用户通知属性信息。
【语法】
td_s32 ss_mpi_vo_set_user_notify_attr(ot_vo_dev dev, const ot_vo_user_notify_attr *user_notify_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
user_notify_attr |
设备用户通知属性信息指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
属性user_notify_attr成员enable配置为使能,此时VO会增加一个中断来回调ot_user模块中ot_user_notify_vo_user_event函数。
设备使能之后只支持动态修改用户通知属性中的VTTH值,不支持动态修改用户通知属性中的enable开关。
只有物理设备才支持设置用户通知属性。
user_notify_attr.vtth默认值为2,取值范围为[2, 8191]。
用户必须保证设置的门限值不超过当前时序的垂直总行数(逐行:垂直有效区vact + 垂直消隐后肩vbb + 垂直消隐前肩vfb,隔行:(垂直有效区vact + 垂直消隐后肩vbb + 垂直消隐前肩vfb +底场垂直有效区bvact +底场垂直消隐后肩bvbb +底场垂直消隐前肩bvfb) /2行(向下取整)),如果超过,会在启动设备时报错:非法参数。默认垂直时序中断门限的计算方式请参考ss_mpi_vo_set_vtth接口描述中的注意事项。
VO用户通知功能和VO省buf功能不能同时开启,否则会在接口处报错。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_user_notify_attr¶
【描述】
获取设备用户通知属性信息。
【语法】
td_s32 ss_mpi_vo_get_user_notify_attr(ot_vo_dev dev, ot_vo_user_notify_attr *user_notify_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
user_notify_attr |
设备用户通知属性信息指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无
【相关主题】
接口相关API¶
ss_mpi_vo_query_intf_status¶
【描述】
查询VGA/CVBS的连接状态。
【语法】
td_s32 ss_mpi_vo_query_intf_status(ot_vo_intf_type intf_type, ot_vo_intf_status *status);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
intf_type |
设备接口。 取值范围:OT_VO_INTF_CVBS和OT_VO_INTF_VGA。 |
输入 |
status |
接口状态指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
如果使能VGA检测,需要设置模块参数ot_vo_mod_param 成员vga_detect_en为使能。
不支持查询同时输入OT_VO_INTF_CVBS和OT_VO_INTF_VGA接口类型的状态。
【举例】
无。
【相关主题】
无。
ss_mpi_vo_set_vga_param¶
【描述】
设置设备VGA输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_vga_param(ot_vo_dev dev, const ot_vo_vga_param *vga_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
vga_param |
VGA图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口主要用于调节VGA的输出效果,包括亮度、对比度、色调、饱和度和DAC增益和锐化强度。
只有物理设备支持该接口。
设备接口未配置成VGA时返回失败。
禁用设备时会将亮度、对比度、色调、饱和度、CSC转换矩阵、DAC增益的值恢复为默认值。
ss_mpi_vo_set_layer_csc接口中对亮度、对比度、色调、饱和度的调节会影响到该设备的所有接口的图像输出效果。本接口对亮度、对比度、色调、饱和度的调节仅影响该设备的VGA接口的图像输出效果。如果同时调用这两个接口,VGA的图像输出效果是叠加的效果。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_vga_param¶
【描述】
获取设备VGA输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_vga_param(ot_vo_dev dev, ot_vo_vga_param *vga_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
vga_param |
VGA图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持 |
SS928V100 |
不支持 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
设备接口未配置成VGA时返回失败。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_set_hdmi_param¶
【描述】
设置设备HDMI输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_hdmi_param(ot_vo_dev dev, const ot_vo_hdmi_param *hdmi_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
hdmi_param |
HDMI图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口主要用于调节HDMI的输出效果,包括亮度、对比度、色调、饱和度。
只有物理设备支持该接口。
设备接口未配置成HDMI时返回失败。
禁用设备时会将亮度、对比度、色调、饱和度、CSC转换矩阵的值恢复为默认值。
ss_mpi_vo_set_layer_csc接口中对亮度、对比度、色调、饱和度的调节会影响到该设备的所有接口的图像输出效果。本接口对亮度、对比度、色调、饱和度的调节仅影响该设备的HDMI接口的图像输出效果。如果同时调用这两个接口,HDMI的图像输出效果是叠加的效果。
此接口支持动态切换csc属性(亮度、对比度、色调、饱和度),不支持动态设置hdmi_param的csc矩阵类型:
只设置动态csc属性,具体操作流程如下:
调用ss_mpi_vo_get_hdmi_param获取当前HDMI输出的csc矩阵属性;
调用本接口设置hdmi_param,确保csc_matrix矩阵类型不发生改变。
设置csc矩阵类型时需要先关闭HDMI输出,设置完成后重新启动HDMI,具体操作流程如下:
调用ss_mpi_hdmi_stop (请参见《HDMI开发参考》)关闭HDMI输出;
调用ss_mpi_vo_get_hdmi_param获取当前HDMI输出的csc矩阵属性;
调用本接口设置hdmi_param;
设置完成后调用ss_mpi_hdmi_start (请参见《HDMI开发参考》)重新打开HDMI输出。
【举例】
无。
【相关主题】
ss_mpi_vo_get_hdmi_param¶
【描述】
获取设备HDMI输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_hdmi_param(ot_vo_dev dev, ot_vo_hdmi_param *hdmi_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
hdmi_param |
HDMI图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
设备接口未配置成HDMI时返回失败。
【举例】
无。
【相关主题】
ss_mpi_vo_set_hdmi1_param¶
【描述】
设置设备HDMI1输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_hdmi1_param(ot_vo_dev dev, const ot_vo_hdmi_param *hdmi1_param)
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
hdmi1_param |
HDMI1图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100 |
不支持。 |
SS626V100 |
支持 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口主要用于调节HDMI1的输出效果,包括亮度、对比度、色调、饱和度。
只有物理设备支持该接口。
设备接口未配置成HDMI1时返回失败。
禁用设备时会将亮度、对比度、色调、饱和度、CSC转换矩阵的值恢复为默认值。
ss_mpi_vo_set_layer_csc接口中对亮度、对比度、色调、饱和度的调节会影响到该设备的所有接口的图像输出效果。本接口对亮度、对比度、色调、饱和度的调节仅影响该设备的HDMI1接口的图像输出效果。如果同时调用这两个接口,HDMI1的图像输出效果是叠加的效果。
此接口支持动态切换csc属性(亮度、对比度、色调、饱和度),不支持动态设置hdmi_param1的csc矩阵类型。
只设置动态csc属性,具体操作流程如下:
调用ss_mpi_vo_get_hdmi1_param获取当前HDMI1输出的csc矩阵属性;
调用本接口设置hdmi_param1,确保csc_matrix矩阵类型不发生改变。
设置csc矩阵类型时需要先关闭HDMI1输出,设置完成后重新启动HDMI1,具体操作流程如下:
调用ss_mpi_hdmi_stop (请参见《HDMI开发参考》)关闭HDMI1输出;
调用ss_mpi_vo_get_hdmi1_param获取当前HDMI1输出的csc矩阵属性;
调用本接口设置hdmi_param1;
设置完成后调用ss_mpi_hdmi_start (请参见《HDMI开发参考》)重新打开HDMI1输出。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_hdmi1_param¶
【描述】
获取设备HDMI1输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_hdmi1_param(ot_vo_dev dev, ot_vo_hdmi_param *hdmi1_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
hdmi1_param |
HDMI1图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100 |
不支持。 |
SS626V100 |
支持 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
设备接口未配置成HDMI1时返回失败。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_set_rgb_param¶
【描述】
设置设备RGB输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_rgb_param(ot_vo_dev dev, const ot_vo_rgb_param *rgb_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
rgb_param |
RGB图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS626V100 |
不支持。 |
SS522V101/SS928V100 |
支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
禁用设备时会将亮度、对比度、色调、饱和度、CSC转换矩阵、rgb反向、bit位倒序的值恢复为默认值。
只有物理设备支持该接口。
设备接口未配置成RGB时返回失败。
ss_mpi_vo_set_layer_csc接口中对亮度、对比度、色调、饱和度的调节会影响到该设备的所有接口的图像输出效果。本接口中对亮度、对比度、色调、饱和度、CSC转换矩阵、rgb反向、bit位倒序的调节仅影响该设备的RGB的图像输出效果。如果同时调用这两个接口,RGB的图像输出效果是叠加的效果。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_rgb_param¶
【描述】
获取设备RGB输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_rgb_param(ot_vo_dev dev, ot_vo_rgb_param *rgb_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
rgb_param |
RGB图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS626V100 |
不支持。 |
SS522V101/SS928V100 |
支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
设备接口未配置成RGB时返回失败。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_set_bt_param¶
【描述】
设置设备BT.1120或BT.656输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_bt_param(ot_vo_dev dev, const ot_vo_bt_param *bt_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
bt_param |
BT.1120或BT.656图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
禁用设备时会将yc反向、bit位倒序的值恢复为默认值。
只有物理设备支持该接口。
设备接口未配置成BT.1120或BT.656时返回失败。
ss_mpi_vo_set_layer_csc接口中对亮度、对比度、色调、饱和度的调节会影响到该设备的所有接口的图像输出效果。本接口中对yc反向、bit位倒序的调节仅影响该设备的BT.1120或BT.656的图像输出效果。如果同时调用这两个接口,BT.1120或BT.656的图像输出效果是叠加的效果。
如果动态设置yc反向或yc反向+bit位倒序,则导致BT.1120控制信号发生变化,继而产生短暂的信号输出异常现象。
单双沿配置输出clk_edge只支持在设备使能前配置,设备使能后不能动态修改单双沿配置,可以动态修改其他属性值。
默认情况下,接口时序超过OT_VO_OUT_3840x2160_24或用户时序大于等于297MHz,BT.1120接口输出时会默认双沿输出,其他时序会默认单沿输出。如果调用此接口配置单双沿配置后以接口配置为准。
单双沿配置输出clk_edge和级联属性(ot_vo_cas_attr)中的 cas_edge_mode属性都控制BT.1120接口的单双沿输出,当级联属性配置使用时,以级联属性的配置为准,当前接口配置为无效值。
【举例】
无。
【相关主题】
ss_mpi_vo_get_bt_param¶
【描述】
获取设备BT.1120或BT.656输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_bt_param(ot_vo_dev dev, ot_vo_bt_param *bt_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
bt_param |
BT.1120或BT.656图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
设备接口未配置成BT.1120或BT.656时返回失败。
默认情况下,没有调用bt参数接口时,设备使能前获取时钟沿配置是单沿,使能后获取是不同时序的默认配置,见ss_mpi_vo_set_bt_param接口描述。
【举例】
无。
【相关主题】
ss_mpi_vo_set_mipi_param¶
【描述】
设置设备MIPI或MIPI_SLAVE输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_mipi_param(ot_vo_dev dev, const ot_vo_mipi_param *mipi_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
mipi_param |
MIPI或MIPI_SLAVE图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
不支持 |
SS928V100 |
支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口主要用于调节MIPI或MIPI_SLAVE的输出效果,包括亮度、对比度、色调、饱和度。
只有物理设备支持该接口。
设备接口未配置成MIPI或MIPI_SLAVE时返回失败。
禁用设备时会将亮度、对比度、色调、饱和度、CSC转换矩阵的值恢复为默认值。
ss_mpi_vo_set_layer_csc接口中对亮度、对比度、色调、饱和度的调节会影响到该设备的所有接口的图像输出效果。本接口中对亮度、对比度、色调、饱和度的调节仅影响该设备的MIPI接口的图像输出效果。如果同时调用这两个接口,MIPI或MIPI_SLAVE的图像输出效果是叠加的效果。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_mipi_param¶
【描述】
获取设备MIPI或MIPI_SLAVE输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_mipi_param(ot_vo_dev dev, ot_vo_mipi_param *mipi_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
mipi_param |
MIPI或MIPI_SLAVE图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
不支持。 |
SS928V100 |
支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备支持该接口。
设备接口未配置成MIPI或MIPI_SLAVE时返回失败。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
视频层相关API¶
ss_mpi_vo_enable_video_layer¶
【描述】
使能视频层。
【语法】
td_s32 ss_mpi_vo_enable_video_layer(ot_vo_layer layer);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层和级联视频层。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
视频层使能前必须保证该视频层所绑定的设备处于使能状态。
视频层使能前必须保证该视频层已经配置。
物理视频层所绑定的设备配置为OT_VO_OUT_7680x4320_30时序时,不支持使能该视频层。
各个视频层的使用说明详见ot_vo_layer。
【举例】
td_s32 ret;
ot_vo_layer layer = 0;
ot_rect rect;
ot_vo_video_layer_attr layer_attr;
ret = ss_mpi_vo_get_video_layer_attr(layer, &layer_attr);
if (ret != TD_SUCCESS)
{
printf("Get video layer attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
layer_attr.display_rect.x = 0;
layer_attr.display_rect.y = 0;
layer_attr.display_rect.width = 720;
layer_attr.display_rect.height = 576;
layer_attr.img_size.width = 720;
layer_attr.img_size.height = 576;
layer_attr.display_frame_rate = 25;
layer_attr.pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422;
layer_attr.double_frame_en = TD_FALSE;
layer_attr.cluster_mode_en = TD_FALSE;
layer_attr.dst_dynamic_range = OT_DYNAMIC_RANGE_SDR8;
layer_attr.display_buf_len = 4;
layer_attr.partition_mode = OT_VO_PARTITION_MODE_SINGLE;
layer_attr.compress_mode = OT_COMPRESS_MODE_NONE;
ret = ss_mpi_vo_set_video_layer_attr(layer, &layer_attr);
if (ret != TD_SUCCESS)
{
printf("Set video layer attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable_video_layer(layer);
if (ret != TD_SUCCESS)
{
printf("Enable video layer failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_disable_video_layer(layer);
if (ret != TD_SUCCESS)
{
printf("Disable video layer failed with errno %#x!\n", ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_disable_video_layer¶
【描述】
禁用视频层。
【语法】
td_s32 ss_mpi_vo_disable_video_layer(ot_vo_layer layer);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层和级联视频层。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
视频层禁用前必须保证其上的通道全部禁用。
在禁用视频层时,非直通情况下,如果用户没有释放从VO获取的图像buffer资源,该接口会返回OT_ERR_VO_BUSY的错误码,表示VO创建的VB资源没有释放。多见于用户调用获取屏幕图像未释放的情况下。
在禁用视频层时,如果用户选择了WBC数据源为OT_VO_WBC_SRC_VIDEO模式,则必须保证将该设备的WBC功能禁用。
【举例】
请参见ss_mpi_vo_enable_video_layer的举例。
【相关主题】
ss_mpi_vo_set_video_layer_attr¶
【描述】
设置视频层属性。
【语法】
td_s32 ss_mpi_vo_set_video_layer_attr(ot_vo_layer layer, const ot_vo_video_layer_attr *layer_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层和级联视频层。 |
输入 |
layer_attr |
视频层属性结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
需要在视频层所绑定的设备处于使能状态时才能设置视频层属性。
设置视频层属性(SINGLE模式下除了layer_attr中display_rect的x,y,width,height)必须在视频层禁用的情况下进行。
视频层属性的使用说明详见ot_vo_video_layer_attr。
【举例】
请参见ss_mpi_vo_enable_video_layer的举例。
【相关主题】
ss_mpi_vo_get_video_layer_attr¶
【描述】
获取视频层属性。
【语法】
td_s32 ss_mpi_vo_get_video_layer_attr(ot_vo_layer layer, ot_vo_video_layer_attr *layer_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层和级联视频层。 |
输入 |
layer_attr |
视频层属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
建议在设置视频层属性前先调用此接口获取视频层属性。
【举例】
请参见ss_mpi_vo_enable_video_layer的举例。
【相关主题】
ss_mpi_vo_set_video_layer_param¶
【描述】
配置视频层的参数,可用于幅型比功能。
【语法】
td_s32 ss_mpi_vo_set_video_layer_param(ot_vo_layer layer, const ot_vo_layer_param *layer_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层号。 取值范围:[0, OT_VO_MAX_PHYS_VIDEO_LAYER_NUM)。 |
输入 |
layer_param |
视频层参数指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无
【相关主题】
ss_mpi_vo_get_video_layer_param¶
【描述】
获取视频层的参数。
【语法】
td_s32 ss_mpi_vo_get_video_layer_param(ot_vo_layer layer, ot_vo_layer_param *layer_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_PHYS_VIDEO_LAYER_NUM)。 |
输入 |
layer_param |
视频层参数指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无
【相关主题】
ss_mpi_vo_set_video_layer_crop¶
【描述】
设置视频层CROP功能属性。
【语法】
td_s32 ss_mpi_vo_set_video_layer_crop(ot_vo_layer layer, const ot_crop_info *crop_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_PHYS_VIDEO_LAYER_NUM)。 |
输入 |
crop_info |
视频层CROP属性结构体指针。 ot_crop_info具体参考“系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
仅在物理视频层的SINGLE模式下支持。
接口需要在设置视频层属性之后调用。
CROP的起点和宽高要求2对齐,并且Crop的区域不能超出视频层属性中img_size。
当设备输出时序为隔行时,且格式为YVU420 SEMIPLANAR或YUV420 SEMIPLANAR时,CROP高度height要求4对齐。
CROP的宽高均不能小于32。
如果使能了CROP功能,视频层幅型比功能不生效。
如果视频层使能了CROP功能,开启了回写功能并且回写源为该视频层时,CROP会改变回写的大小,回写大小和回写目标大小的限制参考ss_mpi_vo_set_wbc_attr接口的描述。
【举例】
无
【相关主题】
ss_mpi_vo_get_video_layer_crop¶
【描述】
获取视频层CROP功能属性。
【语法】
td_s32 ss_mpi_vo_get_video_layer_crop(ot_vo_layer layer, ot_crop_info *crop_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_PHYS_VIDEO_LAYER_NUM) |
输入 |
crop_info |
视频层CROP属性结构体指针。 ot_crop_info具体参考“系统控制”章节。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
仅在物理视频层的SINGLE模式下支持。
【举例】
无
【相关主题】
ss_mpi_vo_set_video_layer_early_display¶
【描述】
设置视频层是否开启提前显示功能。
【语法】
td_s32 ss_mpi_vo_set_video_layer_early_display(ot_vo_layer layer, td_bool early_display_en);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_PHYS_VIDEO_LAYER_NUM)。 |
输入 |
early_display_en |
是否开启提前显示功能,默认值TD_FALSE。 TD_TRUE:开启提前显示 TD_FALSE:关闭提前显示 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备的层才支持配置提前显示标记。
只有SINGLE模式的层才支持配置提前显示标记。
必须在配置视频层属性后配置提前显示标记。
必须在视频层使能前配置提前显示标记,不支持动态配置。
视频层提前显示标记用于控制VO的显示流程中VGS处理完的帧是在当前帧中显示,还是在下一帧中显示。如果默认配置成关闭提前显示时,会在下一帧中显示,可以保证VGS有足够的时间可以处理完。如果配置成开启提前显示,可以直接在当前帧中显示VGS处理完后帧,可以降低VO的显示延时,但是此配置会导致VGS来不及处理完就到了显示点,此时可能会导致裂屏和显示图像异常等问题。客户可以通过调用接口ss_mpi_vo_set_vtth调整VO的提前中断垂直时序用于给VGS足够的时间,保证在满足低延时的要求下不影响画面的正常显示。
【举例】
无
【相关主题】
ss_mpi_vo_get_video_layer_early_display¶
【描述】
获取视频层是否开启提前显示功能。
【语法】
td_s32 ss_mpi_vo_get_video_layer_early_display(ot_vo_layer layer, td_bool *early_display_en);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_PHYS_VIDEO_LAYER_NUM) |
输入 |
early_display_en |
td_bool类型指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
只有物理设备的层才支持获取提前显示标记。
只有SINGLE模式的层才支持获取提前显示标记。
必须在配置视频层属性后获取提前显示标记。
视频层默认提前显示标记:关闭。
【举例】
无
【相关主题】
ss_mpi_vo_set_play_toleration¶
【描述】
设置播放容忍度。
【语法】
td_s32 ss_mpi_vo_set_play_toleration(ot_vo_layer layer, td_u32 toleration);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
toleration |
播放容忍度,单位:毫秒。 默认值:10000ms。 取值范围:[1, 100000] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证视频层已使能。
接口参数toleration以毫秒(ms)为单位。
当两帧(当前接收到的帧与目标帧或预测帧)解码数据的时间戳之差的绝对值超过容忍度时,系统将重置时间戳,以当前帧的时间戳为起点,对回放图像进行帧率控制。播放容忍度仅对回放的播放控制生效,对预览的播放控制无效。
【举例】
td_s32 ret;
ot_vo_dev dev = 1;
ot_vo_layer layer = 1;
ot_vo_pub_attr pub_attr;
ot_vo_video_layer_attr layer_attr;
td_u32 toleration;
ret = ss_mpi_vo_get_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf("Get device attributes failed with error code %#x!\n", ret);
return TD_FAILURE;
}
pub_attr.bg_color = 0xff;
pub_attr.intf_type = OT_VO_INTF_HDMI;
pub_attr.intf_sync = OT_VO_OUT_1280x1024_60;
ret = ss_mpi_vo_set_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf("Set device attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable(dev);
if (ret != TD_SUCCESS)
{
printf("Enable vo dev %d failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
/* configure and enable vo layer 1 */
……..
ret = ss_mpi_vo_get_play_toleration(layer, &toleration);
if (ret != TD_SUCCESS)
{
printf("Get play toleration failed with error code %#x!\n", ret);
return TD_FAILURE;
}
toleration = 5000;
ret = ss_mpi_vo_set_play_toleration(layer, toleration);
if (ret != TD_SUCCESS)
{
printf("Set play toleration failed with error code %#x!\n", ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_play_toleration¶
【描述】
获取播放容忍度。
【语法】
td_s32 ss_mpi_vo_get_play_toleration(ot_vo_layer layer, td_u32 *toleration);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
toleration |
td_u32类型的指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证视频层已使能。
【举例】
无
【相关主题】
ss_mpi_vo_batch_begin¶
【描述】
设置视频层上的批处理开始。
【语法】
td_s32 ss_mpi_vo_batch_begin(ot_vo_layer layer);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
此接口可对通道的动态操作进行批处理,支持批处理的接口:设置通道属性ss_mpi_vo_set_chn_attr、通道显示ss_mpi_vo_show_chn、通道隐藏ss_mpi_vo_hide_chn、使能通道ss_mpi_vo_enable_chn、禁用通道ss_mpi_vo_disable_chn、通道位置ss_mpi_vo_set_chn_display_pos。当VO切换画面大小或显示隐藏时,需要重新准备内存并保证切换的及时性,因此建议的调用顺序为:在begin和end接口之间调用设置通道属性、通道显示、通道隐藏等接口,对视频层上的多个通道进行批处理操作。
本接口和ss_mpi_vo_batch_end接口要配对使用,批处理中的通道操作都是在接口调用之后才生效。
如果begin接口之后,没有调用end接口,再次调用begin接口,则VO会把之前的通道操作清除掉再重新开始记录。
【举例】
td_s32 ret;
td_s32 i;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_pub_attr pub_attr;
ot_vo_chn_attr chnAttr[4];
memset(&pub_attr, 0, sizeof(ot_vo_pub_attr));
pub_attr.intf_type= OT_VO_INTF_HDMI; /*HDMI */
pub_attr.intf_sync = OT_VO_OUT_1080P60 ; /*1080P60*/
pub_attr.bg_color = 0x0;
/* set public attribute of vo device */
ret = ss_mpi_vo_set_pub_attr(dev, &pub_attr);
if (TD_SUCCESS != ret)
{
printf("vo set pub attr failed! \n");
return ret;
}
/* enable vo device */
ret = ss_mpi_vo_enable(dev);
if (ret != TD_SUCCESS)
{
printf("enable vo device failed! \n");
return ret;
}
/* configure and enable vo layer 0 */
……..
/* configure and enable vo channel */
for (i = 0; i < 4; i++)
{
chnAttr[i].deflicker_en = TD_FALSE;
chnAttr[i].priority = 1;
chnAttr[i].rect.x = 960*(i%2);
chnAttr[i].rect.y = 540*(i/2);
chnAttr[i].rect.width = 960;
chnAttr[i].rect.height = 540;
/* set attribute of vo chn*/
ret = ss_mpi_vo_set_chn_attr(layer, i, &chnAttr[i]);
if (ret != TD_SUCCESS)
{
printf("vo set dev %d chn %d attr failed! \n", layer, i);
return ret;
}
/* enable vo chn */
ret = ss_mpi_vo_enable_chn(layer, i);
if (ret != TD_SUCCESS)
{
printf("enable vo layer %d chn %d failed! \n", layer,i);
return ret;
}
}
/* do somethng else */
sleep(20);
/* set channel attributes begin */
ret = ss_mpi_vo_batch_begin(layer);
if (ret != TD_SUCCESS)
{
printf("set batch begin failed!\n");
return ret;
}
/* reset channel attributes
* we just show channel 0 and 1 on screen, and scale them as vertical
* half 1080P
*/
for (i = 0; i < 2; i++)
{
chnAttr[i].deflicker_en = TD_FALSE;
chnAttr[i].priority = 1;
chnAttr[i].rect.x = 960*(i%2);
chnAttr[i].rect.y = 540*(i/2);
chnAttr[i].rect.width = 960;
chnAttr[i].rect.height = 1080;
/* set attribute of vo chn*/
ret = ss_mpi_vo_set_chn_attr(layer, i, &chnAttr[i]);
if (ret != TD_SUCCESS)
{
printf("vo set chn %d attr failed! \n", i);
return ret;
}
}
/* hide channel 2 and 3
* we do this just for saving bandwidth
*/
for (i = 2; i < 4; i++)
{
ret = ss_mpi_vo_hide_chn(layer,i);
if (ret != TD_SUCCESS)
{
printf("vo hide channel %d failed!\n", i);
return TD_FAILURE;
}
}
/* set batch end */
ret = ss_mpi_vo_batch_end(layer);
if (ret != TD_SUCCESS)
{
printf("set batch end failed!\n");
return ret;
}
/* do somethng else */
sleep(20);
/* set batch begin */
ret = ss_mpi_vo_batch_begin(layer);
if (ret != TD_SUCCESS)
{
printf("set batch begin failed!\n");
return ret;
}
/* reset channel attributes
* now we set them back as 4 960x540 on screen
*/
for (i = 0; i < 4; i++)
{
chnAttr[i].deflicker_en = TD_FALSE;
chnAttr[i].priority = 1;
chnAttr[i].rect.x = 960*(i%2);
chnAttr[i].rect.y = 540*(i/2);
chnAttr[i].rect.width = 960;
chnAttr[i].rect.height = 540;
/* set attribute of vo chn*/
ret = ss_mpi_vo_set_chn_attr(layer,i, &chnAttr[i]);
if (TD_SUCCESS != ret)
{
printf("vo set chn %d attr failed! \n", i);
return ret;
}
}
/* show channel 2 and 3 */
for (i = 2; i < 4; i++)
{
ret = ss_mpi_vo_show_chn(layer,i);
if (ret != TD_SUCCESS)
{
printf("vo show channel %d failed!\n", i);
return TD_FAILURE;
}
}
/* set batch end */
ret = ss_mpi_vo_batch_end(layer);
if (ret != TD_SUCCESS)
{
printf("set attributes end failed!\n");
return ret;
}
/* do somethng else */
sleep(20);
/* disable all channels */
for (i = 0; i < 4; i++)
{
ret = ss_mpi_vo_disable_chn(layer, i);
if (ret != TD_SUCCESS)
{
printf("vo disable chn %d failed!\n", i);
return ret;
}
}
/* disable layer */
………………..
/* disable vo */
(void) ss_mpi_vo_disable(dev);
【相关主题】
ss_mpi_vo_batch_end¶
【描述】
设置视频层上的批处理结束。
【语法】
td_s32 ss_mpi_vo_batch_end(ot_vo_layer layer);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证ss_mpi_vo_batch_begin已经调用。
begin和end接口要配对使用,否则BEGIN后的通道操作不会生效。
在调用END接口时,必须要保证相应的通道操作的正确性。
【举例】
请参见ss_mpi_vo_batch_begin的举例。
【相关主题】
ss_mpi_vo_get_screen_frame¶
【描述】
获取输出屏幕图像数据。
【语法】
td_s32 ss_mpi_vo_get_screen_frame(ot_vo_layer layer, ot_video_frame_info *frame_info, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
frame_info |
获取的输出屏幕图像数据信息结构体指针。 |
输出 |
milli_sec |
超时时间。单位:ms |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证视频层已经使能。
该接口支持阻塞式获取屏幕图像,milli_sec为-1时表示阻塞获取,一直等到屏幕有图像为止;milli_sec为0时表示非阻塞获取;milli_sec > 0时,表示阻塞等待时间,超过该时间则不再等待。
可以多次调用,获取后应保证及时的释放。
该接口只能用于调试使用,不支持用于其它的操作。
若视频层上未有任何通道使能或所有通道上未接收到任何数据,则用户调用此接口将无法获取屏幕图像。
该接口获取的图像含有时间戳,该时间戳表示图像拼接(非直通)或图像生成(直通)时的时间信息,如果用户不希望采用该时间戳进行编码,可以自行修改时间戳信息。
该接口只在OT_VO_PARTITION_MODE_SINGLE模式下支持。
【举例】
无
【相关主题】
ss_mpi_vo_release_screen_frame¶
【描述】
释放输出屏幕图像数据。
【语法】
td_s32 ss_mpi_vo_release_screen_frame(ot_vo_layer layer, const ot_video_frame_info *frame_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
frame_info |
释放的输出屏幕图像数据信息结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
禁用视频层前要释放已经获取到的屏幕图像。
获取操作应保证与释放操作配对。
不允许重复释放。
【举例】
无
【相关主题】
视频层和图形层相关API¶
ss_mpi_vo_set_layer_priority¶
【描述】
设置视频层或图形层的优先级。
【语法】
td_s32 ss_mpi_vo_set_layer_priority(ot_vo_layer layer, td_u32 priority);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层或图形层号。 取值范围:[0, OT_VO_MAX_PHYS_LAYER_NUM)。 |
输入 |
priority |
视频层或图形层的优先级。 取值范围: SS528V100/SS625V100/SS524V100/SS626V100:
SS522V101:
SS928V100:
|
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100 |
默认优先级:
0:VHD0 1:VHD2 2:G0 3:- (默认给G3预留) 4:G2
0:VHD1 1:- (默认给VHD2预留) 2:G1 3:- (默认给G3预留) 4:- (默认给G2预留)
0:VSD0 1:G3 2:- (默认给G2预留) |
SS522V101 |
默认优先级:
0:VHD0 1:VHD2 2:G0 3:- (默认给G3预留) 4:G2
0:VSD0 1:G3 2:- (默认给G2预留) |
SS928V100 |
默认优先级:
0:VHD0 1:VHD2 2:G0 3:- (默认给G3预留)
0:VHD1 1:- (默认给VHD2预留) 2:G1 3:- (默认给G3预留) |
SS626V100 |
默认优先级:
0:VHD0 1:VHD2 2:G0 3:G3 4:G2
0:VHD1 1:- (默认给VHD2/VSD0预留) 2:G1 3:- (默认给G4预留) 4:- (默认给G2预留)
0:VSD0 1:G4 2:- (默认给G2预留) |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h、ot_defines.h
库文件:libss_mpi.a
【注意】
本接口被调用时,layer视频层或图形层必须已经绑定在某个dev设备上。
只有物理设备上的视频层或图形层支持设置优先级。
绑定层到设备时会赋值一个默认的优先级,具体行为见层绑定接口。
如果在视频层或图形层layer绑定的设备dev上,需要设置layer的优先级为priority,但是已经有视频层或图形层layer_old配置优先级priority,那么,将优先保障layer的设置,同时将layer的默认优先级赋值给视频层或图形层layer_old。例如,视频层VHD2和VHD0都绑定在DHD0上面,且他们的优先级分别为1和0。若视频层VHD2调用设置优先级接口设置优先级为0,那么就会有优先级的冲突,这时,将VHD2层的优先级设置为0,并将VHD2层原始的优先级1赋值给VHD0。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 2;
td_u32 priority;
ret = ss_mpi_vo_get_layer_priority(layer, &priority);
if (ret != TD_SUCCESS)
{
printf("Pip video layer get the priority failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
priority = 0;
ret = ss_mpi_vo_set_layer_priority(layer, priority);
if (ret != TD_SUCCESS)
{
printf("Pip video layer set the priority failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_layer_priority¶
【描述】
获取视频层的优先级。
【语法】
td_s32 ss_mpi_vo_get_layer_priority(ot_vo_layer layer, td_u32 *priority);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层或图形层号。 取值范围:[0, OT_VO_MAX_PHYS_LAYER_NUM)。 |
输入 |
priority |
视频层或图形层优先级指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
无
【举例】
请参见ss_mpi_vo_set_layer_priority的举例。
【相关主题】
ss_mpi_vo_set_layer_csc¶
【描述】
设置视频层或图形层输出图像效果。
【语法】
td_s32 ss_mpi_vo_set_layer_csc(ot_vo_layer layer, const ot_vo_csc *csc);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层或图形层号。 取值范围:[0, OT_VO_MAX_PHYS_LAYER_NUM)。 |
输入 |
csc |
视频层或图形层图像输出效果结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
luma、contrast、hue、saturation取值范围:[0, 100],默认值:50。 ex_csc_en取值范围:[0, 1],默认值:0。 视频层csc_matrix默认值:OT_VO_CSC_MATRIX_BT601FULL_TO_BT601FULL。可以选择:OT_VO_CSC_MATRIX_BT601LIMIT_TO_BT601LIMIT到 OT_VO_CSC_MATRIX_BT709FULL_TO_BT709FULL 图形层csc_matrix默认值:OT_VO_CSC_MATRIX_RGBFULL_TO_BT601FULL。 可以选择: OT_VO_CSC_MATRIX_RGBFULL_TO_BT601LIMIT OT_VO_CSC_MATRIX_RGBFULL_TO_BT601FULL OT_VO_CSC_MATRIX_RGBFULL_TO_BT709LIMIT OT_VO_CSC_MATRIX_RGBFULL_TO_BT709FULL |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口主要用于调节图像的输出效果,包括亮度、对比度、色调、饱和度,其取值范围均为[0, 100]。
禁用视频层时会将亮度、对比度、色调、饱和度的值恢复为默认值,CSC转换矩阵恢复为默认值。
停止和启动图形层后gfbg模块会将亮度、对比度、色调、饱和度、CSC转换矩阵恢复成默认值。但是VO图形层的CSC配置没有恢复,保留历史配置的值。通过CSC获取接口和PROC显示的CSC配置还是历史配置的值,如果希望重新配置图形层CSC,在启动图形层后再调用接口重新配置图形层CSC。
只有物理设备上的视频层才支持设置CSC。
图形层没有启动前不允许设置CSC。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无
【相关主题】
ss_mpi_vo_get_layer_csc¶
【描述】
获取视频层或图形层输出图像效果。
【语法】
td_s32 ss_mpi_vo_get_layer_csc(ot_vo_layer layer, ot_vo_csc *csc);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层或图形层号。 取值范围:[0, OT_VO_MAX_PHYS_LAYER_NUM)。 |
输入 |
csc |
视频层或图形层图像输出效果结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口主要用于获取图像的输出效果,包括亮度、对比度、色调、饱和度,其取值范围均为[0, 100]。
图形层没有启动前不允许获取CSC。
【举例】
无
【相关主题】
ss_mpi_vo_bind_layer¶
【描述】
绑定视频层或图形层到某个设备。
【语法】
td_s32 ss_mpi_vo_bind_layer(ot_vo_layer layer, ot_vo_dev dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层或图形层号。 取值范围:[0, OT_VO_MAX_PHYS_LAYER_NUM)。 |
输入 |
dev |
设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/ SS522V101 |
可动态绑定的视频层或图形层默认绑定到的设备:
|
SS928V100 |
可动态绑定的视频层或图形层默认绑定到的设备:
|
SS626V100 |
可动态绑定的视频层或图形层默认绑定到的设备:
|
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
PIP层默认绑定在高清设备DHD0上面,如果希望将该层绑定到DHD1上面,则在调用该接口之前先解除与DHD0的绑定。
PIP层支持绑定到DHD0/DHD1。鼠标层G2支持绑定到DHD0/DHD1/DSD0,图形层G3支持绑定到DHD0/DHD1/DSD0。
对视频层已经存在的绑定关系,支持重复绑定。
对图形层已经存在的绑定关系,不支持重复绑定。
不能在视频层或图形层使能的情况下,调用该接口设置绑定关系。
每个层绑定到设备时,都会被默认给定一个优先级。默认的优先级是优先找层在设备上默认的优先级,如果默认优先级被占用,视频层按照所有优先级从小到大索引的原则找到一个最小的优先级,图形层按照所有优先级从大到小索引的原则找到一个最大的优先级,对绑定的层配置优先级。
【举例】
td_s32 ret;
ot_vo_dev dev = 1;
ot_vo_layer layer = 2;
td_u32 priority;
ret = ss_mpi_vo_unbind_layer(layer, dev);
if (ret != TD_SUCCESS)
{
printf("Pip video layer unbind to dev 0 failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_bind_layer(layer ,dev);
if (ret != TD_SUCCESS)
{
printf("Pip video layer bind to dev %d failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_get_layer_priority(layer, &priority);
if (ret != TD_SUCCESS)
{
printf("Pip video layer get the priority failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_unbind_layer¶
【描述】
从某个设备解绑定视频层或图形层。
【语法】
td_s32 ss_mpi_vo_unbind_layer(ot_vo_layer layer, ot_vo_dev dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层或图形层号。 取值范围:[0, OT_VO_MAX_PHYS_LAYER_NUM)。 |
输入 |
dev |
设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
将视频层或图形层从设备解除绑定前,必须禁用视频层或图形层。
重复解绑定返回成功。
需要保证传入的dev是传入layer支持绑定的设备号。
不强制要求传入的形参dev必须是之前layer层绑定的设备号,用户调用此接口就视为解除layer层的绑定关系。
【举例】
请参见ss_mpi_vo_bind_layer的举例。
【相关主题】
通道相关API¶
ss_mpi_vo_enable_chn¶
【描述】
使能指定的视频输出通道。
【语法】
td_s32 ss_mpi_vo_enable_chn (ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须保证视频层绑定关系存在,否则将返回失败。
调用前必须使能相应设备上的视频层。
通道使能前必须进行通道配置,否则返回通道未配置的错误。
允许重复使能同一视频输出通道,不返回失败。
【举例】
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
ot_vo_chn_attr chn_attr;
ret = ss_mpi_vo_get_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Get channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
chn_attr.priority = 0;
chn_attr.rect.x = 0;
chn_attr.rect.y = 0;
chn_attr.rect.width = 720;
chn_attr.rect.height = 576;
ret = ss_mpi_vo_set_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Set channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Enable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_disable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Disable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_disable_chn¶
【描述】
禁用指定的视频输出通道。
【语法】
td_s32 ss_mpi_vo_disable_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
允许重复禁用同一视频输出通道,不返回失败。
当高清设备的通道绑定VPSS时,建议先调用本接口停止通道后,再解绑定VO通道与VPSS通道的绑定关系,否则,可能出现OT_ERR_VO_BUSY的超时返回错误。
【举例】
请参见ss_mpi_vo_enable_chn的举例。
【相关主题】
ss_mpi_vo_set_chn_attr¶
【描述】
配置指定视频输出通道的属性。
【语法】
td_s32 ss_mpi_vo_set_chn_attr(ot_vo_layer layer, ot_vo_chn chn, const ot_vo_chn_attr *chn_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
chn_attr |
视频通道属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
属性中的优先级,数值越大优先级越高。
优先级有0~[OT_VO_MAX_CHN_NUM-1,视频层在SINGLE模式下,当多个通道有重叠的显示区域时,优先级高的通道图像将覆盖优先级低的通道。优先级相同的各通道有重叠时,默认通道号大的图像将覆盖通道号小的通道图像。视频层在MULTI模式下,通道不可重叠。
通道显示区域不能超过视频层属性中设定的画布大小(img_size大小)。
该接口为动态设置接口,可在VO设备使能且相应视频层已配置的情况下调用。
设备的通道属性rect需2对齐,且宽高必须不小于32。在隔行时序MULTI模式且像素格式为SEMIPLANAR_420时,rect的高度必须4对齐。起始点的纵坐标建议按照4对齐配置,否则可能会出现不可预料的图像质量问题。
如果有视频层放大的情况,rect是放大前视频层上的通道原始的起始位置和宽高,放大后的通道的显示起始位置和宽高会按视频层放大的比例偏移或放大。
【举例】
请参见ss_mpi_vo_enable_chn的举例。
【相关主题】
ss_mpi_vo_get_chn_attr¶
【描述】
获取指定视频输出通道的属性。
【语法】
td_s32 ss_mpi_vo_get_chn_attr(ot_vo_layer layer, ot_vo_chn chn, ot_vo_chn_attr *chn_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|
|---|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
|
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
|
chn_attr |
视频通道属性指针。 |
输出 |
|
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
无
【举例】
请参见ss_mpi_vo_enable_chn的举例。
【相关主题】
ss_mpi_vo_set_chn_param¶
【描述】
配置指定视频输出通道的参数,用于幅型比功能。
【语法】
td_s32 ss_mpi_vo_set_chn_param(ot_vo_layer layer, ot_vo_chn chn, const ot_vo_chn_param *chn_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
chn_param |
视频通道参数指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口为动态设置接口,可在VO设备使能且相应视频层和通道属性已配置的情况下调用。
VO在MULTI模式下时需要与VPSS配合使用,仅支持VPSS在AUTO模式下(AUTO模式,USER模式,可参考“01-5 视频处理子系统”章节)的幅型比功能。VPSS-AUTO模式绑定VO时,可通过参数对通道进行幅型比设置。VPSS-USER模式绑定VO时,接口参数无效。
在MULTI和SINGLE模式下均支持幅型比功能。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
ot_vo_chn_attr chn_attr;
ot_vo_chn_param chn_param;
ret = ss_mpi_vo_get_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Get channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
chn_attr.priority = 0;
chn_attr.rect.x = 0;
chn_attr.rect.y = 0;
chn_attr.rect.width = 720;
chn_attr.rect.height = 576;
ret = ss_mpi_vo_set_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Set channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_get_chn_param(layer, chn, &chn_param);
if (ret != TD_SUCCESS)
{
printf("Get channel param failed with errno %#x!\n", ret);
return TD_FAILURE;
}
chn_param.aspect_ratio.mode = OT_ASPECT_RATIO_MANUAL;
chn_param.aspect_ratio.video_rect.x = 0;
chn_param.aspect_ratio.video_rect.y = 90;
chn_param.aspect_ratio.video_rect.width = 720;
chn_param.aspect_ratio.video_rect.height = 396;
chn_param.aspect_ratio.bg_color = 0xff0000;
ret = ss_mpi_vo_set_chn_param(layer, chn, &chn_param);
if (ret != TD_SUCCESS)
{
printf("Set channel param failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Enable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_disable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Disable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_chn_param¶
【描述】
获取指定视频输出通道的参数。
【语法】
td_s32 ss_mpi_vo_get_chn_param(ot_vo_layer layer, ot_vo_chn chn, ot_vo_chn_param *chn_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。 不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
chn_param |
视频通道参数指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
在MULTI和SINGLE模式下均支持幅型比功能。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参见ss_mpi_vo_set_chn_param的举例。
【相关主题】
ss_mpi_vo_set_chn_display_pos¶
【描述】
设置指定视频输出通道的显示位置。
【语法】
td_s32 ss_mpi_vo_set_chn_display_pos(ot_vo_layer layer, ot_vo_chn chn, const ot_point *display_pos);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
display_pos |
通道显示位置。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口用于设置通道的实际显示位置,仅适用于MULTI模式下的视频层。
默认情况下,VO设备从视频层的左上角开始显示视频层画布上的通道,设置通道属性时设定了通道在画布上的位置,通道在画布上的位置即为默认的显示位置。
希望节省视频层内存时,可以将视频层的画布大小(img_size)设置为实际显示图像需要的内存大小,显示区域大小(display_rect)设置为VO设备输出分辨率大小。这样设置对视频层而言,不会将画布放大到整个显示区域(一般情况下,高清设备的普通视频层这样设置时会将画布放大到整个显示区域。标清设备的画布大小和显示区域大小必须一致)。
当调用该接口设置通道的显示位置时,新的显示位置将取代默认值,成为VO设备上通道的实际显示位置。
通道显示位置不能超过视频层属性中设定的显示区域display_rect的范围。
调用该接口前必须先设置通道属性。
通道显示位置的(x,y)必须2对齐。
该接口可以动态设置,并支持批处理。建议用户使用批处理方式设置通道的实际显示位置。
通道显示位置的(x,y)设置为(-1,-1)时表示恢复通道原有的默认显示位置,用户需注意恢复通道原有的默认显示位置时不要与其他通道的区域产出重叠。建议用户使用批处理方式恢复通道的默认显示位置。
该接口设置的显示位置(x,y)在通道disable之后仍然有效,用户再使能通道,该通道的显示位置仍然为(x,y);若用户需要恢复默认的显示位置,需要手动的去设置显示位置为(-1,-1)。
视频层属性ot_vo_video_layer_attr的cluster_mode_en为TRUE时才支持该接口。
【举例】
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
ot_vo_chn_attr chn_attr;
ot_vo_video_layer_attr layer_attr;
ot_point display_pos;
……
layer_attr.display_rect.x = 0;
layer_attr.display_rect.y = 0;
layer_attr.display_rect.width = 1920;
layer_attr.display_rect.height = 1080;
layer_attr.img_size.width = 720;
layer_attr.img_size.height = 576;
layer_attr.display_frame_rate = 25;
layer_attr.pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422;
layer_attr.double_frame_en = TD_FALSE;
layer_attr.cluster_mode_en = TD_TRUE;
layer_attr.dst_dynamic_range = OT_DYNAMIC_RANGE_SDR8;
layer_attr.display_buf_len = 4;
layer_attr.partition_mode = OT_VO_PARTITION_MODE_MULTI;
layer_attr.compress_mode = OT_COMPRESS_MODE_NONE;
chn_attr.priority = 1;
chn_attr.rect.x = 0;
chn_attr.rect.y = 0;
chn_attr.rect.width = 720;
chn_attr.rect.height = 576;
chn_attr.deflicker_en = TD_FALSE;
ret = ss_mpi_vo_set_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Set channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Enable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
display_pos.x = 500;
display_pos.y = 500;
ret = ss_mpi_vo_set_chn_display_pos(layer, chn, &display_pos);
if (ret != TD_SUCCESS)
{
printf("Set channel display position failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_disable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Disable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
isplay_pos.y = 500;
ret = ss_mpi_vo_set_chn_display_pos(layer, chn, &display_pos);
if (ret != TD_SUCCESS)
{
printf("Set channel display position failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_disable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Disable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_chn_display_pos¶
【描述】
获取指定视频输出通道的显示位置。
【语法】
td_s32 ss_mpi_vo_get_chn_display_pos(ot_vo_layer layer, ot_vo_chn chn, ot_point *display_pos);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM),不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
display_pos |
视频通道显示位置属性指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
视频层工作在MULTI模式下,并且视频层属性ot_vo_video_layer_attr的cluster_mode_en为TRUE时才支持该接口。
【相关主题】
ss_mpi_vo_get_chn_frame¶
【描述】
获取通道帧。
【语法】
td_s32 ss_mpi_vo_get_chn_frame(ot_vo_layer layer, ot_vo_chn chn, ot_video_frame_info *frame_info, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
frame_info |
视频数据信息指针。 ot_video_frame_info请参考“系统控制”章节。 |
输出 |
milli_sec |
超时时间。单位:ms |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用该接口前必须保证通道已经使能。
该接口支持阻塞式获取通道帧,milli_sec为-1时表示阻塞获取,一直等到通道有图像为止;milli_sec为0时表示非阻塞获取;milli_sec > 0时,表示阻塞等待时间,超过该时间则不再等待。
获取后应保证及时的释放,调用ss_mpi_vo_release_chn_frame可释放通道帧。
使能低延时状态下使用该接口可能get出未完成的帧。
前端绑定为VPSS模块且VPSS通道设置为AUTO模式时,回放模式下前端送帧的帧信息中PTS为0时,VO内部会修改通道帧信息中PTS值用于帧率控制。此时获取到的通道帧的pts会跟前端送帧的pts不一致。
【举例】
无
【相关主题】
无
ss_mpi_vo_release_chn_frame¶
【描述】
释放输出通道图像数据。
【语法】
td_s32 ss_mpi_vo_release_chn_frame(ot_vo_layer layer, ot_vo_chn chn, const ot_video_frame_info *frame_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
frame_info |
释放的输出通道图像数据信息结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
获取操作应保证与释放操作配对。
不允许重复调用本接口。
【举例】
无
【相关主题】
ss_mpi_vo_send_frame¶
【描述】
将视频图像送入指定输出通道显示。
【语法】
td_s32 ss_mpi_vo_send_frame(ot_vo_layer layer, ot_vo_chn chn, const ot_video_frame_info *frame_info, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
frame_info |
视频数据信息指针。 |
输入 |
milli_sec |
超时时间。单位:ms |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用该接口前必须保证通道已经使能。
该接口支持阻塞式发送,milli_sec为-1时表示阻塞发送,一直等到有图像发送为止;milli_sec为0时表示非阻塞发送;milli_sec > 0时,表示阻塞等待时间,超过该时间则不再等待。
输入视频数据信息要符合VO数据的要求。宽和高需要与实际图像宽高相符,且均不能小于32,宽高要求以2对齐。像素格式为SPYCbCr420、SPYCbCr422、SPYCrCb420、SPYCrCb422或者单分量格式。视频格式支持LINEAR和TILE格式。LINEAR视频格式的压缩模式支持非压缩,行压缩,紧凑型段压缩和非紧凑段压缩模式,通道支持的具体的确切的压缩模式与对应视频层相同,以[表3为准。TILE视频格式的压缩模式支持非压缩,TILE压缩。
【举例】
无
【相关主题】
无
ss_mpi_vo_set_chn_frame_rate¶
【描述】
设置指定视频输出通道的显示帧率。
【语法】
td_s32 ss_mpi_vo_set_chn_frame_rate(ot_vo_layer layer, ot_vo_chn chn, td_s32 frame_rate);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
frame_rate |
视频通道显示帧率。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
需先设置VO相应视频输出通道属性,才能调用此接口,否则返回失败。
帧率可设置为Nx(其中N为[-64,+64]的任意整数,x为设备帧率)。负数的倍数用于倒放操作,此时需要用户来倒序送图像到VO,即送时间戳递减的图像。
调用ss_mpi_vo_enable_chn接口会使通道重置为正常速度播放,因此,建议在通道使能后再调用本接口进行播放控制。
在通道禁用的情况下,调用ss_mpi_vo_set_chn_attr接口会将通道帧率重置为显示帧率。通道帧率为通道的输入的图像的帧率,显示帧率为通道最终要显示的帧率,显示帧率可以在视频层属性处设置。
在解码回放场景中,如果送来的帧的PTS为0,则VO会自动打上合适的PTS,如果用户希望使用自己设置的PTS,则设置的PTS不能出现0和非0混合的情况。
【举例】
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
td_s32 chn_frame_rate = 30;
ret = ss_mpi_vo_set_chn_frame_rate(layer, chn, chn_frame_rate);
if (ret != TD_SUCCESS)
{
printf("Set channel %d frame rate failed with errno %#x!\n", chn, ret);
return TD_FAILURE;
}
【相关主题】
无
ss_mpi_vo_get_chn_frame_rate¶
【描述】
获取指定视频输出通道的显示帧率。
【语法】
td_s32 ss_mpi_vo_get_chn_frame_rate(ot_vo_layer layer, ot_vo_chn chn, td_s32 *frame_rate);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
frame_rate |
视频通道显示帧率指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
获取的为用户配置的帧率,如未设置则返回满帧率。
【举例】
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
td_s32 chn_frame_rate;
ret = ss_mpi_vo_get_chn_frame_rate(layer, chn, &chn_frame_rate);
if (ret != TD_SUCCESS)
{
printf("Set channel %d frame rate failed with errno %#x!\n", chn, ret);
return TD_FAILURE;
}
printf("Channel %d frame rate is %d.\n", chn, chn_frame_rate);
【相关主题】
无
ss_mpi_vo_pause_chn¶
【描述】
暂停指定的视频输出通道。
【语法】
td_s32 ss_mpi_vo_pause_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
VI-VO预览时不推荐使用此接口。
允许重复暂停同一通道,不返回失败。
【举例】
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
...
/* enable vo chn */
ret = ss_mpi_vo_enable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("enable vo chn failed! \n");
return ret;
}
/* pause current vo channel */
ret = ss_mpi_vo_pause_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("pause vo chn failed! \n");
return ret;
}
/* resume current vo channel */
ret = ss_mpi_vo_resume_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("resume vo chn failed! \n");
return ret;
}
while (getchar() != ‘q’)
{
/* step forward current vo channel */
ret = ss_mpi_vo_step_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("step play vo chn failed! \n");
return ret;
}
}
/* resume current vo channel */
ret = ss_mpi_vo_resume_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("resume vo chn failed! \n");
return ret;
}
ret = ss_mpi_vo_disable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("disable vo chn failed! \n");
return ret;
}
【相关主题】
ss_mpi_vo_resume_chn¶
【描述】
恢复指定的视频输出通道。
【语法】
td_s32 ss_mpi_vo_resume_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
允许重复恢复同一通道,不返回失败。
【举例】
请参见ss_mpi_vo_pause_chn的举例。
【相关主题】
无
ss_mpi_vo_step_chn¶
【描述】
单帧播放指定的视频输出通道。
【语法】
td_s32 ss_mpi_vo_step_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
恢复正常播放使用ss_mpi_vo_resume_chn接口。
VI-VO预览时不推荐使用此接口。
当前帧是预览模式且VPSS配置AUTO模式时,此接口无步进效果,VPSS不处理此帧。
【举例】
请参见ss_mpi_vo_pause_chn的举例。
【相关主题】
ss_mpi_vo_refresh_chn¶
【描述】
刷新指定的视频输出通道。
【语法】
td_s32 ss_mpi_vo_refresh_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
主要应用场景是解码回放中,MULTI模式下暂停时的电子放大场景。MULTI模式的电子放大场景是通过对VPSS Group调用ss_mpi_vpss_set_grp_crop(详见“视频处理子系统”章节)接口来实现,当MULTI模式暂停时,VPSS裁剪后的图像不能送给VO,此时调用本接口刷新视频输出通道即可。
该接口还适用于解码低帧率下的电子放大场景。
该接口调用后立即生效,因此应该在调用ss_mpi_vpss_set_grp_crop接口之后调用,否则视频输出通道刷新的是VPSS裁剪之前的图像。
该接口在正常播放时看不到任何效果,包括快进慢放。
SINGLE模式下不支持该接口。该接口不适用于VI-VO预览场景。
【举例】
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
...
/* enable vo chn */
ret = ss_mpi_vo_enable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("enable vo chn failed! \n");
return ret;
}
/* pause current vo channel */
ret = ss_mpi_vo_pause_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("pause vo chn failed! \n");
return ret;
}
/* set vpss clip config */
...
/* refresh current vo channel */
ret = ss_mpi_vo_refresh_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("refresh vo chn failed! \n");
return ret;
}
ret = ss_mpi_vo_ disable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("disable vo chn failed! \n");
return ret;
}
【相关主题】
ss_mpi_vo_show_chn¶
【描述】
显示指定通道。
【语法】
td_s32 ss_mpi_vo_show_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证视频输出通道所在的视频层已经使能。
默认情况下通道处于显示状态。
【举例】
无。
【相关主题】
ss_mpi_vo_hide_chn¶
【描述】
隐藏指定通道。
【语法】
td_s32 ss_mpi_vo_hide_chn(ot_vo_layer layer, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
当高清设备的通道绑定VPSS时,建议先调用本接口隐藏通道后,再解绑定VO通道与VPSS通道的绑定关系,否则,可能出现OT_ERR_VO_BUSY的超时返回错误。
当MULTI模式时,隐藏通道会释放当前通道存在的所有帧信息,在暂停回放场景恢复显示时,如果需要停留在隐藏前一帧,需要前端开启backup帧,并且调用ss_mpi_vo_refresh_chn接口步进新的一帧。在暂停预览场景时,不保证恢复显示后画面的恢复。
【举例】
无。
【相关主题】
ss_mpi_vo_set_zoom_in_window¶
【描述】
设置视频输出局部放大窗口。
【语法】
td_s32 ss_mpi_vo_set_zoom_in_window(ot_vo_layer layer, ot_vo_chn chn, const ot_vo_zoom_attr *zoom_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
zoom_attr |
局部放大属性结构体。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须先使能视频输出设备,并且配置视频输出公共属性。
调用前必须保证视频层已经配置。
调用前必须保证视频层属性中display_buf_len显示BUF长度不能为0。
该接口对MULTI模式和SINGLE模式具有不同的意义。
MULTI模式下压缩图像时无效果,非压缩图像时该接口的作用在于截取一部分VO通道的图像数据,不经放大,直接在区域上显示,不足的部分显示背景色。
SINGLE模式通过VGS实现对单个通道的缩放,该接口的作用在于截取一部分VO通道的图像数据,并利用VGS缩放到通道大小,实现局部放大的功能。
支持两种截取VO通道源数据的方式:按位置和按比例。详见ot_vo_zoom_attr。
在视频级联的主片上,利用局部放大功能在级联的图像上选取不同区域进行多画面拼接。
【举例】
/* define input parameter */
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
ot_vo_zoom_attr zoom_attr, zoom_attr_get;
/*
* we should enable VO and VO channel first!
* TODO: enable operation.
*/
zoom_attr.zoom_type = OT_VO_ZOOM_IN_RECT;
zoom_attr.zoom_rect.x = 128;
zoom_attr.zoom_rect.y = 128;
zoom_attr.zoom_rect.width = 200;
zoom_attr.zoom_rect.height = 200;
/* set zoom window */
ret = ss_mpi_vo_set_zoom_in_window(layer, chn, & zoom_attr);
if (ret != TD_SUCCESS)
{
printf("Set zoom attribute failed, ret = %#x.\n", ret);
return TD_FAILURE;
}
/* get current zoom window parameter */
ret = ss_mpi_vo_get_zoom_in_window(layer, chn, &zoom_attr_get);
if (ret != TD_SUCCESS)
{
printf("Get zoom attribute failed, ret = %#x.\n", ret);
return TD_FAILURE;
}
printf("Current zoom window is (%d,%d,%d,%d)!\n",
zoom_attr_get.zoom_rect.x,
zoom_attr_get.zoom_rect.y,
zoom_attr_get.zoom_rect.width,
zoom_attr_get.zoom_rect.height);
/*
* TODO: something else ...
*/
zoom_attr.zoom_rect.x = 0;
zoom_attr.zoom_rect.y = 0;
zoom_attr.zoom_rect.width = 0;
zoom_attr.zoom_rect.height = 0;
/* cancel zoom window, we use (0,0,0,0) to recover */
ret = ss_mpi_vo_set_zoom_in_window(layer, chn, &zoom_attr);
if (ret != TD_SUCCESS)
{
printf("Recover zoom attribute failed, ret = %#x.\n", ret);
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_zoom_in_window¶
【描述】
获取视频输出局部放大窗口。
【语法】
td_s32 ss_mpi_vo_get_zoom_in_window(ot_vo_layer layer, ot_vo_chn chn, ot_vo_zoom_attr *zoom_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
zoom_attr |
局部放大属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
如果没有设置局部放大窗口,默认获取到(0, 0, 0, 0)。
【举例】
请参见ss_mpi_vo_set_zoom_in_window的举例。
【相关主题】
ss_mpi_vo_get_chn_pts¶
【描述】
获取指定视频输出通道正在显示图像的时间戳。
【语法】
td_s32 ss_mpi_vo_get_chn_pts(ot_vo_layer layer, ot_vo_chn chn, td_u64 *chn_pts);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
chn_pts |
通道时间戳指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证视频层使能,视频通道使能。
解码通过系统绑定的方式向VO发送视频帧时,如果解码帧的pts为0,VO会从0开始,按照每帧的播放时间间隔打上时间戳,以确保每帧播放一次。其他情况下不会改动视频源的时间戳。
【举例】
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
td_u64 chn_pts;
ret = ss_mpi_vo_get_chn_pts(layer, chn, &chn_pts);
if (ret != TD_SUCCESS)
{
printf("Get channel %d pts failed with errno %#x!\n", chn, ret);
return TD_FAILURE;
}
printf("Channel %d pts is %llu.\n", chn, chn_pts);
【相关主题】
无
ss_mpi_vo_query_chn_status¶
【描述】
查询视频输出通道状态。
【语法】
td_s32 ss_mpi_vo_query_chn_status(ot_vo_layer layer, ot_vo_chn chn, ot_vo_chn_status *status);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
status |
通道状态结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证视频设备使能。
调用前需要保证所要查询的通道已经使能。
可以多次调用获取通道状态接口。
【举例】
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
ot_vo_chn_status chn_status;
/* enable vo device and vo channel */
…
ret = ss_mpi_vo_query_chn_status(layer, chn, & chn_status);
if (TD_SUCCESS != ret)
{
printf(“Query channel status failed with errorcode %#x!\n”, ret);
return TD_FAILURE;
}
printf(“Current vo dev %d channel %d has %d VB occupied!\n”,
dev, chn, chn_status.chn_buf_used);
【相关主题】
无
ss_mpi_vo_clear_chn_buf¶
【描述】
清空指定输出通道的缓存buffer数据。
【语法】
td_s32 ss_mpi_vo_clear_chn_buf(ot_vo_layer layer, ot_vo_chn chn, td_bool is_clear_all);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
is_clear_all |
是否将通道buffer中的数据全部清空。取值范围:
|
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
用户可以调用此接口实现清除VO通道buffer的功能。
如果传入参数是is_clear_all为TD_FALSE时,建议在保证当前有显示帧的情况下,在调用清除当前队列中的帧。例如在暂停场景下的画面切换时,会清空当前显示帧,并且只会进一帧,如果此时清除当前队列中帧,会导致通道无显示帧导致无法显示。
【举例】
Td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_vo_chn chn = 0;
td_bool is_clear_all = TD_TRUE;
ret = ss_mpi_vo_clear_chn_buf(layer, chn, is_clear_all);
if (ret != TD_SUCCESS)
{
printf("Clear channel %d buf failed with errno %#x!\n", chn, ret);
return TD_FAILURE;
}
【相关主题】
无
ss_mpi_vo_set_chn_border¶
【描述】
设置通道的边框属性。
【语法】
td_s32 ss_mpi_vo_set_chn_border(ot_vo_layer layer, ot_vo_chn chn, const ot_vo_border *border);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
border |
视频通道边框属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须配置相应视频层。
该接口作用于视频层上的通道,使通道具有边框效果,通道边框在VO模块通过调用VGS拼接图像的过程中进行边框的处理。
MULTI模式下不支持该接口。
VO边框属性要求宽度在范围[0, 14]取值,并且为偶数。
当视频层的显示buffer长度配置成0,表示直通模式时,此时由于不能调用VGS处理边框,固不支持设置边框使能,可以支持设置边框去使能。
该接口允许设置边框各边的宽度不一致,支持不同的边框宽度不一样。
【相关主题】
无。
ss_mpi_vo_get_chn_border¶
【描述】
获取通道的边框属性。
【语法】
td_s32 ss_mpi_vo_get_chn_border(ot_vo_layer layer, ot_vo_chn chn, ot_vo_border *border);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
border |
视频通道边框属性指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须配置相应视频层。
MULTI模式下不支持该接口。
【举例】
无。
【相关主题】
无。
ss_mpi_vo_set_chn_recv_threshold¶
【描述】
设置视频输出通道的显示门限值。主要应用场景:PCIV级联,从片传输图像到主片进行预览显示时,由于传输到主片的图像的时间间隔是不均匀的,可能造成通道待显示图像超过默认的门限值,引起丢帧卡顿现象,需要调大门限值。
【语法】
td_s32 ss_mpi_vo_set_chn_recv_threshold(ot_vo_layer layer, ot_vo_chn chn, td_u32 threshold);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
threshold |
视频输出通道的显示门限值。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须使能相应视频层。
MULTI模式下显示门限取值范围为[3, 8],默认门限为3,表示该通道图像总的待显示帧数为3;SINGLE模式下显示门限取值范围为[2, 8],默认门限为3,表示该通道图像总的待显示帧数为3,该通道缓冲队列最多可接收2帧图像,再加上正在(或即将)显示的一帧图像,即总的待显示帧数为3。
门限值越小,预览延时越小,反之越大,因此,正常情况下,不建议用户调大门限。
门限值越大,缓冲队列中待显示的图像就可能越多,有可能占用更多的内存。为了减少内存占用,可以将门限值调小。
可动态调整门限值,但建议在通道使能前设置好。如需恢复默认值,需由用户调用本接口将门限设回默认值。
VPSS以AUTO模式绑定VO,当VPSS通道输入或输出性能超过3840x2160@60(或7680x4320@15)时,VPSS处理一帧的时间耗费得更多,VO通道节点被占用的时间也更久,此时,可以将门限值设置为4以满足VPSS帧率不波动,VO均匀显示。
【举例】
无
【相关主题】
ss_mpi_vo_get_chn_recv_threshold¶
【描述】
获取视频输出通道的显示门限值。
【语法】
td_s32 ss_mpi_vo_get_chn_recv_threshold(ot_vo_layer layer, ot_vo_chn chn, td_u32 *threshold);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
threshold |
视频输出通道的显示门限值指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
在调用ss_mpi_vo_set_chn_recv_threshold之后调用本接口将获取到ss_mpi_vo_set_chn_recv_threshold设置的门限值。
【举例】
无
【相关主题】
ss_mpi_vo_set_chn_rotation¶
【描述】
设置指定视频输出通道的旋转角度。对通道设置旋转角度,该旋转角度将作用于进入通道的视频图像,具体效果是对图像旋转相应的角度后再进行显示。
【语法】
td_s32 ss_mpi_vo_set_chn_rotation(ot_vo_layer layer, ot_vo_chn chn, ot_rotation rotation);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
rotation |
旋转角度枚举值。 取值范围:{OT_ROTATION_0, OT_ROTATION_90, OT_ROTATION_180, OT_ROTATION_270}。 rotation默认值:OT_ROTATION_0。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持tile格式图像旋转。 |
SS928V100 |
不支持tile格式图像旋转。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
设置旋转的角度只能是OT_ROTATION_0 , OT_ROTATION_90, OT_ROTATION_180, OT_ROTATION_270其中之一。
VO在SINGLE模式下才会生效。
VO在MULTI模式下通道不支持旋转,即使对通道设置了旋转角度,也不生效。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
td_s32 s32ChnNum = 1;
td_s32 ret;
ot_vo_dev dev = 0;
ot_vo_layer layer = 0;
ot_rect rect;
ot_vo_video_layer_attr layer_attr;
ot_vo_pub_attr pub_attr;
ot_vo_chn chn = 0;
ot_vo_chn_attr chn_attr;
ot_rotation rotation;
/* System initilization */
……
/* Start vo */
/* Initialize device */
ret = ss_mpi_vo_get_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf("Get device attributes failed with error code %#x!\n", ret);
return TD_FAILURE;
}
pub_attr.bg_color = 0xff;
pub_attr.intf_type = OT_VO_INTF_HDMI;
pub_attr.intf_sync = OT_VO_OUT_1280x1024_60;
ret = ss_mpi_vo_set_pub_attr(dev, &pub_attr);
if (ret != TD_SUCCESS)
{
printf("Set device attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable(dev);
if (ret != TD_SUCCESS)
{
printf("Enable vo dev %d failed with errno %#x!\n", dev, ret);
return TD_FAILURE;
}
/* Initialize video layer */
ret = ss_mpi_vo_get_video_layer_attr(layer, &layer_attr);
if (ret != TD_SUCCESS)
{
printf("Get video layer attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
layer_attr.display_rect.x = 0;
layer_attr.display_rect.y = 0;
layer_attr.display_rect.width = 1920;
layer_attr.display_rect.height = 1080;
layer_attr.img_size.width = 1920;
layer_attr.img_size.height = 1080;
layer_attr.display_frame_rate = 30;
layer_attr.pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420;
layer_attr.double_frame_en = TD_FALSE;
layer_attr.cluster_mode_en = TD_FALSE;
ret = ss_mpi_vo_set_video_layer_attr(layer, &layer_attr);
if (ret != TD_SUCCESS)
{
printf("Set video layer attributes failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable_video_layer(layer);
if (ret != TD_SUCCESS)
{
printf("Enable video layer failed with errno %#x!\n", ret);
return TD_FAILURE;
}
/* Initialize channel */
ret = ss_mpi_vo_get_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Get channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
chn_attr.priority = 0;
chn_attr.rect.x = 0;
chn_attr.rect.y = 0;
chn_attr.rect.width = 720;
chn_attr.rect.height = 576;
ret = ss_mpi_vo_set_chn_attr(layer, chn, &chn_attr);
if (ret != TD_SUCCESS)
{
printf("Set channel attr failed with errno %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_enable_chn(layer, chn);
if (ret != TD_SUCCESS)
{
printf("Enable channel failed with errno %#x!\n", ret);
return TD_FAILURE;
}
/* Rotate 90 degrees to the channel */
ret = ss_mpi_vo_set_chn_rotation(layer, chn, OT_ROTATION_90);
if (ret != TD_SUCCESS)
{
printf("Set channel rotation failed with errno %#x!\n", ret);
return TD_FAILURE;
}
/* Get rotation degrees of the channel */
ret = ss_mpi_vo_get_chn_rotation(layer, chn, &rotation);
if (ret != TD_SUCCESS)
{
printf("Get channel rotation failed with errno %#x!\n", ret);
return TD_FAILURE;
}
/* User threads */
…
/* Disable chn. See ss_mpi_vo_disable_chn */
/* Disable video layer. See ss_mpi_vo_disable_video_layer */
/* Disable device. See ss_mpi_vo_disable*/
【相关主题】
ss_mpi_vo_get_chn_rotation¶
【描述】
获取指定视频输出通道的旋转角度。
【语法】
td_s32 ss_mpi_vo_get_chn_rotation(ot_vo_layer layer, ot_vo_chn chn, ot_rotation *rotation);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
rotation |
旋转角度枚举变量指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
MULTI模式下不支持该接口。
【举例】
查看ss_mpi_vo_set_chn_rotation中的【举例】。
【相关主题】
ss_mpi_vo_set_chn_mirror¶
【描述】
设置视频输出通道镜像类型。
【语法】
td_s32 ss_mpi_vo_set_chn_mirror(ot_vo_layer layer, ot_vo_chn chn, ot_vo_mirror_mode mirror_mode);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
mirror_mode |
镜像类型枚举值。 取值范围:{OT_VO_MIRROR_NONE, OT_VO_MIRROR_HOR, OT_VO_MIRROR_VER, OT_VO_MIRROR_BOTH}。 mirror_mode默认值:OT_VO_MIRROR_NONE。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须配置相应视频层。
该接口作用于视频层上的通道,使通道具有镜像效果,通道镜像在VO模块通过调用VGS拼接图像的过程中进行镜像的处理。
MULTI模式下不支持该接口。
当视频层的显示buffer长度配置成0,表示直通模式时,此时由于不能调用VGS处理镜像,固不支持设置镜像镜像为非NONE,可以支持设置镜像类型为NONE。
【举例】
无
【相关主题】
ss_mpi_vo_get_chn_mirror¶
【描述】
获取视频输出通道镜像类型。
【语法】
td_s32 ss_mpi_vo_get_chn_mirror(ot_vo_layer layer, ot_vo_chn chn, ot_vo_mirror_mode *mirror_mode);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
mirror_mode |
镜像类型枚举变量指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前必须配置相应视频层。
MULTI模式下不支持该接口。
【举例】
无。
【相关主题】
ss_mpi_vo_get_chn_rgn_luma¶
【描述】
获取指定图像区域的亮度总和。该接口主要用于对遮挡区域进行亮度和统计,根据统计的亮度,进行反色处理,使遮挡区域更加明显。
【语法】
td_s32 ss_mpi_vo_get_chn_rgn_luma(ot_vo_layer layer, ot_vo_chn chn, td_u32 num, const ot_rect *rgn, td_u64 *luma_data, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
视频输出视频层号。 取值范围:[0, OT_VO_MAX_LAYER_NUM)。不支持图形层。 |
输入 |
chn |
视频输出通道的通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
num |
统计区域的个数。 |
输入 |
rgn |
统计区域属性信息,即起始位置、宽、高。 取值范围: x: [0, 16382] y: [0, 8190] width: [2, 16384] height: [2, 8192] |
输入 |
luma_data |
接收区域亮度和统计信息的内存指针,该内存大小应该大于或等于sizeof(td_u64)×num。 |
输出 |
milli_sec |
超时参数milli_sec设为-1时,为阻塞接口;0时为非阻塞接口;大于0时为超时等待时间。超时时间的单位为毫秒(ms)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,参见错误码。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用接口前,该通道必须使能。
该接口只使用于OT_VO_PARTITION_MODE_SINGLE模式下的视频层通道,否则返回错误;OT_VO_PARTITION_MODE_MULTI模式下的亮度信息获取可以在VPSS处理部分获取。
统计区域的数量最大为64个区域。
统计区域属性信息rgn要求2对齐。
统计区域的起始坐标的确定分两种情况:如果不使能CROP,则起始坐标相对于原始图像的左上角坐标;如果使能CROP,则起始坐标相对于CROP以后的图像的左上角坐标。
【举例】
无。
【相关主题】
无。
回写相关API¶
ss_mpi_vo_set_wbc_src¶
【描述】
设置回写设备的回写源,可设置从设备回写还是从设备的视频层回写。
【语法】
td_s32 ss_mpi_vo_set_wbc_src(ot_vo_wbc wbc, const ot_vo_wbc_src *wbc_src);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM)。 |
输入 |
wbc_src |
回写源结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
wbc取值范围 |
|---|---|
SS528V100/SS625V100/SS524V100/SS626V100 |
[0, OT_VO_MAX_WBC_NUM)。 1、解决方案只支持一个回写通路,所以wbc只有一个值:0 2、回写源可以为:视频层VHD0;设备DHD0;视频层VHD1;设备DHD1。 3、回写源类型只能为OT_VO_WBC_SRC_DEV或者OT_VO_WBC_SRC_VIDEO。 |
SS522V101 |
[0, OT_VO_MAX_WBC_NUM)。 1、解决方案只支持一个回写通路,所以wbc只有一个值:0 2、回写源可以为:视频层VHD0;设备DHD0。 3、回写源类型只能为OT_VO_WBC_SRC_DEV或者OT_VO_WBC_SRC_VIDEO。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
回写源设置为设备时,可以回写出视频层和图形层叠加的数据;回写源设置为视频层时,只能回写出视频层的数据。
设置回写源之前不能对回写属性进行设置。
SINGLE模式下,回写源设置为视频层,且幅型比为手动模式OT_ASPECT_RATIO_MANUAL,有幅型比时,则回写输出的视频内容没有幅型比。
回写源设置为视频层,当视频层上面没有任何通道处使能状态时,视频层会进入禁用状态,此时回写设备没有输出。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_wbc_src¶
【描述】
获取回写设备的回写源。
【语法】
td_s32 ss_mpi_vo_get_wbc_src(ot_vo_wbc wbc, ot_vo_wbc_src *wbc_src);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM)。 |
输入 |
wbc_src |
回写源结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
未设置回写源时,该接口返回默认的回写源。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_enable_wbc¶
【描述】
使能回写设备。
【语法】
td_s32 ss_mpi_vo_enable_wbc(ot_vo_wbc wbc);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
支持回写功能的设备存在解决方案差异,下文统一用devx设备描述。
devx设备必须先使能。
必须先设置视频回写属性,再使能视频回写功能。
重复使能视频回写返回成功。
如果使能devx设备后立即使能WBC,由于在短时间内devx可能还没接收到VI或其他模块发送的图像数据,此时devx会显示背景色,WBC也将回写背景色。且如果WBC回写模式OT_VO_WBC_MODE_PROGRESSIVE_TO_INTERLACED(将两帧图像分别回写成顶底场图像,最终形成一帧图像),此时两帧图像可能刚好一帧是背景色图像,另一帧是数据图像,此时回写合成的一帧图像将一场是背景色另一场是图像数据。因此,建议使能devx后,等待该设备显示图像数据后再使能WBC回写功能。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
……
td_s32 ret;
ot_vo_wbc_attr wbc_attr;
ot_vo_wbc_mode wbc_mode;
wbc_attr.target_size.width = 720;
wbc_attr.target_size.height = 576;
wbc_attr.pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_422;
wbc_attr.frame_rate = 25;
wbc_attr.dynamic_range = OT_COMPRESS_MODE_NONE;
wbc_attr.compress_mode = OT_COMPRESS_MODE_NONE;
ret = ss_mpi_vo_set_wbc_attr(0, &wbc_attr);
if (ret != TD_SUCCESS)
{
printf("Set wbc attr failed!\n");
return TD_FAILURE;
}
ret = ss_mpi_vo_get_wbc_mode(0, &wbc_mode);
if (ret != TD_SUCCESS)
{
printf("Get wbc mode failed!\n");
return TD_FAILURE;
}
printf(“Get wbc mode %d\n”, wbc_mode);
wbc_mode = ot_vo_wbc_MODE_NOMAL;
ret = ss_mpi_vo_set_wbc_mode(0, wbc_mode);
if (ret != TD_SUCCESS)
{
printf("Set wbc mode failed!\n");
return TD_FAILURE;
}
/* enable wbc */
ret = ss_mpi_vo_enable_wbc(0);
if (ret != TD_SUCCESS)
{
printf("Enable wbc failed!\n");
return TD_FAILURE;
}
ret = ss_mpi_vo_get_wbc_attr(0, &wbc_attr);
if (ret != TD_SUCCESS)
{
printf("Get wbc attr failed!\n");
return TD_FAILURE;
}
/* do some process, i.e. */
/* disable wbc */
ret = ss_mpi_vo_disable_wbc(0);
if (ret != TD_SUCCESS)
{
printf("Disable wbc failed!\n");
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_disable_wbc¶
【描述】
禁用回写设备。
【语法】
td_s32 ss_mpi_vo_disable_wbc(ot_vo_wbc wbc);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
重复禁用视频回写返回成功。
禁用视频回写后,会把视频回写源,视频回写属性和视频回写模式恢复为默认值,再次使能视频回写时,需要重新设置。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参考ss_mpi_vo_enable_wbc。
【相关主题】
ss_mpi_vo_set_wbc_attr¶
【描述】
设置回写设备属性。
【语法】
td_s32 ss_mpi_vo_set_wbc_attr(ot_vo_wbc wbc, const ot_vo_wbc_attr *wbc_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
wbc_attr |
回写设备属性结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
当回写源为设备时,回写大小为设备大小。当回写源为视频层时,在MULTI模式下为视频层显示大小,在SINGLE模式下为图像实际显示的大小。
属性中的目标大小不能超过回写大小,且确保需要缩小的倍数在WBC允许的缩小倍数范围内。SPYCbCr422格式图像最大支持15倍缩小,SPYCbCr420格式最大支持7.5(15/2)倍缩小。
WBC回写模式设为OT_VO_WBC_MODE_PROGRESSIVE_TO_INTERLACED时,SPYCbCr422格式的图像最大支持缩放7.5(15/2)倍缩小,SPYCbCr420格式最大支持3.75(15/4)倍缩小。
该接口为动态设置接口,可在WBC视频回写使能的情况下调用。
视频回写属性中,宽高必须大于等于128,且2对齐。
视频回写属性中,宽高范围最大支持为1920*1080。
设置视频回写属性时必须先设置视频回写源。
支持回写输出压缩数据,仅支持非紧凑段压缩。
回写视频的动态范围仅支持SDR8。
输出视频像素格式支持YVU420和YVU422。
属性中的帧率用于控制回写帧率,若设置的帧率超过设备帧率,则回写帧率以实际回写帧率为准;若设置的帧率小于等于设备帧率,则回写帧率以设置的帧率为准。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参见ss_mpi_vo_enable_wbc的举例。
【相关主题】
ss_mpi_vo_get_wbc_attr¶
【描述】
获取回写设备属性。
【语法】
td_s32 ss_mpi_vo_get_wbc_attr(ot_vo_wbc wbc, ot_vo_wbc_attr *wbc_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
wbc_attr |
回写设备属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参见ss_mpi_vo_enable_wbc的举例。
【相关主题】
ss_mpi_vo_set_wbc_mode¶
【描述】
设置回写设备的回写模式。
【语法】
td_s32 ss_mpi_vo_set_wbc_mode(ot_vo_wbc wbc, ot_vo_wbc_mode wbc_mode);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
wbc_mode |
回写模式枚举变量。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
该接口为静态接口,必须先禁用WBC后才能改变模式。
回写模式选择为逐行转隔行模式或者丢弃重复帧模式下,且回写源上面的设备为叠加了多个视频层,同时回写源选择为回写设备的情况下,要求回写源设备上的视频层的显示帧率相同,若是不同,则会有问题。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无
【相关主题】
ss_mpi_vo_get_wbc_mode¶
【描述】
获取回写设备的回写模式。
【语法】
td_s32 ss_mpi_vo_get_wbc_mode(ot_vo_wbc wbc, ot_vo_wbc_mode *wbc_mode);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
wbc_mode |
回写模式枚举变量指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无
【相关主题】
ss_mpi_vo_set_wbc_depth¶
【描述】
设置回写设备的回写深度。
【语法】
td_s32 ss_mpi_vo_set_wbc_depth(ot_vo_wbc wbc, td_u32 depth);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
depth |
回写设备回写深度。 取值范围:[0, 8]。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
用户可以获取回写图像用于编码、显示或其他目的,设置视频回写图像的缓存深度可以让用户获取回写图像时不丢失视频帧。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
td_s32 ret;
ot_vo_dev dev = 1;
ot_vo_wbc wbc = 0;
td_u32 depth;
ot_video_frame_info *frame_info = (ot_video_frame_info *)malloc(sizeof(ot_video_frame_info));
ret = ss_mpi_vo_get_wbc_depth (wbc, &depth);
if (ret != TD_SUCCESS)
{
printf("Get wbc depth failed with error code %#x!\n", ret);
return TD_FAILURE;
}
depth = 10;
ret = ss_mpi_vo_set_wbc_depth(wbc, depth);
if (ret != TD_SUCCESS)
{
printf("Set wbc depth failed with error code %#x!\n", ret);
return TD_FAILURE;
}
ret = ss_mpi_vo_get_wbc_frame(wbc, frame_info);
if (ret != TD_SUCCESS)
{
printf("Get wbc screen frame failed!\n");
return TD_FAILURE;
}
/* do some process, i.e. store file or do JPEG encodeing ... */
ret = ss_mpi_vo_release_wbc_frame(wbc, frame_info);
if (ret != TD_SUCCESS)
{
printf("Release wbc screen frame failed!\n");
return TD_FAILURE;
}
【相关主题】
ss_mpi_vo_get_wbc_depth¶
【描述】
获取回写设备的回写深度。
【语法】
td_s32 ss_mpi_vo_get_wbc_depth(ot_vo_wbc wbc, td_u32 *depth);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
depth |
回写设备回写深度指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参见ss_mpi_vo_set_wbc_depth的举例。
【相关主题】
ss_mpi_vo_get_wbc_frame¶
【描述】
获取回写设备的输出图像数据。
【语法】
td_s32 ss_mpi_vo_get_wbc_frame(ot_vo_wbc wbc, ot_video_frame_info *frame_info, td_s32 milli_sec);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
frame_info |
获取的回写输出图像数据信息结构体指针。 |
输出 |
milli_sec |
超时时间。单位:ms。 超时参数milli_sec设为-1时,为阻塞接口,为0时为非阻塞接口,大于0时为超时等待时间。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
获取操作应保证与释放操作配对。
调用前应先设置视频回写缓存深度为大于0的值,否则获取不到图像。
调用前应该视频回写使能,否则获取不到图像。
获取后应保证及时的释放。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参见ss_mpi_vo_set_wbc_depth的举例。
【相关主题】
ss_mpi_vo_release_wbc_frame¶
【描述】
释放回写设备的输出图像数据。
【语法】
td_s32 ss_mpi_vo_release_wbc_frame(ot_vo_wbc wbc, const ot_video_frame_info *frame_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
wbc |
回写设备号。 取值范围:[0, OT_VO_MAX_WBC_NUM) |
输入 |
frame_info |
释放的输出通道图像数据信息结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100/SS522V101/SS626V100 |
支持。 |
SS928V100 |
不支持。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
获取操作应保证与释放操作配对。
不允许重复释放。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
请参见ss_mpi_vo_set_wbc_depth的举例。
【相关主题】
级联相关API¶
ss_mpi_vo_set_cas_attr¶
【描述】
设置视频级联属性。
【语法】
td_s32 ss_mpi_vo_set_cas_attr(const ot_vo_cas_attr *cas_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cas_attr |
视频输出级联属性指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
SS528V100级联支持64/32区域类型。 SS528V100级联支持1080P60奇数帧和偶数帧分别传输两路不同的数据。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
设置视频级联属性时必须保证设备已禁用,即要先设置视频级联属性再使能设备。
如果级联对应的物理设备已配置属性时,设置级联属性会返回不允许。
属性中的is_slave标识主从模式。级联的第一片设置为主模式,其它级联设备设置为从模式。
属性中的cas_mode标识单路双路模式。
级联双路模式支持1080P60奇数帧和偶数帧分别传输两路不同的数据,即相当于双路1080P30。
级联单路模式支持3840x2160@30、1080P60和1080P30。
属性中的cas_edge_mode标识单沿或双沿数据传输(SS528V100视频级联口输出3840x2160@30fps和3840x2160@25fps时,只支持双沿采样模式)。
如果有多片SS528V100作为从片且级联时序为3840x2160@30fps时,所有的SS528V100从片都必须设置为双沿采样模式,且总级联片数不能超过三片。
SS528V100的从片从模式不支持双路模式,超过三片级联场景只支持单路模式。
SS528V100的从片从模式不支持OT_VO_OUT_640x480_60,OT_VO_OUT_480P60和OT_VO_OUT_576P50时序。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_cas_attr¶
【描述】
获取视频级联属性。
【语法】
td_s32 ss_mpi_vo_get_cas_attr(ot_vo_cas_attr *cas_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cas_attr |
视频级联属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_enable_cas_dev¶
【描述】
使能级联扩展设备。
【语法】
td_s32 ss_mpi_vo_enable_cas_dev (ot_vo_dev cas_dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cas_dev |
级联扩展设备。 取值范围:[OT_VO_CAS_DEV_1, OT_VO_CAS_DEV_2]。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
级联扩展设备是一个软件概念,不是实际的硬件设备。
级联属性设置为双路模式时,需使能两个级联扩展设备(OT_VO_CAS_DEV_1和OT_VO_CAS_DEV_2)传输级联数据。
级联属性设置为单路模式时,只能使能级联扩展设备OT_VO_CAS_DEV_1。
需要在级联设备dev0的视频层使能后才能调用此接口,使能级联扩展设备。
级联扩展设备不需要设置硬件相关的设备公共属性、视频层属性,只需对级联设备dev0设置以上属性即可。
级联情况下,级联设备dev0的通道不可用,其他模块需绑定级联扩展设备的通道发送数据。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_disable_cas_dev¶
【描述】
禁用级联扩展设备。
【语法】
td_s32 ss_mpi_vo_disable_cas_dev(ot_vo_dev cas_dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cas_dev |
级联扩展设备。 取值范围:[OT_VO_CAS_DEV_1, OT_VO_CAS_DEV_2]。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
重复禁用视为成功。
必须先禁用级联扩展设备上的所有通道。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_set_cas_pattern¶
【描述】
设置视频级联画面样式。
【语法】
td_s32 ss_mpi_vo_set_cas_pattern(ot_vo_dev cas_dev, td_u32 pattern);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cas_dev |
级联扩展设备。 取值范围:[OT_VO_CAS_DEV_1, OT_VO_CAS_DEV_2] |
输入 |
pattern |
视频级联画面布局样式。 取值范围:[0, OT_VO_MAX_CAS_PATTERN) |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
画面布局样式是一个小于128的正整数,它的主要作用是检测各片之间传输图像的一致性。即如果要保证图像传输的正确性,就必须保证各片的pattern一致。
用pattern来标识当前画面布局样式,如4画面、9画面、16画面的pattern对应设置为4、9、16。设置的pattetrn值不必和画面布局样式中的画面个数一致,只要保证各片设置的pattern值一致即可,如也可以用1来表示每个片子上都是16分屏的画面布局。
使用pattern的另一个作用是确保多画面切换时的同步性。当级联的片子正在进行4画面显示时,其中一片先切换到9画面,而其它片子陆续切换为9画面,如果pattern始终不变,画面就会在切换过程中出现错误的几帧。但是如果在4画面时pattern设置为4,在9画面时pattern设置为9,那么切换过程中出现的错误图像就会被丢弃,保证画面切换的正确性。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_get_cas_pattern¶
【描述】
获取视频级联画面样式。
【语法】
td_s32 ss_mpi_vo_get_cas_pattern(ot_vo_dev cas_dev, td_u32 *pattern);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cas_dev |
级联扩展设备。 取值范围:[OT_VO_CAS_DEV_1, OT_VO_CAS_DEV_2]。 |
输入 |
pattern |
视频级联画面布局样式指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_bind_cas_chn¶
【描述】
绑定级联区域与视频输出通道。
【语法】
td_s32 ss_mpi_vo_bind_cas_chn(td_u32 pos, ot_vo_dev cas_dev, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
pos |
视频级联位置编号。 取值范围:[0, OT_VO_MAX_CAS_POS_32RGN)或[0, OT_VO_MAX_CAS_POS_64RGN)。 |
输入 |
cas_dev |
级联扩展设备。 取值范围:[OT_VO_CAS_DEV_1, OT_VO_CAS_DEV_2]。 |
输入 |
chn |
视频层通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
视频级联位置编号必须在所有的级联解决方案上是唯一标识的。
级联扩展设备未使能时绑定区域会返回错误。
级联属性设置为64区域时,Pos取值范围为[0, 63];级联属性设置为32区域时,Pos取值范围为[0, 31]。
不管是一个片子内通道的Pos,还是多个级联片子间通道的Pos值都不能有重复,如果存在两个或者两个以上通道的Pos值相同,传输图像就会错误。Pos相当于给Chn取了个别名,所有需要级联的通道都必须有一个名字区别于其它通道,这样才能保证传输图像的正确性。
此接口支持批处理操作,并建议在ss_mpi_vo_batch_begin和ss_mpi_vo_batch_end之间调用。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_unbind_cas_chn¶
【描述】
解绑定级联区域与视频输出通道。
【语法】
td_s32 ss_mpi_vo_unbind_cas_chn(td_u32 pos, ot_vo_dev cas_dev, ot_vo_chn chn);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
pos |
视频级联位置编号。 取值范围:[0, OT_VO_MAX_CAS_POS_32RGN)或[0, OT_VO_MAX_CAS_POS_64RGN)。 |
输入 |
cas_dev |
级联扩展设备。 取值范围:[OT_VO_CAS_DEV_1, OT_VO_CAS_DEV_2]。 |
输入 |
chn |
视频层通道号。 取值范围:[0, OT_VO_MAX_CHN_NUM)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
视频级联位置编号必须在所有的级联片子上是唯一标识的。
级联属性设置为64区域时,Pos取值范围为[0, 63];级联属性设置为32区域时,Pos取值范围为[0, 31]。
此接口支持批处理操作,并建议在ss_mpi_vo_batch_begin和ss_mpi_vo_batch_end之间调用。
禁用通道前,请先调用此接口解除通道与位置之间的绑定关系。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_enable_cas¶
【描述】
使能视频级联。
【语法】
td_s32 ss_mpi_vo_enable_cas(td_void);
【参数】
无。
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
级联只能在设备dev0上进行。
级联使能前必须保证设置级联属性、设备dev0使能和该设备上的视频层使能。
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
ss_mpi_vo_disable_cas¶
【描述】
禁用视频级联。
【语法】
td_s32 ss_mpi_vo_disable_cas(td_void);
【参数】
无。
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【差异说明】
解决方案 |
描述 |
|---|---|
SS528V100 |
支持级联。 |
SS625V100/SS524V100/SS522V101/SS928V100/SS626V100 |
不支持级联。 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
请参考上文中的【差异说明】查看支持或者不支持本接口的解决方案。
【举例】
无。
【相关主题】
导出函数相关API¶
ot_vo_enable_dev_export¶
【描述】
内核态导出函数,用于客户外部调用,用于使能设备。
【语法】
td_void ot_vo_enable_dev_export(ot_vo_dev dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
【返回值】
无
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
【注意】
ot_vo_enable_dev_export函数提取了ss_mpi_vo_enable接口启动时序的功能,提供给外部调用,主要用于多片视频同步方案,用户可以启动VO业务后再调用此接口,以达到多片时序相位同步的目的。
系统未初始化或已经去初始化情况下,调用此接口无效果。
内核态使用,只能在 ot_user.ko 中使用。
【举例】
无
【相关主题】
ot_vo_disable_dev_export
ot_vo_disable_dev_export¶
【描述】
内核态导出函数,用于客户外部调用,用于去使能设备。
【语法】
td_void ot_vo_disable_dev_export(ot_vo_dev dev);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
dev |
视频输出设备号。 取值范围:[0, OT_VO_MAX_PHYS_DEV_NUM)。 |
输入 |
【返回值】
无
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
【注意】
ot_vo_disable_dev_export函数提取了ss_mpi_vo_disable接口关闭时序的功能,提供给外部调用,主要用于多片视频同步方案,用户结合ot_vo_enable_dev_export使用,以达到多片时序相位同步的目的。
系统未初始化或已经去初始化情况下,调用此接口无效果。
内核态使用,只能在 ot_user.ko 中使用。
【举例】
无。
【相关主题】
ot_vo_enable_dev_export
ot_vo_get_export_symbol¶
【描述】
内核态导出函数,用于注册中断回调函数。
【语法】
ot_vo_export_symbol *ot_vo_get_export_symbol(td_void);
【参数】
无。
【返回值】
ot_vo_export_symbol结构体指针。
【需求】
头文件:ot_vo_export.h
【注意】
在内核态使用。
若解决方案不支持则返回空指针。
只能在 ot_user.ko 中使用。
【举例】
无。
【相关主题】
ot_vo_export_symbol