wfjdemmye

wfjdemmye

0个粉丝

20

问答

3

专栏

4

资料

wfjdemmye  发布于  2016-11-28 16:58:35
采纳率 0%
20个问答
4734

关于海思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个
时间排序
认可量排序

wfjdemmye

0个粉丝

20

问答

3

专栏

4

资料

wfjdemmye 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");
        }

wfjdemmye

0个粉丝

20

问答

3

专栏

4

资料

wfjdemmye 2016-11-28 17:22:58
认可0
大神们帮忙看看瞧瞧啊~

wfjdemmye

0个粉丝

20

问答

3

专栏

4

资料

wfjdemmye 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

0个粉丝

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对齐

wfjdemmye

0个粉丝

20

问答

3

专栏

4

资料

wfjdemmye 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

0个粉丝

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个粉丝

26

问答

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)
举报反馈

举报类型

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

详细说明

易百纳技术社区