吕晶大神

吕晶大神

1个粉丝

4

问答

0

专栏

0

资料

吕晶大神  发布于  2024-10-28 10:13:45
采纳率 0%
4个问答
130

ive resize sobel问题

利用ive的resize和sobel算子做图像处理,申请了两块mmz的空间,申请空间的时候没有报错,但是经过resize和sobel的时候就报错:
是怎么回事阿,我不知道是mmz空间的问题还是什么问题????????????
~ # cat /dev/logmpp

undefined

undefined

undefined

undefined

undefined

undefined

undefined

undefined

<3>[ ive] [Func]:ive_sobel [Line]:388 [Info]:Error(0xa01d8007): check sobel parameters failed!
申请空间的代码:
hi_void create_img(hi_svp_img img,hi_svp_img_type type,hi_u32 width,hi_u32 height)
{
hi_s32 ret = HI_SUCCESS;
hi_u32 size;
hi_void virt = NULL;
size = widthheight;
ret = hi_mpi_sys_mmz_alloc((hi_phys_addr_t )&img->phys_addr[0],(hi_void **)&virt,
HI_NULL,HI_NULL,size);
if(ret != HI_SUCCESS)
{
printf(“hi_mpi_sys_mmz_alloc fail, ret = 0x%x\n”,ret);
}
img->width = width;
img->height = height;
img->stride[0] = width;
img->type = type;
img->virt_addr[0] = (hi_u64)virt;
}

resize的配置:
hi_s32 resize(hi_video_frame frame,hi_svp_img dst,hi_s32 width,hi_s32 height)
{
hi_s32 ret = HI_SUCCESS;
hi_ive_handle handle;
hi_svp_img src;
hi_ive_resize_ctrl ctrl;
hi_bool is_instant = TD_FALSE;
src.width = frame->width;
src.height = frame->height;
src.phys_addr[0] = frame->phys_addr[0];
src.virt_addr[0] = frame->virt_addr[0];
src.stride[0] = frame->stride[0];
src.type = OT_SVP_IMG_TYPE_U8C1;

dst->width = width;
dst->height = height;
dst->stride[0] = width;
dst->type = OT_SVP_IMG_TYPE_U8C1;

ctrl.mode = OT_IVE_RESIZE_MODE_LINEAR;
ctrl.num = 1;
ctrl.mem.phys_addr = dst->phys_addr[0];
ctrl.mem.virt_addr = dst->virt_addr[0];
ctrl.mem.size = (width*height);

ret = hi_mpi_ive_resize(&handle, &src, dst,&ctrl,is_instant);
if(ret == HI_FAILURE)
{
    printf("hi_mpi_ive_dma fail,ret = 0x%x\n",ret);
}

return ret;

}
sobel的配置:
hi_s32 sobel(hi_svp_src_img src,hi_svp_src_img dst_h,hi_svp_src_img *dst_v)
{
hi_s32 ret = HI_SUCCESS;
hi_ive_handle handle;
hi_bool is_instant = TD_FALSE;
hi_ive_sobel_ctrl ctrl;

hi_s8 mask[HI_IVE_MASK_NUM] =   {-1,-2 ,0, 2,1,
                                 -4,-8 ,0, 8,4,
                                 -6,-12,0,12,6,
                                 -4,-8 ,0, 8,4,
                                 -1,-2 ,0, 2,1};

memcpy(ctrl.mask,mask,HI_IVE_MASK_NUM); 
ctrl.out_ctrl = HI_IVE_SOBEL_OUT_CTRL_BOTH;

ret = hi_mpi_ive_sobel(&handle, src, dst_h,dst_v, &ctrl,is_instant);
if(ret == HI_FAILURE)
{
    printf("hi_mpi_ive_sobel fail,ret = 0x%x\n",ret);
}

return ret;

}
主程序:
width = 640;
height= 480;

y_size = width*height;
create_img(&img_resize,HI_SVP_IMG_TYPE_U8C1,width,height);
create_img(&img_sobel_h,HI_SVP_IMG_TYPE_S16C1,width,height);
create_img(&img_sobel_v,HI_SVP_IMG_TYPE_S16C1,width,height);

hi_mpi_vpss_get_chn_attr(grp,chn,&chn_attr);
//printf("depth = %d\n",chn_attr.depth);
chn_attr.depth = 1;
hi_mpi_vpss_set_chn_attr(grp,chn,&chn_attr);
//while(!exit)
//{
    ret = hi_mpi_vpss_get_chn_frame(grp, chn, &frame_info,milli_sec);
    if(ret!=HI_SUCCESS)
    {
        printf("hi_mpi_vpss_get_chn_frame fail,ret = 0x%x\n",ret);
    }

    if(catch)
    {   
        video_frame = &frame_info.video_frame;

        resize(video_frame,&img_resize,width,height);
        sobel(&img_resize,&img_sobel_h,&img_sobel_v);
        #if 0
        y_addr = img_resize.virt_addr[0];

        fp = fopen("test.yuv","w+");
        if(fp == NULL)
        {
            perror("fopen");
        }

        fwrite(y_addr,y_size,1,fp);

        if(fp)
            fclose(fp);
        #endif

    }


    hi_mpi_vpss_release_chn_frame(grp, chn, &frame_info);
//}

destroy_img(&img_resize);
destroy_img(&img_sobel_h);
destroy_img(&img_sobel_v);
我来回答
回答3个
时间排序
认可量排序

邓晓

21个粉丝

1

问答

0

专栏

19

资料

邓晓 2024-10-29 11:01:45
认可0

create_img(&img_sobel_h,HI_SVP_IMG_TYPE_S16C1,width,height);
这个S16C1格式,size是不是2widthheight

吕晶大神
吕晶大神   回复   邓晓  2024-11-15 11:53:45
0

确实是size大小的问题,改成2widthheight就对了,没有报错了

吕晶大神

1个粉丝

4

问答

0

专栏

0

资料

吕晶大神 2024-10-31 11:26:31
认可0

应该与这个无关把,报这个错
ive_check_mem [Line]:503 [Info]:phys_addr(0x471d5000) with size(307840)is not mmz address!
ive_check_image [Line]:566 [Info]:Error(0xa01d8007),image->phys_addr[0] check mem info failed!
ive_check_sobel_out_ctrl_both [Line]:407 [Info]:check image dst_h failed!
ive_check_sobel_param [Line]:492 [Info]:check image dst_h/dst_v failed!
ive_sobel [Line]:388 [Info]:Error(0xa01d8007): check sobel parameters failed!

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区