0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RK3588-MPP解碼詳解

ARMSOM ? 2023-11-21 11:04 ? 次閱讀

一. 簡(jiǎn)介

[RK3588從入門到精通] 專欄總目錄

本篇文章進(jìn)行RK3588-MPP解碼的詳細(xì)解析

二. 環(huán)境介紹

硬件環(huán)境: ArmSoM-W3 RK3588開發(fā)板

軟件版本: OS:ArmSoM-W3 Debian11

三. 解碼器數(shù)據(jù)流接口

3.1 decode_put_packet

wKgaomVcHbiAD337AADexm3LGiU067.png

輸入碼流的形式:分幀與不分幀 MPP 的輸入都是沒有封裝信息的裸碼流,裸碼流輸入有兩種形式:

不分幀 這種方式是已經(jīng)按幀分段的數(shù)據(jù),即每一包輸入給 decode_put_packet 函數(shù)的 MppPacket 數(shù)據(jù)都已經(jīng)包含完整的一幀,不多也不少。在這種情況下,MPP 可以直接按包處理碼流,是 MPP 的默認(rèn)運(yùn)行情況。

分幀 按長(zhǎng)度讀取的數(shù)據(jù),這樣的數(shù)據(jù)無(wú)法判斷一包 MppPacket 數(shù)據(jù)是否是完整的一幀,需要 MPP 內(nèi)部進(jìn)行分幀處理。MPP 也可以支持這種形式的輸入,但需要在 mpp_init 之前,通過 control 接口的 MPP_DEC_SET_PARSER_SPLIT_MODE 命令,MPP 內(nèi)的 need_split 標(biāo)志打開。

// NOTE: decoder split mode need to be set before init // 按幀輸入碼流 RK_U32 need_split = 1; mpi_cmd = MPP_DEC_SET_PARSER_SPLIT_MODE; param = &need_split; ret = mpi->control(ctx, mpi_cmd, param); if (MPP_OK != ret) { mpp_err("mpi->control failed\n"); deInit(&packet, &frame, ctx, buf, data); }

這樣,調(diào)用 decode_put_packet 輸入的 MppPacket 就會(huì)被 MPP 重新分幀,進(jìn)入到情況一的處理。

如果這兩種情況出現(xiàn)了混用,會(huì)出現(xiàn)碼流解碼出錯(cuò)的問題。

分幀方式處理效率高,但需要輸入碼流之前先進(jìn)行解析與分幀;

不分幀方式使用簡(jiǎn)單,但效率會(huì)受影響。

在 mpi_dec_test 的測(cè)試用例中,使用的是方式不分幀的方式。在瑞芯微Android SDK 中,使用的是分幀的方式。用戶可以根據(jù)自己的應(yīng)用場(chǎng)景和平臺(tái)條件進(jìn)行選擇

3.2 decode_get_frame

wKgaomVcHcGAIbvsAADtW8WXlpc304.png

3.3 給解碼器提供足夠大小的保存像素?cái)?shù)據(jù)的內(nèi)存空間

解碼器在解碼時(shí),需要為輸出圖像獲取保存像素?cái)?shù)據(jù)的內(nèi)存空間,用戶需要給解碼器提供足夠大小,這個(gè)空間大小的需求,會(huì)在 MPP 解碼器內(nèi)部根據(jù)不同的芯片平臺(tái)以及不同的視頻格式需求進(jìn)行計(jì)算,計(jì)算后的內(nèi)存空間需求會(huì)通過MppFrame 的成員變量 buf_size 提供給用戶。用戶需要按 buf_size的大小進(jìn)行內(nèi)存分配,即可滿足解碼器的要求。

RK_U32 buf_size = mpp_frame_get_buf_size(frame); ret = mpp_buffer_group_limit_config(data->frm_grp, buf_size, 24); if (ret) { mpp_err("%p limit buffer group failed ret %d\n", ctx, ret); break; }

3.4 輸出圖像的變寬高信息(Info change)

當(dāng)碼流的寬高,格式,像素位深等信息發(fā)生變化時(shí),需要反饋給用戶,用戶需要更新解碼器使用的 內(nèi)存池,把新的內(nèi)存更新給解碼器。這里涉及到解碼內(nèi)存分配與使用模式。 圖像內(nèi)存分配以及交互模式:

模式一:純內(nèi)部分配模式 模式二:半內(nèi)部分配模式 模式三:純外部分配模式: 直接使用外部顯示用的內(nèi)存,容易實(shí)現(xiàn)零拷貝。

模式一:純內(nèi)部分配模式

