L01EのCameraのプロプライエタリが7.1までしか対応できなかったので 8.0以降のCameraを別なビデオドライバを入れて対応させようとする試みです。
新しいカメラとしてv4l2(Video for Linux)のloopbackを使います。
v4l2 loopback デバイスを入れると動画の入出力ができるようになるそうです。
以下のようなコマンドで実行するそうです(ループバックデバイスが /dev/video0の場合)
# ffmpeg -re -i foo.mp4 -f v4l2 /dev/video0
カーネルに組み込む
ソースは、以下を参考にしています。 https://github.com/UDOOboard/Kernel_Unico/blob/master/drivers/video/v4l2loopback.c
v4l2loopback.cをダウンロードし、drivers/video/の下に置きます。
KconfigとMakefileを修正する
drivers/video/Kconfig
config V4L2LOOPBACK tristate "V4l2Loopback module" depends on ARM default n ---help--- V4l2Loopback Module.
drivers/video/Makefile
obj-$(CONFIG_V4L2LOOPBACK) += v4l2loopback.o
v4l2loopback.cの一部を修正します。 ドライバモジュールの開始部分
int __init init_module(void) {
これを以下に変更
static int __init v4l2loopback_init_module(void) {
ドライバモジュールの終了部分
void __exit cleanup_module(void) {
これを以下に変更
static void __exit v4l2loopback_cleanup_module(void) {
スタートからロードするように最後に以下を入れます
module_init(v4l2loopback_init_module); module_exit(v4l2loopback_cleanup_module);
defconfigに以下を追記してカーネルビルドします。
CONFIG_V4L2LOOPBACK=y
v4l2loopbackを入れる前
geehdc:/ # ls /dev/video* /dev/video0 /dev/video1 /dev/video100 /dev/video2 /dev/video3
v4l2loopbackを入れた後
geehdc:/ # ls /dev/video* /dev/video0 /dev/video1 /dev/video100 /dev/video2 /dev/video3 /dev/video4
/dev/video4がloopbackデバイスとして追加されたことが分かりました。
次は、Anroidのdeviceツリーに組み込みます。 以下を参考に組み込みます。 https://github.com/antmicro/android-camera-hal.git