- 收藏
- 点赞
- 分享
- 举报
Hi3516dv300支持BT1120(已经解决)
感谢社区内小伙伴的帖子和回答,不然不知道什么时候能将BT1120调通。故记录下来方便其他小伙伴查阅。
目的:将fpga输出的YUV数据通过BT1120输入Hi3516dv300
数据流如下:
BT1120 —yuv422—> VI — yuv420—> VENC —h264—> network
BT1120 标准时序下,数据就是yuv422格式,16Bit总线位宽,Y通道8bit灰度,C通道8bit色度。
VI1必须连接Y通道, VI0必须连接C通道,如果保存下的YUV图像出现色度数据与灰度数据对调的情况可以尝试将Y,C通道换一下。
1、主要设置以下几个结构体:
- combo_dev_attr_t
注意:根据文档,对于3516dv300, 只有videv1,MIPI1才支持BT1120输入,且要将输入模式设置为CMOScombo_dev_attr_t MIPI_BT1120_ATTR ={/* input mode */.devno = 1,.input_mode = INPUT_MODE_CMOS, //使MIPI RX PHY处于CMOS模式.data_rate = MIPI_DATA_RATE_X1,.img_rect = {0, 0, 1280, 720},{.mipi_attr = {DATA_TYPE_YUV422_8BIT, HI_MIPI_WDR_MODE_NONE, {-1, -1, -1, -1}}}};
VI_DEV_ATTR_S
/* BT1120 1080p */VI_DEV_ATTR_S DEV_ATTR_BT1120_720P_BASE ={/* interface mode */VI_MODE_BT1120_STANDARD,/* multiplex mode */VI_WORK_MODE_1Multiplex,/* r_mask g_mask b_mask*/{0xFF000000, 0xFF0000},/* progessive or interleaving */VI_SCAN_PROGRESSIVE, /*逐行*//*AdChnId*/{-1, -1, -1, -1},/*enDataSeq, only support yuv*/VI_DATA_SEQ_UVUV,/* synchronization information */{/*port_vsync port_vsync_neg port_hsync port_hsync_neg */VI_VSYNC_PULSE, VI_VSYNC_NEG_HIGH, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_NORM_PULSE,VI_VSYNC_VALID_NEG_HIGH,/*hsync_hfb hsync_act hsync_hhb*/{0, 0, 0,/*vsync0_vhb vsync0_act vsync0_hhb*/0, 0, 0,/*vsync1_vhb vsync1_act vsync1_hhb*/0, 0, 0}},/* input data type */VI_DATA_TYPE_YUV,/* bReverse */HI_FALSE,/* input size */{1280, 720},{{{1280, 720},},{VI_REPHASE_MODE_NONE, VI_REPHASE_MODE_NONE}},{WDR_MODE_NONE, 720},DATA_RATE_X1};
- VI_PIPE_ATTR_S
VI_PIPE_ATTR_S PIPE_ATTR_BT1120_720P_BIT16_420 = {/* bBindDev bYuvSkip */VI_PIPE_BYPASS_NONE,HI_FALSE, /*YUV skip enable */HI_TRUE, /* ISP Bypass */1280,720,PIXEL_FORMAT_YVU_SEMIPLANAR_422,COMPRESS_MODE_NONE,DATA_BITWIDTH_8, /* bit_width width: 16 illegal, should be when YUV!*/HI_FALSE,{PIXEL_FORMAT_YVU_SEMIPLANAR_420, DATA_BITWIDTH_8, VI_NR_REF_FROM_RFR,COMPRESS_MODE_NONE},HI_FALSE,{-1, -1}};
不需要ISP,故设置ISP Bypass为true。
VI_CHN_ATTR_S
VI_CHN_ATTR_S CHN_ATTR_BT1120_720P_420_SDR8_LINEAR = {{1280, 720},PIXEL_FORMAT_YVU_SEMIPLANAR_420,DYNAMIC_RANGE_SDR8,VIDEO_FORMAT_LINEAR,COMPRESS_MODE_NONE,0,0,0,{-1, -1}};
2、接口调用关系如下
SAMPLE_COMM_VI_StartVi()SAMPLE_COMM_VI_StartMIPI_BT1120() //combo_dev_attr_tSAMPLE_COMM_VI_SetParam()SAMPLE_COMM_VI_CreateVi()SAMPLE_COMM_VI_CreateSingleVi()SAMPLE_COMM_VI_StartDev() //VI_DEV_ATTR_SSAMPLE_COMM_VI_BindPipeDev()SAMPLE_COMM_VI_StartViPipe() //VI_PIPE_ATTR_SSAMPLE_COMM_VI_StartViChn() //VI_CHN_ATTR_S//SAMPLE_COMM_VI_CreateIsp() /*close isp*/
SAMPLE_COMM_VI_StartMIPI_BT1120()实现如下:
HI_S32 SAMPLE_COMM_VI_StartMIPI_BT1120(SAMPLE_VI_CONFIG_S* pstViConfig) {HI_S32 fd;combo_dev_attr_t *pstcomboDevAttr = NULL;fd = open("/dev/hi_mipi", O_RDWR);if (fd < 0){printf("warning: open hi_mipi dev failed\n");return -1;}pstcomboDevAttr = &MIPI_BT1120_ATTR;if (NULL == pstcomboDevAttr){printf("Func %s() Line[%d], unsupported BT1120\n", __FUNCTION__, __LINE__);close(fd);return HI_FAILURE;}if (ioctl(fd, HI_MIPI_SET_DEV_ATTR, pstcomboDevAttr)){printf("set mipi attr failed\n");close(fd);return HI_FAILURE;}close(fd);return HI_SUCCESS;}
3、设置相关寄存器
当使用非MIPI RX功能时,需要先配置PHY_MODE_LINK和PHY_EN_LINK寄存器分别为0x30100和0x0(寄存器详情请参见芯片手册9.3.6小节),使MIPI RX PHY处于CMOS模式。
在SDK中相关接口调用后,海思会自动设置相关寄存器,故无需手动去设置
4、修改驱动启动脚本
路径:/komod/load3516dv300
根据脚本的说明来启动#!/bin/sh# Useage: ./load3516dv300 [ -r|-i|-a ] [ sensor0~1 ]# -r : rmmod all modules# -i : insmod all modules# -a : rmmod all moules and then insmod them# e.g: RAW: ./load3516dv300 -i -sensor0 imx335 -sensor1 imx335# e.g: BT1120/DC : ./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 1# e.g: BT656 : ./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 2
./load3516dv300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 1
需要注意以下几点:- 确定输入的yuv顺序
DEV_ATTR_BT1120_1080P_BASE 中的enDataSeq要和输入源的一致。设置为:VI_DATA_SEQ_UVUV后,HI_MPI_VI_SetDevAttr报错,查看/dev/logmpp详细报错如下:
提示viDev 1不支持yuv的顺序YUYV,我们将其改为UVUV,就通过了。<3>[ vi] [func]:vi_drv_check_data_seq [line]:8672 [info]:invalid input yuv seq 4 of vi dev 1<3>[ vb] [Func]:vb_set_supplement_conf [Line]:1955 [Info]:VB is initialized!
- 设置正确且支持的viPipe
查看文档《HiMPP 媒体处理软件开发参考》下关于VI_PIPE_ATTR_S的说明<3>[ vi] [func]:vi_drv_check_pipe_pix_fmt [line]:1635 [info]:vi_pipe(0) do not support SP420/SP422/YUV400!<3>[ vi] [func]:vi_drv_check_pipe_pix_fmt [line]:1594 [info]:picture pix format should be YUV or BAYER which is 22!
3516dv300只有pipe2支持输出YUV格式的数据
在设置VIConfig结构体时,将vipipe设置为2。
stViConfig.astViInfo[i].stSnsInfo.MipiDev = 1; //MipiDev-1 for BT.1120...stViConfig.astViInfo[i].stDevInfo.ViDev = 1; //viDev-1 for BT.1120stViConfig.astViInfo[i].stPipeInfo.aPipe[0] = 2; //pipe2 for yuvstViConfig.astViInfo[i].stPipeInfo.aPipe[1] = -1;stViConfig.astViInfo[i].stPipeInfo.aPipe[2] = -1;stViConfig.astViInfo[i].stPipeInfo.aPipe[3] = -1;
遇到bug的时候,记得查看/dev/logmpp,输出信息会将错误原因写的很清楚。一定要多看文档,很多时候,是因为没注意到文档中的某些细节才卡住。
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片
-
2018-10-19 15:20:12
-
2022-01-14 14:26:53
-
2022-11-06 23:33:52
-
2019-08-02 10:16:28
-
2025-10-24 13:34:43
-
22015-06-11 11:15:14
-
2023-08-18 09:48:27
-
2022-02-16 15:04:36
-
2022-02-16 16:31:26
-
2020-06-24 17:35:06
-
2020-09-18 09:20:31
-
2017-08-16 09:21:23
-
2019-12-20 12:00:55
-
2021-01-28 18:43:55
-
2021-11-20 11:48:05
-
2016-03-28 22:06:13
-
2015-08-17 18:06:31
-
2017-07-24 14:07:39
-
2018-10-18 17:05:20
-
5hisi3516cv610 + gc4336p 夜晚很模糊
-
5AIISP(功能演示,SC4336P为BGGR,强制转RGGB,会导致颜色异常)
-
5rv1106使用luckfox的SDK,设备树和驱动都写好了,结果设备文件没有生成
-
5海思3516cv610中如何进行SD卡升级,根据官方文档操作,烧录进板子时,走的默认uboot,没有执行uboot升级。
-
5G610Q-IPC-38E 夜晚很暗 有什么办法解决吗 已经补光了
-
10转换模型时,SoC版本里没显示hi3516cv610芯片
-
5hisi3516cv610 使用 yolov8n 模型训练 要如何提高 这里识别的是人
-
10有人在海思平台接过SC035HGS吗
-
5关于hi3519dv500,以SD卡虚拟 U 盘操作
-
5ss928 sample_venc代码移植到openEuler24.03上执行报错 [sample_comm_vi_start_dev]-1068: vi set dev attr failed wi
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明

微信扫码分享
QQ好友