关键词:
向海思mpp框架中添加外设是首先要选取一个合适的demo来验证,在还是mpp框架中每一个模块都有着丰富的demo例程,由于笔者只有一块海思3516DV300的主板和一个st7701s 480 * 800分辨率的屏幕,因此选取了sample中的vdec作为测试例程,vdec例程中实现了将H264、H265、JPEG进行解码并将解码数据显示到VO设备上。
1.修改 SAMPLE_H264_VDEC_VPSS_VO demo
添加新的屏幕只需要测试初始化显示效果时可只对VO的部分进行修改,VPSS部分可保留例程原有设置,在此选用vdec的样例2进行修改,对VO配置部分进行修改设置屏幕的接口类型,分辨率
/************************************************
step5: start VO
*************************************************/
RECT_S stDefDispRect = 0, 0, 480, 800;
SIZE_S stDefImageSize = 480, 800;
stVoConfig.VoDev = SAMPLE_VO_DEV_UHD;
stVoConfig.enVoIntfType = VO_INTF_MIPI; // 屏幕使用mipi接口
stVoConfig.enIntfSync = VO_OUTPUT_USER; // 方便配置添加屏幕的分辨率及初始化
stVoConfig.enPicSize = enDispPicSize;
stVoConfig.u32BgColor = COLOR_RGB_BLUE;
stVoConfig.u32DisBufLen = 3;
stVoConfig.enDstDynamicRange = DYNAMIC_RANGE_SDR8;
stVoConfig.enVoMode = VO_MODE_1MUX;
stVoConfig.enPixFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
#if 0
stVoConfig.stDispRect.s32X = 0;
stVoConfig.stDispRect.s32Y = 0;
stVoConfig.stDispRect.u32Width = stDispSize.u32Width;
stVoConfig.stDispRect.u32Height = stDispSize.u32Height;
stVoConfig.stImageSize.u32Width = stDispSize.u32Width;
stVoConfig.stImageSize.u32Height = stDispSize.u32Height;
#else // 使用用户设置的屏幕分辨率
stVoConfig.stDispRect = stDefDispRect;
stVoConfig.stImageSize = stDefImageSize;
#endif
stVoConfig.enVoPartMode = VO_PART_MODE_SINGLE;
printf("screen w = %d h = %d\\n", stVoConfig.stDispRect.u32Width, stVoConfig.stDispRect.u32Height);
s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig);
if(s32Ret != HI_SUCCESS)
SAMPLE_PRT("start VO fail for %#x!\\n", s32Ret);
goto END5;
2.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO
修改屏幕分辨率接口类型,及默认参数的填充
3.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO ==》 SAMPLE_COMM_VO_StartDev
同步信息参数可通过文档手册中 ReleaseDoc\\zh\\02.only for reference\\software\\RGB_MIPI屏幕时钟时序计算器.xlsx --> MIPI屏配置VDP时钟时序,将屏幕参数填入输入值中获取输出参数,具体参数说明可参考 ReleaseDoc\\zh\\02.only for reference\\software\\屏幕对接 使用指南 文本
HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S* pstPubAttr)
HI_S32 s32Ret = HI_SUCCESS;
HI_U32 u32Framerate = 60;
VO_USER_INTFSYNC_INFO_S stUserInfo = 0;
/* Fill pub attr */
pstPubAttr->enIntfType = VO_INTF_MIPI;
pstPubAttr->enIntfSync = VO_OUTPUT_USER;
pstPubAttr->stSyncInfo.bSynm = 0;
pstPubAttr->stSyncInfo.bIop = 1;
pstPubAttr->stSyncInfo.u8Intfb = 0;
pstPubAttr->stSyncInfo.u16Vact = 800; // 垂直有效区域,单位行
pstPubAttr->stSyncInfo.u16Vbb = 20; // 垂直消隐后肩,单位行
pstPubAttr->stSyncInfo.u16Vfb = 18; // 垂直消隐前肩,单位行
pstPubAttr->stSyncInfo.u16Hact = 480; // 水平有效区域,单位像素
pstPubAttr->stSyncInfo.u16Hbb = 66; // 水平消隐后肩,单位像素
pstPubAttr->stSyncInfo.u16Hfb = 60; // 水平消隐前肩,单位像素
pstPubAttr->stSyncInfo.u16Hmid = 1; // 底场垂直同步有效像素
pstPubAttr->stSyncInfo.u16Bvact = 1; // 底场垂直有效区域,逐行时有效,单位行
pstPubAttr->stSyncInfo.u16Bvbb = 1; // 底场垂直消隐后肩,逐行时有效,单位行
pstPubAttr->stSyncInfo.u16Bvfb = 1; // 底场垂直消隐前肩,逐行时有效,单位行
pstPubAttr->stSyncInfo.u16Hpw = 60; // 水平同步信号宽度,单位像素
pstPubAttr->stSyncInfo.u16Vpw = 10; // 垂直同步信号宽度,单位行
pstPubAttr->stSyncInfo.bIdv = 0; // 数据有效信号极性,0为高有效,1为低有效
pstPubAttr->stSyncInfo.bIhs = 0; // 水平有效信号极性,0为高有效,1为低有效
pstPubAttr->stSyncInfo.bIvs = 0; // 垂直有效信号极性,0为高有效,1为低有效
s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr);
if (s32Ret != HI_SUCCESS)
SAMPLE_PRT("failed with %#x!\\n", s32Ret);
return HI_FAILURE;
/* Fill user sync info */
stUserInfo.stUserIntfSyncAttr.enClkSource = VO_CLK_SOURCE_PLL;
stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Fbdiv = 60; //PLL整数倍频系数 0-0xfff
stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Frac= 0x535A85;
stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Refdiv = 4;
stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Postdiv1 = 3;
stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Postdiv2 = 2;
stUserInfo.u32DevDiv = 2;
stUserInfo.u32PreDiv = 1;
/* Set user interface sync info */
s32Ret = HI_MPI_VO_SetUserIntfSyncInfo(VoDev, &stUserInfo);
if (s32Ret != HI_SUCCESS)
printf("Set user interface sync info failed with %x.\\n",s32Ret);
return HI_FAILURE;
s32Ret = HI_MPI_VO_SetDevFrameRate(VoDev, u32Framerate);
s32Ret = HI_MPI_VO_Enable(VoDev);
if (s32Ret != HI_SUCCESS)
SAMPLE_PRT("failed with %#x!\\n", s32Ret);
return HI_FAILURE;
return s32Ret;
4.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO ==》 SAMPLE_COMM_VO_GetWH
在 VO_OUTPUT_USER 部分返回屏幕对应的分辨率和帧率
5.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO ==》 SAMPLE_COMM_VO_StartMipiTx
添加对应的屏幕屏幕配置
switch(enVoIntfSync)
case VO_OUTPUT_576P50:
pstMipiTxConfig = &MIPI_TX_720X576_50_CONFIG;
break;
case VO_OUTPUT_720P60:
pstMipiTxConfig = &MIPI_TX_1280X720_60_CONFIG;
break;
case VO_OUTPUT_1080P60:
pstMipiTxConfig = &MIPI_TX_1920X1080_60_CONFIG;
break;
case VO_OUTPUT_1024x768_60:
pstMipiTxConfig = &MIPI_TX_1024X768_60_CONFIG;
break;
case VO_OUTPUT_1280x1024_60:
pstMipiTxConfig = &MIPI_TX_1280x1024_60_CONFIG;
break;
case VO_OUTPUT_720x1280_60:
pstMipiTxConfig = &MIPI_TX_720X1280_60_CONFIG;
break;
case VO_OUTPUT_1080x1920_60:
pstMipiTxConfig = &MIPI_TX_1080X1920_60_CONFIG;
break;
case VO_OUTPUT_USER:
pstMipiTxConfig = &MIPI_TX_480X800_60_CONFIG; // 用户添加屏幕的配置参数
break;
default :
pstMipiTxConfig = &MIPI_TX_1080X1920_60_CONFIG;
break;
MIPI_TX_480X800_60_CONFIG 配置信息可仿照上面的进行修改
combo_dev_cfg_t MIPI_TX_480X800_60_CONFIG =
.devno = 0,
.lane_id = 0, 1, -1, -1, // 选择屏幕使用的lan数,未使用填-1,如使用4lan时 0, 1, 2, 3
.output_mode = OUTPUT_MODE_DSI_VIDEO, // 使用mipi下的dsi
.output_format = OUT_FORMAT_RGB_24_BIT,
.video_mode = BURST_MODE,
.sync_info =
.vid_pkt_size = 480, // hact 水平有效长度 单位像素
.vid_hsa_pixels = 31, // hsa 行同步脉冲区像素
.vid_hbp_pixels = 12, // hbp 行同步脉冲后消隐区像素个数
.vid_hline_pixels = 620, // hact + hsa + hbp + hfp 每行像素总数
.vid_vsa_lines = 10, // vsa 帧同步脉冲区行数
.vid_vbp_lines = 10, // vbp 帧同步脉冲后消隐区行数
.vid_vfp_lines = 2, // vfp 帧同步脉冲前消隐区行数
.vid_active_lines = 800, // vact 垂直有效长度 单位像素 822
.edpi_cmd_size = 0,
,
.phy_data_rate = 367, // >= (hact + hsa + hbp + hfp) * (vact + vsa + vbp + vfp) * output format bit * framerate /lane_num/(10^6) Mbps
.pixel_clk = 30578, // = (hact + hsa + hbp + hfp) * (vact + vsa + vbp + vfp) * framerate / 1000 KHz
;
海思3516dv300使用mipi_tx驱动st7701s屏幕显示(代码片段)
向海思mpp框架中添加外设是首先要选取一个合适的demo来验证,在还是mpp框架中每一个模块都有着丰富的demo例程,由于笔者只有一块海思3516DV300的主板和一个st7701s480*800分辨率的屏幕,因此选取了sample中的vdec作为测试... 查看详情
海思hi3516dv300---部署yolov5检测+sort跟踪算法
海思Hi3516DV300-部署1.部署yolov5检测+Sort跟踪算法---统计地铁中人流量(双向计数+tof相机)2.yolov5s模型转换onnx模型3.在虚拟机中安装caffe(caffe模型的转化是在虚拟机中完成的)4.onnx模型转换caffe模型5.caffe模型... 查看详情
hi3516开发笔记:海思hi3516dv300芯片介绍,入手开发板以及demo测试
...L、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…海思开发专栏上一篇:没有了下一篇:《Hi3516开发笔记(二):Hi3516虚拟机基础环境串口调试、网络连接以及sftp文件传输》敬请期待…前言 目前主... 查看详情
hisi3516dv300芯片基于hwmon驱动框架的温度获取驱动源码分析(代码片段)
1、内核hwmon驱动框架参考博客:《内核hwmon驱动框架详解以及海思芯片温度驱动分析》;2、驱动实现的效果/sys/devices/virtual/hwmon/hwmon0#pwd/sys/class/hwmon/hwmon0/sys/devices/virtual/hwmon/hwmon0#lspowersubsystemtemp1_inputuevent/sys 查看详情
基于海思hi3516dv300的u-boot-2016.11分析(代码片段)
1.先看链接脚本文件u-boot.lds,文件位于u-boot-2016.11\arch\arm\cpu\armv7\hi3516dv300\hw_compressedOUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")OUTPUT_ARCH(arm)/*设置输出文件的架构体系为arm架构*/ENTRY(_star 查看详情
设置海思芯片mmz内存os内存详解(代码片段)
1、前言(1)本文是基于hi3516dv300芯片的uboot和内核进行讲解;(2)dv300芯片的板子上实际接了2G内存,dv300芯片实际最大也只支持2G内存;2、hi3516dv300芯片的内存地址范围(1)通过查阅数据手册可知《Hi3516DV300专业型SmartIPCameraSo... 查看详情
海思hi3516dv300之ubuntu20.04环境搭建和编译
一、环境搭建1、SDK版本为:Hi3516CV500R001C02SPC020/01.software/board/Hi3516CV500_SDK_V2.0.2.0.tgz2、安装相关库:sudoaptinstalllsb-corelib32stdc++6u-boot-toolszlib1g-devliblzo2-devuuid-devpkg-config texlivebisongperf3、修改sh为bash:Ubuntu默认sh为dash,... 查看详情
海思hi3516dv300之ubuntu20.04环境搭建和编译
一、环境搭建1、SDK版本为:Hi3516CV500R001C02SPC020/01.software/board/Hi3516CV500_SDK_V2.0.2.0.tgz2、安装相关库:sudoaptinstalllsb-corelib32stdc++6u-boot-toolszlib1g-devliblzo2-devuuid-devpkg-config texlivebisongperf3、修改sh为bash:Ubuntu默认sh为dash,... 查看详情
#物联网征文#ffhhi3516dv300驱动开发——编写led灯控制程序(代码片段)
Hi3516DV300驱动开发——编写LED灯控制程序前言概述前面的文章只是涉及到内核态驱动程序的实现,并未涉及到用户态应用程序,以及用户态应用程序与内核态驱动程序之间的数据交互流程,在本示例将演示如何在开发板上运行一... 查看详情
华为鸿蒙开发板-hi3516dv300硬件设计原理图&pcb&硬件
点击下载:华为鸿蒙开发板-Hi3516DV300硬件设计原理图&PCB&硬件 查看详情
海思hi3516ev200gpio驱动开发
https://blog.csdn.net/Sweets_JIE/article/details/107966029?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.control&depth_1-utm_source=distribute.pc_ 查看详情
海思平台osdrv顶层makefile使用说明(代码片段)
本目录下的编译脚本支持arm-himix200-linux,arm-himix200-linux工具链对应glibc库。具体命令如下(以hi3516dv300举例)注意: 由于开源工具整改,部分开源工具不再提供源码包,客户编译OSDRV时需要自行下载: a:linux-4.9.3... 查看详情
海思hi3516a简介
1.简介Hi3516A是集成新一代ISP的专业HDIP摄像头SOC,采用最新的H.265视频编解码器,同时采用低功耗架构,使得Hi3516A处于行业领先水平。2.系统框图650)this.width=650;"src="http://s1.51cto.com/wyfs02/M02/88/19/wKioL1fp3vbT-0XbAAEvRFAyM24271.jpg"title="3516a_a... 查看详情
海思hi3516amipi
...接收端,发送端为smartsens的360万像素的SC3035-M,接收端为海思的Hi3516A。MIPI(MobileIdustryProcessorInterface)是MIPI联盟发起的移动应用处理器制定的标准,广泛应用于摄像头接口、显示屏接口等。2.MIPI发送端MIPI发送端为smartsens的SC3035-M摄... 查看详情
hi3516开发笔记:hi3516虚拟机基础环境搭建之串口调试网络连接以及sftp文件传输(代码片段)
...L、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…海思开发专栏上一篇:《Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试》下一篇:敬请期待…前言 搭建Hi3516的基础虚拟... 查看详情
海思3516abt1120视频输入相关总结
海思3516Abt1120视频输入相关总结原创蓝小胥最后发布于2018-07-1916:54:20阅读数5365收藏展开因为实验室项目需要将FPGA里的模拟视频数据通过bt1120输入给海思3516A,因此我这个刚进实验室的项目小白硬着头皮开始了3516A的学习之旅。所... 查看详情
学习海思hi3516的调试方法远程登陆和推送程序
Hi3516开发板已经支持了telnet和tftp协议,在调试中可以远程支持登陆调试,推送调试程序;1.远程登陆开发板,需要支持telnet协议;可以使用支持telnet的桌面工具,比如mobaxterm,手上的开发板IP地址:... 查看详情
学习海思hi3516的调试方法远程登陆和推送程序
Hi3516开发板已经支持了telnet和tftp协议,在调试中可以远程支持登陆调试,推送调试程序;1.远程登陆开发板,需要支持telnet协议;可以使用支持telnet的桌面工具,比如mobaxterm,手上的开发板IP地址:... 查看详情