- 項(xiàng)目介紹:
本章節(jié)講的是RV1126視頻編碼的流程筋栋,在整個(gè)項(xiàng)目之中視頻編碼功能是核心之一零远。視頻編碼流程主要分三步:VI的初始化苗分、VENC的初始化、綁定VI和VENC節(jié)點(diǎn)牵辣、開(kāi)啟VENC線程進(jìn)行視頻編碼的采集
- 項(xiàng)目框圖:
2.1. VI設(shè)備的初始化
容器的使用增加代碼的解耦性摔癣。
其中else部分的set_vi_container將*vi_container放進(jìn)all_containers.vi_containers[index]中,然后2.3中的get_vi_container將*vi_container提取出來(lái)
VI設(shè)備的初始化纬向,需要用到以下參數(shù):pcVideoNode(設(shè)備節(jié)點(diǎn))择浊、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é)點(diǎn):
2.2. VENC模塊的初始化
容器的使用增加代碼的解耦性吃警。
其中else部分的set_venc_container將*venc_container放進(jìn)all_containers.venc_containers[index]中糕篇,然后2.3中的get_venc_container將*vi_container提取出來(lái)
VENC模塊的初始化,下面有幾個(gè)重要參數(shù):enType(編碼類型)酌心、imageType(圖片格式)拌消、u32VirWidth(圖片虛寬)、u32VirHeight(圖片虛高)谒府、u32Profile(編碼等級(jí))拼坎、bByFrame(預(yù)留參數(shù)默認(rèn)0)****浮毯、u32PicWidth(圖片寬度)、u32PicHeight(圖片高度)泰鸡、enRotation(是否旋轉(zhuǎn))债蓝。設(shè)置完成之后,使用RK_MPI_VENC_CreateChn創(chuàng)建VENC編碼器盛龄。
2.3. 綁定VI和VENC節(jié)點(diǎn)
使用RK_MPI_SYS_Bind把VI節(jié)點(diǎn)和VENC進(jìn)行綁定饰迹,其中enModId是模塊ID號(hào)、s32ChnId是通道號(hào)余舶。
2.4. 開(kāi)啟VENC線程采集每一幀視頻編碼數(shù)據(jù)并存儲(chǔ)到視頻隊(duì)列
在這個(gè)video_venc_thread線程里面啊鸭,利用RK_MPI_SYS_GetMediaBuffer的API采集VENC的數(shù)據(jù),并把數(shù)據(jù)賦值到video_data_packet_t結(jié)構(gòu)體里面(這個(gè)結(jié)構(gòu)體里面主要存儲(chǔ)編碼后視頻的緩沖區(qū)數(shù)據(jù)和長(zhǎng)度)匿值。并且把這個(gè)結(jié)構(gòu)體的數(shù)據(jù)入到video_packet_queue隊(duì)列里面(具體操作:putVideoPacketQueue)