当前位置: 首页 > news >正文

通过多线程获取VENC的H264码流数据

我们这次要对RV1126进行CMOS摄像头采集,并进行VENC的视频编码处理,最终获取到H264码流。

一.RV1126 VI模块采集并进行VENC编码的流程

V1126多线程采集VI模块编码VENC并保存到文件,一般分为四个步骤:分别是初始化VI模块、初始化VENC模块、绑定VI和VENC模块、多线程获取每一帧H264码流数据

初始化VI模块:

VI模块的初始化实际上就是对VI_CHN_ATTR_S的参数进行设置、然后调用RK_MPI_VI_SetChnAttr设置VI模块并使能RK_MPI_VI_EnableChn伪代码如下:

VI_CHN_ATTR_S  vi_chn_attr;

。。。。。。。。。。。。。。。(这里是设置VI的属性)

ret = RK_MPI_VI_SetChnAttr(CAMERA_ID, 0, &vi_chn_attr);

ret |= RK_MPI_VI_EnableChn(CAMERA_ID, 0);

​​​​​​​初始化VENC模块:

VENC模块的初始化实际上就是对VENC_CHN_ATTR_S的参数进行设置、然后调用RK_MPI_VENC_CreateChn创建编码器伪代码如下:

VENC_CHN_ATTR_S venc_chn_attr;

venc_chn_attr.stVencAttr.enType = RK_CODEC_TYPE_H264;

。。。。。。。。。。。。。。。。(这里是设置VENC的属性)

ret = RK_MPI_VENC_CreateChn(0, &venc_chn_attr);

​​​​​​​绑定VI节点和VENC节点:

绑定VI节点和VENC节点,使其两个模块能够关联起来,使用的API是RK_MPI_SYS_Bind关于这个API的定义,之前说过了,这里不在阐述。伪代码如下:

MPP_CHN_S vi_chn_s;

vi_chn_s.enModId = RK_ID_VI;

vi_chn_s.s32ChnId = 0;

MPP_CHN_S venc_chn_s;

venc_chn_s.enModId = RK_ID_VENC;

venc_chn_s.s32ChnId = 0;

ret = RK_MPI_SYS_Bind(&vi_chn_s, &venc_chn_s);

​​​​​​​开启多线程采集VENC的数据

开启一个线程去采集每一帧VENC模块的数据,使用的API是RK_MPI_SYS_GetMediaBuffer 模块ID是RK_ID_VENC,通道号ID是VENC创建的ID号这个API的具体作用已经在之前的获取VI数据的课程里面已经讲解过,我们直接上伪代码

while(1)

{

  .........................

  mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, s32_chn_id, -1);

  fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, h264_file);

.......................

}

二.代码编写

1.VI模块初始化

1.1参数填充

1.2设置,判断是否成功

1.3使能,判断

2.VENC模块初始化

2.1参数填充

VENC有三个结构体, 需要分别设置其中两个的其参数

第一个结构体

第二个结构体

1M = 1024KB

1KB=1024Byte(字节)

1Byte=8bit(比特),所以1M=1024*1024*8=8388608bit

2.2创建

3.节点绑定

在绑定之前,我们要给绑定的VI与VENC创建ID

3.1创建ID

3.2绑定

4.创建线程

4.1创建线程

4.2写子线程回调函数

5.释放资源

在退出线程之后要释放资源

到此代码就写完了,去编译一下看有没有什么错误

相关文章:

  • 刷leetcodehot100返航版--二叉树
  • 计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM时间序列预测(完整源码和数据)
  • Day12-苍穹外卖(完结篇)
  • ctfshow——web入门254~258
  • 98. 验证二叉搜索树
  • 如何优化关键词长度:2025年SEO实用指南
  • 软件设计师考试《综合知识》创建型设计模式考点分析
  • SAP HCM 0008数据存储逻辑
  • 电池的充放电电流中C的含义
  • 【SpringBoot】关于MP使用中配置了数据库表前缀的问题
  • 在宝塔中使用.NET环境管理部署 .NET Core项目
  • 生产级编排AI工作流套件:Flyte全面使用指南 — Development cycle
  • mysql中limit深度分页详细剖析【爽文】
  • 架构师论文《论模型驱动架构软件开发方法及其应用》
  • 【软件测试】性能测试 —— 工具篇 LoadRunner 介绍与使用
  • Ansible模块——服务管理和设置定时任务
  • 一字典两世界:优雅移除 `NSDictionary` 指定键的最佳实践
  • 腾讯 CodeBuddy 杀入 AI 编程赛道,能否撼动海外工具霸主地位?
  • C++类与对象--2 对象的初始化和清理
  • tp5 关键词搜索商品时进行关键词拆分
  • 男子聚餐饮酒后身亡,同桌3人被判赔偿近20万元
  • 世界高血压日|专家:高血压患者控制血压同时应注重心率管理
  • 广西北流出现强降雨,1人被洪水冲走已无生命体征
  • 竞彩湃|足总杯决赛或有冷门,德甲欧冠资格之争谁笑到最后
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 贵州省委军民融合发展委员会办公室副主任李刚接受审查调查