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

打開APP
userphoto
未登錄

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

開通VIP
【轉(zhuǎn)】 Android多媒體支撐庫(kù)OpenCore視頻硬件加速
e的作用簡(jiǎn)單的說(shuō)就是對(duì)媒體(音頻視頻)數(shù)據(jù)進(jìn)行解碼,并輸出到終端設(shè)備。音頻數(shù)據(jù)解碼和輸出比較簡(jiǎn)單,本文重點(diǎn)介紹視頻數(shù)據(jù)的解碼和輸出。為了使OpenCore的視頻播放支持Android系統(tǒng),谷歌定義了兩套視頻輸出方案,一種是由硬件廠商實(shí)現(xiàn)硬件加速的視頻輸出,硬件視頻輸出里面可以調(diào)用硬件Overlay模塊對(duì)輸出的視頻數(shù)據(jù)進(jìn)行硬件混疊,這樣輸出效率會(huì)非常的高;另外一種為谷歌定義的軟視頻輸出,該軟視頻輸出定義為AndroidSurfaceOutput類,這種方案中系統(tǒng)會(huì)調(diào)用SurfaceFilnger對(duì)輸出視頻數(shù)據(jù)進(jìn)行混疊,該混疊為軟件混疊,執(zhí)行效率比較低。請(qǐng)看文件PlayerDriver.cpp中handleSetVideoSurface方法的代碼:
    // attempt to load device-specific video MIOif (mLibHandle != NULL) {VideoMioFactory f = (VideoMioFactory) ::dlsym(mLibHandle, VIDEO_MIO_FACTORY_NAME);if (f != NULL) {mio = f();}}// if no device-specific MIO was created, use the generic oneif (mio == NULL) {LOGW("Using generic video MIO");mio = new AndroidSurfaceOutput();}

可以看出如果mLibHandle不為空,則調(diào)用硬件庫(kù)中的MIO(多媒體IO)工廠方法產(chǎn)生MIO(多媒體IO)。如果mLibHandle為空,則用通用視頻MIO(AndroidSurfaceOutput類)。如果你仔細(xì)研究AndroidSurfaceOutput類你會(huì)發(fā)現(xiàn),其底層調(diào)用的SurfaceFlinger來(lái)進(jìn)行視頻數(shù)據(jù)混疊,然后輸出的,這部分有興趣的朋友可以去查看代碼。

     那么mLibHandle那里初始化的呢?在文件PlayerDriver.cpp中PlayerDriver類的構(gòu)造函數(shù)中有如下代碼:

    // running in emulation?mLibHandle = NULL;char value[PROPERTY_VALUE_MAX];if (property_get("ro.kernel.qemu", value, 0)) {mEmulation = true;LOGV("Emulation mode - using software codecs");} else {// attempt to open h/w specific librarymLibHandle = ::dlopen(MIO_LIBRARY_NAME, RTLD_NOW);if (mLibHandle != NULL) {LOGV("OpenCore hardware module loaded");} else {LOGV("OpenCore hardware module not found");}}

我們可以看出mLibHandle為庫(kù)MIO_LIBRARY_NAME的句柄。請(qǐng)參考下面的代碼:

// library and function name to retrieve device-specific MIOsstatic const char* MIO_LIBRARY_NAME = "libopencorehw.so";static const char* VIDEO_MIO_FACTORY_NAME = "createVideoMio";

    現(xiàn)在我們可以非常清楚的看到如果系統(tǒng)中有l(wèi)ibopencorehw.so庫(kù),則OpenCore將會(huì)調(diào)用該庫(kù)中的createVideoMio函數(shù)來(lái)創(chuàng)建MIO。由此我們可以知道對(duì)OpenCore的視頻輸出硬件加速,其實(shí)就是定義libopencorehw.so庫(kù)。

     那么libopencorehw.so定義在那里呢?因?yàn)閘ibopencorehw.so這個(gè)庫(kù)是和硬件相關(guān)的,不同的硬件會(huì)有不同的實(shí)現(xiàn),所以這個(gè)庫(kù)可以理解成硬件適配層(HAL)的一部分。請(qǐng)參考《怎樣實(shí)現(xiàn)Android系統(tǒng)的HAL(硬件適配層)》。由于硬件的千變?nèi)f化,這里就不給實(shí)現(xiàn)的例子了。這樣的例子非常多,大部分基于ARM芯片,你可以“依葫蘆畫瓢”,定制成自己平臺(tái)的庫(kù)。

     本文簡(jiǎn)單介紹了一下OpenCore視頻輸出的硬件加速的原理。搞清楚視頻輸出硬件加速的原理,對(duì)一些進(jìn)行Android移植到新硬件平臺(tái)的朋友會(huì)有幫助。如有紕漏之處,請(qǐng)各位朋友指正。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android多媒體之OpenCore的A/V同步機(jī)制 - shenbin1430的專欄 ...
Android 2.3.4 RTSP的實(shí)現(xiàn)不在StageFright中,在opencore...
Android Multimedia Framework 架構(gòu)--base on jellybean(1)
嵌入式系統(tǒng)學(xué)習(xí)心得
深入探討 Android 傳感器
如何獲取Android唯一標(biāo)識(shí)(唯一序列號(hào))
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服