艾编程的鲁小班

艾编程的鲁小班

18个粉丝

25

问答

17

专栏

32

资料

艾编程的鲁小班  发布于  2016-11-28 16:58:35
采纳率 12%
25个问答
一个爱技术的人
6441

关于海思3519拓展通道的属性设置的疑问

 

本帖最后由 wfjdemmye 于 2016-11-28 17:08 编辑

我创建了两个VO输出,然后一个绑定VPSS,一个绑定VO作为一个拓展通道。

现在我想不影响主通道的情况下,去放大拓展通道; 附代码:

创建VO双通道输出: for (i = 0; i < u32WndNum; i++) { //if(u32WndNum>2) /if(i>2) { stChnAttr.stRect.s32X = ALIGN_BACK((u32Width / u32Square) (i % u32Square), 2); stChnAttr.stRect.s32Y = ALIGN_BACK((u32Height / u32Square) (i / u32Square), 2); stChnAttr.stRect.u32Width = ALIGN_BACK(u32Width / u32Square, 2); stChnAttr.stRect.u32Height = ALIGN_BACK(u32Height / u32Square, 2); }/ if(i==0) { stChnAttr.stRect.s32X = 0; stChnAttr.stRect.s32Y = 0; stChnAttr.stRect.u32Width = 1920; stChnAttr.stRect.u32Height = 1080;

        }
        else if(i==1)
        {
            stChnAttr.stRect.s32X       = 0;
            stChnAttr.stRect.s32Y       = 0;
            stChnAttr.stRect.u32Width   = 400;
            stChnAttr.stRect.u32Height  = 200;
        }
        else if(i==2)
            {
            stChnAttr.stRect.s32X       = 800;
            stChnAttr.stRect.s32Y       = 0;
            stChnAttr.stRect.u32Width   = 500;
            stChnAttr.stRect.u32Height  = 300;

            }
        else if(i==3)
            {
            stChnAttr.stRect.s32X       = 0;
            stChnAttr.stRect.s32Y       = 500;
            stChnAttr.stRect.u32Width   = 500;
            stChnAttr.stRect.u32Height  = 300;
            }

    stChnAttr.u32Priority       = 0;
    stChnAttr.bDeflicker        = HI_FALSE;

    printf("stChnAttr.stRect.s32X:%d,u32Width:%d,u32Square:%d,i:%d\n",stChnAttr.stRect.s32X,u32Width,u32Square,i);

    s32Ret = HI_MPI_VO_SetChnAttr(VoLayer, i, &stChnAttr);//MAX 8
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s(%d):failed with %#x!\n", \
               __FUNCTION__, __LINE__,  s32Ret);
        return HI_FAILURE;
    }
    s32Ret = HI_MPI_VO_EnableChn(VoLayer, i);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("failed with %#x!\n", s32Ret);
        return HI_FAILURE;
    }

绑定VPSS的过程差不多,就不写啦:-------------------------

显示通道VO_chn1: s32Ret = HI_MPI_VO_SetAttrBegin(0);

s32Ret = HI_MPI_VO_SetChnAttr(0, 1, &VoChnAttr);
if (HI_SUCCESS != s32Ret)
{
    printf("vo set chn  attr failed!:%x \n",s32Ret);
    return s32Ret;
}
s32Ret = HI_MPI_VO_ShowChn(0,1);
s32Ret = HI_MPI_VO_SetAttrEnd(0);
    if (HI_SUCCESS != s32Ret)
{
    printf("vo set chn %d attr failed!:%x \n",s32Ret);
    return s32Ret;
}
    return HI_SUCCESS;

