《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > i.MX51平臺視頻硬件解碼的研究與應用
i.MX51平臺視頻硬件解碼的研究與應用
來源:微型機與應用2013年第10期
周時偉1,2,謝維波1,2,郭利全1,2
(1. 華僑大學 計算機科學與技術學院,福建 廈門361021) 2. 廈門軟件園 華僑大學嵌入式技
摘要: 提出了一種視頻在i.MX51平臺的硬件解碼方案,詳細描述了使用VPU進行視頻硬件解碼的邏輯處理過程及解碼流程。使用本方案將MPEG4格式的視頻文件在Android平臺進行解碼并獲得成功。對于使用i.MX51進行多媒體開發具有重要的指導意義。
Abstract:
Key words :

摘  要: 提出了一種視頻在i.MX51平臺的硬件解碼方案,詳細描述了使用VPU進行視頻硬件解碼的邏輯處理過程及解碼流程。使用本方案將MPEG4格式的視頻文件在Android平臺進行解碼并獲得成功。對于使用i.MX51進行多媒體開發具有重要的指導意義。
關鍵詞: i.MX51開發板; 硬件解碼; VPU; MPEG4

    隨著多媒體技術的迅速發展,數字視頻的應用越來越廣泛。人們對高清視頻的狂熱追逐給視頻解碼帶來了巨大的壓力[1]。傳統的軟件解碼方法已經很難滿足視覺要求。高清視頻的分辨率遠遠高于一般格式視頻,其碼率也很高,再加上視頻編碼標準的壓縮率高,使得解碼運算量很大。因此,常規地直接用CPU解碼會極大地消耗CPU的運算能力,于是轉向硬件解碼。硬件解碼是通過顯卡的視頻加速功能對高清視頻進行解碼,能夠將CPU從繁重的視頻解碼運算中釋放出來,使計算機具備流暢播放高清視頻的能力。本文通過研究主流Android開發板i.MX51上的VPU,給出了使用VPU實現視頻硬件解碼的主要流程和方法。
1 i.MX51 EVK平臺硬件視頻解碼方案
1.1 i.MX51處理器的特性

    i.MX51 是飛思卡爾公司自主研發的ARM體系結構的中央處理器單元。i.MX51處理器采用了先進、高效率的ARM Cortex A8 內核,處理器運行在800 MHz的高速下[2]。相比于ARM11產品,其性能被大大提高。它支持最高200 MHz的DDR2和移動DDR DRAM時鐘速率,擁有32 KB的指令緩存和數據緩存以及256 KB的二級緩存[3];處理器內部集成了DDR/DDR2內存控制器;同時集成了矢量運算、浮點運算以及ARM NEON SIMD媒體和信號處理器,為多媒體信息娛樂終端提供了強大的處理核心支持。
1.2 i.MX51 VPU
    i.MX51 VPU(視頻處理單元)是一個支持多標準編解碼操作的高性能的視頻編解器引擎。VPU編解碼器支持MPEG-1/2、MJPEG、H.264、MPEG-4的編解碼。 VPU在i.MX51上支持的解碼高達HD水平,編碼為SD水平。VPU通過32 bit的APB總線和64 bit的AXI總線與系統聯絡,APB總線用于系統控制,AXI總線用于數據的傳輸。同進,利用片上存儲器實現高性能。
    VPU中的視頻硬件模塊被最佳化設計以用來在不同的視頻標準中共享使用,并提供強大的性能和超低的功耗,如圖1所示。

    VPU提供一套主控接口寄存器,通過這些寄存器主處理器可以簡單、高效地控制VPU。VPU擁有一個16 bit的DSP內核——位處理器,通過該位處理器可以控制內部硬件模塊并實現視頻編解碼操作。

1.3 視頻解碼方案
    i.MX51開發板具有支持多種操作系統的特性,例如Android等實時OS。為了能夠獲得較好的推廣應用,采用比較流行的Android系統。
    在Android中創建自己的解碼函數庫,通過JNI穿越系統的應用框架層直接訪問庫函數,才能實現Android系統下對硬件的直接調用和控制。首先,使用C語言對VPU的API組織調用,實現視頻的解碼;然后,生成相應的動態庫,并提供給JNI相應的應用接口;最后,在Java類中使用C實現視頻解碼的本地方法。
2 VPU解碼的內部邏輯
2.1 VPU的初始化

    VPU中位處理器用于處理比特流數據,位處理器是一個高度優化的,它還可控制VPU與主處理器之間的通信[4]。位處理器固件被分為兩部分來進行視頻的解碼:一部分是引導代碼,這些代碼是主處理器通過IP總線下載到位處理器內部存儲器的,啟動代碼大小為1 KB,這些啟動代碼被寫在外部存儲器一塊區域中,固件區域的基地址由VPU的API寫入;另一部分是進行解碼處理的固件包,在開始解碼前,固件先被寫進外部存儲器啟動代碼之后的一塊連續的區域中,運行過程中,位處理器自行下載固件,根據不同的解碼標準下載到相應的內部存儲器中,它是通過AXI總線進行加載的,VPU初始化過程如圖2所示。

