• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于S3C6410的MPEG-4視頻壓縮濾波器的設(shè)計(jì)研究

      2012-06-25 07:02:38馮少奇丁春峰
      電視技術(shù) 2012年7期
      關(guān)鍵詞:協(xié)處理器編解碼圖表

      馮少奇,丁春峰

      (鄭州大學(xué)河南激光與光電信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,河南 鄭州 450052)

      1 DirectShow實(shí)現(xiàn)視頻壓縮

      以ARM為代表的微處理器設(shè)計(jì)技術(shù)的發(fā)展,極大地推動了嵌入式設(shè)備上多媒體處理技術(shù)的進(jìn)步。尤其是最新推出的ARM11系列微處理器,它包含了更多的多媒體處理指令來加速視頻處理。S3C6410作為采用ARM11架構(gòu)的低成本、低功耗、高性能的微處理器,內(nèi)部集成了包括運(yùn)動圖像處理、顯示控制和圖像縮放等多個功能強(qiáng)大的硬件加速器。其中多格式編解碼器(Multi Format Codec,MFC)支持 MPEG-4、H.263、H.264編解碼和 VC1解碼。使用S3C6410處理器進(jìn)行視頻處理無需開發(fā)視頻編解碼算法,設(shè)計(jì)人員可以將精力放在應(yīng)用軟件的開發(fā)上,從而提高開發(fā)效率。

      Windows Embedded CE 6(以下簡稱WINCE)作為一個為嵌入式微處理器設(shè)計(jì)的操作系統(tǒng),它通過添加各種組件來實(shí)現(xiàn)不同的功能。DirectShow是WinCE系統(tǒng)的一個多媒體流處理組件,可以很好地實(shí)現(xiàn)視頻的采集壓縮和回放等功能[1]。因此在使用S3C6410處理器的 WINCE系統(tǒng)上,可以很方便地使用DirectShow對CMOS和CCD攝像頭輸出的視頻使用MFC壓縮處理。

      在設(shè)計(jì)MPEG-4視頻壓縮濾波器之前,首先需要熟悉DirectShow,然后制定整個采集壓縮過程的濾波器圖表,最后完成濾波器的設(shè)計(jì)。

      1.1 DirectShow 簡介

      系統(tǒng)結(jié)構(gòu)如圖1所示,可以簡單地分為輸入、邏輯處理和輸出三部分,其中方框內(nèi)部的邏輯處理部分是該系統(tǒng)的核心。其包括源濾波器、傳輸濾波器和渲染濾波器以及管理它們的濾波器圖表管理對象。

      圖1 DirectShow系統(tǒng)結(jié)構(gòu)圖

      在應(yīng)用程序中,將若干個濾波器按照特定的方式連接,從而實(shí)現(xiàn)不同的功能。濾波器之間通過pin連接,上游濾波器的輸出pin連接下游濾波器的輸入pin,這些連接在一起的一組濾波器稱為濾波器圖表,其使用的濾波器以及它們之間的連接決定了多媒體數(shù)據(jù)流的整個處理過程[2]。

      1.2 定制MPEG-4視頻采集壓縮的濾波器圖表

      在使用S3C6410處理器的WINCE系統(tǒng)上實(shí)現(xiàn)視頻采集壓縮,就要定制一個濾波器圖表,其包括整個圖表中需要的濾波器以及它們之間的連接。根據(jù)系統(tǒng)功能的要求,定制完成的濾波器圖表,如圖2所示。其中各個濾波器具有不同的功能,它們之間的連接代表了數(shù)據(jù)處理的流程。

      圖2 MPEG-4視頻采集壓縮的濾波器圖表

      其中Video capture source作為源濾波器,由CCD或者CMOS攝像頭經(jīng)過軟件層封裝生成的1個視頻源濾波器,該濾波器提供了3個輸出pin,分別是Capture pin,Still pin,Preview pin。不同的pin具有不同的功能,Capture pin用于捕獲視頻流,傳遞給下游濾波器的輸入pin進(jìn)行MPEG-4算法的視頻壓縮處理。Preview pin用于視頻預(yù)覽,該pin連接下游的Video Renderer。Video Renderer是基于DirectDraw技術(shù)封裝的視頻渲染濾波器,用于在顯示設(shè)備上預(yù)覽視頻。該濾波器往往由操作系統(tǒng)自帶,無須自行設(shè)計(jì)。

      與Video capture source的capture pin相連接的MFC Encoder濾波器便是將要設(shè)計(jì)的MPEG-4視頻壓縮濾波器,它接收上游傳遞來的YUV420格式的原始視頻,由MFC壓縮處理后通過輸出pin傳遞給下游的Dump Filter。Dump Filter是DirectShow附帶的一個示例濾波器,它接收數(shù)據(jù)并保存到文件存儲系統(tǒng)中,生成原始的數(shù)據(jù)文件。這里需要注意兩點(diǎn):第一,存儲系統(tǒng)可以是硬盤、Flash存儲器、SD卡等;第二,在當(dāng)前的濾波器圖表中,Dump filter接收MFC Encoder編碼后的視頻流,生成的文件后綴為m4v。

      縱觀整個濾波器圖表,除了MFC Encoder需要自行設(shè)計(jì),其他濾波器已由系統(tǒng)提供,因此要完成視頻壓縮,MFC Encoder的設(shè)計(jì)成為關(guān)鍵環(huán)節(jié),下面將詳細(xì)闡述該濾波器的設(shè)計(jì)方法及其應(yīng)用。

      2 S3C6410多媒體協(xié)處理器及編解碼庫的介紹

      S3C6410的多媒體協(xié)處理器通過一個單一的硬件架構(gòu)支持 H.263P3,MPEG-4 Single Profile,H.264 Baseline Profile和VC1 Main Profile的多格式的視頻編解碼,它可以同時支持一路視頻編碼和三路視頻解碼的多方調(diào)用,也可以通過時分復(fù)用的方式在進(jìn)行一路MPEG-4視頻編碼的同時,支持另一路H.264視頻流的解碼。它內(nèi)嵌了一個16位的DSP處理器用于處理數(shù)據(jù)比特流和控制視頻編解碼硬件。該協(xié)處理器在編解碼性能方面十分出色,在全雙工模式下支持高達(dá)30 f/s的VGA分辨力的視頻編解碼,在半雙工模式下支持高達(dá)30 f/s的720×480分辨力和25 f/s的720×576分辨力的視頻編解碼。

      在操作系統(tǒng)層和軟件應(yīng)用層,三星提供了軟件包來支持多媒體協(xié)處理器的應(yīng)用,它包括位于操作系統(tǒng)層的多媒體協(xié)處理器驅(qū)動和位于應(yīng)用軟件層的多格式視頻編解碼庫。其軟件架構(gòu)如圖3所示。在下部操作系統(tǒng)區(qū)域,多媒體協(xié)處理器驅(qū)動為操作系統(tǒng)調(diào)用多媒體協(xié)處理器提供了底層軟件支持,同時為上層的用戶區(qū)域提供了3個API接口函數(shù):CreateFile(open),DeviceIoControl(ioctl),Close-Handle(close)。其中CreateFile創(chuàng)建一個MFC應(yīng)用實(shí)例,DeviceIoControl根據(jù)輸入的參數(shù)不同進(jìn)行各種視頻格式的編解碼操作,CloseHandle關(guān)閉當(dāng)前的MFC應(yīng)用實(shí)例。位于上方用戶區(qū)域的多格式視頻編解碼庫利用操作系統(tǒng)區(qū)域提供的上述3個API接口函數(shù),進(jìn)一步的封裝形成了支持多種視頻編解碼格式的靜態(tài)庫,應(yīng)用程序開發(fā)者使用該靜態(tài)庫提供的一系列函數(shù)可以很方便地調(diào)用多媒體協(xié)處理器。目前該庫支持的視頻解碼格式為MPEG-4 Single Profile,H.263 P3,H.264 Baseline Profile,VC1 Main Profile,而支持的視頻編碼格式為MPEG-4 Single Profile,H.263 P3,H.264 Baseline Profile[3]。由此可以看出,該設(shè)計(jì)的MFC Encoder位于圖3中最上方的用戶多媒體應(yīng)用程序框架內(nèi),主要使用編解碼庫中的MPEG-4 Single Profile視頻編碼函數(shù)部分。

      圖3 S3C6410多格式視頻編解碼軟件架構(gòu)

      3 MPEG-4視頻壓縮濾波器的設(shè)計(jì)

      3.1 設(shè)計(jì)環(huán)境的配置

      在WinCE中DirectShow作為一個組件被添加到操作系統(tǒng)中,其SDK提供了一套基類源代碼,這些源代碼大大降低了濾波器的設(shè)計(jì)難度。首先需要配置環(huán)境,該濾波器的設(shè)計(jì)工具為Platform Builder for WinCE 6.0(以下簡稱PB6),它是作為VS2005的一個插件來安裝使用的。在PB6下開發(fā)的濾波器實(shí)質(zhì)上是一個Win32動態(tài)鏈接庫,開發(fā)環(huán)境的配置是在當(dāng)前工作目錄下的Sources文件中完成。Sources文件中定義了一些變量,Build工具在編譯源代碼的時候利用它們作為參數(shù)進(jìn)行編譯和鏈接,Nmake工具利用這些參數(shù)生成不同類型的輸出文件[4]。

      對于MFC Encoder濾波器的Sources文件,首先是輸入輸出參數(shù)的基本設(shè)置,分別是輸出目標(biāo)的名稱(不包括擴(kuò)展名)TARGETNAME、與之相關(guān)的.def文件名稱TARGETDEFNAME、編譯后目標(biāo)文件存放路徑 RELEASETYPE、輸出文件類型為dll以及dll文件的入口函數(shù)DLLENTRY,然后是INCLUDES,指定了額外的要包含的頭文件的路徑。這里需要包含多格式視頻編解碼庫源文件的MFCLib目錄,這樣在編譯和鏈接階段編譯器才能找到需要的文件。

      其中SOURCELIBS指定了編譯時需要靜態(tài)鏈接的庫文件,包括DirectShow基類庫和WinCE系統(tǒng)庫。接下來是TARGETLIBS,指定了編譯時需要動態(tài)鏈接的庫文件,除了包含所有SOURCELIBS包含的庫以外,還需要包含S3C6410的多格式視頻編解碼庫,文件名為6410MFCLib_s.lib。最后是 SOURCES和 FILE_VIEW_INCLUDES_FOLDER的設(shè)置,SOURCES包含了當(dāng)前項(xiàng)目所有的源文件和資源文件,而FILE_VIEW_INCLUDES_FOLDER包含了所有的頭文件。

      3.2 設(shè)計(jì)前的分析工作

      設(shè)計(jì)濾波器,選擇一個合適的父類是至關(guān)重要的。該設(shè)計(jì)中的濾波器MFC Encoder接收YUV420格式的視頻數(shù)據(jù),經(jīng)過S3C6410的MFC編碼后形成M4V格式的視頻數(shù)據(jù)并以字節(jié)流的形式輸出,因此父類選擇CTransformFilter。它有一個輸入pin,支持的媒體格式為:主媒體類型MEDIATYPE_Video、子媒體類型MEDIASUBTYPE_YV12,一個輸出pin,支持的媒體格式為:主媒體類型MEDIATYPE_Stream、子媒體類型MEDIASUBTYPE_m4v。在該設(shè)計(jì)中,采用將應(yīng)用框架和應(yīng)用邏輯分離的設(shè)計(jì)理念,這里的濾波器是一個傳輸濾波器,即支持“輸入→編碼處理→輸出”的應(yīng)用框架。而應(yīng)用邏輯部分,即MFC編碼的過程。

      3.3 應(yīng)用框架部分的設(shè)計(jì)

      濾波器框架是指完成濾波器功能的一系列必要的操作函數(shù)。該設(shè)計(jì)中的濾波器MFC Encoder父類為CTransformFilter,必須實(shí)現(xiàn)以下幾個函數(shù)的重載操作:

      1)CheckInputType

      此函數(shù)檢查輸入媒體類型,這里接受的媒體類型為YUV420格式的視頻數(shù)據(jù)。當(dāng)確定接受媒體類型之后,從類型為CMediaType的輸入?yún)?shù)的指針變量mtIn中獲取輸入視頻的寬度、高度、幀速等信息。

      2)CheckTransform

      該函數(shù)不實(shí)現(xiàn)任何功能,因此只用一句return S_OK。3)DecideBufferSize

      該函數(shù)用于內(nèi)存的分配,值得注意的是視頻接收緩沖區(qū)大小的設(shè)置,S3C6410的MFC手冊的建議值是720×480×4×3 byte,因此緩沖區(qū)的大小設(shè)置為720×480×4 byte即1382400 byte,緩沖區(qū)的個數(shù)設(shè)置為3個。

      4)GetMediaType

      該函數(shù)用于返回當(dāng)前濾波器支持的輸出媒體類型,本濾波器輸出的媒體類型為M4V格式的視頻數(shù)據(jù),因此可以在此設(shè)置輸出媒體類型。

      5)Receive

      該函數(shù)接收輸入的YUV420格式的視頻數(shù)據(jù),然后傳給應(yīng)用邏輯部分的函數(shù)MP4Encode編碼壓縮處理,因此該函數(shù)是實(shí)現(xiàn)視頻編碼壓縮的關(guān)鍵。

      6)Transform

      該函數(shù)將編碼壓縮后的數(shù)據(jù)傳至輸出pin,同時將輸入端視頻數(shù)據(jù)的時間戳、播放時間、是否為同步點(diǎn)、媒體類型、是否為預(yù)滾動數(shù)據(jù)、是否為連續(xù)幀等屬性拷貝至輸出端。

      以上是應(yīng)用框架部分需要重載函數(shù)的設(shè)計(jì),其他部分的設(shè)計(jì)方法與設(shè)計(jì)一個普通的傳輸濾波器相同,下文主要介紹應(yīng)用邏輯部分的設(shè)計(jì)。

      3.4 應(yīng)用邏輯部分的設(shè)計(jì)

      應(yīng)用邏輯即實(shí)現(xiàn)邏輯功能的部分,首先采集攝像頭視頻數(shù)據(jù)后送入MFC編碼壓縮,然后送出編碼后的數(shù)據(jù)流。該濾波器使用MP4Encode函數(shù)來實(shí)現(xiàn)視頻壓縮,主要通過調(diào)用S3C6410的多格式視頻編解碼庫中的函數(shù)來實(shí)現(xiàn)視頻壓縮,使用的函數(shù)如下:

      1)SsbSipMPEG4EncodeInit

      該函數(shù)創(chuàng)建一個MPEG-4編碼實(shí)例,輸入?yún)?shù)包括編碼類型(MPEG-4或H.263)、圖像寬度和高度、幀速和比特率,函數(shù)返回值為MPEG-4編碼實(shí)例的句柄。

      2)SsbSipMPEG4EncodeExe

      該函數(shù)將YUV420格式的視頻數(shù)據(jù)編碼為MPEG-4視頻流。

      3)SsbSipMPEG4EncodeGetInBuf

      獲取編碼輸入緩沖區(qū)的內(nèi)存地址,包括指向緩沖區(qū)的地址指針變量,以及以字節(jié)為單位的大小。

      4)SsbSipMPEG4EncodeGetOutBuf

      獲取編碼輸出緩沖區(qū)的內(nèi)存地址,包括指向緩沖區(qū)的地址指針變量,以及以字節(jié)為單位的大小。

      5)SsbSipMPEG4EncodeDeInit

      該函數(shù)釋放當(dāng)前MPEG-4編碼實(shí)例所占用的資源,參數(shù)為當(dāng)前實(shí)例的句柄。

      函數(shù)MP4Encode的具體工作流程如圖4所示,當(dāng)所有設(shè)計(jì)工作完成之后,通過PB6的build工具編譯源文件,生成名為MFCEncFilter.dll的動態(tài)庫文件,這就是設(shè)計(jì)完成的S3C6410下的MPEG-4視頻壓縮濾波器MFC Encoder。

      4 MPEG-4視頻壓縮濾波器的實(shí)踐應(yīng)用

      4.1 在Wince系統(tǒng)中注冊設(shè)計(jì)的濾波器

      與桌面操作系統(tǒng)不同的是,WinCE需要自己填寫注冊信息,而不是使用自注冊函數(shù)DllRegisterServer。在platform.reg文件中,為該濾波器寫入注冊信息,包括濾波器的名稱、CLSID、對應(yīng)的dll文件名稱、輸入pin的屬性和媒體類型、輸出pin的屬性和媒體類型等。

      4.2 使用濾波器圖表采集壓縮視頻

      在WinCE中注冊之后,就可以使用圖2定制的濾波器圖表進(jìn)行視頻采集壓縮處理。通過測試,在640×480分辨力的30 f/s的情況下,視頻編碼效率高,壓縮后的圖像質(zhì)量令人滿意。經(jīng)過統(tǒng)計(jì),在運(yùn)動場景下398幀的YUV420格式的視頻數(shù)據(jù)大小為175 Mbyte,經(jīng)過編碼壓縮后的大小為 5.18 Mbyte,壓縮比率約為 35∶1[5]。

      5 總結(jié)

      通過整個設(shè)計(jì)過程可以看出,在WinCE系統(tǒng)下設(shè)計(jì)一個基于DirectShow架構(gòu)的硬編碼濾波器,首先必須詳細(xì)地了解該多媒體處理器的硬件架構(gòu),然后充分地熟悉其驅(qū)動程序以及提供的編解碼庫,從而為后續(xù)封裝設(shè)計(jì)打下堅(jiān)實(shí)的基礎(chǔ)。而后要熟悉DirectShow架構(gòu),掌握DirectShow濾波器的設(shè)計(jì)方法,最后利用編解碼庫設(shè)計(jì)濾波器。因此,對多媒體處理器軟硬件的熟悉和DirectShow濾波器設(shè)計(jì)方法的掌握是該濾波器設(shè)計(jì)的關(guān)鍵。

      圖4 MP4Encode函數(shù)流程圖

      [1]何宗鍵.Windows CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.

      [2]陸其明.DirectShow開發(fā)指南[M].北京:清華大學(xué)出版社,2003.

      [3]ISO/IEC 14496,MPEG-4 第10 部分:高級視頻編碼 AVC[S].1998.

      [4]汪兵.Windows CE嵌入式高級編程及其實(shí)例詳解[M].北京:中國水利水電出版社,2008.

      [5]宋睿,姜秀華,史惠.移動多媒體廣播壓縮域視頻質(zhì)量客觀評價(jià)[J].電視技術(shù),2010,34(S1):204-206.

      猜你喜歡
      協(xié)處理器編解碼圖表
      基于HBase分布式數(shù)據(jù)庫海量數(shù)據(jù)序列存儲優(yōu)化
      1553B總線控制器編解碼設(shè)計(jì)
      基于HBase分布式數(shù)據(jù)庫海量數(shù)據(jù)序列存儲優(yōu)化
      大型民機(jī)試飛遙測視頻編解碼方法研究
      基于H.265編解碼的高清視頻傳輸系統(tǒng)研究
      電子測試(2018年18期)2018-11-14 02:30:54
      HBase分布式二級索引通用方案研究
      雙周圖表
      足球周刊(2016年14期)2016-11-02 10:54:56
      雙周圖表
      足球周刊(2016年15期)2016-11-02 10:54:16
      雙周圖表
      足球周刊(2016年10期)2016-10-08 18:30:55
      圖表
      世界博覽(2016年16期)2016-09-27 18:25:26
      阿克苏市| 芦溪县| 肇东市| 东乡| 陇南市| 宜君县| 达日县| 黑龙江省| 灵宝市| 丰城市| 海口市| 宾川县| 年辖:市辖区| 盘山县| 延长县| 交城县| 略阳县| 凉山| 乡宁县| 扎鲁特旗| 罗城| 合肥市| 诸城市| 鄢陵县| 长沙县| 万山特区| 大英县| 奉贤区| 百色市| 津市市| 湟中县| 普洱| 图木舒克市| 竹溪县| 佛教| 淮安市| 天祝| 龙陵县| 五原县| 泰安市| 泽库县|