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

get_rga_thread线程和low_camera_venc_thread线程获取低分辨率VENC码流数据

一.本章节介绍

本章节主要介绍如何通过get_rga_thread线程和low_camera_venc_thread共同获取低分辨率(1280 * 720)的编码码流并且入队列。从上图我们可以看出。我们经过几个步骤首先要调用get_vi_container获取VI节点,然后把VI节点和RGA节点绑定起来,通过get_rga_thread线程获取1280 * 720的原始数据并把1280 * 720的原始数据发送到1280 * 720的VENC低分辨率编码器。
 

二.低分辨率码流获取的思维导图

上图是获取低分辨率1280 * 720编码码流的思维导图,从上面的思维导图可以看出来,整个流程最关键是get_vi_container获取VI节点,然后调用RK_SYS_MPI_Bind绑定VI和RGA节点。然后创建get_rga_thread线程获取每一帧rga的1280 * 720的视频原始数据,调用的API是RK_MPI_SYS_GetMediaBuffer,获取每一帧1280 * 720原始数据后再调用RK_MPI_SYS_SendMediaBuffer发送每一帧原始数据到1280 * 720的VENC编码器。

 

创建low_camera_venc_thread线程获取每一帧1280 * 720的编码码流数据,调用的API是RK_MPI_SYS_GetMediaBuffer获取完每一帧1280 * 720编码视频数据后存放到low_video_queue里面,调用的函数是putVideoPacketQueue。

 

三.代码架构截图并讲解

 

 

 

 

上面的截图就是如何通过get_rga_thread和low_camera_thread线程的结合获取低分辨率(1280 * 720)的编码码流。首先要通过RGA的节点和VENC的节点进行RK_SYS_MPI_Bind绑定,然后开启get_rga_thread获取每一帧的RGA处理过后的1280 * 720原始数据,并且调用RK_MPI_SYS_SendMediaBuffer这个API把每一帧1280 * 720的原始数据发送到低分辨率的编码器里面,核心代码,如下:。

 

while (1)

    {

        mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_RGA, 0 , -1); //获取每一帧RGA处理过后的数据

        if(!mb)

        {

            break;

        }

 

        RK_MPI_SYS_SendMediaBuffer(RK_ID_VENC, 1, mb); //把每一帧RGA数据传输到低分辨率VENC里面

        RK_MPI_MB_ReleaseBuffer(mb); //释放资源

    }

 

然后再创建low_camera_thread现成获取每一帧1280 * 720的编码视频数据,然后把每一帧低分辨率的编码数据赋值到video_data_packet_t结构体,包括每一帧的视频流数据RK_MPI_GetPtr(mb),还有每一帧的视频长度RK_MPI_GetSize(mb)。然后把整个video_data_packet包入队,low_video_queue->putVideoPacketQueue里面。video_data_packet_t结构体里面有两个成员变量,一个是buffer(视频缓冲区)、video_frame_size是每一帧视频的长度,frame_flag关键帧标识符。下面是RKMEDIABUFFER赋值到VIDEO_DATA_PACKET_T的核心代码:

 

memcpy(video_data_packet->buffer, RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb));

video_data_packet->video_frame_size = RK_MPI_MB_GetSize(mb);

 

相关文章:

  • WES(二)——数据预处理
  • 美颜SDK功能模块化设计实战:滤镜、贴纸与人脸识别的协同实现
  • YOLOv8 区域计数系统:基于计算机视觉的智能物体计数方案
  • 各类效果名称收集
  • Nacos 服务注册发现案例:nacos-spring-cloud-example 详解
  • Django实现文件上传
  • 数据结构 -- 树相关面试题
  • 网络出版服务许可证年检
  • go实例化结构体的方式
  • 无法发布到PowerBI?试试拆分它
  • 天数计算卡 报错和解决记录
  • 玻纤效应的时序偏差
  • 有无D6完全是两个强度的主角——以撒(Isaac)
  • 基于Springboot + vue3实现的图书管理系统
  • 时间序列预测算法中的预测概率化笔记
  • Tesseract 字库介绍与训练指南
  • 【案例95】“小”问题引发的“大”发现---记一次环境修复
  • RTOS 完整概述与实战应用:从基础原理到产业实情
  • 从技术到实践:ArcGIS 与 HEC-RAS 解析洪水危险性及风险评估
  • 帕累托前沿(Pareto Frontier)
  • wordpress付费才能看/seo分析
  • 江门微信网站建设/抖音怎么运营和引流
  • 做电影网站解决版权问题/正规专业短期培训学校
  • 龙岩网站制作/网站制作培训
  • 泰州市网站制作公司/武汉seo优化代理
  • 办公空间设计要素/武汉seo优化顾问