在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文件相关推荐

  1. 海思3516开发记录-AAC音频解码

    海思平台播放AAC文件 1.说明 2.音频解码 音频API 参考: 解码aac流程: 音频设置 音频解码相关错误码 1.说明 海思3516平台内置了aac解码库,可以直接解码aac音频文件,但要支持m ...

  2. 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)

    目录 前言: 第一部分: 第二部分: 第三部分: 第四部分: 前言: 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏,液晶屏主控为 st7789,分辨率 240x240,图像格式 RGB5 ...

  3. 使用J-Link启动海思3516最小系统

    公司最近刚设计了基于海思3516(Cortex-A9 @ 750M)的IP Camera,Flash使用的是三星的128MB nand,板子回来了才发现没有什么好的方法把程序烧写到Flash里.大家讨 ...

  4. 海思3516对接mipi屏幕总结

    目录 一,参数确认 二,硬件确认 三,软件流程 遇到的问题: 资料:(a) 屏幕对接 使用指南.pdf(SDK中) (b) RGB_MIPI屏幕时钟时序计算器.xlsx (c) 屏幕手册(厂家提供) ...

  5. 海思A182-Hi3516DV300推流摄像头数据

    思A182-Hi3516DV300推流摄像头数据 如果已经按照上一篇文章移植成功了opendump说明你已经成功了一大半,但是下面的一半也不是随随便便成功的,在你想要把librtmp库移植到你的开发板 ...

  6. 华为海思人脸识别方案 海思 3516嵌入式 Linux系统人脸识别开发模组套件

    HI3516DV300 主要特性 1)处理器内核 •双核 ARM Cortex A7@900MHz,32KB I-Cache, 32KB D-Cache /256KB L2 cache • 支持 Ne ...

  7. 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 ...

  8. 网络摄像头海思开发板_海思HI3518EV、200wifi摄像头完美解决方案

    海思HI3518EV200 wifi摄像头解决方案 系统组成框图: 功能: 1. 支持AR0130.OV9712等摄像头,720P(1280 X 720分辨率),帧率30FPS; 2. 高保真音频采集 ...

  9. Android STB 海思平台调试

    文章目录 一.产品参数 1.1 Hi3798MV100 1.2 Hi3798MV300 二.网络类&播放类 三.系统类 3.1 输出相关 3.2 CEC 3.3 杜比 3.4 IGMP 3.5 ...

最新文章

  1. Django 上传图片和Admin站点5.2
  2. JAR冲突问题的解决以及运行状态下如何查看加载的类
  3. 8086之8253芯片仿真
  4. 微信小程序textArea组件字数限制
  5. 「 活动 」连续 3 天,企业容器应用实战营上海站来啦!
  6. 【顶】Asp无组件生成缩略图(1)
  7. 其实,最好的年龄才刚刚开始
  8. 微型计算机常用的worm是,2010江西省计算机等级考试试题 二级C试题考试答题技巧...
  9. Python 框架 之 Scrapy 爬虫(一)
  10. Java RandomAccessFile readChar()方法及示例
  11. 机器学习week8 ex7 review
  12. Linux 下五个顶级的开源命令行 Shell
  13. Python零基础入门(四)——Python面向对象编程[学习笔记]
  14. 寻找二值图像的连通域算法分析
  15. [Zer0pts2020]ROR1
  16. 昆仑通态和S7 1200在线模拟仿真通讯
  17. 深度学习入门——03 MNIST手写数字图像集识别实验
  18. Pandas小小项目2-----根据10日均线策略买卖股票的股票回溯分析
  19. 自定义气泡效果(BubbleView)
  20. Android接入高德地图SDK 一引入高德sdk

热门文章

  1. windows 使用 perfDog 连接 ios手机
  2. 小程序FMP优化实录,附小技巧
  3. Android Compose 新闻App(二)ViewModel、Hlit、数据流
  4. S3DIS数据集的几个bug
  5. 淘宝页面详情采集API调用展示(APP端商品详情)
  6. Altium Designer 18中的PCB Editor–Board Insight Color Overrides
  7. 住房和城乡建设部正式印发《城市运行管理服务平台技术标准》(附下载)
  8. 揭秘APP软件开发者百万富翁之路:造程序的工厂
  9. react项目实战五 个人中心页面
  10. 字句解 (易經大意 韓長庚)