2.2 VPU與應用程序的交互
    圖3給出了位處理器和VPU視頻處理核心模塊,并且指明了VPU如何與應用軟體進行交互。從根本上說,在框架水準之上,主處理器是通過API與主處理器進行通信的。
2.3 VPU的硬件抽象層
 圖4為VPU的硬件抽象層的詳細內容。VPU的解碼器的寄存器頭文件vpu_reg.h中定義了內存映射地址;頭文件vpu_io.h中定義了I/O操作的各種定義,聲明了I/O操作的各種函數,并在vpu_io.c中實現了其頭文件中的各個函數;vpu_lib.c是VPU的庫函數,實現了VPU編解碼的所有操作;vpu_lib.h中定義了VPU函數庫中的數據類型、數據結構,并聲明了各個函數;vpu_util.c中是與VPU中位處理器相關的各種操作。

 

 

3 VPU硬件解碼流程分析
3.1 VPU進行視頻解碼的流程

 通過VPU解碼的基本流程包括以下步驟:
 (1)調用函數Init()來初始化VPU;
 (2)使用函數DecOpen()打開一個解碼器實例;
 (3)為了能夠提供合適數量的字節流,使用DecGetBitstreamBuffer()獲取字節流緩沖地址;
 (4)在改變解碼器的輸入流之后,使用DecUpdateBit-
streamBuffer()通知傳輸到字節流緩沖區的字節數量;
 (5)在進行一個圖片的解碼操作之前,使用DecGetInitialInfo()來為解碼操作獲取重要的參數,如圖片大小、幀緩沖等;
 (6)使用返回的幀緩沖大小配置幀緩沖區合適的大小,并且使用函數DecRegisterFrameBuffer()把這個數據傳達給i.MX51 VPU。
  (7)使用DecStartOneFrame()開始圖片解碼器操作,一張一張地進行圖片解碼;
  (8)等待完成圖片解碼器操作的中斷事件;
  (9)使用DecGetOutputInfo()檢查解碼器操作的結果;
  (10)播放第n幀后,使用DecClrDispFlag()清除播放緩沖標志;
    (11)如果還有更多的比特需要解碼,返回到步驟(7)繼續執行,否則就執行下一步;
    (12)使用DecClose()關閉實例,終止操作;
    (13)調用UnInit()釋放系統資源。
3.2 數據處理與控制
    VPU擁有一個專用的路徑進行主處理器與VPU之間的數據或信息的交流,即共享存儲器。共享存儲器通過ABMA主總線被訪問,使用這個存儲器進行比特流和數據幀的交換。通過使用VPU寄存器中的主控寄存器來實現主處理器與VPU之間專一的信息交流路徑。所有在主處理器與VPU之間的命令和響應都是通過這些寄存器來交換的。數據轉換與命令及響應相關的信息也是通過主控寄存器來交換的。從主處理器可以訪問VPU主控接口的所有寄存器。一些主控寄存器用于交換實際的命令和響應,另一些寄存器則用來向主處理器提供VPU內部狀態信息。
    主應用程序通過API發送命令和相應的參數給VPU來控制VPU。從VPU接收到一個中斷之后,發送要求的操作已經完成的信息。如圖5所示為應用程序數據處理的過程。

    每個API的定義包括請求命令和輸入輸出數據結構。從API給出的命令經常被寫進一個專用的I/O寄存器,但是輸入和輸出數據結構是通過一套包括輸入參數和輸出結果的I/O命令寄存器傳輸的。
    所有的像素數據或者數據流處理被主處理器執行或者通過在SDRAM中的共享內存被VPU執行。為了保證主處理器與VPU之間的安全性,所需信息被存放在主控寄存器中。這些事務一般都是單向的,VPU或主處理器寫數據,其他設備在一個單數據緩沖區讀取數據。
