hongwazi

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi  发布于  2017-07-12 19:49:42
采纳率 0%
14个问答
8288

[已解决]海思CROP功能设置无效

 
本帖最后由 hongwazi 于 2017-7-14 17:30 编辑

我的平台:HI3519 V101 使用sample中sample_venc.c进行局部代码修改
我的目的:sensor--->vi--->ddr--->算法--->vpss--->venc
sensor 采集的图像恒定为3840*2160  然后我要在这里面抠出一个960*960的图让算法处理


方法一:
sensor--->vi(w,h)--->ddr--->算法--->vpss(w,h ---> w/4,h/4)--->venc(w/4,h/4)
vi采集到图像为3840*2160,在vpss的chn crop功能来缩放,其中vpss和venc bind在一起。
VPSS_CROP_INFO_S CropInfo;
CropInfo.bEnable = HI_TRUE;
CropInfo.stCropRect.s32X = 0;
CropInfo.stCropRect.s32Y = 0;
CropInfo.stCropRect.u32Height = 540;
CropInfo.stCropRect.u32Height = 960;

s32Ret = HI_MPI_VPSS_SetChnCrop(VpssGrp,VpssChn, &CropInfo);
if (s32Ret != HI_SUCCESS)
{
        SAMPLE_PRT("HI_MPI_VPSS_SetChnCrop failed with %#x!\n", s32Ret);
        return HI_FAILURE;
}
               
s32Ret = HI_MPI_VPSS_SetDepth( VpssGrp,  VpssChn, 8);
if (s32Ret != HI_SUCCESS)
{
    SAMPLE_PRT("HI_MPI_VPSS_SetDepth failed with %#x\n", s32Ret);
    return HI_FAILURE;
}

s32Ret = HI_MPI_VPSS_EnableChn(VpssGrp, VpssChn);
if (s32Ret != HI_SUCCESS)
{
    SAMPLE_PRT("HI_MPI_VPSS_EnableChn failed with %#x\n", s32Ret);
    return HI_FAILURE;
}
       
错误信息:HI_MPI_VPSS_SetChnCrop failed with 0xa0078002!(无效的通道号)
          但是当我去掉HI_MPI_VPSS_SetChnCrop调用,最后HI_MPI_VPSS_EnableChn正常的
                  
                  

方法二
使用vi phy chn0的crop功能。在VI通道的框图中PHY CHN和 EXT         CHN都有crop能力,但是没有PHY CHN的crop接口。
因此我推测是HI_MPI_VI_SetChnAttr中stCapRect和stDestSize属性是PHY CHN的crop属性设置,使用HI_MPI_VI_SetChnAttr中设置
sensor--->vi(w,h ---> w/4,h/4)--->ddr--->算法--->vpss(w/4,h/4)--->venc(w/4,h/4)

错误信息:编译运行后,成功4帧后(可播放,是crop图像),出现HI_MPI_VPSS_SendFrame failed a007800d(分配buf失败)




方法三:
使用vi ext chn2的crop功能
sensor--->vi(phy chn w,h) --->ext vhn(w,h ---> w/4,h/4)--->ddr--->算法--->vpss(w/4,h/4)--->venc(w/4,h/4)

