ubuntu18.04でv4l2loopbackを利用するとうまく動作しない。
プログラムを動かすとフォーマットの書き込みが失敗している様子。
(xioctl(fdwr, VIDIOC_S_FMT, &vid_format)が-1を返している。)
作者が積極的に編集しているので最新がどうなるかはわからないが、
https://github.com/umlaeute/v4l2loopback/issues/247に
あるような状況で、どうもubuntu18.04ではaptでインストールされる0.10.1ではうまく動かなくて、ソースからインストールする
0.12.3くらいにしないとエラーが出る。(それでもv4l2loopback-ctlなどで実施する2回目のフォーマット更新がうまくいかない気がするが、
実用上は問題なさそうなのでしばらく保留。)
何はともあれ、aptでインストールした、v4l2loopbackを一度消して、手動でインストール。
なお、OSが18.04でなければ、もっと新しいバージョンになっているようなので、問題は起きない。少なくとも19.04では
デフォルトで0.12.3が入る様子。
以下、参考。
$ v4l2-ctrl -d /dev/video(仮想デバイスの番号) --all
Driver Info (not using libv4l2):
Driver name : v4l2 loopback
Card type : mysink
Bus info : platform:v4l2loopback-000
Driver version: 5.3.18
Capabilities : 0x85208001
Video Capture
Video Memory-to-Memory
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x85208001
Video Capture
Video Memory-to-Memory
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Priority: 0
Video input : 0 (loopback: ok)
(ここからフォーマットの情報が表示されない。)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'RGB3'
Field : None
Bytes per Line : 1920
Size Image : 921600
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Format Video Output:
Width/Height : 640/480
Pixel Format : 'RGB3'
Field : None
Bytes per Line : 1920
Size Image : 921600
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
(ここまでが表示されていなかったと思う。)
Streaming Parameters Video Capture:
Frames per second: 30.000 (30/1)
Read buffers : 8
Streaming Parameters Video Output:
Frames per second: 30.000 (30/1)
Write buffers : 8
User Controls
keep_format 0x0098f900 (bool) : default=0 value=1
sustain_framerate 0x0098f901 (bool) : default=0 value=1
timeout 0x0098f902 (int) : min=0 max=100000 step=1 default=0 value=0
timeout_image_io 0x0098f903 (bool) : default=0 value=0