技術貼,有答案-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就得


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-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:

附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

高手,高手,xda都未有解決方法,mpeg2軟解又多noise..

TOP

工程師岀沒!?

TOP

thx share ^^

TOP

極小係呢到出現既post,唔知可唔可以做個apk出黎呢?

TOP

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



識root識用root explorer已經夠做
整apk要攞root access又要認機免刷錯人地部機, 算啦

TOP

請問有冇 MTK6589 方案?

TOP

請問有冇 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加嘢黎試

TOP

本帖最後由 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硬解


另一樣過癮既係有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>
複製代碼
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP