海思3516, 单摄像头接hdmi,并输出h.265文件
在CSI1接一个GC2053, CSI输入决定了下面代码里面的ViDev.
在sample目录建一个子目录, 名字无所谓
建一个Makefile
# Hisilicon Hi35xx sample Makefileinclude ../Makefile.paramSMP_SRCS := $(wildcard *.c)
TARGET := $(SMP_SRCS:%.c=%)TARGET_PATH := $(PWD)# compile linux or HuaweiLite
include $(PWD)/../$(ARM_ARCH)_$(OSTYPE).mak
新建一个c文件, 代码如下
C代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>#include "sample_comm.h"HI_VOID SAMPLE_VIO_MsgInit(HI_VOID)
{}HI_VOID SAMPLE_VIO_MsgExit(HI_VOID)
{}void SAMPLE_VIO_HandleSig(HI_S32 signo)
{signal(SIGINT, SIG_IGN);signal(SIGTERM, SIG_IGN);if (SIGINT == signo || SIGTERM == signo){SAMPLE_COMM_VENC_StopGetStream();SAMPLE_COMM_All_ISP_Stop();SAMPLE_COMM_VO_HdmiStop();SAMPLE_COMM_SYS_Exit();SAMPLE_PRT("\033[0;31mprogram termination abnormally!\033[0;39m\n");}exit(-1);
}HI_S32 SAMPLE_VIO_ViOnlineVpssOnlineRoute(HI_U32 u32VoIntfType)
{HI_S32 s32Ret = HI_SUCCESS;HI_S32 s32ViCnt = 1;VI_DEV ViDev = 1;VI_PIPE ViPipe = 0;VI_CHN ViChn = 0;HI_S32 s32WorkSnsId = 0;SAMPLE_VI_CONFIG_S stViConfig;SIZE_S stSize;VB_CONFIG_S stVbConf;PIC_SIZE_E enPicSize;HI_U32 u32BlkSize;VO_CHN VoChn = 0;SAMPLE_VO_CONFIG_S stVoConfig;WDR_MODE_E enWDRMode = WDR_MODE_NONE;DYNAMIC_RANGE_E enDynamicRange = DYNAMIC_RANGE_SDR8;PIXEL_FORMAT_E enPixFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;VIDEO_FORMAT_E enVideoFormat = VIDEO_FORMAT_LINEAR;COMPRESS_MODE_E enCompressMode = COMPRESS_MODE_NONE;VI_VPSS_MODE_E enMastPipeMode = VI_ONLINE_VPSS_ONLINE;VPSS_GRP VpssGrp = 0;VPSS_GRP_ATTR_S stVpssGrpAttr;VPSS_CHN VpssChn = VPSS_CHN0;HI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM] = {0};VPSS_CHN_ATTR_S astVpssChnAttr[VPSS_MAX_PHY_CHN_NUM];VENC_CHN VencChn[1] = {0};PAYLOAD_TYPE_E enType = PT_H265;SAMPLE_RC_E enRcMode = SAMPLE_RC_CBR;HI_U32 u32Profile = 0;HI_BOOL bRcnRefShareBuf = HI_FALSE;VENC_GOP_ATTR_S stGopAttr;/*config vi*/SAMPLE_COMM_VI_GetSensorInfo(&stViConfig);SAMPLE_PRT("ViDev:%d, ViPipe:%d, ViChn:%d, s32WorkSnsId:%d", ViDev, ViPipe, ViChn, s32WorkSnsId);stViConfig.s32WorkingViNum = s32ViCnt;stViConfig.as32WorkingViId[0] = 0;stViConfig.astViInfo[s32WorkSnsId].stSnsInfo.MipiDev = ViDev;stViConfig.astViInfo[s32WorkSnsId].stSnsInfo.s32BusId = 1;stViConfig.astViInfo[s32WorkSnsId].stDevInfo.ViDev = ViDev;stViConfig.astViInfo[s32WorkSnsId].stDevInfo.enWDRMode = enWDRMode;stViConfig.astViInfo[s32WorkSnsId].stPipeInfo.enMastPipeMode = enMastPipeMode;stViConfig.astViInfo[s32WorkSnsId].stPipeInfo.aPipe[0] = ViPipe;stViConfig.astViInfo[s32WorkSnsId].stPipeInfo.aPipe[1] = -1;stViConfig.astViInfo[s32WorkSnsId].stPipeInfo.aPipe[2] = -1;stViConfig.astViInfo[s32WorkSnsId].stPipeInfo.aPipe[3] = -1;stViConfig.astViInfo[s32WorkSnsId].stChnInfo.ViChn = ViChn;stViConfig.astViInfo[s32WorkSnsId].stChnInfo.enPixFormat = enPixFormat;stViConfig.astViInfo[s32WorkSnsId].stChnInfo.enDynamicRange = enDynamicRange;stViConfig.astViInfo[s32WorkSnsId].stChnInfo.enVideoFormat = enVideoFormat;stViConfig.astViInfo[s32WorkSnsId].stChnInfo.enCompressMode = enCompressMode;/*get picture size*/s32Ret = SAMPLE_COMM_VI_GetSizeBySensor(stViConfig.astViInfo[s32WorkSnsId].stSnsInfo.enSnsType, &enPicSize);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("get picture size by sensor failed!\n");return s32Ret;}s32Ret = SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("get picture size failed!\n");return s32Ret;}/*config vb*/memset_s(&stVbConf, sizeof(VB_CONFIG_S), 0, sizeof(VB_CONFIG_S));stVbConf.u32MaxPoolCnt = 2;u32BlkSize = COMMON_GetPicBufferSize(stSize.u32Width, stSize.u32Height, SAMPLE_PIXEL_FORMAT, DATA_BITWIDTH_8, COMPRESS_MODE_SEG, DEFAULT_ALIGN);stVbConf.astCommPool[0].u64BlkSize = u32BlkSize;stVbConf.astCommPool[0].u32BlkCnt = 10;u32BlkSize = VI_GetRawBufferSize(stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP, COMPRESS_MODE_NONE, DEFAULT_ALIGN);stVbConf.astCommPool[1].u64BlkSize = u32BlkSize;stVbConf.astCommPool[1].u32BlkCnt = 4;s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("system init failed with %d!\n", s32Ret);return s32Ret;}/*start vi*/s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("start vi failed.s32Ret:0x%x !\n", s32Ret);goto EXIT;}/*config vpss*/memset_s(&stVpssGrpAttr, sizeof(VPSS_GRP_ATTR_S), 0, sizeof(VPSS_GRP_ATTR_S));stVpssGrpAttr.stFrameRate.s32SrcFrameRate = -1;stVpssGrpAttr.stFrameRate.s32DstFrameRate = -1;stVpssGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8;stVpssGrpAttr.enPixelFormat = enPixFormat;stVpssGrpAttr.u32MaxW = stSize.u32Width;stVpssGrpAttr.u32MaxH = stSize.u32Height;stVpssGrpAttr.bNrEn = HI_TRUE;stVpssGrpAttr.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME;stVpssGrpAttr.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL;astVpssChnAttr[VpssChn].u32Width = stSize.u32Width;astVpssChnAttr[VpssChn].u32Height = stSize.u32Height;astVpssChnAttr[VpssChn].enChnMode = VPSS_CHN_MODE_USER;astVpssChnAttr[VpssChn].enCompressMode = enCompressMode;astVpssChnAttr[VpssChn].enDynamicRange = enDynamicRange;astVpssChnAttr[VpssChn].enVideoFormat = enVideoFormat;astVpssChnAttr[VpssChn].enPixelFormat = enPixFormat;astVpssChnAttr[VpssChn].stFrameRate.s32SrcFrameRate = 30;astVpssChnAttr[VpssChn].stFrameRate.s32DstFrameRate = 30;astVpssChnAttr[VpssChn].u32Depth = 0;astVpssChnAttr[VpssChn].bMirror = HI_FALSE;astVpssChnAttr[VpssChn].bFlip = HI_FALSE;astVpssChnAttr[VpssChn].stAspectRatio.enMode = ASPECT_RATIO_NONE;/*start vpss*/abChnEnable[0] = HI_TRUE;s32Ret = SAMPLE_COMM_VPSS_Start(VpssGrp, abChnEnable, &stVpssGrpAttr, astVpssChnAttr);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("start vpss group failed. s32Ret: 0x%x !\n", s32Ret);goto EXIT1;}/*config venc */stGopAttr.enGopMode = VENC_GOPMODE_SMARTP;stGopAttr.stSmartP.s32BgQpDelta = 7;stGopAttr.stSmartP.s32ViQpDelta = 2;stGopAttr.stSmartP.u32BgInterval = 1200;s32Ret = SAMPLE_COMM_VENC_Start(VencChn[0], enType, enPicSize, enRcMode, u32Profile, bRcnRefShareBuf, &stGopAttr);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("start venc failed. s32Ret: 0x%x !\n", s32Ret);goto EXIT2;}s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(VpssGrp, VpssChn, VencChn[0]);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Venc bind Vpss failed. s32Ret: 0x%x !n", s32Ret);goto EXIT3;}/*config vo*/SAMPLE_COMM_VO_GetDefConfig(&stVoConfig);stVoConfig.enDstDynamicRange = enDynamicRange;if (1 == u32VoIntfType){stVoConfig.enVoIntfType = VO_INTF_BT1120;stVoConfig.enIntfSync = VO_OUTPUT_1080P25;}else{stVoConfig.enVoIntfType = VO_INTF_HDMI;}stVoConfig.enPicSize = enPicSize;/*start vo*/s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret);goto EXIT4;}/*vpss bind vo*/s32Ret = SAMPLE_COMM_VPSS_Bind_VO(VpssGrp, VpssChn, stVoConfig.VoDev, VoChn);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("vo bind vpss failed. s32Ret: 0x%x !\n", s32Ret);goto EXIT5;}s32Ret = SAMPLE_COMM_VENC_StartGetStream(VencChn, sizeof(VencChn) / sizeof(VENC_CHN));if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Get venc stream failed!\n");goto EXIT6;}PAUSE();SAMPLE_COMM_VENC_StopGetStream();EXIT6:SAMPLE_COMM_VPSS_UnBind_VO(VpssGrp, VpssChn, stVoConfig.VoDev, VoChn);
EXIT5:SAMPLE_COMM_VO_StopVO(&stVoConfig);
EXIT4:SAMPLE_COMM_VPSS_UnBind_VENC(VpssGrp, VpssChn, VencChn[0]);
EXIT3:SAMPLE_COMM_VENC_Stop(VencChn[0]);
EXIT2:SAMPLE_COMM_VPSS_Stop(VpssGrp, abChnEnable);
EXIT1:SAMPLE_COMM_VI_StopVi(&stViConfig);
EXIT:SAMPLE_COMM_SYS_Exit();return s32Ret;
}int main(void)
{HI_U32 u32VoIntfType = 0;HI_U32 u32ChipId;HI_MPI_SYS_GetChipId(&u32ChipId);if (HI3516C_V500 == u32ChipId){u32VoIntfType = 1;}else{u32VoIntfType = 0;}SAMPLE_VIO_ViOnlineVpssOnlineRoute(0);
}
在目录下, make, 然后复制到板子上, 接上hdmi, 就可以看到图像了, 另外还会生成h.265的文件.
啥? 咋打开h265…自己百度一下…
海思3516, 单摄像头接hdmi,并输出h.265文件相关推荐
- 海思3516开发记录-AAC音频解码
海思平台播放AAC文件 1.说明 2.音频解码 音频API 参考: 解码aac流程: 音频设置 音频解码相关错误码 1.说明 海思3516平台内置了aac解码库,可以直接解码aac音频文件,但要支持m ...
- 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)
目录 前言: 第一部分: 第二部分: 第三部分: 第四部分: 前言: 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏,液晶屏主控为 st7789,分辨率 240x240,图像格式 RGB5 ...
- 使用J-Link启动海思3516最小系统
公司最近刚设计了基于海思3516(Cortex-A9 @ 750M)的IP Camera,Flash使用的是三星的128MB nand,板子回来了才发现没有什么好的方法把程序烧写到Flash里.大家讨 ...
- 海思3516对接mipi屏幕总结
目录 一,参数确认 二,硬件确认 三,软件流程 遇到的问题: 资料:(a) 屏幕对接 使用指南.pdf(SDK中) (b) RGB_MIPI屏幕时钟时序计算器.xlsx (c) 屏幕手册(厂家提供) ...
- 海思A182-Hi3516DV300推流摄像头数据
思A182-Hi3516DV300推流摄像头数据 如果已经按照上一篇文章移植成功了opendump说明你已经成功了一大半,但是下面的一半也不是随随便便成功的,在你想要把librtmp库移植到你的开发板 ...
- 华为海思人脸识别方案 海思 3516嵌入式 Linux系统人脸识别开发模组套件
HI3516DV300 主要特性 1)处理器内核 •双核 ARM Cortex A7@900MHz,32KB I-Cache, 32KB D-Cache /256KB L2 cache • 支持 Ne ...
- unrecognized JEDEC id 海思3516 spi nor flash 型号 问题 ./drivers/mtd/spi-nor/spi-nor.c
修改 ./drivers/mtd/spi-nor/spi-nor.c unrecognized JEDEC id INFO(_jedec_id, _ext_id, _sector_size, _n ...
- 网络摄像头海思开发板_海思HI3518EV、200wifi摄像头完美解决方案
海思HI3518EV200 wifi摄像头解决方案 系统组成框图: 功能: 1. 支持AR0130.OV9712等摄像头,720P(1280 X 720分辨率),帧率30FPS; 2. 高保真音频采集 ...
- Android STB 海思平台调试
文章目录 一.产品参数 1.1 Hi3798MV100 1.2 Hi3798MV300 二.网络类&播放类 三.系统类 3.1 输出相关 3.2 CEC 3.3 杜比 3.4 IGMP 3.5 ...
最新文章
- Django 上传图片和Admin站点5.2
- JAR冲突问题的解决以及运行状态下如何查看加载的类
- 8086之8253芯片仿真
- 微信小程序textArea组件字数限制
- 「 活动 」连续 3 天,企业容器应用实战营上海站来啦!
- 【顶】Asp无组件生成缩略图(1)
- 其实,最好的年龄才刚刚开始
- 微型计算机常用的worm是,2010江西省计算机等级考试试题 二级C试题考试答题技巧...
- Python 框架 之 Scrapy 爬虫(一)
- Java RandomAccessFile readChar()方法及示例
- 机器学习week8 ex7 review
- Linux 下五个顶级的开源命令行 Shell
- Python零基础入门(四)——Python面向对象编程[学习笔记]
- 寻找二值图像的连通域算法分析
- [Zer0pts2020]ROR1
- 昆仑通态和S7 1200在线模拟仿真通讯
- 深度学习入门——03 MNIST手写数字图像集识别实验
- Pandas小小项目2-----根据10日均线策略买卖股票的股票回溯分析
- 自定义气泡效果(BubbleView)
- Android接入高德地图SDK 一引入高德sdk