2019/10/09 追記
はじめに
warrior(2.7)でcore-image-baseを作ってgstreamerで遊ぼうとしたら、次のコマンドでエラーが発生した。
$ export GST_GL_WINDOW=dispmanx ; export GST_GL_API=gles2 ; export GST_GL_PLATFORM=egl $ gst-launch-1.0 v4l2src device=/dev/video0 ! videobox ! capsfilter caps=video/x-raw,format=AYUV,width=640,height=480,framerate=30/1 ! glimagesink
エラーの内容は次の通り。
ERROR: Pipeline doesn't want to pause. Got context from element 'sink': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayEGL\)\ gldisplayegl0"; ERROR: from element /GstPipeline:pipeline0/GstGLImageSinkBin:glimagesinkbin0/GstGLImageSink:sink: Failed to initialize egl: EGL_NOT_INITIALIZED
EGLの初期化ができていないらしい。
このコマンドはインターフェース 2019年9月号に掲載された第30回 ラズパイ早送りタイムラプス動画カメラ
で書かせてもらった時に、thud(2.6)で動作確認しているため、
コマンドライン自体に問題はないはず。(リスト5)
ビルド環境の確認
EGL関連で少し思い当たるフシがあるためビルド環境の環境変数を確認。
thud
$ bitbake core-image-base -e | grep '^MACHINE_FEATURES=' MACHINE_FEATURES=" apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio qemu-usermode"
warrior
$ bitbake core-image-base -e | grep '^MACHINE_FEATURES=' MACHINE_FEATURES=" apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio vc4graphics qemu-usermode"
やはり、デフォルトでvc4graphics
が有効化されている。
これはX環境でもOpenGLが使えるようにするドライバを有効にするためのフラグで、オンになっているとドライバがOpenGLのリソースを先に取ってしまうようになる。
そのため、直接EGLを叩くglimagesinkのようなものを動かそうとすると、リソースが取れずに初期化が失敗する。
これを無効化するにはlocal.conf
に次の行を追加する。
MACHINE_FEATURES_remove = "vc4graphics"
2019/10/09 追記
どうやらこの記事を書いた後に、デフォルトで実行になったvc4graphicsを無効にするフラグが実装されていた。
commit 96c8459c9363cc6bf463aedf4d24f92a1ee7d6ba Author: Andrei Gherzan <andrei@gherzan.ro> Date: Fri Sep 13 12:25:49 2019 +0100 rpi-base.inc: Introduce DISABLE_VC4GRAPHICS Since we enabled vc4graphics by default[1], there is no easy way to disable it if needed. This patch introduces a variable (DISABLE_VC4GRAPHICS) which when set to '1' will not add 'vc4graphics' to MACHINE_FEATURES forcing the old behaviour. One could use it in 'local.conf' for example. [1] https://github.com/agherzan/meta-raspberrypi/pull/417 Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
なのでlocal.confに次を追加するほうが、筋がいい感じ。
DISABLE_VC4GRAPHICS = "1"
2019/10/09 追記終了
これで環境変数を再度確認する。
$ bitbake core-image-base -e | grep '^MACHINE_FEATURES=' MACHINE_FEATURES=" apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio qemu-usermode"
すでにビルドしてしまった状態のビルドディレクトリでbitbakeを実行するとファイルが競合するため、一度tmp以下をすべて削除する。
$ rm -rf ./sstate-cache/ tmp/ cache/ bitbake-cookerdaemon.log
-c cleansstate
だとゴミが残るようだし-c cleanall
だとダウンロード済みのソースまで消えてしまうので、あえて手動で消している。(これもっとスマートに解消できる方法ないかなぁ。。。)
まとめ
meta-raspberrypiのwarriorからは、MACHINE_FEATURESにvc4graphics
がデフォルトで入るようになっているので注意が必要。