在调用HI_MPI_VI_EnableChn后
/* enable vi ext chn */
        VI_EXT_CHN_ATTR_S stExtChnAttr;
        stExtChnAttr.s32BindChn = ViChn; /* 绑定vi chn0 */
        stExtChnAttr.stDestSize.u32Width = pstTarSize->u32Width;
        stExtChnAttr.stDestSize.u32Height= pstTarSize->u32Height;
        stExtChnAttr.s32SrcFrameRate = -1;
    stExtChnAttr.s32DstFrameRate = -1;
        stExtChnAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;   /* sp420 or sp422 */
        stExtChnAttr.enCompressMode = COMPRESS_MODE_NONE;

       
        s32Ret = HI_MPI_VI_SetExtChnAttr(ViChn+2, &stExtChnAttr);
        if (s32Ret != HI_SUCCESS)
        {
                  SAMPLE_PRT("failed with %#x!\n", s32Ret);
                  return HI_FAILURE;
        }

        CROP_INFO_S stExtChnCrop;
        stExtChnCrop.bEnable = HI_TRUE;
        stExtChnCrop.stRect.s32X = 0;
        stExtChnCrop.stRect.s32Y = 0;
        stExtChnCrop.stRect.u32Height = 540;
        stExtChnCrop.stRect.u32Width = 960;
        /* 从vi ext chn中扣出的图像大小 */
        /* Set crop attribute for vi ext-chn */
        s32Ret = HI_MPI_VI_SetExtChnCrop(ViChn+2, &stExtChnCrop);
        if (HI_SUCCESS != s32Ret)
        {
                        printf("Set vi ext-chn crop attr err:0x%x\n", s32Ret);
                        return s32Ret;
        }

       
          /* set buffer length */
        s32Ret = HI_MPI_VI_SetFrameDepth(ViChn+2, 8);
        if (s32Ret != 0)          
        {           
                  printf("HI_MPI_VI_SetFrameDepth failed with error code %#x!\n", s32Ret);                  
                  return HI_FAILURE;  
        }
          
    /* 使能扩展通道2 */
        s32Ret = HI_MPI_VI_EnableChn(ViChn+2);
        if (s32Ret != HI_SUCCESS)
        {
                  SAMPLE_PRT("ViChn=%d failed with %#x!\n", ViChn,s32Ret);
                  return HI_FAILURE;
        }
       
        后面调用HI_MPI_VI_GetFrame从ViChn+2通道获取vi数据
        HI_MPI_VI_GetFrame得到的图像信息宽和高(w,h)而不是设置的(w/4,h/4)所以EXT CHN  CROP设置无效
       
错误信息
        HI_MPI_VPSS_SendFrame failed a007800d
    宽度高信息未变化
------------------------------------------------------------------解决方法----------------------------------------------------------------------------       
我的需求:sensor采集大图片,最后要从采集大图片中扣出一个小图
软硬平台:Hi3519 V101R001C01SPC020 海思公板 imx274
硬件限制1:vi和vpss在线模式,vi物理通道0的CROP是无法生效的。

视频物理通道(如果绑定的话,数据根本就不会流向DDR)
视频物理通道负责将输入设备解析后得到的视频数据输出到 DDR。在真正将数据输出到 DDR 之前,它可以实现裁剪等功能

硬件限制2:在vi vpss在线情况下
HI_S32 HI_MPI_VPSS_SetGrpCrop(VPSS_GRP VpssGrp, VPSS_CROP_INFO_S*pstCropInfo);也是无效的
VPSS CHN CROP我也试了,错误直接说设置VPSS CHN 无效

最终方法:
VI(CROP)--->ddr--->VPSS(去噪)--->ddr--->算法--->venc

参考代码:


               
易百纳技术社区文件: 0003-mpp_big-little-orignal-0ac404e5fa826f4b-1.zip
下载
我来回答
回答20个
时间排序
认可量排序

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-12 19:51:20
认可0
我试了一天,还是没有找到可以行的调用,也试了VPSS CROUP CROP功能,也是无效的,应该是那里参数设置有问题,我也是刚接触海思平台,希望大家指点下,谢谢!

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-12 20:02:34
认可0
哪位可以给我一个简单的demo,任何一种crop方式都可以,但是一定是要在编码前,可以实现CROP的!!!

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-12 20:10:54
认可0
方法二的错误是,HI_ERR_VPSS_NOBUF 分配 BUF 池失败,不知道这是个什么错误哦,不知道这个错误怎么解决?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-07-13 08:53:39
认可0
楼主用的vpss channel是0吗?