圖像內(nèi)存直接從 MPP 解碼器內(nèi)部分配,內(nèi)存由解碼器直接分配,用戶得到解碼器輸出圖像,在使用 完成之后直接釋放。 在這種方式下,用戶不需要調(diào)用解碼器 control 接口的 MPP_DEC_SET_EXT_BUF_GROUP 命令,只 需要在解碼器上報(bào) info change 時(shí)直接調(diào)用 control 接口的 MPP_DEC_SET_INFO_CHANGE_READY 命令即可。解碼器會(huì)自動(dòng)在內(nèi)部進(jìn)行內(nèi)存分配,用戶需要把獲取到的每幀數(shù)據(jù)直接釋放。

模式二:半內(nèi)部分配模式

用戶需要根據(jù)get_frame返回的MppFrame的buf_size 來(lái)創(chuàng)建 MppBufferGroup,并通過 control 接口的 MPP_DEC_SET_EXT_BUF_GROUP 配置給解碼器。用戶可以通過 mpp_buffer_group_limit_config 接口來(lái)限制解碼器的內(nèi)存使用量。

模式三:純外部分配模式

這種模式通過創(chuàng)建空的 external 模式的 MppBufferGroup,從用戶那里導(dǎo)入外部分配器分析的內(nèi)存塊 文件句柄(一般是 dmabuf/ion/drm)。在 Android 平臺(tái)上,Mediaserver 通過 gralloc 從 SurfaceFlinger 獲取顯示用內(nèi)存,把 gralloc 得到的文件句柄提交(commit)到 MppBufferGroup 里,再把 MppBufferGroup 通過 control 接口 MPP_DEC_SET_EXT_BUF_GROUP 命令配置給解碼器,然后 MPP 解碼器將循環(huán)使用 gralloc 得到的內(nèi)存空間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 解碼
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    27407
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5093

    瀏覽量

    97800
  • MPP
    MPP
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    10608
  • RK3588
    +關(guān)注

    關(guān)注

    7

    文章

    338

    瀏覽量

    4428
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PET_RK3588_CORE核心板

    一、PET_RK3588_CORE 核心板圖片 二、PET_RK3588_CORE 核心板詳細(xì)參數(shù) 注意:RK3588 引腳大部分是功能復(fù)用的,以上列表內(nèi)的資源存在不能同時(shí)使用的情況,引腳功能復(fù)用情況 可以查詢下表或查看我司核心
    的頭像 發(fā)表于 01-15 14:12 ?78次閱讀
    PET_<b class='flag-5'>RK3588</b>_CORE核心板

    米爾RK3576和RK3588怎么選?-看這篇就夠了

    32bit),數(shù)據(jù)傳輸上RK3588更有優(yōu)勢(shì)。 超強(qiáng)的視頻編解碼能力 編碼能力RK3588最高支持8K@30fps H.264/H.265,RK3576最高支持4K@60fps H
    發(fā)表于 12-27 11:44

    RK3588RK3576區(qū)別解析

    ,145G FLOPS;RK3588為Mali-G610 MP4,圖形性能更強(qiáng)。 視頻編解碼RK3576支持 8K@30fps 解碼等;RK358
    的頭像 發(fā)表于 12-17 14:03 ?528次閱讀
    <b class='flag-5'>RK3588</b>與<b class='flag-5'>RK</b>3576區(qū)別解析

    RK3588核心板多媒體功能一覽

    前言:RK3588支持8K視頻編碼和解碼,以及多路視頻源同時(shí)解碼,為視頻處理和多媒體應(yīng)用提供了強(qiáng)大的支持,本文則從音視頻兩個(gè)功能測(cè)試上來(lái)認(rèn)識(shí)一下這款高性能核心板。圖1-EVM-RK3588
    的頭像 發(fā)表于 12-12 08:31 ?563次閱讀
    <b class='flag-5'>RK3588</b>核心板多媒體功能一覽

    RK3588 SDK入門之編譯使用篇

    前言:在上一篇文章中,我們已經(jīng)配置好了Ubuntu虛擬機(jī)。本期將重點(diǎn)介紹如何Ubuntu虛擬機(jī)中使用RK3588的SDK。具體內(nèi)容包括SDK的下載與安裝、環(huán)境變量的配置、以及編譯調(diào)試的步驟和注意事項(xiàng)
    的頭像 發(fā)表于 11-22 01:07 ?1128次閱讀
    <b class='flag-5'>RK3588</b> SDK入門之編譯使用篇

    開發(fā)更便利!迅為RK3568/RK3588 定制分區(qū)鏡像發(fā)布

    開發(fā)更便利!迅為RK3568/RK3588 定制分區(qū)鏡像發(fā)布
    的頭像 發(fā)表于 11-11 14:00 ?539次閱讀
    開發(fā)更便利!迅為<b class='flag-5'>RK</b>3568/<b class='flag-5'>RK3588</b> 定制分區(qū)鏡像發(fā)布

    國(guó)產(chǎn)最強(qiáng)SOC—RK3588之虛擬機(jī)搭建篇

    步驟詳解,為開發(fā)者提供全面的指導(dǎo),助您快速上手,為后續(xù)RK3588開發(fā)工作做好充分的準(zhǔn)備。圖1EVM-RK3588評(píng)估板外觀(正面)一、安裝虛擬機(jī)軟件VMware在
    的頭像 發(fā)表于 11-07 09:04 ?1609次閱讀
    國(guó)產(chǎn)最強(qiáng)SOC—<b class='flag-5'>RK3588</b>之虛擬機(jī)搭建篇

    迅為瑞芯微RK35883588S如何選型硬件區(qū)別

    RK3588S和RK3588處理器在接口上可是有著不小的區(qū)別哦!這兩款處理器,都是市場(chǎng)上的熱門選擇,但它們的接口設(shè)計(jì)卻各有千秋。 首先,我們來(lái)看看iTOP-3588開發(fā)板采用瑞芯微RK3588
    發(fā)表于 09-11 11:31

    RK3588!黑神話悟空,啟動(dòng)?-迅為電子RK3588開發(fā)板

    RK3588!黑神話悟空,啟動(dòng)?-迅為電子RK3588開發(fā)板
    的頭像 發(fā)表于 08-30 14:13 ?695次閱讀
    <b class='flag-5'>RK3588</b>!黑神話悟空,啟動(dòng)?-迅為電子<b class='flag-5'>RK3588</b>開發(fā)板

    迅為RK3588開發(fā)板運(yùn)行openkylin麒麟系統(tǒng)

    迅為在RK3588開發(fā)板移植了銀河麒麟和開放麒麟系統(tǒng) 迅為優(yōu)先RK3588開發(fā)板上支持Android13系統(tǒng) 迅為在RK3588開發(fā)板移植了銀河麒麟和開放麒麟系統(tǒng) 迅為優(yōu)先RK3588
    發(fā)表于 08-19 10:38

    外協(xié):RK3588適配linux

    RK3588適配linux 功能:RK3588J+16GB+64GB 接口支持: 1.HDMI1 2.EDP1 3.USB3.02,USB2.04 4.電池管理1 5.網(wǎng)絡(luò)2 6.GPIO*8 7.音頻功能 有開發(fā)經(jīng)驗(yàn)的請(qǐng)留聯(lián)系方式。
    發(fā)表于 07-09 16:31

    迅為電子RK3588S與RK3588硬件性能區(qū)別及板卡選型

    迅為電子RK3588S與RK3588硬件性能區(qū)別及板卡選型
    的頭像 發(fā)表于 06-25 15:30 ?3579次閱讀
    迅為電子<b class='flag-5'>RK3588</b>S與<b class='flag-5'>RK3588</b>硬件性能區(qū)別及板卡選型

    亮鉆科技推出重磅新品:基于RK3588S平臺(tái)的K-3588S

    近日,基于RK3588S平臺(tái),亮鉆科技推出重磅新品:K-3588S,其性能與RK3588相媲美,擁有高性能、高算力和8K視頻編解碼等優(yōu)勢(shì),且性價(jià)比更高,滿足用戶降本需求。
    的頭像 發(fā)表于 05-09 14:11 ?2478次閱讀
    亮鉆科技推出重磅新品:基于<b class='flag-5'>RK3588</b>S平臺(tái)的K-<b class='flag-5'>3588</b>S

    迅為RK3588最小系統(tǒng)板發(fā)布

    迅為RK3588最小系統(tǒng)板發(fā)布
    的頭像 發(fā)表于 03-08 15:32 ?874次閱讀
    迅為<b class='flag-5'>RK3588</b>最小系統(tǒng)板發(fā)布

    基于RK3588的NPU案例分享!6T是真的強(qiáng)!

    RK3588?NPU簡(jiǎn) 介 作為瑞芯微新一代旗艦工業(yè)處理器,RK3588 NPU性能可謂十分強(qiáng)大,6TOPS設(shè)計(jì)能夠?qū)崿F(xiàn)高效的神經(jīng)網(wǎng)絡(luò)推理計(jì)算。這使得RK3588在 圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理
    的頭像 發(fā)表于 02-27 14:14 ?1842次閱讀
    基于<b class='flag-5'>RK3588</b>的NPU案例分享!6T是真的強(qiáng)!