Board logo

標題: 技術貼,有答案-Qualcomm Snapdragon硬解解禁, VC1/MPEG2/WMA通殺 [打印本頁]

作者: kennylam777    時間: 2013-11-3 08:34     標題: 技術貼,有答案-Qualcomm Snapdragon硬解解禁, VC1/MPEG2/WMA通殺

本帖最後由 kennylam777 於 2014-6-20 11:37 編輯

-----------English-----------
Title: Unlocking hardware codecs for VC1/MPEG-2/WMA on Qualcomm Snapdragon platforms
If you need english explaination, please contact me on XDA-developers. As this article was written in Cantonese, chinese-to-english translator won't help.

To those found that was not working, please be reminded that the "libOmxCore.so" plays an important role in this mod.

Suggested source of extracting libOmxCore.so
S4 -> CM11 binary of any MSM8960 devices (e.g. Sony Xperia V)
S4 Pro/600 -> Nexus 4 factory image
800 -> Nexus 5 factory image

I had made this mod working on following devices (ALL stock ROM):
Sony Xperia V (4.1/S4 8960), with libOmxCore.so from CM10.2
ASUS new PadFone infinity (4.2/Snapdragon 800 8974), with libOmxCore.so from Nexus 5 (Factory 4.4.2 image)
Sony Xperia Z (4.2/S4 Pro 8064), with libOmxCore.so from Nexus 4 (Factory 4.4.2 image)
------------------------------

改機涉及風險, 改機後可能變磚, 或者失去保養, 改機者請自行負責。
以下方法需要使用root, 然而root既方法太多而部部機都唔同, 我唔會解答「點樣root」既疑問, 請自行google。

我用緊new PadFone Infinity的, Snapdragon 800開足四核軟解都夠頂唔少1080P video format, 包括WMV9/VC1/H264/MPEG2等等, 但一來食電又熱, 更大問題係VC1呢D format行1080P始終有時唔夠順....

參考過呢個post: 大發現!解除Tegra 3硬解MPEG2封印! http://www.hkepc.com/forum/viewthread.php?tid=1919805
發現/system/etc/media_codecs.xml 可以控制codecs開關

咁又搵到Qualcomm用既decode name: https://android.googlesource.com ... try_table_android.c
係以OMX.qcom.video.decoder開頭的,

咁我攞個media_codecs.xml落黎睇睇啦, 見到係咁樣, 理應剷咗個<!-- --> section就得
[attach]1600748[/attach]

root完機, 改返個media_codecs.xml, upload返上去, 結果仲係唔得.....

搞完一大輪, 先發現原來/system/lib/libOmxCore.so有竅妙, 雖然qc_registry_table_android.c寫齊codec, video decoder既/system/lib/libOmxVdec.so亦有寫齊VC1/MPEG2硬解既部份, 但廠商應該係受於license限制, compile果陣要響OmxCore度抽走相關codec

咁我攞咗同樣係Snapdragon 800既Nexus 5個libOmxCore.so同NPFI個libOmxCore.so, 比較之下見到NPFI係冇咗vc1, 始終Nexus 5係有AOSP support, compile果陣最少qc_registry_table_android係齊


最快最簡單既方法係, 用Nexus 5個libOmxCore.so replace入NPFI既/system/lib/libOmxCore.so, check埋media_codecs.xml, 再用BSPlayer就得咗。

建議提取來源:
Snapdragon 800 -> Nexus 5
Snapdragon 600 -> Nexus 7 2013
Snapdragon S4 Pro -> Nexus 4
緊記backup, 唔得都有得restore


方法1總結
====================
1. libOmxCore.so 要有對應既table, 例如"OMX.qcom.video.decoder.vc1"要用"libOmxVdec.so"既"video_decoder.vc1", 冇的話就冇辦法, 以Snapdragon黎講, 我見S4 Pro(8064)同Snapdragon 800對應既.so都有少少唔同, 唔同系列唔可以互換
2. media_codes.xml要有對應MIME type既entry

