webdino / gecko-embedded

Main (meta) repository for Project GEM (Gecko Embedded)
https://gecko-embedded.org
21 stars 2 forks source link

RZ/G2(R-Car): H.264のハードウェアデコードのサポート #58

Closed cosmo0920 closed 5 years ago

cosmo0920 commented 6 years ago

RZ/G2(R-Car)でH.264のハードウェアデコードに対応させたい。 RZ/G1EやRZ/G1向けの #3 のOpenMAXパッチを当てた場合、モジュールの読み込みには成功するが初期化に失敗する。 この原因を調査してH.264のハードウェアデコードをサポートしたい。

NOTE: This GSX library has the time limitation by reason of an evaluation module
.
(firefox:3267): Gdk-WARNING **: ../../../gtk+-3.18.8/gdk/wayland/gdkcursor-wayla
nd.c:169: Unable to load hand2 from the cursor theme
ts:1508327328.478728    level:0x00010000        func:OmxrMcApiProxy_ComponentTun
nelRequest(1327)        tid:3332        mes:not implemented
ts:1508327328.481203    level:0x00010000        func:OmxrMcApiProxy_ComponentTun
nelRequest(1327)        tid:3333        mes:not implemented
ts:1508327328.510405    level:0x00010000        func:OmxrMcApiProxy_GetParameter
(743)   tid:3333        mes:Invalid parameter
ashie commented 6 years ago

ちなみにRZ/G1では/usr/local/libにOpenMAXのライブラリがあったが、R-Car Gen3では/usr/libに移動されている。これについては対応済み。

cosmo0920 commented 6 years ago

R-Car M3ではOpenMAXの動作確認をする前に、以下のカーネルモジュールをロードしておく必要あり:

root@m3ulcb:~# modprobe -a mmngr mmngrbuf vspm_if uvcs_drv 
ashie commented 5 years ago

未だに少ししか調べられてないが

ts:1508327328.478728    level:0x00010000        func:OmxrMcApiProxy_ComponentTun
nelRequest(1327)        tid:3332        mes:not implemented

少しログを増やしてみたところ、OMX_GetHandle()でそのままOMX_ErrorNotImplementedが返ってきているようだ。あれこれ設定を施す前の初期化の段階で止まっている。

GStreamerでは再生できるようだし、初期化の段階ではOMX_GetHandle()でハンドルを取得してOMX_GetState()OMX_StateLoadedであることをチェックするだけで、基本的に違いはないはず。 ということでコード側で出来ることはあまり無いように見えている。その前の設定の問題だろうか?

R-Car Gen3のgst-omxとの違いをよく見ていけば原因はわかると思うが...

anyakichi commented 5 years ago

修正して https://github.com/webdino/meta-browser/tree/firefox-60esr に修正適用済み。

下記は調査時の記録。

発生状況

発生原因

修正内容

補足事項

ashie commented 5 years ago

R-Car Gen3のgst-omxのOpenMAX ILのヘッダーは以下:

stdintの型に置き換えられている。

typedef uint32_t OMX_U32;
typedef int32_t OMX_S32;

以下のコミットでOpenMAX ILのヘッダーが更新されているようだ

バージョンを更新しないで中身が入れ替わってる? KhronosのOpenMAX ILのページは以下:

今ダウンロードできるものは更新されたもののみのようだ。

ashie commented 5 years ago

ちゃんと直すらなら、Firefox側のOpenMAX ILヘッダーも全て更新されたものに置き換えた方が良いか。

anyakichi commented 5 years ago

なるほど。OpenMAX IL のオリジナル側が正しく修正されているのであれば、それで置き換えてしまったほうが良さそうですね。時間のあるときに全置き換え版のパッチも作ってみて、問題なさそうであればそちらに置き換えてしまおうと思います。

実は当初の動作確認は stdint の型で修正して行っていたのですが、OpenMAX IL のヘッダとして stdint.h などを include して良いようなコンテキストを想定しているものかどうかもわからなかったので、一番保守的な(修正量が少ない)方法で今回は直していました。

renesas-rcar の方も一旦 int 化してからヘッダをアップデートしているので、同じような経緯をたどってはいるようですね。

https://github.com/renesas-rcar/gst-omx/commit/c003e37ece50ff0f964786bb3c4d04ddb45d29ea

ashie commented 5 years ago

なるほどなるほど。gst-omxもまったく同じ罠にはまっていた感じですかね。 私はそもそもcaller側でアライメントずれているという発想ができてなかったので感謝です!

anyakichi commented 4 years ago

アップストリームにも報告済み。

https://bugzilla.mozilla.org/show_bug.cgi?id=1590977 https://github.com/OSSystems/meta-browser/pull/321