aaa

aaa

5个粉丝

14

问答

0

专栏

0

资料

aaa  发布于  2023-10-26 21:06:31
采纳率 0%
14个问答
307

VIDEO_FRAME_INFO_S

 

读取rgb信息利用csc转换成功为ot_svp_img,格式为OT_SVP_IMG_TYPE_YUV420SP的数据。然后我用下面的代码创建的空白帧,然后利用memcpy把ot_svp_img的虚拟内存数据复制到video空白帧,报内存泄露错误,请问有大佬搞过这种么
void frame()
{

    int width,height;
    width=640;
    height=640;
    hi_u32 ret;
    hi_u32 stride,size;
    hi_u32 phyaddr;
    hi_vb_pool pool_id1;
    ot_vb_blk vb_blk;
    hi_void *virt_addr = HI_NULL;
    stride=640;
    size=stride*height+stride*height/2;
    printf("新建ceate**************************2\n");
    ot_video_frame_info  frm;

    vb_blk=ss_mpi_vb_get_blk(OT_VB_INVALID_POOL_ID,size,NULL);
    if(vb_blk==OT_VB_INVALID_HANDLE)
    {
            printf("ss_mpi_vb_get_blk fail\n");
    }
    printf("新建ceate**************************3\n");

    phyaddr=ss_mpi_vb_handle_to_phys_addr(vb_blk);
    if(phyaddr==0)
    {
            printf("ss_mpi_vb_handle_to_phys_addr fail\n");
    }
    printf("新建ceate**************************4\n");

    pool_id1=ss_mpi_vb_handle_to_pool_id(vb_blk);
    if(pool_id1<0)
    {
            sample_print("pool id 0x%x failure\n", ret);
            printf("ss_mpi_vb_handle_to_pool_id fail\n");
    }
     printf("新建ceate**************************5\n");

    virt_addr=(hi_u8 *)ss_mpi_sys_mmap( phyaddr,  size);
    if(virt_addr==0)
    {
            printf("ss_mpi_sys_mmap fail\n");
    }
     printf("新建ceate**************************6\n");


    frm.mod_id=OT_ID_IVE;
    printf("新建ceate**************************7\n");

    frm.pool_id=pool_id1;
    frm.video_frame.phys_addr[0]=phyaddr;
    frm.video_frame.phys_addr[1]=phyaddr+stride*height;
    frm.video_frame.phys_addr[2]=frm.video_frame.phys_addr[1];
    frm.video_frame.virt_addr[0]=virt_addr;
    frm.video_frame.virt_addr[1]=virt_addr+stride*height;
    frm.video_frame.virt_addr[2]=frm.video_frame.virt_addr[1];
    printf("新建ceate**************************8\n");

    frm.video_frame.width=width;
    frm.video_frame.height=height;
    frm.video_frame.stride[0]=stride;
    frm.video_frame.stride[1]=stride;
    frm.video_frame.stride[2]=stride;
    frm.video_frame.pixel_format=HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420;
    frm.video_frame.field=OT_VIDEO_FIELD_FRAME;
    frm.video_frame.video_format=OT_VIDEO_FORMAT_LINEAR;
    frm.video_frame.compress_mode=OT_COMPRESS_MODE_NONE;
    frm.video_frame.dynamic_range=HI_DYNAMIC_RANGE_SDR8;
    frm.video_frame.color_gamut=HI_COLOR_GAMUT_BT601;

    ret = hi_mpi_sys_munmap((void *)frm.video_frame.virt_addr[0], size);
    if (ret != 0) {
            sample_print("hi_mpi_sys_munmap failure  0x%x \n",ret);
    }
    else
    {
            printf("munmap success\n");

    }

     ret = hi_mpi_vb_release_blk(vb_blk);
    if (ret != HI_SUCCESS) {
            sample_print("hi_mpi_vb_release_blk block 0x%x failure\n", vb_blk);
    }
    printf("virtaddr%x %x %x\n",frm.video_frame.virt_addr[0],frm.video_frame.virt_addr[1],frm.video_frame.virt_addr[2]);
//memset_s(frm, sizeof(*frm), 0, sizeof(*frm));

}

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

毛巾卷

38个粉丝

15

问答

16

专栏

68

资料

毛巾卷 2023-10-27 08:49:59
认可0

大佬的也是3516DV500的SDK吗,小弟有个疑问问一下 “ss_mpi_vb_get_blk” 这个函数我看新的sdk文档里面也是这样定义的,但是我实际打开的sdk里面没有这个接口,还是hi_mpi开头的,这是什么情况

易百纳用户53690
易百纳用户53690   回复   毛巾卷  2023-10-27 09:01:10
0

您好,您可以重新在网盘链接中下载mpp媒体软件开发参考,网盘有更新

毛巾卷
毛巾卷   回复   该用户已注销  2023-10-27 10:42:55
0

好的

邓晓

20个粉丝

1

问答

0

专栏

19

资料

邓晓 2023-10-27 09:49:58
认可0

为啥要memcpy呢,这不是浪费性能

aaa
aaa   回复   邓晓  2023-10-27 10:15:09
0

我试过直接把物理虚拟地址复制过去,发送vo时显示参数超过合法范围

邓晓
邓晓   回复   aaa  2023-10-27 16:37:53
0

cat /dev/logmpp 报什么错误

aaa
aaa   回复   邓晓  2023-10-27 20:27:27
0

邓晓
邓晓   回复   aaa  2023-10-30 18:01:29
0

你这phys_addr地址不对,不像是物理地址。

aaa

5个粉丝

14

问答

0

专栏

0

资料

aaa 2023-10-27 11:28:32
认可0

这么申请内存后,用fread可以向空白帧里写数据,memcpy就不行

UncleRoderick

28个粉丝

14

问答

1

专栏

14

资料

UncleRoderick 2023-10-27 13:45:33
认可0


可以啊,有试过填充数据

aaa
aaa   回复   UncleRoderick  2023-10-27 14:06:43
0

你看我这个创建空白帧有问题么。我用memcpy_s就报内存泄漏

aaa
aaa   回复   UncleRoderick  2023-10-27 14:10:22
0

你这个是用在ive的视频格式吧,我给ive下的ot_svp_img申请空白帧是可以用的memcpy的,但是用的 ss_mpi_sys_mmz_alloc_cached这个函数,给video_frame申请虚拟地址用的ss_mpi_sys_mmap

UncleRoderick
UncleRoderick   回复   aaa  2023-10-27 14:17:36
0

我用的是HI_MPI_SYS_MmzAlloc申请的哦

醉藻

33个粉丝

0

问答

2

专栏

128

资料

醉藻 2023-10-28 14:57:09 已获得 0.10 余额
认可0

在映射虚拟内存时,确保使用正确的地址和长度。

24

2个粉丝

1

问答

0

专栏

0

资料

24 2023-10-28 20:46:42 已获得 1.00 E币
认可0

每周任务

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

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区