前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通俗易懂的rv1126编码实战!

通俗易懂的rv1126编码实战!

作者头像
用户6280468
发布2022-11-28 17:36:12
2.2K0
发布2022-11-28 17:36:12
举报
文章被收录于专栏:txp玩Linuxtxp玩Linux

前言:

今天我们继续说一个开源的DEMO,这次的开源DEMO是利用RV1126作为开发板,用他的API进行编码码流的采集并保存到文件里面。下面我们先来看看这个程序的总体框图:

从这个框图我们对这个项目有个大概的了解,其实这个项目还是很简洁的。就是main函数作为入口,然后进行VI设备的初始化、VENC初始化、把VI和VENC进行绑定操作、最后开启采集线程进行码流的保存。

通俗易懂的代码案例:

下面我们通过简单的案例来加深理解:

首先,我们来看看模块初始化的代码(看上图):这里的初始化包括:isp模块初始化、VI模块初始化、VENC模块初始化:

  • ISP模块用处就是进行CMOS的设置如HDR、曝光等设置。
  • VI的初始化包含以下参数:VI设备节点(pcVideoNode)、VI设备的分辨率(包括:u32Width、u32Height)、图像格式(enPixFmt)、工作模式(enWorkMode)这些参数初始化后,使用RK_MPI_VI_SetChnAttr设置VI、并使用RK_MPI_VI_EnableChn进行使能。
  • VENC初始化包括以下参数:编码格式(enType)、编码控制模式(enRcMode、stH264Cbr)、编码帧率(u32SrcFrameRateDen、u32SrcFrameRateNum、fr32DstFrameRateDen、fr32DstFrameRateNum)、编码分辨率(u32PicWidth、u32PicHeight、u32VirWidth、u32VirHeight)、编码等级(u32Profile)、编码码率(u32BitRate),把上述编码参数初始化后就利用API:RK_MPI_VENC_CreateChn进行编码器的初始化。

经过上面一系列模块的初始化操作之后,我们还需要把VI模块和VENC模块进行绑定操作,整个编码器才能够真正工作起来。绑定操作如下图:

利用RK_MPI_SYS_Bind把VI模块和VENC模块进行绑定:

这个代码就是在h264_venc_thread线程里面,创建一个死循环。并利用RK_MPI_SYS_GetMediaBuffer的API进行每一帧H264码流的采集、并利用fwrtite保存到H264文件里面。

下面是运行的效果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 通俗易懂的代码案例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档