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

 2 E币 
成为会员,免费下载资料
文件大小:40.9 KB 上传者:hongwazi 时间:2017-07-14 17:26:57 下载量:51
本帖最后由 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

参考代码:


               
展开
折叠
2651
评论
共 0 个
内容存在敏感词
    易百纳技术社区暂无数据
相关资料
关于作者
易百纳技术社区
hongwazi
贡献资料 8
易百纳技术社区 我上传的资料
登录查看
我赚取的积分
登录查看
我赚取的收益
登录查看
上传资料 赚取积分兑换E币
易百纳技术社区
删除原因
广告/SPAM
恶意灌水
违规内容
文不对题
重复发帖
置顶时间设置
结束时间
举报反馈

举报类型

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

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-资料模块

审核失败

失败原因
备注
易百纳技术社区