隐藏通道VO_chn1: VO_CHN_ATTR_S VoChnAttr; s32Ret = HI_MPI_VO_SetAttrBegin(0); VoChnAttr.bDeflicker = HI_TRUE; VoChnAttr.u32Priority = 1; VoChnAttr.stRect.s32X = 0; VoChnAttr.stRect.s32Y = 0; VoChnAttr.stRect.u32Width = 1920; VoChnAttr.stRect.u32Height = 1080; s32Ret = HI_MPI_VO_SetChnAttr(0, 0, &VoChnAttr); if (HI_SUCCESS != s32Ret) { printf("vo set chn attr failed!:%x \n",s32Ret); return s32Ret; } s32Ret = HI_MPI_VO_ShowChn(0,0); if (s32Ret != HI_SUCCESS) { printf("vo hide channel failed!:%x\n", s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VO_HideChn(0,1); if (s32Ret != HI_SUCCESS) { printf("vo hide channel failed!:%x\n", s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VO_SetAttrEnd(0);

设置拓展通道放大: VPSS_CROP_INFO_S pstCropInfo; memset(&pstCropInfo,0,sizeof(VPSS_CROP_INFO_S)); HI_S32 rel=HI_MPI_VPSS_GetExtChnCrop(0,4, &pstCropInfo); if(rel != HI_SUCCESS) { printf("HI_MPI_VPSS_GetGrpCrop ERROR:%x\n",rel); return rel; }

//printf("pstCropInfo.bEnable is close and open it \n");
pstCropInfo.bEnable = HI_TRUE;  
pstCropInfo.stCropRect.s32X =xPos-20;
pstCropInfo.stCropRect.s32Y =yPos-10;

pstCropInfo.stCropRect.u32Width = 40;
pstCropInfo.stCropRect.u32Height = 20;

if(pstCropInfo.stCropRect.s32X<=0)pstCropInfo.stCropRect.s32X=0;
else if(1920-pstCropInfo.stCropRect.s32X<=40)pstCropInfo.stCropRect.s32X=1880;
if(pstCropInfo.stCropRect.s32Y<=0)pstCropInfo.stCropRect.s32X=0;
else if(1080-pstCropInfo.stCropRect.s32Y<=20)pstCropInfo.stCropRect.s32X=1060;

rel= HI_MPI_VPSS_SetExtChnCrop(0,4, &pstCropInfo);
if(rel != HI_SUCCESS)
{
    printf("HI_MPI_VPSS_SetGrpCrop ERROR:%x\n",rel);
    return rel;
}
return rel;

我在设置放大属性的时候遇到 HI_MPI_VPSS_SetGrpCrop ERROR:a0078003 HI_MPI_VPSS_SetGrpCrop ERROR:a0078003 HI_MPI_VPSS_SetGrpCrop ERROR:a0078003 HI_MPI_VPSS_SetGrpCrop ERROR:a0078003 HI_MPI_VPSS_SetGrpCrop ERROR:a0078003

0xA0078003 HI_ERR_VPSS_ILLEGAL_PARAM VPSS 参数设置无效

请教一下,HI_MPI_VPSS_SetExtChnCrop这个过程的设置是一个什么样的流程才能设置成功,求教一下社区的大神们。

我来回答
回答14个
时间排序
认可量排序

艾编程的鲁小班

18个粉丝

25

问答

17

专栏

32

资料

艾编程的鲁小班 2016-11-28 17:16:38
认可0
VPSS绑定VO拓展通道的创建:

if(s32ChnNum >= 5)
                {
                    VpssChn = 4;
                    stVpssChnMode.enChnMode      = VPSS_CHN_MODE_USER;
                    stVpssChnMode.bDouble        = HI_FALSE;
                    stVpssChnMode.enPixelFormat  = SAMPLE_PIXEL_FORMAT;
                    stVpssChnMode.u32Width       = stSize.u32Width;
                    stVpssChnMode.u32Height      = stSize.u32Height;
                    stVpssChnMode.enCompressMode = COMPRESS_MODE_SEG;
                    memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));
                    stVpssChnAttr.s32SrcFrameRate = -1;
                    stVpssChnAttr.s32DstFrameRate = -1;

                        VPSS_EXT_CHN_ATTR_S pstVpssExtChnAttr;
                       
                        pstVpssExtChnAttr.s32BindChn=0;            

                    pstVpssExtChnAttr.u32Width=stSize.u32Width;              
                    pstVpssExtChnAttr.u32Height=stSize.u32Height;            
                    pstVpssExtChnAttr.s32SrcFrameRate=-1;        
                    pstVpssExtChnAttr.s32DstFrameRate=-1;        
                    pstVpssExtChnAttr.enPixelFormat=SAMPLE_PIXEL_FORMAT;              
                    pstVpssExtChnAttr.enCompressMode=COMPRESS_MODE_SEG;  
               
                    s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, &pstVpssExtChnAttr);
                    if (HI_SUCCESS != s32Ret)
                    {
                            SAMPLE_PRT("Enable vpss chn failed!\n");
                            goto END_VENC_1080P_CLASSIC_4;
                    }               
        }

绑定过程:
        if(s32ChnNum >= 5)
        {       
                VpssGrp = 0;
            VpssChn = 4;
                s32Ret=SAMPLE_COMM_VO_BindVpss(VoDev, VoChn1, VpssGrp, VpssChn);
                if(s32Ret != HI_SUCCESS)SAMPLE_PRT("SAMPLE_COMM_VO_BindVpss failed!\n");
        }

艾编程的鲁小班

18个粉丝

25

问答

17

专栏

32

资料

艾编程的鲁小班 2016-11-28 17:22:58
认可0
大神们帮忙看看瞧瞧啊~

艾编程的鲁小班

18个粉丝

25

问答

17

专栏

32

资料

艾编程的鲁小班 2016-11-28 18:51:51
认可0
HI_MPI_VPSS_SetExtChnCrop
【描述】
设置 VPSS 扩展通道裁剪功能属性。
【语法】
HI_S32 HI_MPI_VPSS_SetExtChnCrop(VPSS_GRP VpssGrp, VPSS_CHN VpssChn,const VPSS_CROP_INFO_S *pstCropInfo);
【参数】
参数名称  描述  输入/输出
VpssGrp  VPSS GROUP 号。
离线模式的取值范围:[0, VPSS_MAX_GRP_NUM)。
在线模式的取值范围:0。
输入
VpssChn  VPSS 通道号
取值范围:
[VPSS_MAX_PHY_CHN_NUM,
VPSS_MAX_CHN_NUM)。
输入
pstCropInfo  CROP 功能参数。  输入
【返回值】
返回值  描述
0  成功。
非 0  失败,请参见错误码。
【需求】
?  头文件:hi_comm_vpss.h、mpi_vpss.h
?  库文件:libmpi.a
【注意】
?  GROUP 必须已创建。
?  扩展通道处理顺序为:先 CROP,再缩放。
不明白先CROP是什么意思。。。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-29 08:13:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42049&ptid=13517]wfjdemmye 发表于 2016-11-28 18:51[/url]
HI_MPI_VPSS_SetExtChnCrop
【描述】
设置 VPSS 扩展通道裁剪功能属性。
[/quote]

