国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
AndroidCodec集成和videoOverlay
Android Codec 集成和 video Overlay 收藏
 Codec 集成和video overlay是現(xiàn)在FSL對android 多媒體修改的所有東西,codec library以.so的形式放在prebuilt目錄下,沒有源文件 。而video overlay的實(shí)現(xiàn)主要是使用了FSL的ipu底層庫,將視頻數(shù)據(jù) 直接發(fā)送到硬件,由硬件進(jìn)行merge。
A、Codec 集成
1、codec 集成方法
     首先聲明一下俺說的codec集成是指將codec集成到opencore 框架中,網(wǎng)上看有人直接放個庫然后通過jni調(diào)用,這種的方式有點(diǎn)扯蛋,得自己實(shí)現(xiàn)控制,同步,輸出等一堆東西,完全是殺雞取卵,我們就不討論了。要把一個裸的codec放在opencore框架內(nèi)有三種方式:
      a、實(shí)現(xiàn)一個openmax component 注冊在android已存在的omx core上,或者提供自己的omx core
      b、實(shí)現(xiàn)一個封裝了codec的PVMF 標(biāo)準(zhǔn)的 mio(media input/output)
      c、 實(shí)現(xiàn)一個封裝codec的PVMF的Node
      三種方式都涉及到opencore一堆BT的術(shù)語,首先我們得來消化下這幾個術(shù)語,不然很難有個直觀的了解。因?yàn)閛pencore實(shí)在龐大得超出我的能力之外,所以俺只是從整體結(jié)構(gòu)上看了下骨架,我是這么理解的:opencore實(shí)際包含兩部分:一部分就是command管道,一個就是數(shù)據(jù)管道;command就是我們的player/author engine, 而數(shù)據(jù)的流動就是在pvmf 中進(jìn)行。PVMF下面掛載的的基本組件就是Node,就是實(shí)現(xiàn)一個具體功能的單元,比如說file parse, codec, sink等等。前面提到的MIO實(shí)際上也是一個特殊的Node,它的功能就是media input/output 。
       engline接受上層的command,控制PVMF下的Node進(jìn)行工作,而Pvplayer/author是基于engline實(shí)現(xiàn)的一個提供給android使用的SDK,這就是Opencore的工作原理 了。