折衷方法2
========================
用hex editing既方法, replace咗libOmxCore.so入面兩樣嘢
1. "video_decoder.h263" -> "video_decoder.vc1"
2. "OMX.qcom.video.decoder.h263" -> "OMX.qcom.video.decoder.vc1"
由於長度唔同, vc1呢個字一定要用0x00埋尾

再配合media_codecs.xml既修改, 就可以放棄h263硬解黎換VC1硬解, 而呢個方法響一部用Snapdragon S4 Pro既Xperia Z度係成功的

----------------------------------------------
各種格式於media_codecs.xml既寫法, 經測試MXPlayer係最好, 但最好試埋BSPlayer先落定論


MPEG2:
  1. <MediaCodec name="OMX.qcom.video.decoder.mpeg2" type="video/mpeg2" >
  2.     <Quirk name="requires-allocate-on-input-ports" />
  3.     <Quirk name="requires-allocate-on-output-ports"/>
  4.     <Quirk name="defers-output-buffer-allocation"/>
  5. </MediaCodec>
複製代碼
VC1/WMV:
  1. <MediaCodec name="OMX.qcom.video.decoder.vc1" type="video/x-ms-wmv" >
  2.     <Quirk name="requires-allocate-on-input-ports" />
  3.     <Quirk name="requires-allocate-on-output-ports"/>
  4.     <Quirk name="defers-output-buffer-allocation"/>
  5. </MediaCodec>
複製代碼
DIVX:
  1. <MediaCodec name="OMX.qcom.video.decoder.divx" type="video/divx" >
  2.     <Quirk name="requires-allocate-on-input-ports" />
  3.     <Quirk name="requires-allocate-on-output-ports"/>
  4.     <Quirk name="defers-output-buffer-allocation"/>
  5. </MediaCodec>
複製代碼
WMA:
  1. <MediaCodec name="OMX.qcom.audio.decoder.wma" type="audio/x-ms-wma" >
  2.     <Quirk name="requires-allocate-on-input-ports" />
  3.     <Quirk name="requires-allocate-on-output-ports"/>
  4.     <Quirk name="defers-output-buffer-allocation"/>
  5. </MediaCodec>
複製代碼

作者: kennylam777    時間: 2013-11-3 08:38

本帖最後由 kennylam777 於 2013-11-19 02:28 編輯

NPFI改用Nexus 5既libOmxCore.so後, 試過可用硬解既format

驗明正身, search我D post都知我呢期買咗new PadFone infinity, Snapdragon 800乜都好, 冇理由播片會輸大陸機.....



=====1080 only=====
1. VC1@WMV, 1080p25
Download: https://mega.co.nz/#!YIF2QRIZ!GS ... itI1K8MbvpqGZMrRiKA


2. MPEG2@TS, 1080i60
Download: https://mega.co.nz/#!MY1wGAaB!X1 ... Erc6tBVEAbRS8Djo_3E


3. DIVX@AVI, 1080p30


4. H264@MKV/MP4
一向都得就唔貼了

我部new PadFone infinity要replace咗libOmxCore.so先可以用MXPlayer硬解VC1/MPEG2/DIVX, 可以見到唔係H/W就係H/W+

BSPlayer建議setting:
[attach]1606539[/attach]
[attach]1606540[/attach]
作者: god_md5    時間: 2013-11-8 20:18

高手,高手,xda都未有解決方法,mpeg2軟解又多noise..
作者: Ryan69    時間: 2013-11-8 21:00

工程師岀沒!?
作者: free3sky    時間: 2013-11-8 22:00

thx share ^^

作者: seasonpp    時間: 2013-11-8 23:12

極小係呢到出現既post,唔知可唔可以做個apk出黎呢?
作者: kennylam777    時間: 2013-11-9 03:12

極小係呢到出現既post,唔知可唔可以做個apk出黎呢?
seasonpp 發表於 2013-11-8 23:12



識root識用root explorer已經夠做
整apk要攞root access又要認機免刷錯人地部機, 算啦
作者: Activist    時間: 2013-11-9 03:44

請問有冇 MTK6589 方案?
作者: kennylam777    時間: 2013-11-9 03:47

請問有冇 MTK6589 方案?
Activist 發表於 2013-11-9 03:44


冇用過MTK, 將會有MT6572到手, 到時再試