4 視頻硬件解碼在Android下的應用
4.1 MPEG-4在i.MX51上的硬件解碼實現

    本文以MPEG-4視頻流為例實現其硬件解碼。圖6為MPEG4的解碼流程。

    (1)初始化VPU
    用BIT Code Download命令下載BITProcessor固件到存儲器;設置初始化參數用于對BIT Processor進行一般性設置,設置工作緩沖區基址、BIT Code存儲器地址、比特流緩沖區控制等;命令BIT Run Start運行BIT處理器初始化VPU。
    (2)創建并初始化一個MPEG-4解碼進程
    設置SEQ_INIT參數,這一過程通過調用MPEG4_initial()進行解碼初始化,包括打開文件、設置硬件參數(如codec)、解碼參數初始化(如波特率設置)、申請地址空間(如配置基地址);運行SEQ_INIT命令,開始一個MPEG-4解碼進程。如果出現Wait BusyFlag=0,則等待BIT處理器完成SEQ_INIT命令的執行,以進行接下來的處理。
    (3)運行MPEG-4解碼進程
    設置PICTURE_RUN參數配置幀源地址和目標地址;運行PICTURE_RUN命令,通過調用MPEG4_continue()啟動MPEG-4的解碼進程。以幀為單位完成讀輸入、解碼和寫輸出的工作。返回1代表解碼正常,可對其本身進行再調用,實現下一幀的解碼;返回0則代表文件結束或者出現異常。如果出現Wait BusyFlag=0,則等待BIT處理器完成PICTURE_RUN命令的執行。它也意味著結束了一幀數據的解碼,將解碼后的數據發送到圖像處理單元進行后處理并播放。
    (4)繼續執行第(3)步,如果比特流緩沖區是空的,則在運行下一幀解碼之前,主處理器應該下載新的比特流到比特流緩沖區。
    (5)運行SEQ_END命令調用MPEG4_stop(),編碼完成終止解碼進程。對硬件進行設置,并釋放內存空間。
    一般而言,不同編碼標準的解碼處理流程是相似的,盡管不同的編碼標準對應的固件版本有小幅改進,但其具體的執行過程是由VPU驅動來完成的。
4.2 Android平臺使用VPU硬件解碼
    之前的解碼是用C語言編譯通過的,而開發板i.MX51上運行的是Android系統,需要在Android系統上對解碼實現,本文采用的是JNI技術。
    首先,編寫Mikefile文件并編譯;接著,在終端中進入工程目錄,運行ndk-build命令進行編譯,編譯通過后即可生成動態庫文件libvpu.so;最后,在Java文件代碼中對本地庫進行調用。使用public native String stringFromJNI()申明本地方法;使用System.loadLibrary()來加C動態庫。至此,對本地庫的調用即完成。
    本文深入地分析和研究了i.MX51開發板的功能特性,詳細介紹了其硬件解碼模塊的內部結構和使用方法,并具體說明了其應用程序接口函數。在此基礎之上,探討了其一般使用流程,并用MPEG4的具體解碼過程進行了說明,最后在Android系統下實現。實驗結果表明其運行情況良好。
