Android のCamera DeivceをDummy(Mock)のCameraにする

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