但media_codecs.xml可以試下跟住呢個表改
https://github.com/Demeterp/w732 ... cs/mtk_omx_core.cfg

唔好用Snapdragon既參數,例如 "<Quirk name="requires-allocate-on-input-ports" />"果D都係Snapdragon專用的, 只跟你部機個media_codec.xml format加嘢黎試
作者: kennylam777    時間: 2013-11-9 04:22

本帖最後由 kennylam777 於 2013-11-9 04:59 編輯
請問有冇 MTK6589 方案?
Activist 發表於 2013-11-9 03:44



另外搵到個MT6589用既media_codecs.xml
https://github.com/varunchitre15 ... on/media_codecs.xml

人地係做俾呢部嘢
http://forum.xda-developers.com/showthread.php?t=2246874

media_codecs.xml度開晒, 又齊晒entry任抄, 正路應該.so都唔使改, 佢係齊vc1同wma但冇mpeg2囉, 但MTK應該有硬解MPEG2的, 試下加呢句
  1. <Decoders>
  2. ...
  3. <MediaCodec name="OMX.MTK.VIDEO.DECODER.MPEG2" type="video/mpeg2" />
  4. ...
  5. </Decoders>
複製代碼
我見D人講MT6589有MPEG2的
http://www.modaco.com/topic/363208-vowney-verne-v5/page-5

再拆咗個ROM黎睇下/system/lib/libMtkOmxVdec.so, 我估MT6589應該有機會開返MPEG2硬解
[attach]1602844[/attach]

另一樣過癮既係有OMX.MTK.VIDEO.DECODER.RV, 知個mime type的話分分鐘RMVB都硬解到, 如果我有MT6589既機, 就會咁試
  1. <Decoders>
  2. ...
  3. <MediaCodec name="OMX.MTK.VIDEO.DECODER.RV" type="video/rv" />
  4. ...
  5. </Decoders>
複製代碼

作者: god_md5    時間: 2013-11-15 20:04

Snapdragon 600 -> Nexus 7 2013
這個有問題,Nexus 7 2013 本身無mpeg2,vc1,wmv硬解,只有h264

https://mega.co.nz/#F!eFt2xRLC!Y5NxLzsBeDto3vHTTg71lg
作者: kennylam777    時間: 2013-11-16 15:17

本帖最後由 kennylam777 於 2013-11-16 15:20 編輯
Snapdragon 600 -> Nexus 7 2013
這個有問題,Nexus 7 2013 本身無mpeg2,vc1,wmv硬解,只有h264

...
god_md5 發表於 2013-11-15 20:04



    Nexus 5 夠冇啦,我咪又係咁用
libOmxCore.so有就得,其實自己compile的話保證得的
作者: billy555    時間: 2013-11-16 16:42

-----------English-----------
Title: Unlocking hardware codecs for VC1/MPEG-2/WMA on Qualcomm Snapdr ...
kennylam777 發表於 2013-11-3 08:34



    請問Snapdragon S4 Pro 可否硬解4k 2160p 片?
作者: oagan    時間: 2013-11-16 16:57

提示: 作者被禁止或刪除 內容自動屏蔽
作者: franklei    時間: 2013-11-16 19:19

勁.....S4 8960 用唔用到?
作者: mtpmanhauyin    時間: 2013-11-16 19:34

咁好ge野放上XDA la
作者: god_md5    時間: 2013-11-17 19:01

回復 12# kennylam777
試左官方原生nexus 7 2013 libOmxCore.so係唔得nexus 5官方都係一樣
作者: kennylam777    時間: 2013-11-18 01:17

回復  kennylam777
試左官方原生nexus 7 2013 libOmxCore.so係唔得nexus 5官方都係一樣
god_md5 發表於 2013-11-17 19:01



    其實我用AOSP Nexus 5果個的, 係D人自己compile
作者: kennylam777    時間: 2013-11-18 01:23

回復  kennylam777
試左官方原生nexus 7 2013 libOmxCore.so係唔得nexus 5官方都係一樣
god_md5 發表於 2013-11-17 19:01



   見唔見到左邊既嘢?

作者: kennylam777    時間: 2013-11-18 01:37