参数非法, 那就看参数是什么, 限制是什么喽

3519能看到的限制是两点
1. 高宽4对齐, 坐标2对齐
2. 水平、垂直均最大支持15 倍缩小,16 倍放大;输出图像宽高2 对齐,离线宽范围[64,4608],高范围[64, 4096],在线宽高范围[64,4096]。

代码里面宽是40,高是20, 要放大到1920x1080, 这是多少倍, 简单按2k*1k来算, 大概50x50 = 2500倍, 这个...

楼主先试试 宽 = 960, 高 = 540的情况, 另外代码里面把pstCropInfo.stCropRect.s32X/s32Y 2对齐, 宽高4对齐

艾编程的鲁小班

18个粉丝

25

问答

17

专栏

32

资料

艾编程的鲁小班 2016-11-29 13:59:20
认可0
感谢 [url]http://www.ebaina.com/bbs/home.php?mod=space&uid=12370[/url] [zhuangweiye]  已经调试出来了

放学后不许跑

0个粉丝

2

问答

0

专栏

0

资料

放学后不许跑 2017-05-23 22:12:27
认可0
楼主,方便把你的demo分享一下吗?我不知道拓展通道是怎么绑定和设置参数的,我自己改完拓展通道一直没有stream

放学后不许跑

0个粉丝

