11bd4fe43Sopenharmony_ci### 3.1.4 VO理论及实现方式 21bd4fe43Sopenharmony_ci 31bd4fe43Sopenharmony_ci#### 3.1.4.1 VO理论 41bd4fe43Sopenharmony_ci 51bd4fe43Sopenharmony_ciVO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形。Hi3516DV300支持的显示/回写设备、视频层和图形层情况如下表所示,其他芯片型号请自行查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》中的表4-1内容。 61bd4fe43Sopenharmony_ci 71bd4fe43Sopenharmony_ci 81bd4fe43Sopenharmony_ci 91bd4fe43Sopenharmony_ci注:缩写解释 101bd4fe43Sopenharmony_ci 111bd4fe43Sopenharmony_ciDHD0:Device HD0,超高清设备0。 121bd4fe43Sopenharmony_ci 131bd4fe43Sopenharmony_ciDHD1:Device HD1,高清设备1。 141bd4fe43Sopenharmony_ci 151bd4fe43Sopenharmony_ciVHD0:Video layer of HD0,超高清视频层0,隶属于DHD0。 161bd4fe43Sopenharmony_ci 171bd4fe43Sopenharmony_ciVHD1:Video layer of HD1,高清视频层1,隶属于DHD1。 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ciVHD2:Video layer of HD2,高清视频层2,Hi3559AV100上隶属于DHD0,Hi3519AV100/Hi3556AV100上可以绑定至DHD0或者DHD1,用作PIP层。 201bd4fe43Sopenharmony_ci 211bd4fe43Sopenharmony_ciWD:Write Back Channel Device,回写通道设备。 221bd4fe43Sopenharmony_ci 231bd4fe43Sopenharmony_ci图形层G3:Graphic layer3,用作鼠标层,DHD0和DHD1中均有此项,但只能绑定其中一个设备,G3默认绑定在DHD1上 241bd4fe43Sopenharmony_ci 251bd4fe43Sopenharmony_ci**VO基本概念:** 261bd4fe43Sopenharmony_ci 271bd4fe43Sopenharmony_ci* 超高清、高清和标清显示设备 281bd4fe43Sopenharmony_ci 291bd4fe43Sopenharmony_ciSDK将高清和标清显示设备分别标示为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也可以称之为超高清显示设备。 301bd4fe43Sopenharmony_ci 311bd4fe43Sopenharmony_ci* 视频层 321bd4fe43Sopenharmony_ci 331bd4fe43Sopenharmony_ci对于固定在每个显示设备上面对应的视频层,SDK也对应采取VHDx和VSDx来标示。芯片支持显示设备的情况请参见表4-1。芯片HD设备功能对比参考表4-2。芯片VHD视频层功能对比如表4-3所示。视频层和显示设备的实际显示分辨率依赖于具体输出接口,设备上视频输出接口支持的最大时序见表4-4所示。 341bd4fe43Sopenharmony_ci 351bd4fe43Sopenharmony_ci**注:表4-1,表4-2,表4-3,表4-4均来自源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中的《HiMPP媒体处理软件 V4.0 开发参考.pdf》,对应各自的芯片型号查阅即可。** 361bd4fe43Sopenharmony_ci 371bd4fe43Sopenharmony_ci#### 3.1.4.2 实现方式 381bd4fe43Sopenharmony_ci 391bd4fe43Sopenharmony_ci在启动vo之前需要先config vo,围绕SAMPLE_VO_CONFIG_S结构体进行配置,该结构体由3大部分组成:device、layer、channel,如下图所示: 401bd4fe43Sopenharmony_ci 411bd4fe43Sopenharmony_ci此结构体可在 device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm.h中找到 421bd4fe43Sopenharmony_ci 431bd4fe43Sopenharmony_ci 441bd4fe43Sopenharmony_ci 451bd4fe43Sopenharmony_ci 461bd4fe43Sopenharmony_ci 471bd4fe43Sopenharmony_ciconfig vo代码实现细节如下图所示: 481bd4fe43Sopenharmony_ci 491bd4fe43Sopenharmony_ci可参考源码device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c中的StVoParamCfg( )接口 501bd4fe43Sopenharmony_ci 511bd4fe43Sopenharmony_ci 521bd4fe43Sopenharmony_ci 531bd4fe43Sopenharmony_ci需要配置mipi参数,配置前先仔细阅读mipi参数文档(由屏幕厂商提供),通过SAMPLE_VO_CONFIG_MIPI接口进行配置,如下图所示: 541bd4fe43Sopenharmony_ci 551bd4fe43Sopenharmony_ci注:关于config mipi参与细节,自行查阅device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c 中SAMPLE_VO_CONFIG_MIPI内容即可。 561bd4fe43Sopenharmony_ci 571bd4fe43Sopenharmony_ci下图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件的SampleVioVpssVoMipi()接口中找到。 581bd4fe43Sopenharmony_ci 591bd4fe43Sopenharmony_ci 601bd4fe43Sopenharmony_ci 611bd4fe43Sopenharmony_ci接下来需要start vo,start vo可参考SampleCommVoStartMipi接口,如下图所示: 621bd4fe43Sopenharmony_ci 631bd4fe43Sopenharmony_ci下图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件的SampleVioVpssVoMipi()接口中找到。 641bd4fe43Sopenharmony_ci 651bd4fe43Sopenharmony_ci 661bd4fe43Sopenharmony_ci 671bd4fe43Sopenharmony_ci关于SampleCommVoStartMipi接口调用的底层API进行如下说明: 681bd4fe43Sopenharmony_ci 691bd4fe43Sopenharmony_ci**VO_PUB_ATTR_S** 701bd4fe43Sopenharmony_ci 711bd4fe43Sopenharmony_ci此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到 721bd4fe43Sopenharmony_ci 731bd4fe43Sopenharmony_ci【说明】 741bd4fe43Sopenharmony_ci 751bd4fe43Sopenharmony_ci定义视频输出公共属性结构体。 761bd4fe43Sopenharmony_ci 771bd4fe43Sopenharmony_ci【定义】 781bd4fe43Sopenharmony_ci 791bd4fe43Sopenharmony_ci 801bd4fe43Sopenharmony_ci 811bd4fe43Sopenharmony_ci【成员】 821bd4fe43Sopenharmony_ci 831bd4fe43Sopenharmony_ci 841bd4fe43Sopenharmony_ci 851bd4fe43Sopenharmony_ci【芯片差异】 861bd4fe43Sopenharmony_ci 871bd4fe43Sopenharmony_ci**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_PUB_ATTR_S结构体芯片差异内容。 881bd4fe43Sopenharmony_ci 891bd4fe43Sopenharmony_ci【注意事项】 901bd4fe43Sopenharmony_ci 911bd4fe43Sopenharmony_ci**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_PUB_ATTR_S结构体注意事项内容。 921bd4fe43Sopenharmony_ci 931bd4fe43Sopenharmony_ci**VO_VIDEO_LAYER_ATTR_S** 941bd4fe43Sopenharmony_ci 951bd4fe43Sopenharmony_ci此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo.h中找到 961bd4fe43Sopenharmony_ci 971bd4fe43Sopenharmony_ci【说明】 981bd4fe43Sopenharmony_ci 991bd4fe43Sopenharmony_ci定义视频层属性。 1001bd4fe43Sopenharmony_ci 1011bd4fe43Sopenharmony_ci在视频层属性中存在三个概念,即设备分辨率、显示分辨率和图像分辨率。每种分辨率的概念可以从下图中可以看出: 1021bd4fe43Sopenharmony_ci 1031bd4fe43Sopenharmony_ci* 图像分辨率指放置各个通道图像的画布大小。 1041bd4fe43Sopenharmony_ci 1051bd4fe43Sopenharmony_ci* 显示分辨率是把图像分辨率中描述的画布经过VO放大后的显示区域。 1061bd4fe43Sopenharmony_ci 1071bd4fe43Sopenharmony_ci* 设备分辨率与设备时序一致,即如果时序为1920 x 1080,那设备分辨率就为1920 x 1080。 1081bd4fe43Sopenharmony_ci 1091bd4fe43Sopenharmony_ci 1101bd4fe43Sopenharmony_ci 1111bd4fe43Sopenharmony_ci视频层的内存使用分为通道聚集(如图a所示)和非聚集(如图b所示)两种方式。 1121bd4fe43Sopenharmony_ci 1131bd4fe43Sopenharmony_ci* **聚集方式:** 1141bd4fe43Sopenharmony_ci 1151bd4fe43Sopenharmony_ci * 决定内存分配大小的因素:实际显示通道的分辨率的总和。 1161bd4fe43Sopenharmony_ci 1171bd4fe43Sopenharmony_ci * 不支持视频层的放大功能。 1181bd4fe43Sopenharmony_ci 1191bd4fe43Sopenharmony_ci * 仅适用于MULTI模式。 1201bd4fe43Sopenharmony_ci 1211bd4fe43Sopenharmony_ci * 聚集方式开启后,对于MULTI模式下的视频层,可以调用通道显示位置接口(HI_MPI_VO_SetChnDisplayPosition)来合理布局通道的显示位置。 1221bd4fe43Sopenharmony_ci 1231bd4fe43Sopenharmony_ci* **非聚集方式:** 1241bd4fe43Sopenharmony_ci* 决定内存分配大小的因素:显示图像的起始坐标(0,0)与最右下角的坐标所决定的区域大小和缩放比例(图像分辨率与显示分辨率的比)。 1251bd4fe43Sopenharmony_ci 1261bd4fe43Sopenharmony_ci* 支持视频层的放大功能。通过视频放大功能,在相同显示分辨率情况下,依据适当的比例把图像分辨率调小,那么需要分配的内存也相应减少,这种情况下可以做到节省内存,但是会因放大导致图像质量下降。 1271bd4fe43Sopenharmony_ci 1281bd4fe43Sopenharmony_ci* 在拼接好图像画面后,通道画面的显示位置不可以调整。 1291bd4fe43Sopenharmony_ci 1301bd4fe43Sopenharmony_ci图a 视频层使用聚集内存方式的场景a(聚集使用内存) 1311bd4fe43Sopenharmony_ci 1321bd4fe43Sopenharmony_ci 1331bd4fe43Sopenharmony_ci 1341bd4fe43Sopenharmony_ci图b 视频层使用非聚集内存方式的场景b(非聚集使用内存) 1351bd4fe43Sopenharmony_ci 1361bd4fe43Sopenharmony_ci 1371bd4fe43Sopenharmony_ci 1381bd4fe43Sopenharmony_ci【定义】 1391bd4fe43Sopenharmony_ci 1401bd4fe43Sopenharmony_ci 1411bd4fe43Sopenharmony_ci 1421bd4fe43Sopenharmony_ci【成员】 1431bd4fe43Sopenharmony_ci 1441bd4fe43Sopenharmony_ci 1451bd4fe43Sopenharmony_ci 1461bd4fe43Sopenharmony_ci【差异说明】 1471bd4fe43Sopenharmony_ci 1481bd4fe43Sopenharmony_ci**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_VIDEO_LAYER_ATTR_S结构体差异说明内容。 1491bd4fe43Sopenharmony_ci 1501bd4fe43Sopenharmony_ci【注意事项】 1511bd4fe43Sopenharmony_ci 1521bd4fe43Sopenharmony_ci**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_VIDEO_LAYER_ATTR_S结构体注意事项内容。 1531bd4fe43Sopenharmony_ci 1541bd4fe43Sopenharmony_ci**VO_CSC_S** 1551bd4fe43Sopenharmony_ci 1561bd4fe43Sopenharmony_ci此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到 1571bd4fe43Sopenharmony_ci 1581bd4fe43Sopenharmony_ci【说明】 1591bd4fe43Sopenharmony_ci 1601bd4fe43Sopenharmony_ci定义图像输出效果结构体。 1611bd4fe43Sopenharmony_ci 1621bd4fe43Sopenharmony_ci【定义】 1631bd4fe43Sopenharmony_ci 1641bd4fe43Sopenharmony_ci 1651bd4fe43Sopenharmony_ci 1661bd4fe43Sopenharmony_ci【成员】 1671bd4fe43Sopenharmony_ci 1681bd4fe43Sopenharmony_ci 1691bd4fe43Sopenharmony_ci 1701bd4fe43Sopenharmony_ci在SampleCommVoStartMipi接口中,调用了SampleCommVoStartDevMipi来启动device,对SampleCommVoStartDevMipi接口调用的底层接口做如下说明: 1711bd4fe43Sopenharmony_ci 1721bd4fe43Sopenharmony_ci**VO_USER_INTFSYNC_INFO_S** 1731bd4fe43Sopenharmony_ci 1741bd4fe43Sopenharmony_ci此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到 1751bd4fe43Sopenharmony_ci 1761bd4fe43Sopenharmony_ci【说明】 1771bd4fe43Sopenharmony_ci 1781bd4fe43Sopenharmony_ci用户接口时序信息,包括配置时钟源类型、时钟大小、时钟分频比和时钟相位,它们的拓扑关系如下图所示: 1791bd4fe43Sopenharmony_ci 1801bd4fe43Sopenharmony_ci 1811bd4fe43Sopenharmony_ci 1821bd4fe43Sopenharmony_ci【定义】 1831bd4fe43Sopenharmony_ci 1841bd4fe43Sopenharmony_ci 1851bd4fe43Sopenharmony_ci 1861bd4fe43Sopenharmony_ci【成员】 1871bd4fe43Sopenharmony_ci 1881bd4fe43Sopenharmony_ci 1891bd4fe43Sopenharmony_ci 1901bd4fe43Sopenharmony_ci【注意事项】 1911bd4fe43Sopenharmony_ci 1921bd4fe43Sopenharmony_ci**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_USER_INTFSYNC_INFO_S结构体中的注意事项内容,里面介绍了不同芯片的时钟分频比配置方法、前置分频配置方法、用户时序信息推导方法等,开发者自行查阅即可。 1931bd4fe43Sopenharmony_ci 1941bd4fe43Sopenharmony_ci 1951bd4fe43Sopenharmony_ci 1961bd4fe43Sopenharmony_ci以下四个接口可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h中找到 1971bd4fe43Sopenharmony_ci 1981bd4fe43Sopenharmony_ci**HI_MPI_VO_SetPubAttr** 1991bd4fe43Sopenharmony_ci 2001bd4fe43Sopenharmony_ci【描述】 2011bd4fe43Sopenharmony_ci 2021bd4fe43Sopenharmony_ci配置视频输出设备的公共属性。 2031bd4fe43Sopenharmony_ci 2041bd4fe43Sopenharmony_ci【语法】 2051bd4fe43Sopenharmony_ci 2061bd4fe43Sopenharmony_ciHI_S32 HI_MPI_VO_SetPubAttr(VO_DEVVoDev, const VO_PUB_ATTR_S *pstPubAttr); 2071bd4fe43Sopenharmony_ci 2081bd4fe43Sopenharmony_ci【参数】 2091bd4fe43Sopenharmony_ci 2101bd4fe43Sopenharmony_ci 2111bd4fe43Sopenharmony_ci 2121bd4fe43Sopenharmony_ci【返回值】 2131bd4fe43Sopenharmony_ci 2141bd4fe43Sopenharmony_ci 2151bd4fe43Sopenharmony_ci 2161bd4fe43Sopenharmony_ci【需求】 2171bd4fe43Sopenharmony_ci 2181bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 2191bd4fe43Sopenharmony_ci 2201bd4fe43Sopenharmony_ci* 库文件:libmpi.a 2211bd4fe43Sopenharmony_ci 2221bd4fe43Sopenharmony_ci【注意】 2231bd4fe43Sopenharmony_ci 2241bd4fe43Sopenharmony_ci* 视频输出设备属性为静态属性,必须在执行HI_MPI_VO_Enable前配置。 2251bd4fe43Sopenharmony_ci 2261bd4fe43Sopenharmony_ci* 各个DEV的使用说明详见VO_DEV。 2271bd4fe43Sopenharmony_ci 2281bd4fe43Sopenharmony_ci* 视频输出设备属性的使用说明详见VO_PUB_ATTR_S章节。 2291bd4fe43Sopenharmony_ci 2301bd4fe43Sopenharmony_ci 2311bd4fe43Sopenharmony_ci 2321bd4fe43Sopenharmony_ci**HI_MPI_VO_SetDevFrameRate** 2331bd4fe43Sopenharmony_ci 2341bd4fe43Sopenharmony_ci【描述】 2351bd4fe43Sopenharmony_ci 2361bd4fe43Sopenharmony_ci* 设置设备用户时序下设备帧率。 2371bd4fe43Sopenharmony_ci 2381bd4fe43Sopenharmony_ci【语法】 2391bd4fe43Sopenharmony_ci 2401bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetDevFrameRate(VO_DEVVoDev, HI_U32 u32FrameRate); 2411bd4fe43Sopenharmony_ci 2421bd4fe43Sopenharmony_ci【参数】 2431bd4fe43Sopenharmony_ci 2441bd4fe43Sopenharmony_ci 2451bd4fe43Sopenharmony_ci 2461bd4fe43Sopenharmony_ci【返回值】 2471bd4fe43Sopenharmony_ci 2481bd4fe43Sopenharmony_ci 2491bd4fe43Sopenharmony_ci 2501bd4fe43Sopenharmony_ci【需求】 2511bd4fe43Sopenharmony_ci 2521bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 2531bd4fe43Sopenharmony_ci 2541bd4fe43Sopenharmony_ci* 库文件:libmpi.a 2551bd4fe43Sopenharmony_ci 2561bd4fe43Sopenharmony_ci【注意】 2571bd4fe43Sopenharmony_ci 2581bd4fe43Sopenharmony_ci* 只能在用户时序下使用。 2591bd4fe43Sopenharmony_ci 2601bd4fe43Sopenharmony_ci* 只能在调用HI_MPI_VO_SetPubAttr之后、HI_MPI_VO_Enable之前调用。 2611bd4fe43Sopenharmony_ci 2621bd4fe43Sopenharmony_ci 2631bd4fe43Sopenharmony_ci 2641bd4fe43Sopenharmony_ci**HI_MPI_VO_SetUserIntfSyncInfo** 2651bd4fe43Sopenharmony_ci 2661bd4fe43Sopenharmony_ci【描述】 2671bd4fe43Sopenharmony_ci 2681bd4fe43Sopenharmony_ci* 设置用户接口时序信息,用于配置时钟源、时钟大小和时钟分频比。 2691bd4fe43Sopenharmony_ci 2701bd4fe43Sopenharmony_ci【语法】 2711bd4fe43Sopenharmony_ci 2721bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetUserIntfSyncInfo (VO_DEV VoDev, VO_USER_INTFSYNC_INFO_S *pstUserInfo); 2731bd4fe43Sopenharmony_ci 2741bd4fe43Sopenharmony_ci【参数】 2751bd4fe43Sopenharmony_ci 2761bd4fe43Sopenharmony_ci 2771bd4fe43Sopenharmony_ci 2781bd4fe43Sopenharmony_ci【返回值】 2791bd4fe43Sopenharmony_ci 2801bd4fe43Sopenharmony_ci 2811bd4fe43Sopenharmony_ci 2821bd4fe43Sopenharmony_ci【需求】 2831bd4fe43Sopenharmony_ci 2841bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 2851bd4fe43Sopenharmony_ci 2861bd4fe43Sopenharmony_ci* 库文件:libmpi.a 2871bd4fe43Sopenharmony_ci 2881bd4fe43Sopenharmony_ci【注意】 2891bd4fe43Sopenharmony_ci 2901bd4fe43Sopenharmony_ci* 在调用该接口前,必须对设备公共属性进行配置,否则返回设备未配置错误。 2911bd4fe43Sopenharmony_ci 2921bd4fe43Sopenharmony_ci* 只有物理设备支持设置用户时序信息。 2931bd4fe43Sopenharmony_ci 2941bd4fe43Sopenharmony_ci* 时钟源类型和时钟大小为静态信息,必须在执行HI_MPI_VO_Enable前配置。 2951bd4fe43Sopenharmony_ci 2961bd4fe43Sopenharmony_ci* 仅在HI_MPI_VO_SetPubAttr中接口数据VO_PUB_ATTR_S的enIntfSync成员设置为VO_OUTPUT_USER时有效。 2971bd4fe43Sopenharmony_ci 2981bd4fe43Sopenharmony_ci具体用户时序调试方法可参考**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP 媒体处理软件V4.0 FAQ》,用户时序时钟相关的配置可参考VO_USER_INTFSYNC_INFO_S。 2991bd4fe43Sopenharmony_ci 3001bd4fe43Sopenharmony_ci 3011bd4fe43Sopenharmony_ci 3021bd4fe43Sopenharmony_ci**HI_MPI_VO_Enable** 3031bd4fe43Sopenharmony_ci 3041bd4fe43Sopenharmony_ci【描述】 3051bd4fe43Sopenharmony_ci 3061bd4fe43Sopenharmony_ci* 启动视频输出设备。 3071bd4fe43Sopenharmony_ci 3081bd4fe43Sopenharmony_ci【语法】 3091bd4fe43Sopenharmony_ci 3101bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_Enable (VO_DEV VoDev); 3111bd4fe43Sopenharmony_ci 3121bd4fe43Sopenharmony_ci【参数】 3131bd4fe43Sopenharmony_ci 3141bd4fe43Sopenharmony_ci 3151bd4fe43Sopenharmony_ci 3161bd4fe43Sopenharmony_ci【返回值】 3171bd4fe43Sopenharmony_ci 3181bd4fe43Sopenharmony_ci 3191bd4fe43Sopenharmony_ci 3201bd4fe43Sopenharmony_ci【需求】 3211bd4fe43Sopenharmony_ci 3221bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 3231bd4fe43Sopenharmony_ci 3241bd4fe43Sopenharmony_ci* 库文件:libmpi.a 3251bd4fe43Sopenharmony_ci 3261bd4fe43Sopenharmony_ci【注意】 3271bd4fe43Sopenharmony_ci 3281bd4fe43Sopenharmony_ci* 由于系统没有初始化设备为使能状态,所以在使用视频输出功能前必须先进行设备使能操作。 3291bd4fe43Sopenharmony_ci* 在调用设备使能前,必须对设备公共属性进行配置,否则返回设备未配置错误。 3301bd4fe43Sopenharmony_ci* 为适应开机画面与正常操作界面间顺畅切换,此处需要检查VO硬件是否已经使能,如果已使能则返回成功,且沿用已有时序配置。如果希望更改VO的时序配置,则需要先调用HI_MPI_VO_Disable接口,强制关闭VO硬件后再使能。 3311bd4fe43Sopenharmony_ci* 各个DEV的使用说明详见VO_DEV。 3321bd4fe43Sopenharmony_ci* 重复调用此接口,会返回设备已使能。 3331bd4fe43Sopenharmony_ci 3341bd4fe43Sopenharmony_ci关于SampleCommVoStartDevMipi接口实现细节如下图所示: 3351bd4fe43Sopenharmony_ci 3361bd4fe43Sopenharmony_ci以下截图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 3371bd4fe43Sopenharmony_ci 3381bd4fe43Sopenharmony_ci 3391bd4fe43Sopenharmony_ci 3401bd4fe43Sopenharmony_ci在SampleCommVoStartMipi接口中,调用了SampleCommVoGetWhMipi来获取mipi设备的宽、高,如下图所示: 3411bd4fe43Sopenharmony_ci 3421bd4fe43Sopenharmony_ci以下截图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 3431bd4fe43Sopenharmony_ci 3441bd4fe43Sopenharmony_ci 3451bd4fe43Sopenharmony_ci 3461bd4fe43Sopenharmony_ci 3471bd4fe43Sopenharmony_ci 3481bd4fe43Sopenharmony_ci进入SampleCommVoGetWhMipi接口,需要在最后配置下MIPI屏宽高的一个case,taurus套件使用的mipi屏宽800,高480,如下图所示: 3491bd4fe43Sopenharmony_ci 3501bd4fe43Sopenharmony_ci以下截图可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 3511bd4fe43Sopenharmony_ci 3521bd4fe43Sopenharmony_ci 3531bd4fe43Sopenharmony_ci 3541bd4fe43Sopenharmony_ci若SampleCommVoGetWhMipi接口等执行失败,会进入SAMPLE_COMM_VO_StopDev接口终止设备,该接口调用的底层接口如下: 3551bd4fe43Sopenharmony_ci 3561bd4fe43Sopenharmony_ci**HI_MPI_VO_Disable** 3571bd4fe43Sopenharmony_ci 3581bd4fe43Sopenharmony_ci此接口可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo_dev.h文件中找到 3591bd4fe43Sopenharmony_ci 3601bd4fe43Sopenharmony_ci【描述】 3611bd4fe43Sopenharmony_ci 3621bd4fe43Sopenharmony_ci* 禁用视频输出设备。 3631bd4fe43Sopenharmony_ci 3641bd4fe43Sopenharmony_ci【语法】 3651bd4fe43Sopenharmony_ci 3661bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_Disable(VO_DEV VoDev); 3671bd4fe43Sopenharmony_ci 3681bd4fe43Sopenharmony_ci【参数】 3691bd4fe43Sopenharmony_ci 3701bd4fe43Sopenharmony_ci 3711bd4fe43Sopenharmony_ci 3721bd4fe43Sopenharmony_ci【返回值】 3731bd4fe43Sopenharmony_ci 3741bd4fe43Sopenharmony_ci 3751bd4fe43Sopenharmony_ci 3761bd4fe43Sopenharmony_ci【需求】 3771bd4fe43Sopenharmony_ci 3781bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 3791bd4fe43Sopenharmony_ci 3801bd4fe43Sopenharmony_ci* 库文件:libmpi.a 3811bd4fe43Sopenharmony_ci 3821bd4fe43Sopenharmony_ci【注意】 3831bd4fe43Sopenharmony_ci 3841bd4fe43Sopenharmony_ci* 设备禁止前必须先禁止该设备上的视频层。 3851bd4fe43Sopenharmony_ci* 设备禁止前,如果有使能WBC,则必须关闭该使能。 3861bd4fe43Sopenharmony_ci* 调用HI_MPI_VO_Enable后,如果未调用该接口进行禁止,则VO设备将一直保持使能状态,并且下次设置设备属性时不会生效。 3871bd4fe43Sopenharmony_ci* 设备禁止后需要重新设置设备公共属性,才可使能设备。 3881bd4fe43Sopenharmony_ci 3891bd4fe43Sopenharmony_ciSAMPLE_COMM_VO_StopDev接口代码实现细节如下: 3901bd4fe43Sopenharmony_ci 3911bd4fe43Sopenharmony_ci以下device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm_vo.c文件中找到 3921bd4fe43Sopenharmony_ci 3931bd4fe43Sopenharmony_ci 3941bd4fe43Sopenharmony_ci 3951bd4fe43Sopenharmony_ci在SampleCommVoStartMipi接口中,调用了HI_MPI_VO_SetDisplayBufLen、HI_MPI_VO_SetVideoLayerPartitionMode、HI_MPI_VO_GetVideoLayerCSC、HI_MPI_VO_SetVideoLayerCSC底层接口,分别执行设置显示缓冲的长度、设置视频层的分割模式、获取设备输出图像效果、设置视频层输出图像效果的业务,上述接口详细说明如下: 3961bd4fe43Sopenharmony_ci 3971bd4fe43Sopenharmony_ci**VO_LAYER** 3981bd4fe43Sopenharmony_ci 3991bd4fe43Sopenharmony_ci此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_common.h文件中找到 4001bd4fe43Sopenharmony_ci 4011bd4fe43Sopenharmony_ci【说明】 4021bd4fe43Sopenharmony_ci 4031bd4fe43Sopenharmony_ci* 定义视频层号。 4041bd4fe43Sopenharmony_ci 4051bd4fe43Sopenharmony_ci【定义】 4061bd4fe43Sopenharmony_ci 4071bd4fe43Sopenharmony_ci* typedef HI_S32 VO_LAYER; 4081bd4fe43Sopenharmony_ci 4091bd4fe43Sopenharmony_ci【成员】 4101bd4fe43Sopenharmony_ci 4111bd4fe43Sopenharmony_ci* 请根据芯片类型查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_LAYER中的成员内容。 4121bd4fe43Sopenharmony_ci 4131bd4fe43Sopenharmony_ci【芯片差异】 4141bd4fe43Sopenharmony_ci 4151bd4fe43Sopenharmony_ci* 请根据芯片类型查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》VO_LAYER中的芯片差异内容。 4161bd4fe43Sopenharmony_ci 4171bd4fe43Sopenharmony_ci 4181bd4fe43Sopenharmony_ci 4191bd4fe43Sopenharmony_ci以下四个接口可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到 4201bd4fe43Sopenharmony_ci 4211bd4fe43Sopenharmony_ci**HI_MPI_VO_SetDisplayBufLen** 4221bd4fe43Sopenharmony_ci 4231bd4fe43Sopenharmony_ci此接口可以在 4241bd4fe43Sopenharmony_ci 4251bd4fe43Sopenharmony_ci【描述】 4261bd4fe43Sopenharmony_ci 4271bd4fe43Sopenharmony_ci* 设置显示缓冲的长度。 4281bd4fe43Sopenharmony_ci 4291bd4fe43Sopenharmony_ci【语法】 4301bd4fe43Sopenharmony_ci 4311bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetDisplayBufLen(VO_LAYER VoLayer, HI_U32 u32BufLen); 4321bd4fe43Sopenharmony_ci 4331bd4fe43Sopenharmony_ci【参数】 4341bd4fe43Sopenharmony_ci 4351bd4fe43Sopenharmony_ci 4361bd4fe43Sopenharmony_ci 4371bd4fe43Sopenharmony_ci【返回值】 4381bd4fe43Sopenharmony_ci 4391bd4fe43Sopenharmony_ci 4401bd4fe43Sopenharmony_ci 4411bd4fe43Sopenharmony_ci【需求】 4421bd4fe43Sopenharmony_ci 4431bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 4441bd4fe43Sopenharmony_ci 4451bd4fe43Sopenharmony_ci* 库文件:libmpi.a 4461bd4fe43Sopenharmony_ci 4471bd4fe43Sopenharmony_ci【注意】 4481bd4fe43Sopenharmony_ci 4491bd4fe43Sopenharmony_ci* 调用前需保证视频输出视频层未使能。 4501bd4fe43Sopenharmony_ci 4511bd4fe43Sopenharmony_ci* 缓冲长度默认值是0,默认是VO直通模式显示。 4521bd4fe43Sopenharmony_ci 4531bd4fe43Sopenharmony_ci* 当不满足VO直通的条件时,需要调用该接口设置缓冲的长度,否则VO无法正常工作。 4541bd4fe43Sopenharmony_ci 4551bd4fe43Sopenharmony_ci* 非直通情况下,当VO所有通道输入性能总和超过3840x2160@60(或7680x4320@15)时,VGS处理一帧的时间耗费得更多,一块缓存被占用的时间也更久,因此,设备帧率不变的情况下,需要将缓冲长度设置为大于等于4以满足低延时显示 4561bd4fe43Sopenharmony_ci 4571bd4fe43Sopenharmony_ci**HI_MPI_VO_SetVideoLayerPartitionMode** 4581bd4fe43Sopenharmony_ci 4591bd4fe43Sopenharmony_ci【描述】 4601bd4fe43Sopenharmony_ci 4611bd4fe43Sopenharmony_ci* 设置视频层的分割模式。 4621bd4fe43Sopenharmony_ci 4631bd4fe43Sopenharmony_ci【语法】 4641bd4fe43Sopenharmony_ci 4651bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetVideoLayerPartitionMode(VO_LAYER VoLayer, VO_PART_MODE_E enPartMode); 4661bd4fe43Sopenharmony_ci 4671bd4fe43Sopenharmony_ci【参数】 4681bd4fe43Sopenharmony_ci 4691bd4fe43Sopenharmony_ci 4701bd4fe43Sopenharmony_ci 4711bd4fe43Sopenharmony_ci【返回值】 4721bd4fe43Sopenharmony_ci 4731bd4fe43Sopenharmony_ci 4741bd4fe43Sopenharmony_ci 4751bd4fe43Sopenharmony_ci【需求】 4761bd4fe43Sopenharmony_ci 4771bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h、hi_defines.h 4781bd4fe43Sopenharmony_ci 4791bd4fe43Sopenharmony_ci* 库文件:libmpi.a 4801bd4fe43Sopenharmony_ci 4811bd4fe43Sopenharmony_ci【注意】 4821bd4fe43Sopenharmony_ci 4831bd4fe43Sopenharmony_ci请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetVideoLayerPartitionMode结构体中注意事项内容 4841bd4fe43Sopenharmony_ci 4851bd4fe43Sopenharmony_ci**HI_MPI_VO_GetVideoLayerCSC** 4861bd4fe43Sopenharmony_ci 4871bd4fe43Sopenharmony_ci【描述】 4881bd4fe43Sopenharmony_ci 4891bd4fe43Sopenharmony_ci* 获取设备输出图像效果。 4901bd4fe43Sopenharmony_ci 4911bd4fe43Sopenharmony_ci【语法】 4921bd4fe43Sopenharmony_ci 4931bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_GetVideoLayerCSC(VO_LAYER VoLayer, VO_CSC_S *pstVideoCSC); 4941bd4fe43Sopenharmony_ci 4951bd4fe43Sopenharmony_ci【参数】 4961bd4fe43Sopenharmony_ci 4971bd4fe43Sopenharmony_ci| 参数名称 | 描述 | 输入/输出 | 4981bd4fe43Sopenharmony_ci| ----------- | -------------------------------------------- | --------- | 4991bd4fe43Sopenharmony_ci| VoLayer | 视频输出视频层号。 取值范围:物理视频层号。 | 输入 | 5001bd4fe43Sopenharmony_ci| pstVideoCSC | 图像输出效果结构体指针。 | 输出 | 5011bd4fe43Sopenharmony_ci 5021bd4fe43Sopenharmony_ci【返回值】 5031bd4fe43Sopenharmony_ci 5041bd4fe43Sopenharmony_ci 5051bd4fe43Sopenharmony_ci 5061bd4fe43Sopenharmony_ci【需求】 5071bd4fe43Sopenharmony_ci 5081bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 5091bd4fe43Sopenharmony_ci 5101bd4fe43Sopenharmony_ci* 库文件:libmpi.a 5111bd4fe43Sopenharmony_ci 5121bd4fe43Sopenharmony_ci【注意】 5131bd4fe43Sopenharmony_ci 5141bd4fe43Sopenharmony_ci* 该接口主要用于获取图像的输出效果,包括亮度、对比度、色调、饱和度,其取值范围均为[0, 100]。 5151bd4fe43Sopenharmony_ci 5161bd4fe43Sopenharmony_ci**HI_MPI_VO_SetVideoLayerCSC** 5171bd4fe43Sopenharmony_ci 5181bd4fe43Sopenharmony_ci【描述】 5191bd4fe43Sopenharmony_ci 5201bd4fe43Sopenharmony_ci* 设置视频层输出图像效果。 5211bd4fe43Sopenharmony_ci 5221bd4fe43Sopenharmony_ci【语法】 5231bd4fe43Sopenharmony_ci 5241bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetVideoLayerCSC(VO_LAYER VoLayer, const VO_CSC_S *pstVideoCSC); 5251bd4fe43Sopenharmony_ci 5261bd4fe43Sopenharmony_ci【参数】 5271bd4fe43Sopenharmony_ci 5281bd4fe43Sopenharmony_ci| 参数名称 | 描述 | 输入/输出 | 5291bd4fe43Sopenharmony_ci| ----------- | -------------------------------------------- | --------- | 5301bd4fe43Sopenharmony_ci| VoLayer | 视频输出视频层号。 取值范围:物理视频层号。 | 输入 | 5311bd4fe43Sopenharmony_ci| pstVideoCSC | 图像输出效果结构体指针。 | 输入 | 5321bd4fe43Sopenharmony_ci 5331bd4fe43Sopenharmony_ci【返回值】 5341bd4fe43Sopenharmony_ci 5351bd4fe43Sopenharmony_ci 5361bd4fe43Sopenharmony_ci 5371bd4fe43Sopenharmony_ci【芯片差异】 5381bd4fe43Sopenharmony_ci 5391bd4fe43Sopenharmony_ci* 请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetVideoLayerCSC结构体芯片差异内容。 5401bd4fe43Sopenharmony_ci 5411bd4fe43Sopenharmony_ci【需求】 5421bd4fe43Sopenharmony_ci 5431bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 5441bd4fe43Sopenharmony_ci 5451bd4fe43Sopenharmony_ci* 库文件:libmpi.a 5461bd4fe43Sopenharmony_ci 5471bd4fe43Sopenharmony_ci【注意】 5481bd4fe43Sopenharmony_ci 5491bd4fe43Sopenharmony_ci* 请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetVideoLayerCSC结构体注意事项内容。 5501bd4fe43Sopenharmony_ci 5511bd4fe43Sopenharmony_ci在SampleCommVoStartMipi接口中,需要调用SAMPLE_COMM_VO_StartLayer接口来start layer,如下图所示: 5521bd4fe43Sopenharmony_ci 5531bd4fe43Sopenharmony_ci以下截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 5541bd4fe43Sopenharmony_ci 5551bd4fe43Sopenharmony_ci 5561bd4fe43Sopenharmony_ci 5571bd4fe43Sopenharmony_ci进入SAMPLE_COMM_VO_StartLayer接口进行分析,分析其调用的底层接口。 5581bd4fe43Sopenharmony_ci 5591bd4fe43Sopenharmony_ci以下两个接口可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到 5601bd4fe43Sopenharmony_ci 5611bd4fe43Sopenharmony_ci**HI_MPI_VO_SetVideoLayerAttr** 5621bd4fe43Sopenharmony_ci 5631bd4fe43Sopenharmony_ci【描述】 5641bd4fe43Sopenharmony_ci 5651bd4fe43Sopenharmony_ci* 设置视频层属性。 5661bd4fe43Sopenharmony_ci 5671bd4fe43Sopenharmony_ci【语法】 5681bd4fe43Sopenharmony_ci 5691bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetVideoLayerAttr(VO_LAYER VoLayer, const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); 5701bd4fe43Sopenharmony_ci 5711bd4fe43Sopenharmony_ci【参数】 5721bd4fe43Sopenharmony_ci 5731bd4fe43Sopenharmony_ci 5741bd4fe43Sopenharmony_ci 5751bd4fe43Sopenharmony_ci【返回值】 5761bd4fe43Sopenharmony_ci 5771bd4fe43Sopenharmony_ci 5781bd4fe43Sopenharmony_ci 5791bd4fe43Sopenharmony_ci【需求】 5801bd4fe43Sopenharmony_ci 5811bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 5821bd4fe43Sopenharmony_ci 5831bd4fe43Sopenharmony_ci* 库文件:libmpi.a 5841bd4fe43Sopenharmony_ci 5851bd4fe43Sopenharmony_ci【注意】 5861bd4fe43Sopenharmony_ci 5871bd4fe43Sopenharmony_ci* 需要在视频层所绑定的设备处于使能状态时才能设置视频层属性。 5881bd4fe43Sopenharmony_ci 5891bd4fe43Sopenharmony_ci* 设置视频层属性(SINGLE模式下除了pstLayerAttr中stDispRect的s32X,s32Y)必须在视频层禁止的情况下进行。 5901bd4fe43Sopenharmony_ci 5911bd4fe43Sopenharmony_ci* SINGLE模式下,视频层使能后,可单独设置视频层显示位置。 5921bd4fe43Sopenharmony_ci 5931bd4fe43Sopenharmony_ci* 视频层属性的使用说明详见VO_VIDEO_LAYER_ATTR_S。 5941bd4fe43Sopenharmony_ci 5951bd4fe43Sopenharmony_ci**HI_MPI_VO_EnableVideoLayer** 5961bd4fe43Sopenharmony_ci 5971bd4fe43Sopenharmony_ci【描述】 5981bd4fe43Sopenharmony_ci 5991bd4fe43Sopenharmony_ci* 使能视频层。 6001bd4fe43Sopenharmony_ci 6011bd4fe43Sopenharmony_ci【语法】 6021bd4fe43Sopenharmony_ci 6031bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_EnableVideoLayer (VO_LAYER VoLayer); 6041bd4fe43Sopenharmony_ci 6051bd4fe43Sopenharmony_ci【参数】 6061bd4fe43Sopenharmony_ci 6071bd4fe43Sopenharmony_ci 6081bd4fe43Sopenharmony_ci 6091bd4fe43Sopenharmony_ci【返回值】 6101bd4fe43Sopenharmony_ci 6111bd4fe43Sopenharmony_ci 6121bd4fe43Sopenharmony_ci 6131bd4fe43Sopenharmony_ci【需求】 6141bd4fe43Sopenharmony_ci 6151bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 6161bd4fe43Sopenharmony_ci 6171bd4fe43Sopenharmony_ci* 库文件:libmpi.a 6181bd4fe43Sopenharmony_ci 6191bd4fe43Sopenharmony_ci【注意】 6201bd4fe43Sopenharmony_ci 6211bd4fe43Sopenharmony_ci* 视频层使能前必须保证该视频层所绑定的设备处于使能状态。 6221bd4fe43Sopenharmony_ci 6231bd4fe43Sopenharmony_ci* 视频层使能前必须保证该视频层已经配置。 6241bd4fe43Sopenharmony_ci 6251bd4fe43Sopenharmony_ci* 各个视频层的使用说明详见VO_LAYER。 6261bd4fe43Sopenharmony_ci 6271bd4fe43Sopenharmony_ciSAMPLE_COMM_VO_StartLayer具体代码实现细节如下: 6281bd4fe43Sopenharmony_ci 6291bd4fe43Sopenharmony_ci此截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm_vo.c文件中找到 6301bd4fe43Sopenharmony_ci 6311bd4fe43Sopenharmony_ci 6321bd4fe43Sopenharmony_ci 6331bd4fe43Sopenharmony_ci在SampleCommVoStartMipi接口的最后,会调用SampleCommVoStartChnMipi接口来启动vo channels,如下图所示: 6341bd4fe43Sopenharmony_ci 6351bd4fe43Sopenharmony_ci此截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 6361bd4fe43Sopenharmony_ci 6371bd4fe43Sopenharmony_ci 6381bd4fe43Sopenharmony_ci 6391bd4fe43Sopenharmony_ci若SampleCommVoStartChnMipi接口返回值不等于HI_SUCCESS,需StopLayer and StopDev,及调用SAMPLE_COMM_VO_StopLayer和SAMPLE_COMM_VO_StopDev,其中SAMPLE_COMM_VO_StopDev接口上文已经讲述,这里只分析SAMPLE_COMM_VO_StopLayer接口,如下图所示。 6401bd4fe43Sopenharmony_ci 6411bd4fe43Sopenharmony_ci此截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/platform/common/sample_comm_vo.c文件中找到 6421bd4fe43Sopenharmony_ci 6431bd4fe43Sopenharmony_ci 6441bd4fe43Sopenharmony_ci 6451bd4fe43Sopenharmony_ci针对其调用的HI_MPI_VO_DisableVideoLayer接口作如下解释: 6461bd4fe43Sopenharmony_ci 6471bd4fe43Sopenharmony_ci此接口可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到 6481bd4fe43Sopenharmony_ci 6491bd4fe43Sopenharmony_ci【描述】 6501bd4fe43Sopenharmony_ci 6511bd4fe43Sopenharmony_ci* 禁止视频层 6521bd4fe43Sopenharmony_ci 6531bd4fe43Sopenharmony_ci【语法】 6541bd4fe43Sopenharmony_ci 6551bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_DisableVideoLayer(VO_LAYER VoLayer); 6561bd4fe43Sopenharmony_ci 6571bd4fe43Sopenharmony_ci【参数】 6581bd4fe43Sopenharmony_ci 6591bd4fe43Sopenharmony_ci 6601bd4fe43Sopenharmony_ci 6611bd4fe43Sopenharmony_ci【返回值】 6621bd4fe43Sopenharmony_ci 6631bd4fe43Sopenharmony_ci 6641bd4fe43Sopenharmony_ci 6651bd4fe43Sopenharmony_ci【需求】 6661bd4fe43Sopenharmony_ci 6671bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 6681bd4fe43Sopenharmony_ci 6691bd4fe43Sopenharmony_ci* 库文件:libmpi.a 6701bd4fe43Sopenharmony_ci 6711bd4fe43Sopenharmony_ci【注意】 6721bd4fe43Sopenharmony_ci 6731bd4fe43Sopenharmony_ci* 视频层禁止前必须保证其上的通道全部禁止。 6741bd4fe43Sopenharmony_ci 6751bd4fe43Sopenharmony_ci* 在禁止视频层时,非直通情况下,如果用户没有释放从VO获取的图像buffer资源,该接口会返回HI_ERR_VB_BUSY的错误码,表示VO创建的VB资源没有释放。多见于用户调用获取屏幕图像未释放的情况下。 6761bd4fe43Sopenharmony_ci 6771bd4fe43Sopenharmony_ci* 在禁止视频层时,如果用户选择了WBC数据源为VO_WBC_DATASOURCE_VIDEO模式,则必须保证将该设备的WBC功能关闭使能。 6781bd4fe43Sopenharmony_ci 6791bd4fe43Sopenharmony_ci进入SampleCommVoStartChnMipi接口进行分析,发现其调用如下底层接口,接下来进行解读。 6801bd4fe43Sopenharmony_ci 6811bd4fe43Sopenharmony_ci**VO_CHN_ATTR_S** 6821bd4fe43Sopenharmony_ci 6831bd4fe43Sopenharmony_ci此结构体可在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/hi_comm_vo.h文件中找到 6841bd4fe43Sopenharmony_ci 6851bd4fe43Sopenharmony_ci【说明】 6861bd4fe43Sopenharmony_ci 6871bd4fe43Sopenharmony_ci* 定义视频输出通道属性。 6881bd4fe43Sopenharmony_ci 6891bd4fe43Sopenharmony_ci【定义】 6901bd4fe43Sopenharmony_ci 6911bd4fe43Sopenharmony_ci 6921bd4fe43Sopenharmony_ci 6931bd4fe43Sopenharmony_ci【成员】 6941bd4fe43Sopenharmony_ci 6951bd4fe43Sopenharmony_ci 6961bd4fe43Sopenharmony_ci 6971bd4fe43Sopenharmony_ci【注意事项】 6981bd4fe43Sopenharmony_ci 6991bd4fe43Sopenharmony_ci* 属性中的优先级,数值越大优先级越高。 7001bd4fe43Sopenharmony_ci* SINGLE模式下,当多个通道有重叠的显示区域时,优先级高的通道图像将覆盖优先级低的通道。优先级相同的各通道有重叠时,默认通道号大的图像将覆盖通道号小的通道图像。 7011bd4fe43Sopenharmony_ci* 通道显示区域不能超过视频层属性中设定的画布大小(stImageSize大小)。 7021bd4fe43Sopenharmony_ci* 如果有视频层放大的情况,stRect是放大前视频层上的起始位置和宽高,放大后显示的起始位置和宽高会按视频层放大的比例偏移或放大。 7031bd4fe43Sopenharmony_ci 7041bd4fe43Sopenharmony_ci 7051bd4fe43Sopenharmony_ci 7061bd4fe43Sopenharmony_ci以下四个接口可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/include/mpi_vo.h文件中找到 7071bd4fe43Sopenharmony_ci 7081bd4fe43Sopenharmony_ci**HI_MPI_VO_GetVideoLayerAttr** 7091bd4fe43Sopenharmony_ci 7101bd4fe43Sopenharmony_ci【描述】 7111bd4fe43Sopenharmony_ci 7121bd4fe43Sopenharmony_ci* 获取视频层属性。 7131bd4fe43Sopenharmony_ci 7141bd4fe43Sopenharmony_ci【语法】 7151bd4fe43Sopenharmony_ci 7161bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_GetVideoLayerAttr(VO_LAYER VoLayer, VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); 7171bd4fe43Sopenharmony_ci 7181bd4fe43Sopenharmony_ci【参数】 7191bd4fe43Sopenharmony_ci 7201bd4fe43Sopenharmony_ci 7211bd4fe43Sopenharmony_ci 7221bd4fe43Sopenharmony_ci【返回值】 7231bd4fe43Sopenharmony_ci 7241bd4fe43Sopenharmony_ci 7251bd4fe43Sopenharmony_ci 7261bd4fe43Sopenharmony_ci【需求】 7271bd4fe43Sopenharmony_ci 7281bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 7291bd4fe43Sopenharmony_ci 7301bd4fe43Sopenharmony_ci* 库文件:libmpi.a 7311bd4fe43Sopenharmony_ci 7321bd4fe43Sopenharmony_ci【注意】 7331bd4fe43Sopenharmony_ci 7341bd4fe43Sopenharmony_ci* 不调用HI_MPI_VO_EnableVideoLayer和HI_MPI_VO_SetVideoLayerAttr也可获取视频层属性。此时获取的为默认值。 7351bd4fe43Sopenharmony_ci 7361bd4fe43Sopenharmony_ci* 建议在设置视频层属性前先调用此接口获取视频层属性。 7371bd4fe43Sopenharmony_ci 7381bd4fe43Sopenharmony_ci 7391bd4fe43Sopenharmony_ci 7401bd4fe43Sopenharmony_ci**HI_MPI_VO_SetChnAttr** 7411bd4fe43Sopenharmony_ci 7421bd4fe43Sopenharmony_ci【描述】 7431bd4fe43Sopenharmony_ci 7441bd4fe43Sopenharmony_ci* 配置指定视频输出通道的属性。 7451bd4fe43Sopenharmony_ci 7461bd4fe43Sopenharmony_ci【语法】 7471bd4fe43Sopenharmony_ci 7481bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetChnAttr(VO_LAYER VoLayer, VO_CHN VoChn, const VO_CHN_ATTR_S *pstChnAttr); 7491bd4fe43Sopenharmony_ci 7501bd4fe43Sopenharmony_ci【参数】 7511bd4fe43Sopenharmony_ci 7521bd4fe43Sopenharmony_ci 7531bd4fe43Sopenharmony_ci 7541bd4fe43Sopenharmony_ci【返回值】 7551bd4fe43Sopenharmony_ci 7561bd4fe43Sopenharmony_ci 7571bd4fe43Sopenharmony_ci 7581bd4fe43Sopenharmony_ci【需求】 7591bd4fe43Sopenharmony_ci 7601bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 7611bd4fe43Sopenharmony_ci 7621bd4fe43Sopenharmony_ci* 库文件:libmpi.a 7631bd4fe43Sopenharmony_ci 7641bd4fe43Sopenharmony_ci【注意】 7651bd4fe43Sopenharmony_ci 7661bd4fe43Sopenharmony_ci* 请查阅**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**的《HiMPP媒体处理软件 V4.0 开发参考.pdf》HI_MPI_VO_SetChnAttr结构体注意事项内容。 7671bd4fe43Sopenharmony_ci 7681bd4fe43Sopenharmony_ci**HI_MPI_VO_SetChnRotation** 7691bd4fe43Sopenharmony_ci 7701bd4fe43Sopenharmony_ci【描述】 7711bd4fe43Sopenharmony_ci 7721bd4fe43Sopenharmony_ci* 设置指定视频输出通道的旋转角度。对通道设置旋转角度,该旋转角度将作用于进入通道的视频图像,具体效果是对图像旋转相应的角度后再进行显示。 7731bd4fe43Sopenharmony_ci 7741bd4fe43Sopenharmony_ci【语法】 7751bd4fe43Sopenharmony_ci 7761bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_SetChnRotation(VO_LAYER VoLayer, VO_CHN VoChn, ROTATION_E enRotation); 7771bd4fe43Sopenharmony_ci 7781bd4fe43Sopenharmony_ci【参数】 7791bd4fe43Sopenharmony_ci 7801bd4fe43Sopenharmony_ci 7811bd4fe43Sopenharmony_ci 7821bd4fe43Sopenharmony_ci【返回值】 7831bd4fe43Sopenharmony_ci 7841bd4fe43Sopenharmony_ci 7851bd4fe43Sopenharmony_ci 7861bd4fe43Sopenharmony_ci【需求】 7871bd4fe43Sopenharmony_ci 7881bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 7891bd4fe43Sopenharmony_ci 7901bd4fe43Sopenharmony_ci* 库文件:libmpi.a 7911bd4fe43Sopenharmony_ci 7921bd4fe43Sopenharmony_ci【注意】 7931bd4fe43Sopenharmony_ci 7941bd4fe43Sopenharmony_ci* 设置旋转的角度只能是ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270其中之一。 7951bd4fe43Sopenharmony_ci 7961bd4fe43Sopenharmony_ci* VO在SINGLE模式下并且前端在预览模式下旋转功能才会生效。但如果VO前端绑定VPSS并且VPSS工作在USER模式下,即使VPSS前端为回放模式,旋转也会生效。 7971bd4fe43Sopenharmony_ci 7981bd4fe43Sopenharmony_ci* VO在MULTI模式下通道不支持旋转,即使对通道设置了旋转角度,也不生效。 7991bd4fe43Sopenharmony_ci 8001bd4fe43Sopenharmony_ci**HI_MPI_VO_EnableChn** 8011bd4fe43Sopenharmony_ci 8021bd4fe43Sopenharmony_ci【描述】 8031bd4fe43Sopenharmony_ci 8041bd4fe43Sopenharmony_ci* 启用指定的视频输出通道。 8051bd4fe43Sopenharmony_ci 8061bd4fe43Sopenharmony_ci【语法】 8071bd4fe43Sopenharmony_ci 8081bd4fe43Sopenharmony_ci* HI_S32 HI_MPI_VO_EnableChn (VO_LAYER VoLayer, VO_CHN VoChn); 8091bd4fe43Sopenharmony_ci 8101bd4fe43Sopenharmony_ci【参数】 8111bd4fe43Sopenharmony_ci 8121bd4fe43Sopenharmony_ci 8131bd4fe43Sopenharmony_ci 8141bd4fe43Sopenharmony_ci 8151bd4fe43Sopenharmony_ci 8161bd4fe43Sopenharmony_ci【返回值】 8171bd4fe43Sopenharmony_ci 8181bd4fe43Sopenharmony_ci 8191bd4fe43Sopenharmony_ci 8201bd4fe43Sopenharmony_ci【需求】 8211bd4fe43Sopenharmony_ci 8221bd4fe43Sopenharmony_ci* 头文件:mpi_vo.h、hi_comm_vo.h 8231bd4fe43Sopenharmony_ci 8241bd4fe43Sopenharmony_ci* 库文件:libmpi.a 8251bd4fe43Sopenharmony_ci 8261bd4fe43Sopenharmony_ci【注意】 8271bd4fe43Sopenharmony_ci 8281bd4fe43Sopenharmony_ci* 调用前必须保证视频层绑定关系存在,否则将返回失败。 8291bd4fe43Sopenharmony_ci 8301bd4fe43Sopenharmony_ci* 调用前必须使能相应设备上的视频层。 8311bd4fe43Sopenharmony_ci 8321bd4fe43Sopenharmony_ci* 通道使能前必须进行通道配置,否则返回通道未配置的错误。 8331bd4fe43Sopenharmony_ci 8341bd4fe43Sopenharmony_ci* 允许重复使能同一视频输出通道,不返回失败。 8351bd4fe43Sopenharmony_ci 8361bd4fe43Sopenharmony_ci#### 3.1.4.3 VPSS bind VO 8371bd4fe43Sopenharmony_ci 8381bd4fe43Sopenharmony_ciVPSS bind VOS绑定VPSS和VO之间的关联关系,绑定后,数据源生成的数据将自动发送给接收者,依然调用HI_MPI_SYS_Bind接口,上文已经对HI_MPI_SYS_Bind接口进行详细解释,这里不再阐述,如下图所示: 8391bd4fe43Sopenharmony_ci 8401bd4fe43Sopenharmony_ci以下截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 8411bd4fe43Sopenharmony_ci 8421bd4fe43Sopenharmony_ci 8431bd4fe43Sopenharmony_ci 8441bd4fe43Sopenharmony_ci 8451bd4fe43Sopenharmony_ci 8461bd4fe43Sopenharmony_ci注:SAMPLE_VIO_VPSS_VO_MIPI接口中VI、VPSS、VO每个环节均有异常判断,若进入到异常环节,均会goto到异常判断API,该部分异常判断接口较为简单,自行查阅源码即可,如下图所示: 8471bd4fe43Sopenharmony_ci 8481bd4fe43Sopenharmony_ci以下截图可以在device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/helloworld/smp/sample_lcd.c文件中找到 8491bd4fe43Sopenharmony_ci 8501bd4fe43Sopenharmony_ci 851