下載 (67.05 KB)
剛才         在這里只說第一種方式,就是omx封裝的方式,F(xiàn)SL也是采用的這種方式的提供的 HW codec library,并且提供了自己的omx core。換句話就是說FSL實(shí)現(xiàn)了整個/external/opencore/codecs_v2這個目錄的內(nèi)容,雖然這個悶騷的公司只是提供了幾個.so  。我們要想實(shí)現(xiàn)一個完整的omx封裝的codec移植得準(zhǔn)備下面的知識 :
         /external/opencore/doc/openmax_call_sequences.pdf
         /external/opencore/doc/omx_core_integration_guide.pdf
         http://omxil.sourceforge.net/docs/modules.html
         除了這些spec和guide之外,現(xiàn)成的例子就是android已經(jīng)封裝好的omx core了,也就codecs_v2/omx里面的內(nèi)容。如果有裸codec,封裝成omx從技術(shù) 講應(yīng)該是不難的,基本過程就是先封裝成omx,然后再封裝成pv_omx,不過opemax IL層的spec很復(fù)雜,要做的工作可能比較多。
         編譯好的omx library 我們可以按照FSL的方式放在prebuilt目錄下面,并提供相應(yīng)的配置文件,比如fslomx.cfg,在這里說一下我們封裝好的library是如何被調(diào)用的。所有編譯好的library最后都會被放在/system/lib目錄,android會在/etc讀取所有的.cfg文件,然后根據(jù) UUID來判斷是否為omx封裝好的library,如果UUID匹配的話它就會到lib目錄中載入相應(yīng)的library。這里涉及到一個重要的文件 /opencore/external/codecs_v2/omx/omx_mastercore/src /pv_omxmastercore.cpp。由這個文件來負(fù)責(zé)當(dāng)存在多個omx core的時候的處理。
         omxmastercore.cpp管理一個優(yōu)先權(quán)的問題,比如說當(dāng)存在多個omx core,而且每個omx core都具有一個mp3 decode component 時我們應(yīng)該使用哪一個component進(jìn)行解碼?omxmastercore對這個選擇的處理過程是這樣的:
          a、根據(jù).cfg的文件名的字母排列順序載入.cfg文件,也就是說fslomx.cfg會比pvomx.cfg先載入
          b、根據(jù)UUID一個一個判斷是否為omx封裝的library,如果是的話就載入相應(yīng)的library,并對omx core下所有的component進(jìn)行注冊
          [換句話說就是配置文件名字母靠前的會被先載入,相應(yīng)component注冊也會被注冊在前面]
          c、omxmastercore根據(jù)應(yīng)用 程序要求的role(比如mp3)及其要求的配置去注冊的component中尋找滿足要求的component,一旦找到就選定進(jìn)行解碼
          因此如果你想使用自己的codec來進(jìn)行解碼,必須使你的配置文件名排在前面,或者如果不需要其他的omx core的話干脆刪除它的配置文件。我曾經(jīng)做過一個實(shí)驗(yàn),去掉fsl的codec , 51播視頻就會直接卡死,如果去掉android自帶的codec視頻和音頻都無法播放,因?yàn)閒sl現(xiàn)在只提供了視頻的硬解碼,當(dāng)應(yīng)用程序找不到音頻的解碼的時候就會直接報錯。從側(cè)面來說fsl的 video codec還是很牛B的,它調(diào)用了/external/fsl_imx_lib/vpu中的接口。
          因此總的來說實(shí)現(xiàn)codec的移植應(yīng)該是不難的,將來還可以使用偷懶的方法,也就是說只實(shí)現(xiàn)相應(yīng)的component,把它注冊到android已有的 omx core中,這個注冊是在/external/opencore/codecs_v2/omx/omx_common/src /pv_omxregistry.cpp中實(shí)現(xiàn)的。
          除了omx封裝外其他兩種方式我沒仔細(xì)看過,Node方式PV還沒提供文檔,而mio集成方式在doc里面有它的開發(fā)文檔。
B、Video Overlay
     Android原來是video playback的輸出是使用的Isurface接口,也就是說它是用surfaceflinger來實(shí)現(xiàn)window的合并的,SW merge必然導(dǎo)致播放的效率低下,而且資源消耗很高。FSL在這里實(shí)現(xiàn)了硬件overlay的方式來播放視頻,就是使用ipu進(jìn)行硬件的merge,說穿了就是把vpu解碼后的數(shù)據(jù)直接送到ipu的overlay buffer。
     這里涉及到兩個底層的lib,一個就是libipu.so,還一個是libvpu.so,vpu負(fù)責(zé)解碼,而ipu負(fù)責(zé)顯示。在這里要改變的主要是兩個地方,首先要獲得vpu解碼后的數(shù)據(jù),這里主要涉及到下面目錄中的文件:
      /external/opencore/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.h
      /external/opencore/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.cpp
      /external/opencore/nodes/pvomxvideodecnode/src/pvmf_omx_
      然后就是將數(shù)據(jù)送到overlay buffer,這部分修改的內(nèi)容實(shí)際上就是實(shí)現(xiàn)了ipu 的一個sequence,這個sequence的內(nèi)容可以參照:
      /external/fsl_imx_lib/ipu/mxc_ipu_hl_lib.h
      具體的修改內(nèi)容在下面幾個文件:
       /android/android_surface_output.cpp
       /android/android_surface_outpur.h

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/yili_xie/archive/2009/11/12/4803554.aspx
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android Opencore OpenMAX學(xué)習(xí)(1)
opencore and stagefright
Media | Android Developers
Android Opencore OpenMAX學(xué)習(xí)(1)
OpenCores框架
OpenCore隨想
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服