如果是channel 0,那么这个channel是不支持缩放和channel crop(可以参考文档中的图),如果vpss楼主没有其他用途,可以试试HI_MPI_VPSS_SetGrpCrop(),直接在输入端crop

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-13 09:20:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55321&ptid=18088]zhuangweiye 发表于 2017-7-13 08:53[/url]
楼主用的vpss channel是0吗?

如果是channel 0,那么这个channel是不支持缩放和channel crop(可以参考 ...[/quote]

终于等到论坛活雷锋:庄工了。
默认的代码应该是使用VPSS CHN 0的。其实VPSS CROUP CROP功能也试了,还是无效,估计是哪里有参数没有设置对?目前就方法二中,VI PHY CHN0的CROP出了图像,但是就是运行到4帧后,VPSS就出错了。我是直接在VI就CROP了,然后在DDR中处理完毕后,通过HI_MPI_VPSS_SendFrame将数据发送VPSS-VENC,那个错误我理解不了

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-07-13 09:47:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55323&ptid=18088]hongwazi 发表于 2017-7-13 09:20[/url]
终于等到论坛活雷锋:庄工了。
默认的代码应该是使用VPSS CHN 0的。其实VPSS CROUP CROP功能也试了,还 ...[/quote]


楼主的方法二,先看一下/proc/umap/vb和/dev/logmpp

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-13 09:50:36
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55331&ptid=18088]zhuangweiye 发表于 2017-7-13 09:47[/url]
楼主的方法二,先看一下/proc/umap/vb和/dev/logmpp[/quote]

好的,谢谢庄工提醒! 问下VI(crop)---bind--->VPSS  这个还可以实现吗?目前VI(CROP)-->ddr-->VENC是好的,但是我要把噪声给去除掉。我都试试!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-07-13 10:00:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55332&ptid=18088]hongwazi 发表于 2017-7-13 09:50[/url]
好的,谢谢庄工提醒! 问下VI(crop)---bind--->VPSS  这个还可以实现吗?目前VI(CROP)-->ddr-->VENC是好 ...[/quote]

应该可以用绑定

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-13 15:00:44
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55334&ptid=18088]zhuangweiye 发表于 2017-7-13 10:00[/url]
应该可以用绑定[/quote]

庄工,我试了下,是不可以的!VI和VPSS绑定的话,VI CROP是不生效的!我现在是在VI中crop,最后数据在DDR,然后发送给VPSS滤波,最后又从VPSS获得,但是获得的时候出错。
s32Ret = HI_MPI_VI_GetFrame(ViChn, pstFrameInfo, 100);
                if(s32Ret != 0)               
                {                       
                        printf("HI_MPI_VI_GetFrame failed %08x\n",s32Ret);                       
                        return -1;               
                }

                s32Ret = HI_MPI_VPSS_SendFrame(VpssGrp, pstFrameInfo, 100);
                if(s32Ret != 0)               
                {                       
                        printf("HI_MPI_VPSS_SendFrame failed %08x\n",s32Ret);                       
                        return -1;               
                }
                usleep(20*1000);

                s32Ret = HI_MPI_VPSS_GetChnFrame(VpssGrp, VpssChn, pstFrameInfo, 100);
                if(s32Ret != 0)               
                {                       
                        printf("HI_MPI_VPSS_GetChnFrame failed %08x\n",s32Ret);                       
                        return -1;               
                }
       
                printf("frame width = %d height = %d\n",pstFrameInfo->stVFrame.u32Width,pstFrameInfo->stVFrame.u32Height);

                /* algorithm here */
                printf("algorithm process...\n");
               
                s32Ret = HI_MPI_VENC_SendFrame(VencChn, pstFrameInfo, 50);       
                if(s32Ret != 0)               
                {                       
                        printf("HI_MPI_VENC_SendFrame failed %08x\n",s32Ret);                       
                        return -1;               
                }