本帖最後由 kennylam777 於 2013-11-18 01:38 編輯
勁.....S4 8960 用唔用到?
franklei 發表於 2013-11-16 19:19



    Xperia V (MSM8960)用到, BSPlayer唔開HW+(4.1 mode)就得

開得返VC1 @ 1080P, MPEG2 @ 1080i都得

而且Xperia V個libOmxCore本來齊codecs, 淨改media_codecs.xml就OK
作者: god_md5    時間: 2013-11-18 20:25

試左兩日NEXUS 7 2013(FLO)都係唔得,抄NEXUS 5個 libOmxCore.so入去係唔得
再抄N5個libOmxVdec.so入去直頭H264都無硬解,這個是原生2013的libOmxCore.so,應該係有,問題係ibOmxVdec.so係甲唔到..(入面可能無)
作者: gl5900as    時間: 2013-11-18 20:34

放D FILES俾人TEST
俾個空間你upload
https://mega.co.nz/
作者: god_md5    時間: 2013-11-18 20:44

回復 22# gl5900as
都唔同機..佢點幫到我
作者: Brainstomer    時間: 2013-11-18 20:49

提示: 作者被禁止或刪除 內容自動屏蔽
作者: god_md5    時間: 2013-11-18 21:10

NEXUS 7 2013 FLO 三個SO同XML,幫手睇下點解會咁
https://dl.dropboxusercontent.com/u/3668343/2013FLO.zip
作者: cyleung19    時間: 2013-11-18 21:24

N7-2013硬解到WMV就正!!!!
作者: kennylam777    時間: 2013-11-18 21:31

本帖最後由 kennylam777 於 2013-11-18 21:33 編輯
試左兩日NEXUS 7 2013(FLO)都係唔得,抄NEXUS 5個 libOmxCore.so入去係唔得
再抄N5個libOmxVdec.so入去直頭H ...
god_md5 發表於 2013-11-18 20:25



    我見到最少有VC1/WMV decoder, 你個media_codecs.xml改成點?

Snapdragon硬解有兩個條件要達成:
1. libOmxCore.so要有指定decoder名, 指落相應既so (e.g. libOmxVDec.so)
2. media_codecs.xml要有指定decoder配MIME type的entry

缺一不可。
作者: kennylam777    時間: 2013-11-18 21:38

本帖最後由 kennylam777 於 2013-11-18 21:51 編輯
NEXUS 7 2013 FLO 三個SO同XML,幫手睇下點解會咁
god_md5 發表於 2013-11-18 21:10


睇完, 評分如下:

1. media_codecs.xml最少有mpeg2一段
2. libOmxCore.so又有"OMX.qcom.video.decoder.mpeg2", 指去libOmxVdec.so
3. libOmxVdec.so又有"OMX.qcom.video.decoder.mpeg2", 當你係用緊原機個libOmxVdec.so

評語: 綜合以上條件, 最少MPEG2可以硬解的, 而WMV(VC1)/DIVX/WMA唔得係缺少咗media_codecs.xml既entries.

我試過BSPlayer同MXPlayer只要唔係用HW+都會得
[attach]1606537[/attach]
[attach]1606538[/attach]
作者: kennylam777    時間: 2013-11-18 21:43

N7-2013硬解到WMV就正!!!!
cyleung19 發表於 2013-11-18 21:24



    我用Xperia V既8960都硬解到VC1既WMV@1080p/720p 30fps, 有root有機不妨自已試咗先
作者: kennylam777    時間: 2013-11-18 21:58

本帖最後由 kennylam777 於 2013-11-19 02:32 編輯

upload咗少少 sample video俾大家試, 起碼得唔得都有個標準 當然我試過得啦

1. VC1@WMV 1080p25, 6.5MB
Download: https://mega.co.nz/#!YIF2QRIZ!GS ... itI1K8MbvpqGZMrRiKA

2. MPEG2@TS, 1080 60i, 34.6MB
Download: https://mega.co.nz/#!MY1wGAaB!X1 ... Erc6tBVEAbRS8Djo_3E
作者: god_md5    時間: 2013-11-19 20:25

