|
  
|
技術貼,有答案-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:- <MediaCodec name="OMX.qcom.video.decoder.mpeg2" type="video/mpeg2" >
- <Quirk name="requires-allocate-on-input-ports" />
- <Quirk name="requires-allocate-on-output-ports"/>
- <Quirk name="defers-output-buffer-allocation"/>
- </MediaCodec>
複製代碼 VC1/WMV:- <MediaCodec name="OMX.qcom.video.decoder.vc1" type="video/x-ms-wmv" >
- <Quirk name="requires-allocate-on-input-ports" />
- <Quirk name="requires-allocate-on-output-ports"/>
- <Quirk name="defers-output-buffer-allocation"/>
- </MediaCodec>
複製代碼 DIVX:- <MediaCodec name="OMX.qcom.video.decoder.divx" type="video/divx" >
- <Quirk name="requires-allocate-on-input-ports" />
- <Quirk name="requires-allocate-on-output-ports"/>
- <Quirk name="defers-output-buffer-allocation"/>
- </MediaCodec>
複製代碼 WMA:- <MediaCodec name="OMX.qcom.audio.decoder.wma" type="audio/x-ms-wma" >
- <Quirk name="requires-allocate-on-input-ports" />
- <Quirk name="requires-allocate-on-output-ports"/>
- <Quirk name="defers-output-buffer-allocation"/>
- </MediaCodec>
複製代碼 |
|
|
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
|