目前HI_MPI_VPSS_GetChnFrame调用时错误,不知道这种使用VPSS做去燥的方式对不对。我在前面的时候已经设置VPSS的图片缓冲深度。如果不要VPSS模块代码,这个数据通道是ok的。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-07-13 15:16:15
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55365&ptid=18088]hongwazi 发表于 2017-7-13 15:00[/url]
庄工,我试了下,是不可以的!VI和VPSS绑定的话,VI CROP是不生效的!我现在是在VI中crop,最后数据在DDR ...[/quote]

这个。。。

这个流程会报no buf错误吧

试试下面流程
HI_MPI_VI_GetFrame()
HI_MPI_VPSS_SendFrame()
HI_MPI_VI_ReleaseFrame()

HI_MPI_VPSS_GetChnFrame()
HI_MPI_VENC_SendFrame()
HI_MPI_VPSS_ReleaseChnFrame()

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-13 15:18:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55367&ptid=18088]zhuangweiye 发表于 2017-7-13 15:16[/url]
这个。。。

这个流程会报no buf错误吧
[/quote]

谢谢庄工的及时回复。
我发现问题了,是我VPSS CHN和VPSS CROUP设置的width和height不一致导致的问题。可以完全把VPSS作为单独的模块离线使用!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-07-13 15:39:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55368&ptid=18088]hongwazi 发表于 2017-7-13 15:18[/url]
谢谢庄工的及时回复。
我发现问题了,是我VPSS CHN和VPSS CROUP设置的width和height不一致导致的问题。 ...[/quote]

:L

好吧,这就不是我能猜得到的了

hongwazi

3个粉丝

14

问答

0

专栏

8

资料

hongwazi 2017-07-18 09:54:36
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55571&ptid=18088]dengqiao 发表于 2017-7-17 20:23[/url]
vi有中断 vi bind vpss vpss 获取不到数据可能是哪里的问题[/quote]

你是用HI_MPI_VPSS_GetChnFrame获取帧?你设置了VPSS 图像缓冲深度没有呀?HI_MPI_VPSS_SetDepth

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-07 14:53:59
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=55368&ptid=18088]hongwazi 发表于 2017-7-13 15:18[/url]
谢谢庄工的及时回复。
我发现问题了,是我VPSS CHN和VPSS CROUP设置的width和height不一致导致的问题。 ...[/quote]

我遇到的问题跟你的有点类似,麻烦帮忙看下我的这个是什么情况,非常感谢
http://ebaina.com/bbs/thread-18373-1-1.html

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-10 15:02:30
认可0
我通过VI---》vpss处理缩放和抠图,已经实现了,抠图需要用group的crop,还可以实时抠图

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-10 15:03:03
认可0
忘记说了,我用的是3519V101

qn1566465723

0个粉丝

0

问答

0

专栏

0

资料

qn1566465723 2019-08-22 21:51:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=57202&ptid=18088]Chenw_Fly 发表于 2017-8-10 15:02[/url]
我通过VI---》vpss处理缩放和抠图,已经实现了,抠图需要用group的crop,还可以实时抠图[/quote]

我调用HI_MPI_VPSS_SetGrpCrop API 返回错误,错误代码 0xa0078008,我用的是HI3518

zhuxj

0个粉丝

5

问答

0

专栏

0

资料

zhuxj 2019-12-09 09:26:47
认可0
你好,请问你VI使用crop功能有没有实现了呢?我文档说用VI的CHN0可以进行裁剪,屡次尝试都未能实现报通道属性设置出错。但使用HI_MPI_VPSS_SetGrpCrop可以实现裁剪。

dengqiao

0个粉丝

6

问答

0

专栏

0

资料

dengqiao 2017-07-17 20:23:15
认可0
vi有中断 vi bind vpss vpss 获取不到数据可能是哪里的问题

dengqiao

0个粉丝

6

问答

0

专栏

0

资料

dengqiao 2017-07-17 20:23:58
认可0
请各位大哥有相关经验的请回复下谢谢
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区