2

问答

0

专栏

0

资料

放学后不许跑 2017-05-24 10:05:20
认可0
请问楼主,这个绑定的过程是怎么实现的,我看官方也没有绑定的示例代码,第一个问题:如何才能使用VPSSChn 4,S32ChnNum必须大于5才能够使用吗?  第二个问题:使用VPSSChn 4时其他参数该如何定义只需要定义VPSS_EXT_CHN_ATTR_S就行吗?   你看,物理通道0~3都需要定义stVpssChnMode  和   stVpssChnAttr,那么拓展通道4  上来还需要再定义stVpssChnMode这个吗?      总的就是一个问题,拓展通道该如何定义使用??急急急。。。。

lyy111

0个粉丝

27

问答

0

专栏

1

资料

lyy111 2017-05-24 10:05:47
认可0
学习了,占个位置。

放学后不许跑

0个粉丝

2

问答

0

专栏

0

资料

放学后不许跑 2017-05-24 10:07:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42063&ptid=13517]zhuangweiye 发表于 2016-11-29 08:13[/url]
参数非法, 那就看参数是什么, 限制是什么喽

3519能看到的限制是两点
[/quote]


请问楼主,这个绑定的过程是怎么实现的,我看官方也没有绑定的示例代码,第一个问题:如何才能使用VPSSChn 4,S32ChnNum必须大于5才能够使用吗?  第二个问题:使用VPSSChn 4时其他参数该如何定义只需要定义VPSS_EXT_CHN_ATTR_S就行吗?   你看,物理通道0~3都需要定义stVpssChnMode  和   stVpssChnAttr,那么拓展通道4  上来还需要再定义stVpssChnMode这个吗?      总的就是一个问题,拓展通道该如何定义使用??急急急。。。。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-05-24 10:44:12
认可0
本帖最后由 zhuangweiye 于 2017-5-24 10:46 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=50251&ptid=13517]放学后不许跑 发表于 2017-5-24 10:07[/url]
请问楼主,这个绑定的过程是怎么实现的,我看官方也没有绑定的示例代码,第一个问题:如何才能使用VPSS ...[/quote]

如何使用,楼主2楼的代码写的很清楚了, 去掉不需要的再复制一遍仅供参考

                    VpssChn = 4;
                    stVpssChnMode.enChnMode      = VPSS_CHN_MODE_USER;
                    stVpssChnMode.bDouble           = HI_FALSE;
                    stVpssChnMode.enPixelFormat  = SAMPLE_PIXEL_FORMAT;
                    stVpssChnMode.u32Width         = stSize.u32Width;
                    stVpssChnMode.u32Height        = stSize.u32Height;
                    stVpssChnMode.enCompressMode = COMPRESS_MODE_SEG;
                    memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));
                    stVpssChnAttr.s32SrcFrameRate = -1;
                    stVpssChnAttr.s32DstFrameRate = -1;

                    VPSS_EXT_CHN_ATTR_S pstVpssExtChnAttr;
                        
                    pstVpssExtChnAttr.s32BindChn=0;            

                    pstVpssExtChnAttr.u32Width=stSize.u32Width;              
                    pstVpssExtChnAttr.u32Height=stSize.u32Height;            
                    pstVpssExtChnAttr.s32SrcFrameRate=-1;        
                    pstVpssExtChnAttr.s32DstFrameRate=-1;        
                    pstVpssExtChnAttr.enPixelFormat=SAMPLE_PIXEL_FORMAT;              
                    pstVpssExtChnAttr.enCompressMode=COMPRESS_MODE_SEG;  
               
                    s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, &pstVpssExtChnAttr);
                    if (HI_SUCCESS != s32Ret)
                    {
                            SAMPLE_PRT("Enable vpss chn failed!\n");
                            goto END_VENC_1080P_CLASSIC_4;
                    }

