ss528的mpp中DHD0设备如何开启多个视频层具体修改哪一个参数
时间: 2024-02-03 19:03:34 浏览: 27
对于ss528的mpp中DHD0设备,可以通过修改参数"vpss_grp_attr.vpss_grpid"来开启多个视频层。具体操作如下:
1. 打开mpp sample程序。
2. 找到vpss_grp_attr结构体,该结构体定义在mpp/common/mpp_vpss.h中。
3. 修改vpss_grp_attr.vpss_grpid的值,可以设置为0或1,表示开启一个或两个视频层。
例如,如果要开启两个视频层,可以将vpss_grp_attr.vpss_grpid的值设置为1,具体代码如下:
```c
VPSS_GRP_ATTR_S vpss_grp_attr;
memset(&vpss_grp_attr, 0, sizeof(VPSS_GRP_ATTR_S));
vpss_grp_attr.vpss_grpid = 1; // 开启两个视频层
```
需要注意的是,修改参数前请先确认设备支持多个视频层的功能。
相关问题
mpp中修改VO设备0的通道宽高在那个地方修改,给出具体方法
根据您提供的信息,我猜测您是在问 MPP(Media Processing Platform) 中如何修改 VO(Video Output) 设备 0 的通道宽高。下面是具体的修改方法:
1. 在 MPP 应用程序中,找到与 VO 设备 0 相关的配置文件。一般来说,这个配置文件的名称为 xxx_vo0_cfg.c(xxx 为应用程序名称)。
2. 打开该配置文件,在文件中找到 VO 设备 0 的配置结构体,一般命名为 VO_CFG。
3. 在 VO_CFG 结构体中,有两个成员变量 width 和 height,它们分别表示 VO 设备 0 的通道宽和高。
4. 修改 width 和 height 的值即可改变 VO 设备 0 的通道宽高。例如,如果要将通道宽度修改为 1920,高度修改为 1080,可以将 VO_CFG 结构体中的 width 和 height 分别修改为 1920 和 1080。
5. 最后,将修改后的配置文件重新编译并烧录到目标设备中,就可以看到 VO 设备 0 的通道宽高已经被修改了。
希望以上回答对您有所帮助。
MPP中如何修改HDMI的VO设置能实现多个HDMI的VI同时在同一个HDMI口输出,详细做法
在MPP中实现多个HDMI的VI同时在同一个HDMI口输出,需要进行以下步骤:
1. 打开mpp/sample/common/sample_comm_sys.c文件,在SAMPLE_COMM_SYS_GetPicSize函数中添加一个新的VI通道。
例如,如果你需要添加第二个VI通道,可以添加以下代码:
```c
case VI_MODE_1080P_30:
case VI_MODE_1080P_25:
if (ViChn < 2) // 添加一行判断,如果ViChn小于2,则返回1080P分辨率
{
pstSize->u32Width = 1920;
pstSize->u32Height = (VI_MODE_1080P_30 == enPicSize)? 1080 : 1088;
}
else // 如果ViChn大于等于2,则返回720P分辨率
{
pstSize->u32Width = 1280;
pstSize->u32Height = (VI_MODE_1080P_30 == enPicSize)? 720 : 704;
}
break;
```
2. 打开mpp/sample/common/sample_comm_venc.c文件,在SAMPLE_COMM_VENC_H264Encode函数中添加一个新的VENC通道。
例如,如果你需要添加第二个VENC通道,可以添加以下代码:
```c
case 1: // 添加一行判断,如果i < 2,则使用第一个编码通道
VencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
VencChnAttr.stRcAttr.stH264Cbr.u32Gop = (VIDEO_ENCODING_MODE_PAL==g_enNorm)?25:30;
VencChnAttr.stRcAttr.stH264Cbr.u32StatTime = 1;
VencChnAttr.stRcAttr.stH264Cbr.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL==g_enNorm)?25:30;
VencChnAttr.stRcAttr.stH264Cbr.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL==g_enNorm)?25:30;
VencChnAttr.stRcAttr.stH264Cbr.u32BitRate = 1024*2; // 2Mbps
VencChnAttr.stGopAttr.enGopMode = VENC_GOPMODE_NORMALP;
VencChnAttr.stGopAttr.stNormalP.s32IPQpDelta = 0;
VencChnAttr.stGopAttr.stNormalP.u32GopPresetIdx = 0;
VencChnAttr.stGopAttr.stNormalP.u32IQp = 20;
break;
case 2: // 如果i大于等于2,则使用第二个编码通道
VencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
VencChnAttr.stRcAttr.stH264Cbr.u32Gop = (VIDEO_ENCODING_MODE_PAL==g_enNorm)?25:30;
VencChnAttr.stRcAttr.stH264Cbr.u32StatTime = 1;
VencChnAttr.stRcAttr.stH264Cbr.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL==g_enNorm)?25:30;
VencChnAttr.stRcAttr.stH264Cbr.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL==g_enNorm)?25:30;
VencChnAttr.stRcAttr.stH264Cbr.u32BitRate = 1024*2; // 2Mbps
VencChnAttr.stGopAttr.enGopMode = VENC_GOPMODE_NORMALP;
VencChnAttr.stGopAttr.stNormalP.s32IPQpDelta = 0;
VencChnAttr.stGopAttr.stNormalP.u32GopPresetIdx = 0;
VencChnAttr.stGopAttr.stNormalP.u32IQp = 20;
break;
```
3. 打开mpp/sample/common/sample_comm_vo.c文件,在SAMPLE_COMM_VO_HdmiStart函数中添加一个新的VO通道。
例如,如果你需要添加第二个VO通道,可以添加以下代码:
```c
stLayerAttr.stDispRect.s32X = 0;
stLayerAttr.stDispRect.s32Y = (HI_S32)VoDev * 720; // 根据VoDev的值计算新的Y坐标
stLayerAttr.stDispRect.u32Width = 1920;
stLayerAttr.stDispRect.u32Height = 720;
```
4. 修改程序中的启动脚本,将新添加的VI通道和VENC通道绑定在一起,将新添加的VENC通道和VO通道绑定在一起。
例如,如果你需要将第二个VI通道和第二个VENC通道绑定在一起,可以在启动脚本中添加以下代码:
```bash
# 绑定VI通道和VENC通道
echo "bind vi1 and venc2..."
mipi_receiver 1 0
mipi_phy 1 on
vi 1 isp 0
vi 1 attr 1080P30
venc 2 attr 1080P30 2000 30 30 20
venc 2 rc cbr 1024 1
venc 2 roi off
venc 2 crop off
venc 2 chn 2
```
然后,将第二个VENC通道和第二个VO通道绑定在一起,可以在启动脚本中添加以下代码:
```bash
# 绑定VENC通道和VO通道
echo "bind venc2 and vo2..."
vo 1 hdmi
vo 1 attr 1080P30 vo_1080P30
vo 1 chn 1
vo 1 layer 0
vo 1 layer 0 alpha 0xff
vo 1 layer 0 pos 0 $(($VoDev * 720))
venc 2 chn 2 bit 1024
venc 2 rc start
venc 2 chn 2 destory
```
以上就是实现多个HDMI的VI同时在同一个HDMI口输出的详细步骤,希望能对你有所帮助。