核间通讯传递264流流逻辑应该是怎么样实现?

Viewed 68

问题描述


从kd_mpi_venc_get_stream得到帧后是在k_venc_stream结构体变量,里面有物理地址。
那么核间通讯数据传递的是指针,不会拷贝数据的内容,所以我应该发送什么出去?

如果把这帧映射出来拷贝帧数据到一个malloc的 buf发出去给小核,那使用完成也需要通知大核来free还是在小核能直接free

还有就是如果我直接把k_venc_stream结构体变量传递给小核,也不知道能不能在小核映射使用,就算能映射使用,使用完成也需要通知大核进行kd_mpi_venc_release_stream

没看到有例程,大佬们指导下

1 Answers

核间通信过程中传递的是物理地址。小核接收到该物理地址后,只需调用对应系统的 mmap 函数,将其映射为小核可访问的虚拟地址,进而基于此虚拟地址开展业务操作。
关于例程,可参考编解码模块中小核 MAPI 接口的实现逻辑 —— 该接口展示了小核如何获取大核编码后的输出数据,其核心思路正是通过上述物理地址传递与虚拟地址映射的方式实现跨核数据访问。

typedef struct
{
k_u64 phys_addr;
k_u32 len;
k_u64 pts;
k_venc_pack_type type;
} k_venc_pack;
所以我只需要发送这个结构体里面的phys_addr就可以kd_mpi_venc_release_stream释放该帧了吗?

物理地址与数据长度是必须包含的核心参数,其余参数可根据具体业务场景的实际需求灵活补充。可参照k230_sdk/src/common/cdk/user/mapi/include/api/mapi_venc_api.h接口实现进一步了解。