本文來源電子發(fā)燒友社區(qū),作者:羈傲不馴, 帖子地址:https://bbs.elecfans.com/jishu_2306118_1_1.html
兩個輸出節(jié)點規(guī)格分別如下上節(jié)介紹了RK平臺下的rockit視頻處理接口的簡單介紹,本期就針對rockit的一些簡單介紹和理念作以具體的介紹。
需要明確一點的是在ARM中的視頻處理鏈路?什么是鏈路?ARM中視頻是怎么樣的?
這些基礎(chǔ)我們以后再談,相信做過驅(qū)動適配的朋友都知道,各個廠家都有各個廠家的玩法,接口也不盡相同,還需要不斷兼容向上提供接口。
rockit充分分離了這一點,他將我們所有的設(shè)備全部抽離出來,將每一個單獨的功能都能使用一個類來進行使用。
本章節(jié)就介紹下rockit的 vi 與 venc模塊,視頻輸入 與編碼
本節(jié)程序如下:
本節(jié)代碼基本上參考了官方的程序。
rockit使用的第一步首先是:RK_MPI_SYS_Init 初始化RK MPI系統(tǒng)。
之后進入vi系統(tǒng),RK平臺下vi系統(tǒng)如下:
兩個輸出節(jié)點規(guī)格分別如下:
代碼大概流程如下:
TEST_VI_CTX_S *ctx;
ctx = reinterpret_cast(malloc(sizeof(TEST_VI_CTX_S)));
memset(ctx, 0, sizeof(TEST_VI_CTX_S));
ctx->width = 1920;
ctx->height = 1080;
ctx->devId = 0;
ctx->pipeId = ctx->devId;
ctx->channelId = 1;
ctx->loopCountSet = 100;
//0. get dev config status
s32Ret = RK_MPI_VI_GetDevAttr(ctx->devId, &ctx->stDevAttr);
if (s32Ret == RK_ERR_VI_NOT_CONFIG) {
//0-1.config dev
s32Ret = RK_MPI_VI_SetDevAttr(ctx->devId, &ctx->stDevAttr);
if (s32Ret != RK_SUCCESS) {
ctx->stChnAttr.stSize.u32Height = ctx->height;
s32Ret = RK_MPI_VI_SetChnAttr(ctx->pipeId, ctx->channelId, &ctx->stChnAttr);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("RK_MPI_VI_SetChnAttr %x", s32Ret);
goto __FAILED2;
} /
/3.enable channel
s32Ret = RK_MPI_VI_EnableChn(ctx->pipeId, ctx->channelId);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("RK_MPI_VI_EnableChn %x", s32Ret);
goto __FAILED2;
} /
/4.save debug file
if (ctx->stDebugFile.bCfg) {
s32Ret = RK_MPI_VI_ChnSaveFile(ctx->pipeId, ctx->channelId, &ctx->stDebugFile);
RK_LOGE("RK_MPI_VI_ChnSaveFile %x", s32Ret);
}
while (loopCount < ctx->loopCountSet) {
//5.get the frame
s32Ret = RK_MPI_VI_GetChnFrame(ctx->pipeId, ctx->channelId, &ctx->stViFrame,waitTime);
if (s32Ret == RK_SUCCESS) {
void *data = RK_MPI_MB_Handle2VirAddr(ctx->stViFrame.pMbBlk);
//6.get the channel status
s32Ret = RK_MPI_VI_QueryChnStatus(ctx->pipeId, ctx->channelId, &ctx->stChnStatus);
//7.release the frame
s32Ret = RK_MPI_VI_ReleaseChnFrame(ctx->pipeId, ctx->channelId, &ctx-
>stViFrame);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("RK_MPI_VI_ReleaseChnFrame fail %x", s32Ret);
} l
oopCount ++;
} else {
RK_LOGE("RK_MPI_VI_GetChnFrame timeout %x", s32Ret);
} u
sleep(10*1000);
} /
/8. disable one chn
s32Ret = RK_MPI_VI_DisableChn(ctx->pipeId, ctx->channelId);
RK_LOGE("RK_MPI_VI_DisableChn %x", s32Ret);
//9.disable dev(will diabled all chn)
__FAILED2:
s32Ret = RK_MPI_VI_DisableDev(ctx->devId);
RK_LOGE("RK_MPI_VI_DisableDev %x", s32Ret);
除了單獨使用VI設(shè)備之外,VI設(shè)備還可以與其流程中關(guān)聯(lián)的設(shè)備進行綁定,如VO、VENC,這樣就不用在代碼的流程中進行圖像采集到內(nèi)存,從內(nèi)存在拷貝到其他設(shè)備中。關(guān)聯(lián)的方式如下:
- RK_MPI_SYS_Bind
我的test程序就將這個接口關(guān)聯(lián)到了VENC模塊中,可以直接進行視頻的編碼。實現(xiàn)如下:
// bind vi to venc
stSrcChn.enModId = RK_ID_VI;
stSrcChn.s32DevId = ctx->devId;
stSrcChn.s32ChnId = ctx->channelId;
stDestChn[i].enModId = RK_ID_VENC;
stDestChn[i].s32DevId = i;
stDestChn[i].s32ChnId = ctx->stVencCfg[i].s32ChnId;
s32Ret = RK_MPI_SYS_Bind(&stSrcChn, &stDestChn[i]);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("create %d ch venc failed", ctx->stVencCfg[i].s32ChnId);
goto __FAILED2;
}
最終實現(xiàn)了可以將攝像頭直接采集編碼到H264文件中,可以使用播放器來打開啦。
-
RK3568
+關(guān)注
關(guān)注
4文章
526瀏覽量
5238 -
開發(fā)板試用
+關(guān)注
關(guān)注
3文章
301瀏覽量
2152
發(fā)布評論請先 登錄
相關(guān)推薦
[迅為RK3568開發(fā)板]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗QT跨平臺能力
![[迅為<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗QT跨平臺能力](https://file1.elecfans.com/web3/M00/02/F1/wKgZO2diirGAPoENAACpt0CV3xc346.png)
RK3568內(nèi)置MCU開發(fā)介紹之一
![<b class='flag-5'>RK3568</b>內(nèi)置MCU<b class='flag-5'>開發(fā)</b>介紹之一](https://file1.elecfans.com/web3/M00/00/A2/wKgZPGdLMg-AFkS0AAA5BGKqG3E264.png)
基于迅為RK3568開發(fā)板全國產(chǎn)平臺,快速實現(xiàn)APP開機自啟動技術(shù)分享
![基于迅為<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>全國產(chǎn)平臺,快速實現(xiàn)APP開機自啟動技術(shù)分享](https://file1.elecfans.com/web2/M00/0C/FB/wKgaomc-y_CAM0OEAACic4bprx8519.png)
能力再次提升! 迅為RK3588/RK3568開發(fā)板&amp;核心板新增定制分區(qū)鏡像
![能力再次提升! 迅為<b class='flag-5'>RK</b>3588/<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>&amp;核心<b class='flag-5'>板</b>新增定制分區(qū)鏡像](https://file1.elecfans.com/web2/M00/0B/E0/wKgaomcrFqCAPVkfAAC-6O-KM4Q713.png)
瑞芯微RK3568開發(fā)板Linux編譯報錯404怎么辦?觸覺智能教你輕松解決
![瑞芯微<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>Linux編譯報錯404怎么辦?觸覺智能教你輕松解決](https://file1.elecfans.com/web2/M00/0A/D9/wKgZomcpisuAZYJiAAB5u-RqpRA452.png)
北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動全新更新-CAN+
![北京迅為<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>嵌入式學(xué)習(xí)之Linux驅(qū)動全新更新-CAN+](https://file1.elecfans.com/web2/M00/06/25/wKgaombYDFKAD0JxAADlDQo6OXo738.png)
國產(chǎn)核心板全面進攻-RK3568開發(fā)板評測
![國產(chǎn)核心<b class='flag-5'>板</b>全面進攻-<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>評測](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
鴻蒙OpenHarmony南向:【RK3568開發(fā)板介紹】
![鴻蒙OpenHarmony南向:【<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>介紹】](https://file1.elecfans.com/web2/M00/D8/1F/wKgZomYpEAGALxyGABBtbKfhj8Q460.jpg)
鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng)編譯】 (基于RK3568開發(fā)板)
![鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng)編譯】 (基于<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>)](https://file1.elecfans.com/web2/M00/C5/D1/wKgZomYChGOAUaiiAADe1d8SeRY102.jpg)
評論