上面的代码完成了创建的工作,当然拓展通道4是绑定在物理通道0上的(pstVpssExtChnAttr.s32BindChn=0)

放学后不许跑

0个粉丝

2

问答

0

专栏

0

资料

放学后不许跑 2017-05-24 10:54:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=50252&ptid=13517]zhuangweiye 发表于 2017-5-24 10:44[/url]
如何使用,楼主2楼的代码写的很清楚了, 去掉不需要的再复制一遍仅供参考

                    Vpss ...[/quote]

劳烦层主,那如果需要使用拓展通道来二次放大的,是不是就需要把pstVpssExtChnAttr.u32Width=stSize.u32Width;              
和 pstVpssExtChnAttr.u32Height=stSize.u32Height;设置成自己想要的分辨率?
                   stVpssChnMode.enChnMode      = VPSS_CHN_MODE_USER;
                    stVpssChnMode.bDouble           = HI_FALSE;
                    stVpssChnMode.enPixelFormat  = SAMPLE_PIXEL_FORMAT;
                    stVpssChnMode.u32Width         = stSize.u32Width;
                    stVpssChnMode.u32Height        = stSize.u32Height;
                    stVpssChnMode.enCompressMode = COMPRESS_MODE_SEG;
                    memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));
                    stVpssChnAttr.s32SrcFrameRate = -1;
                    stVpssChnAttr.s32DstFrameRate = -1;
这段设置的是通道4的属性还是通道0的属性?

放学后不许跑

0个粉丝

2

问答

0

专栏

0

资料

放学后不许跑 2017-05-24 11:46:42
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=50252&ptid=13517]zhuangweiye 发表于 2017-5-24 10:44[/url]
如何使用,楼主2楼的代码写的很清楚了, 去掉不需要的再复制一遍仅供参考

                    Vpss ...[/quote]

谢谢大侠:D

zhanghongquan

0个粉丝

0

问答

0

专栏

0

资料

zhanghongquan 2017-05-24 14:11:15
认可0
这个问题我也是一直在找的问题!

leo0925

0个粉丝

30

问答

0

专栏

0

资料

leo0925 2018-10-23 10:31:24
认可0
VPSS_EXT_CHN_ATTR_S stVpssExtChnAttr;
HI_MPI_VPSS_GetExtChnAttr(VpssGrp1, VpssChn, &stVpssExtChnAttr);
stVpssExtChnAttr.s32BindChn = 2;
stVpssExtChnAttr.u32Width = stSize.u32Width;
stVpssExtChnAttr.u32Height = stSize.u32Height;
stVpssExtChnAttr.s32DstFrameRate = -1;
stVpssExtChnAttr.s32SrcFrameRate = -1;
stVpssExtChnAttr.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
stVpssExtChnAttr.enCompressMode = COMPRESS_MODE_NONE;


s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp1, VpssChn, &stVpssChnAttr, &stVpssChnMode,  &stVpssExtChnAttr);
if (HI_SUCCESS != s32Ret) {
        FM_RECORD_LOG("Enable vpss chn failed!\n");
        goto END_VENC_1080P_CLASSIC_4;
}

执行返回值:
[SAMPLE_COMM_VPSS_EnableChn]-140: SAMPLE_COMM_VPSS_EnableChn failed with 0xa0078009;
查看 /dev/logmpp 提示:
<3>[  vpss] [Func]:VPSS_SetExtChnAttr [Line]:8104 [Info]:<3>[  vpss] src chn2 should be user mode!
chn2 是已经设置了user mode的;

我是这么设置的;直接报错了
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区