n7 2013 flo sample video試左mpeg2,我發現bs player開個時係慢d,係試左硬解唔得先軟解
作者: god_md5    時間: 2013-11-24 20:37

再試左幾日,原來本身n7 2013係有mpeg2硬解,不過得480i,估唔到s600硬解仲差過terga3
作者: peaceso    時間: 2013-11-24 20:53

再試左幾日,原來本身n7 2013係有mpeg2硬解,不過得480i,估唔到s600硬解仲差過terga3 ...
god_md5 發表於 2013-11-24 20:37



T3 其實不錯!
作者: peaceso    時間: 2013-11-24 20:57

試左兩日NEXUS 7 2013(FLO)都係唔得,抄NEXUS 5個 libOmxCore.so入去係唔得
再抄N5個libOmxVdec.so入去直頭H ...
god_md5 發表於 2013-11-18 20:25



想一想, 如果CPU得, google為何不開?
如果licence, 那為何Nexus 5 有?
我覺得google不會為省licence錢的
作者: 羊仔    時間: 2013-11-24 21:08

OP 真心有用
作者: nyjoker    時間: 2013-11-25 16:10

HTC One (Snapdragon 600) 改 media_codecs.xml 成功打開 mpeg2 硬解,
我都奇怪點解舊既 Snapdragon S3 可以硬解, 新U反而唔得,
萬萬估唔到係比人閹割左...
作者: god_md5    時間: 2013-11-25 20:10

我只係估唔到mpeg2依d咁簡單,gpu本身有都有閹
仲要各大開箱,新聞都講到同s800一樣咁..
作者: oo2oo299999    時間: 2013-11-27 04:39

諗住岩岩買左N7 2013 就想上黎試呢D點知...
作者: ryu    時間: 2013-11-30 02:35

試左n7 2013@CM11+bsplayer可以硬解mpeg2 1080i
作者: oo2oo299999    時間: 2013-11-30 14:25

試左n7 2013@CM11+bsplayer可以硬解mpeg2 1080i
ryu 發表於 30/11/2013 02:35



    點試,你有冇改檔案,定就咁CM11就可以解到
作者: rocketeer    時間: 2013-11-30 16:05

唔好意思。新手問一句:
難道用MX player不可以硬體加速VC1,MPEG2?
作者: kennylam777    時間: 2013-11-30 17:49

唔好意思。新手問一句:
難道用MX player不可以硬體加速VC1,MPEG2?
rocketeer 發表於 2013-11-30 16:05


你睇清楚D, 我Capture D圖都係用MX player的
但唔係部部機一買返黎就得, 有D要改先硬解到
作者: ryu    時間: 2013-11-30 17:59

回復 40# oo2oo299999

冇改檔案,就咁可以硬解到
作者: kennylam777    時間: 2013-11-30 18:04

回復  oo2oo299999

冇改檔案,就咁可以硬解到
ryu 發表於 2013-11-30 17:59


CM得係好正常, 因為CM班人直接用Qualcomm放出黎套source唔會再搞個decoder table, 而廠商多D licensing既concern先會去搞走某D decoder。

而且我發現, 如果Player揼死個decoder name(例如"OMX.qcom.video.vc1")去試的話, 唔使XML都會攞到個decoder黎用的, 但行H/W+就一定要有XML。
作者: oo2oo299999    時間: 2013-11-30 19:15

CM得係好正常, 因為CM班人直接用Qualcomm放出黎套source唔會再搞個decoder table, 而廠商多D licensing既 ...
kennylam777 發表於 30/11/2013 18:04
先多謝樓主現身回答,我都係加喵哂xml,再加n5 libcore 都係唔得,連h264都炒埋,我買n7 目的想睇1080動漫,所以此post對我黎講好重要的

(由 HKEPC Android 手機版 發出)
作者: oo2oo299999    時間: 2013-11-30 19:33

回復  oo2oo299999

冇改檔案,就咁可以硬解到
ryu 發表於 30/11/2013 17:59


would you mind give me cm11 link & upload your XML and libcore
thank very much
作者: god_md5    時間: 2013-11-30 19:35