參考文獻
[1] 李強申.Linux視頻硬件解碼技術與應用研究[D].北京:北京郵電大學, 2009.
[2] 王知航.基于i.MX51芯片和Android平臺平板電腦電源管理的研究與應用[D].西安:西安電子科技大學,2011.
[3] i.MX51:應用處理器開發評估方案[J].世界電子元器件,2010(3):22-23.
[4] Freescale公司. i.MX51多媒體應用處理器參考手冊[S].2010.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
午夜精品久久久久久久99热浪潮| 欧美一二三区在线观看| 国产精品午夜在线观看| 欧美久久视频| 欧美国产第一页| 美女日韩在线中文字幕| 久久久91精品国产一区二区精品| 亚洲在线一区二区三区| 艳女tv在线观看国产一区| 亚洲蜜桃精久久久久久久| 亚洲精美视频| 亚洲青色在线| 99精品福利视频| 一区二区三区视频观看| 亚洲无限av看| 亚洲欧美国产高清va在线播| 亚洲欧美日韩第一区| 欧美一进一出视频| 久久精品亚洲精品| 麻豆精品一区二区综合av| 欧美成人精品在线| 欧美精品一区二区三区在线看午夜 | 欧美中文字幕不卡| 欧美综合国产精品久久丁香| 亚洲大片在线| 亚洲精品无人区| 亚洲一区二区三区乱码aⅴ| 先锋a资源在线看亚洲| 欧美制服丝袜第一页| 久久久久久一区二区三区| 久久尤物视频| 欧美精品激情| 国产精品成人v| 国产亚洲一区二区在线观看 | 亚洲伊人网站| 久久激情中文| 欧美wwwwww| 欧美系列一区| 国产一区二区精品| 亚洲国产成人91精品| 一本一道久久综合狠狠老精东影业 | 国产精品日本欧美一区二区三区| 国产欧美综合在线| 伊人久久大香线蕉av超碰演员| 亚洲国产精品t66y| 在线亚洲高清视频| 久久精品成人| 亚洲色图在线视频| 久久久久久欧美| 欧美精品1区| 国产精品免费视频xxxx| 激情综合久久| 一区二区三区欧美亚洲| 欧美一区二区视频在线观看2020| 亚洲国产欧美日韩精品| 亚洲一区二区在线播放| 久久久美女艺术照精彩视频福利播放| 欧美福利在线观看| 国产精品一区二区久激情瑜伽| 一区视频在线| 在线综合亚洲欧美在线视频| 久久精品国产精品| 亚洲一区二区三区视频播放| 久久综合久久综合这里只有精品| 欧美性猛片xxxx免费看久爱| 国语自产精品视频在线看8查询8| 亚洲精品资源美女情侣酒店| 久久成人一区二区| 亚洲一区二区在线免费观看视频| 久久久精品日韩| 欧美日韩一区二区在线| 激情91久久| 一区二区三欧美| 亚洲日本中文字幕免费在线不卡| 小黄鸭精品aⅴ导航网站入口| 欧美暴力喷水在线| 国产日韩亚洲| 亚洲视频狠狠| 亚洲人成网站影音先锋播放| 欧美专区在线观看| 国产精品成人观看视频免费| 亚洲国产综合91精品麻豆| 午夜电影亚洲| 亚洲一区二区在线播放| 欧美好骚综合网| 国外成人免费视频| 亚洲一区二区三区四区五区午夜 | 午夜精品久久久| 99国产一区| 美女网站久久| 好吊一区二区三区| 午夜亚洲性色视频| 亚洲夜晚福利在线观看| 欧美高清不卡| 亚洲成人在线网| 亚洲第一天堂av| 久久久久久欧美| 国产亚洲精品成人av久久ww| 在线一区二区日韩| 一区二区三区久久| 欧美激情按摩| 亚洲国产精品久久久久婷婷884| 久久精品视频免费| 久久不射2019中文字幕| 国产精品你懂得| 国产精品99久久久久久宅男 | 亚洲欧美激情视频| 欧美日韩在线高清| 亚洲免费高清| 一区二区三区欧美视频| 欧美日韩99| 亚洲日产国产精品| 日韩一二在线观看| 欧美黑人国产人伦爽爽爽| 亚洲国产精品va在线观看黑人| 久久丁香综合五月国产三级网站| 久久久久9999亚洲精品| 国产在线观看一区| 欧美一区二区三区电影在线观看| 香蕉国产精品偷在线观看不卡| 国产精品成人免费精品自在线观看| 日韩视频免费观看高清完整版| 在线一区日本视频| 欧美视频你懂的| 一区二区三区四区五区视频 | 9国产精品视频| 欧美日韩激情小视频| 亚洲精品欧美| 国产精品99久久不卡二区| 国产精品va在线播放我和闺蜜| 中文久久精品| 亚洲欧美日韩直播| 国产视频精品免费播放| 久久国产天堂福利天堂| 巨乳诱惑日韩免费av| 亚洲激情六月丁香| 亚洲午夜高清视频| 国产精品乱看| 性18欧美另类| 蜜臀av国产精品久久久久| 亚洲国内欧美| 亚洲一区三区视频在线观看 | 国产色产综合色产在线视频| 欧美在线免费观看| 免费日韩视频| 日韩午夜精品| 先锋影音久久| 欲香欲色天天天综合和网| 一本色道**综合亚洲精品蜜桃冫| 欧美午夜剧场| 欧美一级片久久久久久久| 免费影视亚洲| 一个色综合导航| 久久国产直播| 亚洲激情校园春色| 亚洲欧美成aⅴ人在线观看| 国产一区二区视频在线观看| 亚洲精品国产日韩| 欧美亚一区二区| 欧美亚洲一区在线| 欧美激情91| 亚洲自拍偷拍一区| 看欧美日韩国产| 日韩午夜激情电影| 久久精品水蜜桃av综合天堂| 最新日韩精品| 欧美一区亚洲| 亚洲黄色片网站| 欧美亚洲视频| 亚洲黄色免费网站| 欧美一级日韩一级| 亚洲国产乱码最新视频| 午夜精品成人在线| 亚洲第一中文字幕| 欧美亚洲日本一区| 91久久嫩草影院一区二区| 欧美在线啊v一区| 亚洲精品欧美日韩| 久久riav二区三区| 亚洲免费福利视频| 久久亚洲欧洲| 亚洲一区二区三区激情| 欧美黄网免费在线观看| 新狼窝色av性久久久久久| 欧美日韩国产黄| 久久精品国产99国产精品澳门| 欧美日韩中文字幕在线| 欧美中文字幕在线| 国产精品草草| 亚洲精品影院| 国内伊人久久久久久网站视频| 亚洲在线成人| 91久久久久久久久久久久久| 久久黄色小说| 一区二区三区日韩在线观看| 免费视频一区二区三区在线观看| 亚洲欧美国产视频| 欧美日韩中文在线| 亚洲黄色成人久久久| 国产网站欧美日韩免费精品在线观看 |