画面が出ない件の調査中。
E/SurfaceFlinger( 1888): couldn't find an EGLConfig matching the screen format
まずはこれを追っていこう。
frameworks/base/services/surfaceflinger/DisplayHardware.cppのinit()。
ここで、EGLUtils::selectConfigForNativeWindow()がエラーを返している。
EGLUtils::selectConfigForNativeWindow()はlibs/ui/EGLUtils.cppにある。
eglChooseConfig()でconfigを取得し、eglGetConfigAttrib()で属性を取得し、期待するformatと一致するconfigを探す、という動作。
ということはわかるのだが、そもそもeglChooseConfig()とかeglGetConfigAttrib()とかがわからん。
OpenGL関係っぽいことは名前からわかるのだが。。。
関数の頭にeglって書いてあるから、EGLっていうものがあるんだろう。
まずは、EGLが何なのかを知らねば。
-------------------------------------------------------------------------------------------------
EGL。
OpenGL|ESのようなAPIとネイティブ環境の描画をつなぐ層みたいだ。
peer層みたいなものか。
つまり、OpenGL|ESの詳細な実装方法は知らなくても、EGLの各API仕様を満たすように実装しさえすればOpenGL|ESが動かせる、ということになる。
ネイティブとつなぐ部分だから、今回のようにハードウェア環境が違うと手を入れなくてはならないのだろう。
簡単に使い方を知りたいので検索すると、こちらのサイトが見つかった。
うん、今回の処理部分は、ここに書いてある初期化部分と同じ流れだ。
参考にして読み進めよう。
まず、eglChooseConfig()。
init()からはattribとしてEGL_SURFACE_TYPEとEGL_WINDOW_BITを指定している。
これが検索対象ということだろう。
検索値は、format、しかないな。
mNativeWindow.get()は"590200"という値。
なんだこれは・・・。
frameworks/include/ui/PixelFormat.hに定義がある。
型はint32_tで、内容はenumで定義してある。
しかし・・・590200に相当する値がない。
SmartQ5を見ると、ここが拡張されていた。
マージ漏れか。。
いや、ちょっと待て。
うちのSmartQ5はこんな感じだ。
I/gralloc ( 1888): using (fd=25)
I/gralloc ( 1888): id = s3cfb
I/gralloc ( 1888): xres = 800 px
I/gralloc ( 1888): yres = 480 px
I/gralloc ( 1888): xres_virtual = 800 px
I/gralloc ( 1888): yres_virtual = 960 px
I/gralloc ( 1888): bpp = 16
I/gralloc ( 1888): r = 11:5
I/gralloc ( 1888): g = 5:6
I/gralloc ( 1888): b = 0:5
I/gralloc ( 1888): upper_margin = 10
I/gralloc ( 1888): lower_margin = 35
I/gralloc ( 1888): left_margin = 40
I/gralloc ( 1888): right_margin = 216
I/gralloc ( 1888): pixclock = 33358920
I/gralloc ( 1888): width = 800 mm (25.400000 dpi)
I/gralloc ( 1888): height = 480 mm (25.400000 dpi)
I/gralloc ( 1888): refresh rate = 60.00 Hz
RGB565なのだから、PIXEL_FORMAT_RGB_565=HAL_PIXEL_FORMAT_RGB_565=4のはずだ。
mNativeWindow.get()は何を返しているんだ?
これは別の調査としよう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。