回復 39# ryu
唔係卦,我昨日先試完cm11 26-11-13個版本,無硬解連開都開唔到
作者: ryu    時間: 2013-11-30 19:52

我用UNOFFICIAL CM11 28112013
http://forum.xda-developers.com/showthread.php?t=2537223
作者: god_md5    時間: 2013-11-30 20:23

本帖最後由 god_md5 於 2013-11-30 21:57 編輯

回復 46# oo2oo299999
一定要用cm Kernel先有,libcore都係用返asop一樣,xml同第一頁個改法係一樣
我都唔係咁明CAF係點解..
----
岩岩試完CM11 ,MX PLAYER 1080I MPEG可以硬解,但跳畫面,眼睇最多得15格,TS同TP都唔得FC意思唔大..
BS PLAYER就可以mPEG 1080I夠格,但TS只可SOFTWARE DECODE但唔甲口型,TP唔得
作者: oo2oo299999    時間: 2013-12-1 05:26

我都刷左CM11,暫時試未改
MX PLAYER冇左HW+,播H264 HI10  VC1 即炒,MPEG 2有HW,普通H264 都會少疾
BS PLAYER播H264 HI10  VC1 會轉行SW,MPEG 2 H264有HW...順
作者: oo2oo299999    時間: 2013-12-1 05:33

h264 hi10@24FPS MKV 92.5MB
https://mega.co.nz/#!fdRhDIRL!VB ... j5NRimuUEVp3l2kRfa8
作者: upsagel    時間: 2013-12-1 10:16

犀利!!!我的s4刷左cm後硬解不能,試試樓主的方法先!
作者: oo2oo299999    時間: 2013-12-1 19:05

好困惑
作者: god_md5    時間: 2013-12-5 20:34

原來moto x 個lib仲新過nexus
http://forum.xda-developers.com/showthread.php?t=2555684
作者: bluesky5889    時間: 2013-12-5 23:53

强大!!必须支持!
作者: god_md5    時間: 2013-12-14 20:06

其實依家cm10.2官方好多問題,wifi有password唔得,硬解h264又lagger
官方話會出新版10.2.1,nexus 7 2013 dj版,無wifi問題.mpeg2 1080i硬解都ok,係有d
h264 唔得
http://forum.xda-developers.com/showthread.php?t=2391779
作者: kennylam777    時間: 2014-1-8 18:51

有D人話Nexus 7 2013搞極都唔得, 我想問你地有冇改libOmxCore.so?

其實可以試下用CM10.2/CM11既libOmxCore.so去取代的

如果CM ROM得, 咁即係Stock Nexus ROM都做咗腳
作者: jojo_cat    時間: 2014-1-8 22:48

回復 57# kennylam777


    刚试了cm-10.2.0-flo的libOmxCore.so替换,修改了media_codecs.xml后,用mx player还是不能硬解vc-1
作者: god_md5    時間: 2014-1-9 00:56

Nexus 7 2013官方CM10.2/CM11同stock rom一樣都係無h264以外既硬解,依家cm同asop係一樣
都係無用caf 核心,有都唔一定有其他硬解
作者: tatgor    時間: 2014-1-9 01:17

極Pro@@
作者: 041987    時間: 2014-1-28 20:48

岩岩試g2  未root用es file check
睇左media_codecs.xml同libOmxCore.so都好似冇lock死
但係就冇libOmxVdec.so
睇mpeg2都用緊軟解
應該點做?
作者: 041987    時間: 2014-2-4 14:30

岩岩root完之後試
本身用MX player轉到硬解
但係有聲出黑畫面
應該要點做?

個d檔:
https://dl.dropboxusercontent.co ... frYfOQKM7ONTRXdvWSQ
作者: 迷    時間: 2014-3-6 20:38

回復 10# kennylam777


  係部mtk6589 電話試左

1) 加返 <MediaCodec name="OMX.MTK.VIDEO.DECODER.MPEG2" type="video/mpeg2" />
2) 雨custom rom 個 libMtkOmxVdec.so 代替原機個

你兩條片 都係硬解唔到的





歡迎光臨 電腦領域 HKEPC Hardware (https://h1.hkepc.com/forum/) Powered by Discuz! 7.2