- 項目介紹:
本章節(jié)講的是RV1126視頻編碼的流程,在整個項目之中視頻編碼功能是核心之一。視頻編碼流程主要分三步:VI的初始化、VENC的初始化、綁定VI和VENC節(jié)點、開啟VENC線程進行視頻編碼的采集
- 項目框圖:

2.1. VI設(shè)備的初始化

容器的使用增加代碼的解耦性。
其中else部分的set_vi_container將*vi_container放進all_containers.vi_containers[index]中,然后2.3中的get_vi_container將*vi_container提取出來

VI設(shè)備的初始化,需要用到以下參數(shù):pcVideoNode(設(shè)備節(jié)點)、u32Width(寬度)、u32Height(高度)、enPixFmt(圖片格式)、u32BufCnt(buf的數(shù)量)、enWorkMode(工作模式)。設(shè)置完成之后,則調(diào)用RK_MPI_VI_SetChnAttr設(shè)置VI的屬性,并使能VI設(shè)備(RK_MPI_VI_EnableChn)
RV1126視頻設(shè)備節(jié)點:

2.2. VENC模塊的初始化

容器的使用增加代碼的解耦性。
其中else部分的set_venc_container將*venc_container放進all_containers.venc_containers[index]中,然后2.3中的get_venc_container將*vi_container提取出來

VENC模塊的初始化,下面有幾個重要參數(shù):enType(編碼類型)、imageType(圖片格式)、u32VirWidth(圖片虛寬)、u32VirHeight(圖片虛高)、u32Profile(編碼等級)、bByFrame(預(yù)留參數(shù)默認(rèn)0)****、u32PicWidth(圖片寬度)、u32PicHeight(圖片高度)、enRotation(是否旋轉(zhuǎn))。設(shè)置完成之后,使用RK_MPI_VENC_CreateChn創(chuàng)建VENC編碼器。
2.3. 綁定VI和VENC節(jié)點

使用RK_MPI_SYS_Bind把VI節(jié)點和VENC進行綁定,其中enModId是模塊ID號、s32ChnId是通道號。
2.4. 開啟VENC線程采集每一幀視頻編碼數(shù)據(jù)并存儲到視頻隊列

在這個video_venc_thread線程里面,利用RK_MPI_SYS_GetMediaBuffer的API采集VENC的數(shù)據(jù),并把數(shù)據(jù)賦值到video_data_packet_t結(jié)構(gòu)體里面(這個結(jié)構(gòu)體里面主要存儲編碼后視頻的緩沖區(qū)數(shù)據(jù)和長度)。并且把這個結(jié)構(gòu)體的數(shù)據(jù)入到video_packet_queue隊列里面(具體操作:putVideoPacketQueue)