3085
- 收藏
- 点赞
- 分享
- 举报
hi3520dv300 720P 4路复用
sdk中的sample vio配置的是720P 2路复用,因为板子上只挂了一颗AD,所以只能显示两路;
sample_common_vi中对ad的配置,4路复用的case被屏蔽了,而且注释说不支持。。。
但是芯片手册中是写了
视频输入接口(Hi3520DV300 支持)
− 支持 2 个 8bit 接口或 1 个 16bit 接口
− 每个 8bit 接口支持 108/144MHz 4 路 D1/960H,时分复用输入,共支持
8xD1/8x960H 实时视频输入
− 每个 8bit 接口支持 144/148.5MHz2 路 720p 时分复用输入,共支持
4x720p@30fps 实时视频输入
− 每个 8bit 接口支持通过 148.5MHz 双沿采样或 297MHz 单沿采样实现 4 路 720p
时分复用输入,共支持 8x720p@30fps 实时视频输入
− 每个 8bit 接口支持通过 148.5MHz 双沿采样或 297MHz 单沿采样实现 2 路
1080p 时分复用输入,共支持 4x1080p@30fps 实时视频输入
− 每个 8bit 接口支持 148.5MHz BT.1120 Y/C 间插模式输入,共支持
2x1080p@30fps 实时视频输入
− 16bit 接口支持 148.5MHz BT.1120 标准模式,支持 1x1080p@6
尝试配置4路720P复用,现在可以了,下面是相关代码的配置:
step1 :添加4录6124复用的时序,双沿采样一定要配置;
VI_DEV_ATTR_S DEV_ATTR_6114_720P_4MUX_BASE =
{
/*interface mode*/
VI_MODE_BT656,
/*work mode*/
VI_WORK_MODE_4Multiplex,
/* r_mask g_mask b_mask*/
{0xFF000000, 0x0},
/* for single/double edge, must be set when double edge*/
VI_CLK_EDGE_DOUBLE,
/*AdChnId*/
{-1, -1, -1, -1},
/*enDataSeq, just support YUV*/
VI_INPUT_DATA_YVYU,
/**/
{
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
VI_VSYNC_FIELD, VI_VSYNC_NEG_HIGH, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,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}
},
/*whether use isp*/
VI_PATH_BYPASS,
/*data type*/
VI_DATA_TYPE_YUV
};
step2:VI_MST_NVP6124_CfgV中添加修改SAMPLE_VI_MODE_6124_4MUX_HD的配置因为只挂了一颗ad所以chip_cnt=1
HI_S32 VI_MST_NVP6124_CfgV(VIDEO_NORM_E enVideoMode,SAMPLE_VI_6124_MODE_E enViMode)
{
int chip_cnt = 1;
.......
case SAMPLE_VI_MODE_6124_4MUX_HD:
for(i=0;i
{
schnmode.ch = i;
schnmode.vformat = video_mode;
schnmode.chmode = NVP6124_VI_720P_2530;
ioctl(fd, IOC_VDEC_SET_CHNMODE, &schnmode);
}
for(i=0;i
{
optmode.chipsel = i;
optmode.portsel = 0;
optmode.portmode = NVP6124_OUTMODE_4MUX_HD;
optmode.chid = 0;
ioctl(fd, IOC_VDEC_SET_OUTPORTMODE, &optmode);
optmode.portsel = 1;
optmode.portmode = NVP6124_OUTMODE_4MUX_HD;
optmode.chid = 1;
ioctl(fd, IOC_VDEC_SET_OUTPORTMODE, &optmode);
}
break;
}
step3: SAMPLE_COMM_VI_Mode2Param中devCnt 和 chnCnt要改一下,因为板上只挂了一个ad所以最多能接4路vi输入
HI_S32 SAMPLE_COMM_VI_Mode2Param(SAMPLE_VI_MODE_E enViMode, SAMPLE_VI_PARAM_S *pstViParam)
{
。。。
case SAMPLE_VI_MODE_8_720P:
case SAMPLE_VI_MODE_8_1080P:
/* use chn 0,2,4,6,8,10,12,14 */
pstViParam->s32ViDevCnt = 1;
pstViParam->s32ViDevInterval = 1;
pstViParam->s32ViChnCnt = 4; //8; //by lwx
pstViParam->s32ViChnInterval = 1;
break;
}
step4: SAMPLE_COMM_VI_ADStart中修改enMode = SAMPLE_VI_MODE_6124_4MUX_HD
。。。。
case SAMPLE_VI_MODE_8_720P:
SAMPLE_PRT("SAMPLE_COMM_VI_ADStart SAMPLE_VI_MODE_8_720P!\n");
enMode = SAMPLE_VI_MODE_6124_4MUX_HD;//SAMPLE_VI_MODE_6124_HD;
s32Ret = VI_MST_NVP6124_CfgV(enNorm, enMode);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("SAMPLE_NVP6114_CfgV failed with %#x!\n",\
s32Ret);
return HI_FAILURE;
}
break;
step5: HI_S32 SAMPLE_COMM_VI_StartDev(VI_DEV ViDev, SAMPLE_VI_MODE_E enViMode)
{
.....
case SAMPLE_VI_MODE_8_720P:
memcpy(&stViDevAttr,&DEV_ATTR_6114_720P_4MUX_BASE,sizeof(stViDevAttr));
SAMPLE_COMM_VI_SetMask(ViDev,&stViDevAttr);
break;
.....
}
step6: 修改设备物理通道和vi 通道的绑定 ,dev0的way0 way1 way2 way3 分别绑定vi的通道chn0 chn1 chn2 chn3
HI_S32 SAMPLE_COMM_VI_Start(SAMPLE_VI_MODE_E enViMode, VIDEO_NORM_E enNorm)
{
.....
for(i=0; i
{
ViChn = i * stViParam.s32ViChnInterval;
if (SAMPLE_VI_MODE_8_1080P == enViMode
|| SAMPLE_VI_MODE_8_720P == enViMode)
{
/* When in the 8x1080p mode, bind chn 2,6,10,14 to way1 is needed */
// if (ViChn%4 != 0)
{
s32Ret = HI_MPI_VI_GetChnBind(ViChn, &stChnBindAttr);
SAMPLE_PRT("call HI_MPI_VI_GetBindChn: with dev %d way %d vichn %d %#x\n",
stChnBindAttr.ViDev, stChnBindAttr.ViWay, ViChn, s32Ret);
s32Ret = HI_MPI_VI_UnBindChn(ViChn);
// if (HI_ERR_VI_FAILED_NOTBIND == s32Ret)
{
stChnBindAttr.ViDev = ViChn / 4;
stChnBindAttr.ViWay = i;
SAMPLE_PRT("call HI_MPI_VI_BindChn with dev %d way %d vichn %d\n",
stChnBindAttr.ViDev, stChnBindAttr.ViWay, ViChn);
s32Ret = HI_MPI_VI_BindChn(ViChn, &stChnBindAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("call HI_MPI_VI_BindChn failed with %#x\n", s32Ret);
return HI_FAILURE;
}
}
}
}
.....
}
新手入门,如果又不对的地方还望指出。排版有点乱,将就看吧
sample_common_vi中对ad的配置,4路复用的case被屏蔽了,而且注释说不支持。。。
但是芯片手册中是写了
视频输入接口(Hi3520DV300 支持)
− 支持 2 个 8bit 接口或 1 个 16bit 接口
− 每个 8bit 接口支持 108/144MHz 4 路 D1/960H,时分复用输入,共支持
8xD1/8x960H 实时视频输入
− 每个 8bit 接口支持 144/148.5MHz2 路 720p 时分复用输入,共支持
4x720p@30fps 实时视频输入
− 每个 8bit 接口支持通过 148.5MHz 双沿采样或 297MHz 单沿采样实现 4 路 720p
时分复用输入,共支持 8x720p@30fps 实时视频输入
− 每个 8bit 接口支持通过 148.5MHz 双沿采样或 297MHz 单沿采样实现 2 路
1080p 时分复用输入,共支持 4x1080p@30fps 实时视频输入
− 每个 8bit 接口支持 148.5MHz BT.1120 Y/C 间插模式输入,共支持
2x1080p@30fps 实时视频输入
− 16bit 接口支持 148.5MHz BT.1120 标准模式,支持 1x1080p@6
尝试配置4路720P复用,现在可以了,下面是相关代码的配置:
step1 :添加4录6124复用的时序,双沿采样一定要配置;
VI_DEV_ATTR_S DEV_ATTR_6114_720P_4MUX_BASE =
{
/*interface mode*/
VI_MODE_BT656,
/*work mode*/
VI_WORK_MODE_4Multiplex,
/* r_mask g_mask b_mask*/
{0xFF000000, 0x0},
/* for single/double edge, must be set when double edge*/
VI_CLK_EDGE_DOUBLE,
/*AdChnId*/
{-1, -1, -1, -1},
/*enDataSeq, just support YUV*/
VI_INPUT_DATA_YVYU,
/**/
{
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
VI_VSYNC_FIELD, VI_VSYNC_NEG_HIGH, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,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}
},
/*whether use isp*/
VI_PATH_BYPASS,
/*data type*/
VI_DATA_TYPE_YUV
};
step2:VI_MST_NVP6124_CfgV中添加修改SAMPLE_VI_MODE_6124_4MUX_HD的配置因为只挂了一颗ad所以chip_cnt=1
HI_S32 VI_MST_NVP6124_CfgV(VIDEO_NORM_E enVideoMode,SAMPLE_VI_6124_MODE_E enViMode)
{
int chip_cnt = 1;
.......
case SAMPLE_VI_MODE_6124_4MUX_HD:
for(i=0;i
schnmode.ch = i;
schnmode.vformat = video_mode;
schnmode.chmode = NVP6124_VI_720P_2530;
ioctl(fd, IOC_VDEC_SET_CHNMODE, &schnmode);
}
for(i=0;i
optmode.chipsel = i;
optmode.portsel = 0;
optmode.portmode = NVP6124_OUTMODE_4MUX_HD;
optmode.chid = 0;
ioctl(fd, IOC_VDEC_SET_OUTPORTMODE, &optmode);
optmode.portsel = 1;
optmode.portmode = NVP6124_OUTMODE_4MUX_HD;
optmode.chid = 1;
ioctl(fd, IOC_VDEC_SET_OUTPORTMODE, &optmode);
}
break;
}
step3: SAMPLE_COMM_VI_Mode2Param中devCnt 和 chnCnt要改一下,因为板上只挂了一个ad所以最多能接4路vi输入
HI_S32 SAMPLE_COMM_VI_Mode2Param(SAMPLE_VI_MODE_E enViMode, SAMPLE_VI_PARAM_S *pstViParam)
{
。。。
case SAMPLE_VI_MODE_8_720P:
case SAMPLE_VI_MODE_8_1080P:
/* use chn 0,2,4,6,8,10,12,14 */
pstViParam->s32ViDevCnt = 1;
pstViParam->s32ViDevInterval = 1;
pstViParam->s32ViChnCnt = 4; //8; //by lwx
pstViParam->s32ViChnInterval = 1;
break;
}
step4: SAMPLE_COMM_VI_ADStart中修改enMode = SAMPLE_VI_MODE_6124_4MUX_HD
。。。。
case SAMPLE_VI_MODE_8_720P:
SAMPLE_PRT("SAMPLE_COMM_VI_ADStart SAMPLE_VI_MODE_8_720P!\n");
enMode = SAMPLE_VI_MODE_6124_4MUX_HD;//SAMPLE_VI_MODE_6124_HD;
s32Ret = VI_MST_NVP6124_CfgV(enNorm, enMode);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("SAMPLE_NVP6114_CfgV failed with %#x!\n",\
s32Ret);
return HI_FAILURE;
}
break;
step5: HI_S32 SAMPLE_COMM_VI_StartDev(VI_DEV ViDev, SAMPLE_VI_MODE_E enViMode)
{
.....
case SAMPLE_VI_MODE_8_720P:
memcpy(&stViDevAttr,&DEV_ATTR_6114_720P_4MUX_BASE,sizeof(stViDevAttr));
SAMPLE_COMM_VI_SetMask(ViDev,&stViDevAttr);
break;
.....
}
step6: 修改设备物理通道和vi 通道的绑定 ,dev0的way0 way1 way2 way3 分别绑定vi的通道chn0 chn1 chn2 chn3
HI_S32 SAMPLE_COMM_VI_Start(SAMPLE_VI_MODE_E enViMode, VIDEO_NORM_E enNorm)
{
.....
for(i=0; i
ViChn = i * stViParam.s32ViChnInterval;
if (SAMPLE_VI_MODE_8_1080P == enViMode
|| SAMPLE_VI_MODE_8_720P == enViMode)
{
/* When in the 8x1080p mode, bind chn 2,6,10,14 to way1 is needed */
// if (ViChn%4 != 0)
{
s32Ret = HI_MPI_VI_GetChnBind(ViChn, &stChnBindAttr);
SAMPLE_PRT("call HI_MPI_VI_GetBindChn: with dev %d way %d vichn %d %#x\n",
stChnBindAttr.ViDev, stChnBindAttr.ViWay, ViChn, s32Ret);
s32Ret = HI_MPI_VI_UnBindChn(ViChn);
// if (HI_ERR_VI_FAILED_NOTBIND == s32Ret)
{
stChnBindAttr.ViDev = ViChn / 4;
stChnBindAttr.ViWay = i;
SAMPLE_PRT("call HI_MPI_VI_BindChn with dev %d way %d vichn %d\n",
stChnBindAttr.ViDev, stChnBindAttr.ViWay, ViChn);
s32Ret = HI_MPI_VI_BindChn(ViChn, &stChnBindAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("call HI_MPI_VI_BindChn failed with %#x\n", s32Ret);
return HI_FAILURE;
}
}
}
}
.....
}
新手入门,如果又不对的地方还望指出。排版有点乱,将就看吧
我来回答
回答1个
时间排序
认可量排序
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2018-05-14 10:37:41
-
2017-12-11 18:22:30
-
2017-06-05 11:12:26
-
2017-06-05 11:14:36
-
2017-09-23 06:18:14
-
2017-06-05 11:15:17
-
2016-10-09 11:39:44
-
2018-10-15 09:52:38
-
2015-03-31 17:25:57
-
2015-08-03 17:29:12
-
2018-04-10 11:53:39
-
2019-09-06 10:05:36
-
2016-03-15 14:07:26
-
2023-05-25 09:57:39
-
2018-07-24 12:52:11
-
2018-12-11 16:40:46
-
2016-06-21 18:07:33
-
2018-06-09 12:59:09
-
2018-04-14 15:01:04
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认