摘 要:媒體加速引擎是AlchemyTM AU 1200的片上硬件設備,主要完成圖像及視頻的解碼。為了能在嵌入式Linux下使用媒體加速引擎完成視頻的硬解碼,在此介紹了該設備的硬件結構,以及在嵌入式Linux下構建其開發環境的方法和過程,包括主機開發環境的構建,交叉編譯工具的使用以及交叉編譯的過程,并重點介紹媒體加速引擎驅動程序的設計,交叉編譯,加載到Linux內核以及應用測試的整個流程。經測試,該驅動程序可動態加載入Linux內核并成功驅動媒體加速引擎,從而可將其應用于媒體播放器完成視頻的硬解碼功能。
關鍵詞:嵌入式Linux;AlchemyTM AU 1200;媒體加速引擎;驅動程序
中圖分類號:TP368.1文獻標識碼:B
文章編號:1004-373X(2010)08-0048-03
Design of AU 1200 MAE Driving Program under Condition ofEmbedded Linux
FENG Chao
(School of Information Science and Technology, Xiamen University, Xiamen 361005, China)
Abstract:The media acceleration engine(MPEG)which mainly performs the decoding of video and image,is an on-chip hardware of AlchemyTM AU 1200, In order to implement the video′s hardware decoding with MAE under the condition of embedded Linux, the hardware structure of MAE, the methods and process ofbuilding its developmentenvironment including the construction of the host development environment under the condition of embedded Linux, and the usage of the cross compiling tools and process ofcross compiling are introduced. The development of MAE driver is explained in detail, including the driver programming, cross compiling, loading into the kernel and its application testing. The driving program can be dynamically loaded into the Linux kernel and drive the MAE successfully. Therefore, it can be used in the multimedia player to accomplish the video′s hardware-decoding.
Keywords:embedded Linux; AlchemyTM AU 1200; MAE; driving program
隨著移動多媒體終端的日益普及,功能的日益強大,人們已經不滿足于自己的手持終端僅僅能夠聽MP3音樂,而是希望終端在播放音樂的同時能夠播放高質量視頻,并支持多種視頻格式。AU 1200作為一款基于MIPS架構的處理器,由于其片上集成了視頻硬件設備(Media Acceleration Engine,MAE),使得該處理器無需配合其他視頻解碼芯片即可完成多種格式的視頻解碼功能,所以AU 1200非常適合應用于像PMP這樣的移動多媒體終端,而MAE也成為AU 1200的特色。
1 MAE概述
MAE是AU 1200的片上硬件設備,除了可以實現視頻解碼功能外,還可以完成色彩空間轉換、濾波等工作。MAE在硬件結構上可以分為前端和后端兩部分,各自完成一些特定的功能。MAE前端主要完成視頻的實時解碼,包括反量化、IDCT、運動補償等;而后端主要完成圖像的濾波、色彩空間轉換等。除此之外,MAE還可以通過AU 1200片上外設CIM(Camera Interface Module)處理從攝像頭獲取的數據。MAE使AU 1200的MIPS32核不用再因為視頻的實時解碼而產生大量的開銷,從而使其能夠專注于完成接口、音頻處理等其他任務,這樣一來大大提高了系統的工作效率。MAE支持的視頻Codec格式包括:MPEG-2 Main Profile @ Main Level,MPEG- Advanced Simple Profile @Level 5,WMV 9 Media Profile @ Medium Level,最高支持D1 30 f/s的實時解碼[1]。
2 開發環境的建立
硬件開發板采用華恒科技的HHAU 1200,該板提供豐富的接口,并已將Bootloader固化在板上的FLASH當中,通過燒寫工具可對其軟件系統進行更新升級。只要建立交叉編譯環境便可在HHAU 1200上開發硬件設備驅動程序和應用程序[2]。
2.1 宿主機開發環境的建立
宿主機(PC)通過串口線連接至開發板的串口1,同時通過交叉網線連接至開發板的網口。宿主機安裝Red Hat Linux操作系統,所安裝的版本是Enterprise Linux AS4,建議采用完全安裝。由于HHAU 1200開發板在燒寫時默認的IP為192.168.2.222,所以PC機的IP也要設置在該網段[3]。在Linux PC下配置好NFS(為交叉開發時Mount所用)、TFTP服務器(為下載燒寫所用)和Minicom。以上幾項配置好后啟動Minicom,當開發板上電后便可看到啟動信息。
在PC的Linux終端提示符下鍵入mount -o nolock 192.168.2.222://mnt,即把AU 1200開發板根目錄下的所有文件和目錄Mount到宿主機Linux下的mnt目錄,在Linux終端提示符下可通過ls命令查看[4]。
2.2 交叉編譯工具鏈的建立
按照以下步驟:
(1) 下載交叉編譯工具軟件包[5]mipsel-linux-gcc-sdk-3.4.4-i386.tar.gz,解包至/opt路徑下;
(2) 添加交叉編譯工具環境變量:修改/etc/profile文件,在文件末尾添加export PATH=$PATH:/opt/mipsel-linux-gcc-sdk-3.4.4/cross/bin;
(3) 使新的環境變量生效:#source /etc/profile;
(4) 檢查是否將路徑加入PATH:#echo $PATH,若顯示的內容中有上述路徑,說明已經將交叉編譯工具的路徑加入PATH;
(5) 用hello.c進行交叉編譯測試:編譯出的可執行文件用file命令查看其屬性[6]可得到如圖1所示信息。
圖1 文件屬性信息
這說明交叉編譯工具可以正常使用,編譯出的可執行文件可以在MIPS處理器上直接運行。
3 MAE前端驅動軟件設計及測試
3.1 驅動軟件設計
MAE可分為前端和后端,前端的主要功能是完成多種視頻格式的實時解碼,其方框圖如圖2所示[7]。
MAE前端的輸入數據是一系列的數據宏塊,宏塊數據以及頭信息、系數矩陣、運動向量等都以DMA的方式傳送給MAE。所以在程序中首先要定義指針maefe_dmadscr[PTR]來描述DMA。并把maefe_dmadbell[DB]寄存器設置為1來啟動DMA控制器。頭信息一共包含4個word,每個word有32 b,這4個word分別保存到AU 1200寄存器mae_hdr0到mae_hdr3中,這些word包含了關于編碼宏塊的信息,如量化參數,運動補償參數,變換運算等信息[8]。
驅動程序首先要把每一幀的地址寫入MAE的相關寄存器中,在每處理一幀后,上述宏塊信息都要及時更新。MAE的前端對宏塊數據進行反量化,其結果輸入至逆變換單元進行逆變換運算。逆變換運算單元通過查看maefe_config寄存器的COD標志位來決定采用哪種標準的視頻Codec,從而執行相應的運算。逆變換運算完成后,數據送入運動補償單元。運動補償單元根據運動向量計算出參考像素值,并把它們插入當前幀中,從而完成一次解碼[9]。以上過程通過編寫函數fe_process_mb來實現,該函數的幾個參數分別是:
圖2 MAE前端方框圖
mae_fe_cfg:MAE前端的配置信息;mb_in:輸入的宏塊數據;cur_y_frame:當前幀Y分量;cur_cb_frame:當前幀Cb分量;cur_cr_frame:當前幀Cr分量;mb_num:表示宏塊數據的序號。該函數的流程圖如圖3所示。
圖3 MAE FE工作流程
函數中的關鍵部分及說明注釋如下所示:
void fe_process_mb(mae_fe_config * mae_fe_cfg,mae_fe_mb * mb_in,uint8 *cur_y_frame,uint8 *cur_cb_frame,uint8 *cur_cr_frame,uint32 mb_num)
{…
mae_init_once(mae_fe_cfg,mb_in);//MAE前端初始化配置
check_param_size(mae_fe_cfg,mb_in);//查看MAE前端參數設置
check_valid_cfg_changes(mae_fe_cfg,mb_in,mb_num);//查看MAE前端配置是否改變
do_malloc_if_necessary(mae_fe_cfg);//當宏塊數據送入是,為其分配內存空間
perform_iquant(mae_fe_cfg,mb_in,fixed_point_block,bn,wm,blk_mbmode);
//對宏塊數據執行反量化
if(!mae_fe_cfg->codstyl)//判斷編碼器類型
lee_idct_2d_fixed_point(fixed_point_block,dst_block,bn,exp_bc);
//執行IDCT變化
idct_output[c] = (char)dst_block[c];
copy_data_to_cur(mae_fe_cfg,mb_in,cur_y_frame,cur_cb_frame,cur_cr_frame);
//生成當前幀…}
3.2 驅動軟件測試
將以上程序交叉編譯,生成mae-driver.ko,動態加載到Linux內核:#insmod –f mae-driver.ko。用MAIplayer驗證是否可以正常工作:啟動minicom,進入MAIplayer所在路徑,該路徑下有編譯好的播放器應用程序及各種視頻解碼庫。執行視頻文件播放命令MYM./maiplayer auto –a –l jolin.mpg[10]。播放效果如圖4所示。經測試, MAIplayer可正常播放多媒體視頻,說明MAE已被驅動起來完成視頻解碼工作。
圖4 測試示意圖
4 結 語
本文給出了AU 1200 MAE驅動程序開發的流程,包括開發環境的搭建及驅動程序的編寫。 MAE作為AU 1200片上專用于圖像、視頻的外部設備,相當于一個視頻協處理器。它的使用大大提高了MIPS核的工作效率,而以AU 1200為核心的多媒體終端具有更低的成本,因此,其市場前景將更加廣闊。
參考文獻
[1]Raza MicroelectronicsIncorporation.. RMI AlchemyTM AU 1200TM , Au1210TM , Au1250TMprocessors media acceleration engine\\.\\: Raza MicroelectronicsInc., 2007.
[2]華恒科技. HHAU12XX開發平臺技術手冊\\. 2007.
[3]陳文智. 嵌入式系統開發原理與實踐[M]. 北京: 清華大學出版社, 2005.
[4]鄭靈翔. 嵌入式系統設計與應用開發[M]. 北京: 北京航空航天大學出版社, 2006.
[5]Raza Microelectronics Incorporation.. RMI AlchemyTM AU 1200TM , Au1210TM and Au1250TMprocessors media application interface software development kit\\. \\: Raza Microelectronics Inc., 2007.
[6]Raza MicroelectronicsIncorporation.. RMI AlchemyTM AU 1200TMprocessor data book\\. \\: Raza MicroelectronicsInc., 2006.
[7]楊文慧, 施芝元, 黃聯芬. 嵌入式AU 1200無線車載終端播放器設計實現[J]. 現代電子技術, 2009, 32(16): 42-43.
[8]宋丹, 馬昌萍, 馬幼鳴. MPlayer在嵌入式開發系統中的應用[J]. 電子產品世界, 2005(7): 68-71.
[9]Raza MicroelectronicsIncorporation.. RMI AlchemyTM AU 1200TMprocessor-based system media player software user′s guide\\. \\: Raza MicroelectronicsInc., 2006.