• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1### 3.1.4 VO理论及实现方式
2
3#### 3.1.4.1 VO理论
4
5VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形。Hi3516DV300支持的显示/回写设备、视频层和图形层情况如下表所示,其他芯片型号请自行查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》中的表4-1内容。
6
7![](./figures/hispark_taurus_helloworld_sample/124Hi3516DV300%E6%94%AF%E6%8C%81%E7%9A%84%E6%98%BE%E7%A4%BA%E5%9B%9E%E5%86%99%E8%AE%BE%E5%A4%87%E6%83%85%E5%86%B5.png)
8
9注:缩写解释
10
11DHD0:Device HD0,超高清设备0。
12
13DHD1:Device HD1,高清设备1。
14
15VHD0:Video layer of HD0,超高清视频层0,隶属于DHD0。
16
17VHD1:Video layer of HD1,高清视频层1,隶属于DHD1。
18
19VHD2:Video layer of HD2,高清视频层2,Hi3559AV100上隶属于DHD0,Hi3519AV100/Hi3556AV100上可以绑定至DHD0或者DHD1,用作PIP层。
20
21WD:Write Back Channel Device,回写通道设备。
22
23图形层G3:Graphic layer3,用作鼠标层,DHD0和DHD1中均有此项,但只能绑定其中一个设备,G3默认绑定在DHD1上
24
25**VO基本概念:**
26
27* 超高清、高清和标清显示设备
28
29SDK将高清和标清显示设备分别标示为DHDx(Device High Definition x)和DSDx(Device Standard Definition x),其中,x为索引号,从0开始取值,表示第几路高清/标清显示设备。例如第0路高清设备标示为DHD0,第0路标清显示设备标示为DSD0。所有高清和标清显示设备又可分别简称为HD和SD设备。Hi3516DV300中有1个高清显示设备DHD0。由于DHD0能够支持到4K(3840x2160)的时序,因此DHD0也可以称之为超高清显示设备。
30
31* 视频层
32
33对于固定在每个显示设备上面对应的视频层,SDK也对应采取VHDx和VSDx来标示。芯片支持显示设备的情况请参见表4-1。芯片HD设备功能对比参考表4-2。芯片VHD视频层功能对比如表4-3所示。视频层和显示设备的实际显示分辨率依赖于具体输出接口,设备上视频输出接口支持的最大时序见表4-4所示。
34
35**注:表4-1,表4-2,表4-3,表4-4均来自源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中的《HiMPP媒体处理软件 V4.0 开发参考.pdf》,对应各自的芯片型号查阅即可。**
36
37#### 3.1.4.2 实现方式
38
39在启动vo之前需要先config vo,围绕SAMPLE_VO_CONFIG_S结构体进行配置,该结构体由3大部分组成:device、layer、channel,如下图所示:
40
41此结构体可在 device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm.h中找到
42
43![](./figures/hispark_taurus_helloworld_sample/125VO%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F.png)
44
45
46
47config vo代码实现细节如下图所示:
48
49可参考源码device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c中的StVoParamCfg( )接口
50
51![](./figures/hispark_taurus_helloworld_sample/126config%20vo%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0.png)
52
53需要配置mipi参数,配置前先仔细阅读mipi参数文档(由屏幕厂商提供),通过SAMPLE_VO_CONFIG_MIPI接口进行配置,如下图所示:
54
55注:关于config mipi参与细节,自行查阅device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c 中SAMPLE_VO_CONFIG_MIPI内容即可。
56
57下图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件的SampleVioVpssVoMipi()接口中找到。
58
59![](./figures/hispark_taurus_helloworld_sample/127SAMPLE_VO_CONFIG_MIPI%E5%86%85%E5%AE%B9.png)
60
61接下来需要start vo,start vo可参考SampleCommVoStartMipi接口,如下图所示:
62
63下图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件的SampleVioVpssVoMipi()接口中找到。
64
65![](./figures/hispark_taurus_helloworld_sample/128SAMPLE_COMM_VO_StartVO_MIPI%E6%8E%A5%E5%8F%A3.png)
66
67关于SampleCommVoStartMipi接口调用的底层API进行如下说明:
68
69**VO_PUB_ATTR_S**
70
71此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到
72
73【说明】
74
75定义视频输出公共属性结构体。
76
77【定义】
78
79![](./figures/hispark_taurus_helloworld_sample/129VO_PUB_ATTR_S%E5%AE%9A%E4%B9%89.png)
80
81【成员】
82
83![](./figures/hispark_taurus_helloworld_sample/130VO_PUB_ATTR_S%E6%88%90%E5%91%98.png)
84
85【芯片差异】
86
87**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_PUB_ATTR_S结构体芯片差异内容。
88
89【注意事项】
90
91**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_PUB_ATTR_S结构体注意事项内容。
92
93**VO_VIDEO_LAYER_ATTR_S**
94
95此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo.h中找到
96
97【说明】
98
99定义视频层属性。
100
101在视频层属性中存在三个概念,即设备分辨率、显示分辨率和图像分辨率。每种分辨率的概念可以从下图中可以看出:
102
103* 图像分辨率指放置各个通道图像的画布大小。
104
105* 显示分辨率是把图像分辨率中描述的画布经过VO放大后的显示区域。
106
107* 设备分辨率与设备时序一致,即如果时序为1920 x 1080,那设备分辨率就为1920 x 1080。
108
109![](./figures/hispark_taurus_helloworld_sample/131%E5%AE%9A%E4%B9%89%E8%A7%86%E9%A2%91%E5%B1%82%E5%B1%9E%E6%80%A7.png)
110
111视频层的内存使用分为通道聚集(如图a所示)和非聚集(如图b所示)两种方式。
112
113* **聚集方式:**
114
115  * 决定内存分配大小的因素:实际显示通道的分辨率的总和。
116
117  * 不支持视频层的放大功能。
118
119  * 仅适用于MULTI模式。
120
121  * 聚集方式开启后,对于MULTI模式下的视频层,可以调用通道显示位置接口(HI_MPI_VO_SetChnDisplayPosition)来合理布局通道的显示位置。
122
123* **非聚集方式:**
124* 决定内存分配大小的因素:显示图像的起始坐标(0,0)与最右下角的坐标所决定的区域大小和缩放比例(图像分辨率与显示分辨率的比)。
125
126* 支持视频层的放大功能。通过视频放大功能,在相同显示分辨率情况下,依据适当的比例把图像分辨率调小,那么需要分配的内存也相应减少,这种情况下可以做到节省内存,但是会因放大导致图像质量下降。
127
128* 在拼接好图像画面后,通道画面的显示位置不可以调整。
129
130图a 视频层使用聚集内存方式的场景a(聚集使用内存)
131
132![](./figures/hispark_taurus_helloworld_sample/132%E8%81%9A%E9%9B%86%E4%BD%BF%E7%94%A8%E5%86%85%E5%AD%98.png)
133
134图b 视频层使用非聚集内存方式的场景b(非聚集使用内存)
135
136![](./figures/hispark_taurus_helloworld_sample/133%E9%9D%9E%E8%81%9A%E9%9B%86%E4%BD%BF%E7%94%A8%E5%86%85%E5%AD%98.png)
137
138【定义】
139
140![](./figures/hispark_taurus_helloworld_sample/134VO_VIDEO_LAYER_ATTR_S%E5%AE%9A%E4%B9%89.png)
141
142【成员】
143
144![](./figures/hispark_taurus_helloworld_sample/135VO_VIDEO_LAYER_ATTR_S%E6%88%90%E5%91%98.png)
145
146【差异说明】
147
148**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_VIDEO_LAYER_ATTR_S结构体差异说明内容。
149
150【注意事项】
151
152**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_VIDEO_LAYER_ATTR_S结构体注意事项内容。
153
154**VO_CSC_S**
155
156此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到
157
158【说明】
159
160定义图像输出效果结构体。
161
162【定义】
163
164![](./figures/hispark_taurus_helloworld_sample/136VO_CSC_S%E5%AE%9A%E4%B9%89.png)
165
166【成员】
167
168![](./figures/hispark_taurus_helloworld_sample/137VO_CSC_S%E6%88%90%E5%91%98.png)
169
170在SampleCommVoStartMipi接口中,调用了SampleCommVoStartDevMipi来启动device,对SampleCommVoStartDevMipi接口调用的底层接口做如下说明:
171
172**VO_USER_INTFSYNC_INFO_S**
173
174此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到
175
176【说明】
177
178用户接口时序信息,包括配置时钟源类型、时钟大小、时钟分频比和时钟相位,它们的拓扑关系如下图所示:
179
180![](./figures/hispark_taurus_helloworld_sample/139%E7%94%A8%E6%88%B7%E6%8E%A5%E5%8F%A3%E6%97%B6%E5%BA%8F%E4%BF%A1%E6%81%AF.png)
181
182【定义】
183
184![](./figures/hispark_taurus_helloworld_sample/140VO_USER_INTFSYNC_INFO_S%E5%AE%9A%E4%B9%89.png)
185
186【成员】
187
188![](./figures/hispark_taurus_helloworld_sample/141VO_USER_INTFSYNC_INFO_S%E6%88%90%E5%91%98.png)
189
190【注意事项】
191
192**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_USER_INTFSYNC_INFO_S结构体中的注意事项内容,里面介绍了不同芯片的时钟分频比配置方法、前置分频配置方法、用户时序信息推导方法等,开发者自行查阅即可。
193
194
195
196以下四个接口可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到
197
198**HI_MPI_VO_SetPubAttr**
199
200【描述】
201
202配置视频输出设备的公共属性。
203
204【语法】
205
206HI_S32 HI_MPI_VO_SetPubAttr(VO_DEVVoDev, const VO_PUB_ATTR_S *pstPubAttr);
207
208【参数】
209
210![](./figures/hispark_taurus_helloworld_sample/142HI_MPI_VO_SetPubAttr%E5%8F%82%E6%95%B0.png)
211
212【返回值】
213
214![](./figures/hispark_taurus_helloworld_sample/143HI_MPI_VO_SetPubAttr%E8%BF%94%E5%9B%9E%E5%80%BC.png)
215
216【需求】
217
218* 头文件:mpi_vo.hhi_comm_vo.h
219
220* 库文件:libmpi.a
221
222【注意】
223
224* 视频输出设备属性为静态属性,必须在执行HI_MPI_VO_Enable前配置。
225
226* 各个DEV的使用说明详见VO_DEV。
227
228* 视频输出设备属性的使用说明详见VO_PUB_ATTR_S章节。
229
230
231
232**HI_MPI_VO_SetDevFrameRate**
233
234【描述】
235
236* 设置设备用户时序下设备帧率。
237
238【语法】
239
240* HI_S32 HI_MPI_VO_SetDevFrameRate(VO_DEVVoDev, HI_U32 u32FrameRate);
241
242【参数】
243
244![](./figures/hispark_taurus_helloworld_sample/144HI_MPI_VO_SetDevFrameRate%E5%8F%82%E6%95%B0.png)
245
246【返回值】
247
248![](./figures/hispark_taurus_helloworld_sample/145HI_MPI_VO_SetDevFrameRate%E8%BF%94%E5%9B%9E%E5%80%BC.png)
249
250【需求】
251
252* 头文件:mpi_vo.hhi_comm_vo.h
253
254* 库文件:libmpi.a
255
256【注意】
257
258* 只能在用户时序下使用。
259
260* 只能在调用HI_MPI_VO_SetPubAttr之后、HI_MPI_VO_Enable之前调用。
261
262
263
264**HI_MPI_VO_SetUserIntfSyncInfo**
265
266【描述】
267
268* 设置用户接口时序信息,用于配置时钟源、时钟大小和时钟分频比。
269
270【语法】
271
272* HI_S32 HI_MPI_VO_SetUserIntfSyncInfo (VO_DEV VoDev, VO_USER_INTFSYNC_INFO_S *pstUserInfo);
273
274【参数】
275
276![](./figures/hispark_taurus_helloworld_sample/146HI_MPI_VO_SetUserIntfSyncInfo%E5%8F%82%E6%95%B0.png)
277
278【返回值】
279
280![](./figures/hispark_taurus_helloworld_sample/147HI_MPI_VO_SetUserIntfSyncInfo%E8%BF%94%E5%9B%9E%E5%80%BC.png)
281
282【需求】
283
284* 头文件:mpi_vo.hhi_comm_vo.h
285
286* 库文件:libmpi.a
287
288【注意】
289
290* 在调用该接口前,必须对设备公共属性进行配置,否则返回设备未配置错误。
291
292* 只有物理设备支持设置用户时序信息。
293
294* 时钟源类型和时钟大小为静态信息,必须在执行HI_MPI_VO_Enable前配置。
295
296* 仅在HI_MPI_VO_SetPubAttr中接口数据VO_PUB_ATTR_S的enIntfSync成员设置为VO_OUTPUT_USER时有效。
297
298具体用户时序调试方法可参考**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP 媒体处理软件V4.0 FAQ》,用户时序时钟相关的配置可参考VO_USER_INTFSYNC_INFO_S。
299
300
301
302**HI_MPI_VO_Enable**
303
304【描述】
305
306* 启动视频输出设备。
307
308【语法】
309
310* HI_S32 HI_MPI_VO_Enable (VO_DEV VoDev);
311
312【参数】
313
314![](./figures/hispark_taurus_helloworld_sample/148HI_MPI_VO_Enable%E5%8F%82%E6%95%B0.png)
315
316【返回值】
317
318![](./figures/hispark_taurus_helloworld_sample/149HI_MPI_VO_Enable%E8%BF%94%E5%9B%9E%E5%80%BC.png)
319
320【需求】
321
322* 头文件:mpi_vo.hhi_comm_vo.h
323
324* 库文件:libmpi.a
325
326【注意】
327
328* 由于系统没有初始化设备为使能状态,所以在使用视频输出功能前必须先进行设备使能操作。
329* 在调用设备使能前,必须对设备公共属性进行配置,否则返回设备未配置错误。
330* 为适应开机画面与正常操作界面间顺畅切换,此处需要检查VO硬件是否已经使能,如果已使能则返回成功,且沿用已有时序配置。如果希望更改VO的时序配置,则需要先调用HI_MPI_VO_Disable接口,强制关闭VO硬件后再使能。
331* 各个DEV的使用说明详见VO_DEV。
332* 重复调用此接口,会返回设备已使能。
333
334关于SampleCommVoStartDevMipi接口实现细节如下图所示:
335
336以下截图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
337
338![](./figures/hispark_taurus_helloworld_sample/196SampleCommVOStartDevMipi.png)
339
340在SampleCommVoStartMipi接口中,调用了SampleCommVoGetWhMipi来获取mipi设备的宽、高,如下图所示:
341
342以下截图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
343
344![](./figures/hispark_taurus_helloworld_sample/197getmipidevice.png)
345
346![](./figures/hispark_taurus_helloworld_sample/151SAMPLE_COMM_VO_GetWH_MIPI.png)
347
348进入SampleCommVoGetWhMipi接口,需要在最后配置下MIPI屏宽高的一个case,taurus套件使用的mipi屏宽800,高480,如下图所示:
349
350以下截图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
351
352![](./figures/hispark_taurus_helloworld_sample/152%E9%85%8D%E7%BD%AE%E4%B8%8BMIPI%E5%B1%8F%E5%AE%BD%E9%AB%98.png)
353
354若SampleCommVoGetWhMipi接口等执行失败,会进入SAMPLE_COMM_VO_StopDev接口终止设备,该接口调用的底层接口如下:
355
356**HI_MPI_VO_Disable**
357
358此接口可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h文件中找到
359
360【描述】
361
362* 禁用视频输出设备。
363
364【语法】
365
366* HI_S32 HI_MPI_VO_Disable(VO_DEV VoDev);
367
368【参数】
369
370![](./figures/hispark_taurus_helloworld_sample/153HI_MPI_VO_Disable%E5%8F%82%E6%95%B0.png)
371
372【返回值】
373
374![](./figures/hispark_taurus_helloworld_sample/154HI_MPI_VO_Disable%E8%BF%94%E5%9B%9E%E5%80%BC.png)
375
376【需求】
377
378* 头文件:mpi_vo.hhi_comm_vo.h
379
380* 库文件:libmpi.a
381
382【注意】
383
384* 设备禁止前必须先禁止该设备上的视频层。
385* 设备禁止前,如果有使能WBC,则必须关闭该使能。
386* 调用HI_MPI_VO_Enable后,如果未调用该接口进行禁止,则VO设备将一直保持使能状态,并且下次设置设备属性时不会生效。
387* 设备禁止后需要重新设置设备公共属性,才可使能设备。
388
389SAMPLE_COMM_VO_StopDev接口代码实现细节如下:
390
391以下device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm_vo.c文件中找到
392
393![](./figures/hispark_taurus_helloworld_sample/155SAMPLE_COMM_VO_StopDev.png)
394
395在SampleCommVoStartMipi接口中,调用了HI_MPI_VO_SetDisplayBufLen、HI_MPI_VO_SetVideoLayerPartitionMode、HI_MPI_VO_GetVideoLayerCSC、HI_MPI_VO_SetVideoLayerCSC底层接口,分别执行设置显示缓冲的长度、设置视频层的分割模式、获取设备输出图像效果、设置视频层输出图像效果的业务,上述接口详细说明如下:
396
397**VO_LAYER**
398
399此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_common.h文件中找到
400
401【说明】
402
403* 定义视频层号。
404
405【定义】
406
407* typedef HI_S32 VO_LAYER;
408
409【成员】
410
411* 请根据芯片类型查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_LAYER中的成员内容。
412
413【芯片差异】
414
415* 请根据芯片类型查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_LAYER中的芯片差异内容。
416
417
418
419以下四个接口可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到
420
421**HI_MPI_VO_SetDisplayBufLen**
422
423此接口可以在
424
425【描述】
426
427* 设置显示缓冲的长度。
428
429【语法】
430
431* HI_S32 HI_MPI_VO_SetDisplayBufLen(VO_LAYER VoLayer, HI_U32 u32BufLen);
432
433【参数】
434
435![](./figures/hispark_taurus_helloworld_sample/156HI_MPI_VO_SetDisplayBufLen%E5%8F%82%E6%95%B0.png)
436
437【返回值】
438
439![](./figures/hispark_taurus_helloworld_sample/157HI_MPI_VO_SetDisplayBufLen%E8%BF%94%E5%9B%9E%E5%80%BC.png)
440
441【需求】
442
443* 头文件:mpi_vo.hhi_comm_vo.h
444
445* 库文件:libmpi.a
446
447【注意】
448
449* 调用前需保证视频输出视频层未使能。
450
451* 缓冲长度默认值是0,默认是VO直通模式显示。
452
453* 当不满足VO直通的条件时,需要调用该接口设置缓冲的长度,否则VO无法正常工作。
454
455* 非直通情况下,当VO所有通道输入性能总和超过3840x2160@60(或7680x4320@15)时,VGS处理一帧的时间耗费得更多,一块缓存被占用的时间也更久,因此,设备帧率不变的情况下,需要将缓冲长度设置为大于等于4以满足低延时显示
456
457**HI_MPI_VO_SetVideoLayerPartitionMode**
458
459【描述】
460
461* 设置视频层的分割模式。
462
463【语法】
464
465* HI_S32 HI_MPI_VO_SetVideoLayerPartitionMode(VO_LAYER VoLayer, VO_PART_MODE_E enPartMode);
466
467【参数】
468
469![](./figures/hispark_taurus_helloworld_sample/158HI_MPI_VO_SetVideoLayerPartitionMode%E5%8F%82%E6%95%B0.png)
470
471【返回值】
472
473![](./figures/hispark_taurus_helloworld_sample/159HI_MPI_VO_SetVideoLayerPartitionMode%E8%BF%94%E5%9B%9E%E5%80%BC.png)
474
475【需求】
476
477* 头文件:mpi_vo.hhi_comm_vo.hhi_defines.h
478
479* 库文件:libmpi.a
480
481【注意】
482
483请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetVideoLayerPartitionMode结构体中注意事项内容
484
485**HI_MPI_VO_GetVideoLayerCSC**
486
487【描述】
488
489* 获取设备输出图像效果。
490
491【语法】
492
493* HI_S32 HI_MPI_VO_GetVideoLayerCSC(VO_LAYER VoLayer, VO_CSC_S *pstVideoCSC);
494
495【参数】
496
497| 参数名称    | 描述                                         | 输入/输出 |
498| ----------- | -------------------------------------------- | --------- |
499| VoLayer     | 视频输出视频层号。  取值范围:物理视频层号。 | 输入      |
500| pstVideoCSC | 图像输出效果结构体指针。                     | 输出      |
501
502【返回值】
503
504![](./figures/hispark_taurus_helloworld_sample/162HI_MPI_VO_GetVideoLayerCSC%E8%BF%94%E5%9B%9E%E5%80%BC.png)
505
506【需求】
507
508* 头文件:mpi_vo.hhi_comm_vo.h
509
510* 库文件:libmpi.a
511
512【注意】
513
514* 该接口主要用于获取图像的输出效果,包括亮度、对比度、色调、饱和度,其取值范围均为[0, 100]。
515
516**HI_MPI_VO_SetVideoLayerCSC**
517
518【描述】
519
520* 设置视频层输出图像效果。
521
522【语法】
523
524* HI_S32 HI_MPI_VO_SetVideoLayerCSC(VO_LAYER VoLayer, const VO_CSC_S *pstVideoCSC);
525
526【参数】
527
528| 参数名称    | 描述                                         | 输入/输出 |
529| ----------- | -------------------------------------------- | --------- |
530| VoLayer     | 视频输出视频层号。  取值范围:物理视频层号。 | 输入      |
531| pstVideoCSC | 图像输出效果结构体指针。                     | 输入      |
532
533【返回值】
534
535![](./figures/hispark_taurus_helloworld_sample/163HI_MPI_VO_SetVideoLayerCSC%E8%BF%94%E5%9B%9E%E5%80%BC.png)
536
537【芯片差异】
538
539* 请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetVideoLayerCSC结构体芯片差异内容。
540
541【需求】
542
543* 头文件:mpi_vo.hhi_comm_vo.h
544
545* 库文件:libmpi.a
546
547【注意】
548
549* 请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetVideoLayerCSC结构体注意事项内容。
550
551在SampleCommVoStartMipi接口中,需要调用SAMPLE_COMM_VO_StartLayer接口来start layer,如下图所示:
552
553以下截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
554
555![](./figures/hispark_taurus_helloworld_sample/198startlayer.png)
556
557进入SAMPLE_COMM_VO_StartLayer接口进行分析,分析其调用的底层接口。
558
559以下两个接口可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到
560
561**HI_MPI_VO_SetVideoLayerAttr**
562
563【描述】
564
565* 设置视频层属性。
566
567【语法】
568
569* HI_S32 HI_MPI_VO_SetVideoLayerAttr(VO_LAYER VoLayer, const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr);
570
571【参数】
572
573![](./figures/hispark_taurus_helloworld_sample/165HI_MPI_VO_SetVideoLayerAttr%E5%8F%82%E6%95%B0.png)
574
575【返回值】
576
577![](./figures/hispark_taurus_helloworld_sample/166HI_MPI_VO_SetVideoLayerAttr%E8%BF%94%E5%9B%9E%E5%80%BC.png)
578
579【需求】
580
581* 头文件:mpi_vo.hhi_comm_vo.h
582
583* 库文件:libmpi.a
584
585【注意】
586
587* 需要在视频层所绑定的设备处于使能状态时才能设置视频层属性。
588
589* 设置视频层属性(SINGLE模式下除了pstLayerAttr中stDispRect的s32X,s32Y)必须在视频层禁止的情况下进行。
590
591* SINGLE模式下,视频层使能后,可单独设置视频层显示位置。
592
593* 视频层属性的使用说明详见VO_VIDEO_LAYER_ATTR_S。
594
595**HI_MPI_VO_EnableVideoLayer**
596
597【描述】
598
599* 使能视频层。
600
601【语法】
602
603* HI_S32 HI_MPI_VO_EnableVideoLayer (VO_LAYER VoLayer);
604
605【参数】
606
607![](./figures/hispark_taurus_helloworld_sample/167HI_MPI_VO_EnableVideoLayer%E5%8F%82%E6%95%B0.png)
608
609【返回值】
610
611![](./figures/hispark_taurus_helloworld_sample/168HI_MPI_VO_EnableVideoLayer%E8%BF%94%E5%9B%9E%E5%80%BC.png)
612
613【需求】
614
615* 头文件:mpi_vo.hhi_comm_vo.h
616
617* 库文件:libmpi.a
618
619【注意】
620
621* 视频层使能前必须保证该视频层所绑定的设备处于使能状态。
622
623* 视频层使能前必须保证该视频层已经配置。
624
625* 各个视频层的使用说明详见VO_LAYER。
626
627SAMPLE_COMM_VO_StartLayer具体代码实现细节如下:
628
629此截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm_vo.c文件中找到
630
631![](./figures/hispark_taurus_helloworld_sample/169SAMPLE_COMM_VO_StartLayer.png)
632
633在SampleCommVoStartMipi接口的最后,会调用SampleCommVoStartChnMipi接口来启动vo channels,如下图所示:
634
635此截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
636
637![](./figures/hispark_taurus_helloworld_sample/199startchnmipi.png)
638
639若SampleCommVoStartChnMipi接口返回值不等于HI_SUCCESS,需StopLayer and StopDev,及调用SAMPLE_COMM_VO_StopLayer和SAMPLE_COMM_VO_StopDev,其中SAMPLE_COMM_VO_StopDev接口上文已经讲述,这里只分析SAMPLE_COMM_VO_StopLayer接口,如下图所示。
640
641此截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm_vo.c文件中找到
642
643![](./figures/hispark_taurus_helloworld_sample/171SAMPLE_COMM_VO_StopLayer.png)
644
645针对其调用的HI_MPI_VO_DisableVideoLayer接口作如下解释:
646
647此接口可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到
648
649【描述】
650
651* 禁止视频层
652
653【语法】
654
655* HI_S32 HI_MPI_VO_DisableVideoLayer(VO_LAYER VoLayer);
656
657【参数】
658
659![](./figures/hispark_taurus_helloworld_sample/172HI_MPI_VO_DisableVideoLayer%E5%8F%82%E6%95%B0.png)
660
661【返回值】
662
663![](./figures/hispark_taurus_helloworld_sample/173HI_MPI_VO_DisableVideoLayer%E8%BF%94%E5%9B%9E%E5%80%BC.png)
664
665【需求】
666
667* 头文件:mpi_vo.hhi_comm_vo.h
668
669* 库文件:libmpi.a
670
671【注意】
672
673* 视频层禁止前必须保证其上的通道全部禁止。
674
675* 在禁止视频层时,非直通情况下,如果用户没有释放从VO获取的图像buffer资源,该接口会返回HI_ERR_VB_BUSY的错误码,表示VO创建的VB资源没有释放。多见于用户调用获取屏幕图像未释放的情况下。
676
677* 在禁止视频层时,如果用户选择了WBC数据源为VO_WBC_DATASOURCE_VIDEO模式,则必须保证将该设备的WBC功能关闭使能。
678
679进入SampleCommVoStartChnMipi接口进行分析,发现其调用如下底层接口,接下来进行解读。
680
681**VO_CHN_ATTR_S**
682
683此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo.h文件中找到
684
685【说明】
686
687* 定义视频输出通道属性。
688
689【定义】
690
691![](./figures/hispark_taurus_helloworld_sample/174VO_CHN_ATTR_S%E5%AE%9A%E4%B9%89.png)
692
693【成员】
694
695![](./figures/hispark_taurus_helloworld_sample/175VO_CHN_ATTR_S%E6%88%90%E5%91%98.png)
696
697【注意事项】
698
699* 属性中的优先级,数值越大优先级越高。
700* SINGLE模式下,当多个通道有重叠的显示区域时,优先级高的通道图像将覆盖优先级低的通道。优先级相同的各通道有重叠时,默认通道号大的图像将覆盖通道号小的通道图像。
701* 通道显示区域不能超过视频层属性中设定的画布大小(stImageSize大小)。
702* 如果有视频层放大的情况,stRect是放大前视频层上的起始位置和宽高,放大后显示的起始位置和宽高会按视频层放大的比例偏移或放大。
703
704
705
706以下四个接口可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到
707
708**HI_MPI_VO_GetVideoLayerAttr**
709
710【描述】
711
712* 获取视频层属性。
713
714【语法】
715
716* HI_S32 HI_MPI_VO_GetVideoLayerAttr(VO_LAYER VoLayer, VO_VIDEO_LAYER_ATTR_S *pstLayerAttr);
717
718【参数】
719
720![](./figures/hispark_taurus_helloworld_sample/176HI_MPI_VO_GetVideoLayerAttr%E5%8F%82%E6%95%B0.png)
721
722【返回值】
723
724![](./figures/hispark_taurus_helloworld_sample/177HI_MPI_VO_GetVideoLayerAttr%E8%BF%94%E5%9B%9E%E5%80%BC.png)
725
726【需求】
727
728* 头文件:mpi_vo.hhi_comm_vo.h
729
730* 库文件:libmpi.a
731
732【注意】
733
734* 不调用HI_MPI_VO_EnableVideoLayer和HI_MPI_VO_SetVideoLayerAttr也可获取视频层属性。此时获取的为默认值。
735
736* 建议在设置视频层属性前先调用此接口获取视频层属性。
737
738
739
740**HI_MPI_VO_SetChnAttr**
741
742【描述】
743
744* 配置指定视频输出通道的属性。
745
746【语法】
747
748* HI_S32 HI_MPI_VO_SetChnAttr(VO_LAYER VoLayer, VO_CHN VoChn, const VO_CHN_ATTR_S *pstChnAttr);
749
750【参数】
751
752![](./figures/hispark_taurus_helloworld_sample/178HI_MPI_VO_SetChnAttr%E5%8F%82%E6%95%B0.png)
753
754【返回值】
755
756![](./figures/hispark_taurus_helloworld_sample/179HI_MPI_VO_SetChnAttr%E8%BF%94%E5%9B%9E%E5%80%BC.png)
757
758【需求】
759
760* 头文件:mpi_vo.hhi_comm_vo.h
761
762* 库文件:libmpi.a
763
764【注意】
765
766* 请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetChnAttr结构体注意事项内容。
767
768**HI_MPI_VO_SetChnRotation**
769
770【描述】
771
772* 设置指定视频输出通道的旋转角度。对通道设置旋转角度,该旋转角度将作用于进入通道的视频图像,具体效果是对图像旋转相应的角度后再进行显示。
773
774【语法】
775
776* HI_S32 HI_MPI_VO_SetChnRotation(VO_LAYER VoLayer, VO_CHN VoChn, ROTATION_E enRotation);
777
778【参数】
779
780![](./figures/hispark_taurus_helloworld_sample/180HI_MPI_VO_SetChnRotation%E5%8F%82%E6%95%B0.png)
781
782【返回值】
783
784![](./figures/hispark_taurus_helloworld_sample/181HI_MPI_VO_SetChnRotation%E8%BF%94%E5%9B%9E%E5%80%BC.png)
785
786【需求】
787
788* 头文件:mpi_vo.hhi_comm_vo.h
789
790* 库文件:libmpi.a
791
792【注意】
793
794* 设置旋转的角度只能是ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270其中之一。
795
796* VO在SINGLE模式下并且前端在预览模式下旋转功能才会生效。但如果VO前端绑定VPSS并且VPSS工作在USER模式下,即使VPSS前端为回放模式,旋转也会生效。
797
798* VO在MULTI模式下通道不支持旋转,即使对通道设置了旋转角度,也不生效。
799
800**HI_MPI_VO_EnableChn**
801
802【描述】
803
804* 启用指定的视频输出通道。
805
806【语法】
807
808* HI_S32 HI_MPI_VO_EnableChn (VO_LAYER VoLayer, VO_CHN VoChn);
809
810【参数】
811
812![](./figures/hispark_taurus_helloworld_sample/182HI_MPI_VO_EnableChn%E5%8F%82%E6%95%B0.png)
813
814![](./figures/hispark_taurus_helloworld_sample/183HI_MPI_VO_EnableChn%E8%BF%94%E5%9B%9E%E5%80%BC.png)
815
816【返回值】
817
818![](./figures/hispark_taurus_helloworld_sample/183HI_MPI_VO_EnableChn%E5%8F%82%E6%95%B0.png)
819
820【需求】
821
822* 头文件:mpi_vo.hhi_comm_vo.h
823
824* 库文件:libmpi.a
825
826【注意】
827
828* 调用前必须保证视频层绑定关系存在,否则将返回失败。
829
830* 调用前必须使能相应设备上的视频层。
831
832* 通道使能前必须进行通道配置,否则返回通道未配置的错误。
833
834* 允许重复使能同一视频输出通道,不返回失败。
835
836#### 3.1.4.3 VPSS bind VO
837
838VPSS bind VOS绑定VPSS和VO之间的关联关系,绑定后,数据源生成的数据将自动发送给接收者,依然调用HI_MPI_SYS_Bind接口,上文已经对HI_MPI_SYS_Bind接口进行详细解释,这里不再阐述,如下图所示:
839
840以下截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
841
842![](./figures/hispark_taurus_helloworld_sample/184HI_MPI_SYS_Bind1.png)
843
844![](./figures/hispark_taurus_helloworld_sample/185HI_MPI_SYS_Bind2.png)
845
846注:SAMPLE_VIO_VPSS_VO_MIPI接口中VI、VPSS、VO每个环节均有异常判断,若进入到异常环节,均会goto到异常判断API,该部分异常判断接口较为简单,自行查阅源码即可,如下图所示:
847
848以下截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到
849
850![](./figures/hispark_taurus_helloworld_sample/186%E6%AF%8F%E4%B8%AA%E7%8E%AF%E8%8A%82%E5%9D%87%E6%9C%89%E5%BC%82%E5%B8%B8%E5%88%A4%E6%96%AD.png)
851