6793
- 收藏
- 点赞
- 分享
- 举报
VO到VPSS解绑定再绑定的奇怪问题
本帖最后由 yanjinbin 于 2017-3-30 15:08 编辑
是这样的,项目预览是这样实现的VI->VPSS->VO(HD0)
项目需要VO输出分割画面可以切换(1/2/4/5/6/8)并且绑定的VPSS显示通道也会改变。
我暂时的思路就是在通道切换的时候比如(8->4)解绑VPSS通道,在VO重新创建通道后再绑定VPSS通道。
现在的问题是,再切换通道后VO画面就静止不动了,我也不知道重新绑定的VPSS通道为什么不输出画面到新的VO通道了。
后面我使用样例sample_vio.c来测试了这个效果,在SAMPLE_VIO_8_960H()函数中添加入下代码。
/******************************************
step 7: HD0 switch mode
******************************************/
VoDev = SAMPLE_VO_DEV_DHD0;
VoLayer = SAMPLE_VO_LAYER_VHD0;
enVoMode = VO_MODE_9MUX;
while(1)
{
enPreVoMode = enVoMode;
u32WndNumOld = u32WndNum;
printf("please choose preview mode, press 'q' to exit this sample.\n");
printf("\t0) 1 preview\n");
printf("\t1) 4 preview\n");
printf("\t2) 8 preview\n");
printf("\tq) quit\n");
ch = getchar();
if(10 == ch)
{
continue;
}
getchar();
if ('0' == ch)
{
u32WndNum = 1;
enVoMode = VO_MODE_1MUX;
}
else if ('1' == ch)
{
u32WndNum = 4;
enVoMode = VO_MODE_4MUX;
}
/*Indeed only 8 chns show*/
else if ('2' == ch)
{
u32WndNum = 9;
enVoMode = VO_MODE_9MUX;
}
else if ('q' == ch)
{
break;
}
else
{
SAMPLE_PRT("preview mode invaild! please try again.\n");
continue;
}
SAMPLE_PRT("vo(%d) switch to %d mode\n", VoDev, u32WndNum);
s32Ret= HI_MPI_VO_SetAttrBegin(VoLayer);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
#if 1 //解绑定
for(i=0;i
{
VoChn = i;
VpssGrp = i;
SAMPLE_COMM_VO_UnBindVpss(VoLayer,VoChn,VpssGrp,VpssChn_VoHD0);
}
#endif
s32Ret = SAMPLE_COMM_VO_StopChn(VoLayer, enPreVoMode);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
s32Ret = SAMPLE_COMM_VO_StartChn(VoLayer, enVoMode);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
#if 1 //重新绑定
for(i=0;i
{
VoChn = i;
VpssGrp = i;
s32Ret = SAMPLE_COMM_VO_BindVpss(VoDev,VoChn,VpssGrp,VpssChn_VoHD0);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_VO_BindVpss failed!\n");
goto END_8_960H_4;
}
}
#endif
s32Ret= HI_MPI_VO_SetAttrEnd(VoLayer);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
}
添加绑定和解绑定代码后,重新编译,执行./sample_vio 1,然后输入1,从9通道切换到4通道,就会发现画面静止不动了。
为什么会这样,函数执行也没有报错。奇怪了。
是这样的,项目预览是这样实现的VI->VPSS->VO(HD0)
项目需要VO输出分割画面可以切换(1/2/4/5/6/8)并且绑定的VPSS显示通道也会改变。
我暂时的思路就是在通道切换的时候比如(8->4)解绑VPSS通道,在VO重新创建通道后再绑定VPSS通道。
现在的问题是,再切换通道后VO画面就静止不动了,我也不知道重新绑定的VPSS通道为什么不输出画面到新的VO通道了。
后面我使用样例sample_vio.c来测试了这个效果,在SAMPLE_VIO_8_960H()函数中添加入下代码。
/******************************************
step 7: HD0 switch mode
******************************************/
VoDev = SAMPLE_VO_DEV_DHD0;
VoLayer = SAMPLE_VO_LAYER_VHD0;
enVoMode = VO_MODE_9MUX;
while(1)
{
enPreVoMode = enVoMode;
u32WndNumOld = u32WndNum;
printf("please choose preview mode, press 'q' to exit this sample.\n");
printf("\t0) 1 preview\n");
printf("\t1) 4 preview\n");
printf("\t2) 8 preview\n");
printf("\tq) quit\n");
ch = getchar();
if(10 == ch)
{
continue;
}
getchar();
if ('0' == ch)
{
u32WndNum = 1;
enVoMode = VO_MODE_1MUX;
}
else if ('1' == ch)
{
u32WndNum = 4;
enVoMode = VO_MODE_4MUX;
}
/*Indeed only 8 chns show*/
else if ('2' == ch)
{
u32WndNum = 9;
enVoMode = VO_MODE_9MUX;
}
else if ('q' == ch)
{
break;
}
else
{
SAMPLE_PRT("preview mode invaild! please try again.\n");
continue;
}
SAMPLE_PRT("vo(%d) switch to %d mode\n", VoDev, u32WndNum);
s32Ret= HI_MPI_VO_SetAttrBegin(VoLayer);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
#if 1 //解绑定
for(i=0;i
VoChn = i;
VpssGrp = i;
SAMPLE_COMM_VO_UnBindVpss(VoLayer,VoChn,VpssGrp,VpssChn_VoHD0);
}
#endif
s32Ret = SAMPLE_COMM_VO_StopChn(VoLayer, enPreVoMode);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
s32Ret = SAMPLE_COMM_VO_StartChn(VoLayer, enVoMode);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
#if 1 //重新绑定
for(i=0;i
VoChn = i;
VpssGrp = i;
s32Ret = SAMPLE_COMM_VO_BindVpss(VoDev,VoChn,VpssGrp,VpssChn_VoHD0);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_VO_BindVpss failed!\n");
goto END_8_960H_4;
}
}
#endif
s32Ret= HI_MPI_VO_SetAttrEnd(VoLayer);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start VO failed!\n");
goto END_8_960H_5;
}
}
添加绑定和解绑定代码后,重新编译,执行./sample_vio 1,然后输入1,从9通道切换到4通道,就会发现画面静止不动了。
为什么会这样,函数执行也没有报错。奇怪了。
我来回答
回答19个
时间排序
认可量排序
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2019-04-30 15:04:29
-
2021-05-11 18:16:35
-
2015-12-29 10:08:10
-
2017-04-10 20:33:00
-
2016-07-14 18:22:18
-
2020-03-17 22:04:16
-
2017-05-27 14:27:08
-
2018-09-04 13:39:45
-
2024-03-15 15:38:18
-
2023-11-06 09:57:00
-
2019-12-17 13:43:13
-
2016-08-30 15:17:42
-
2019-02-25 11:24:53
-
2018-09-08 18:15:45
-
2017-05-26 18:28:29
-
2020-04-03 10:30:30
-
2022-07-30 15:12:35
-
2016-08-24 14:30:01
-
2016-08-18 10:10:21
无更多相似问答 去提问
点击登录
-- 积分
-- 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币)
取消
确认