webcamoid/akvcam

libv4l2: error getting pixformat: Invalid argument

Closed this issue · 8 comments

I am using latest master commit (7e58309) with the example config.

+ modinfo akvcam
filename:       /lib/modules/5.4.0-1042-gke/updates/dkms/akvcam.ko
version:        1.2.0
description:    AkVCam Virtual Camera
author:         Gonzalo Exequiel Pedone
license:        GPL
srcversion:     1454E557E4345DE61A4E204
depends:        videobuf2-v4l2,videodev,videobuf2-vmalloc,videobuf2-common
retpoline:      Y
name:           akvcam
vermagic:       5.4.0-1042-gke SMP mod_unload modversions
parm:           loglevel:Debug verbosity (-2 to 7) (int)
parm:           config_file:Full path to virtual cameras config file (string)
[Cameras]
cameras/size = 64
cameras/1/type = output
cameras/1/mode = mmap, userptr, rw
cameras/1/description = Virtual Camera 1 (output device)
cameras/1/formats = 1
cameras/1/videonr = 1
cameras/2/type = output
cameras/2/mode = mmap, userptr, rw
cameras/2/description = Virtual Camera 2 (output device)
cameras/2/formats = 1
cameras/2/videonr = 2
cameras/3/type = output
cameras/3/mode = mmap, userptr, rw
cameras/3/description = Virtual Camera 3 (output device)
cameras/3/formats = 1
cameras/3/videonr = 3
cameras/4/type = output
cameras/4/mode = mmap, userptr, rw
cameras/4/description = Virtual Camera 4 (output device)
cameras/4/formats = 1
cameras/4/videonr = 4
cameras/5/type = output
cameras/5/mode = mmap, userptr, rw
cameras/5/description = Virtual Camera 5 (output device)
cameras/5/formats = 1
cameras/5/videonr = 5
cameras/6/type = output
cameras/6/mode = mmap, userptr, rw
cameras/6/description = Virtual Camera 6 (output device)
cameras/6/formats = 1
cameras/6/videonr = 6
cameras/7/type = output
cameras/7/mode = mmap, userptr, rw
cameras/7/description = Virtual Camera 7 (output device)
cameras/7/formats = 1
cameras/7/videonr = 7
cameras/8/type = output
cameras/8/mode = mmap, userptr, rw
cameras/8/description = Virtual Camera 8 (output device)
cameras/8/formats = 1
cameras/8/videonr = 8
cameras/9/type = output
cameras/9/mode = mmap, userptr, rw
cameras/9/description = Virtual Camera 9 (output device)
cameras/9/formats = 1
cameras/9/videonr = 9
cameras/10/type = output
cameras/10/mode = mmap, userptr, rw
cameras/10/description = Virtual Camera 10 (output device)
cameras/10/formats = 1
cameras/10/videonr = 10
cameras/11/type = output
cameras/11/mode = mmap, userptr, rw
cameras/11/description = Virtual Camera 11 (output device)
cameras/11/formats = 1
cameras/11/videonr = 11
cameras/12/type = output
cameras/12/mode = mmap, userptr, rw
cameras/12/description = Virtual Camera 12 (output device)
cameras/12/formats = 1
cameras/12/videonr = 12
cameras/13/type = output
cameras/13/mode = mmap, userptr, rw
cameras/13/description = Virtual Camera 13 (output device)
cameras/13/formats = 1
cameras/13/videonr = 13
cameras/14/type = output
cameras/14/mode = mmap, userptr, rw
cameras/14/description = Virtual Camera 14 (output device)
cameras/14/formats = 1
cameras/14/videonr = 14
cameras/15/type = output
cameras/15/mode = mmap, userptr, rw
cameras/15/description = Virtual Camera 15 (output device)
cameras/15/formats = 1
cameras/15/videonr = 15
cameras/16/type = output
cameras/16/mode = mmap, userptr, rw
cameras/16/description = Virtual Camera 16 (output device)
cameras/16/formats = 1
cameras/16/videonr = 16
cameras/17/type = output
cameras/17/mode = mmap, userptr, rw
cameras/17/description = Virtual Camera 17 (output device)
cameras/17/formats = 1
cameras/17/videonr = 17
cameras/18/type = output
cameras/18/mode = mmap, userptr, rw
cameras/18/description = Virtual Camera 18 (output device)
cameras/18/formats = 1
cameras/18/videonr = 18
cameras/19/type = output
cameras/19/mode = mmap, userptr, rw
cameras/19/description = Virtual Camera 19 (output device)
cameras/19/formats = 1
cameras/19/videonr = 19
cameras/20/type = output
cameras/20/mode = mmap, userptr, rw
cameras/20/description = Virtual Camera 20 (output device)
cameras/20/formats = 1
cameras/20/videonr = 20
cameras/21/type = output
cameras/21/mode = mmap, userptr, rw
cameras/21/description = Virtual Camera 21 (output device)
cameras/21/formats = 1
cameras/21/videonr = 21
cameras/22/type = output
cameras/22/mode = mmap, userptr, rw
cameras/22/description = Virtual Camera 22 (output device)
cameras/22/formats = 1
cameras/22/videonr = 22
cameras/23/type = output
cameras/23/mode = mmap, userptr, rw
cameras/23/description = Virtual Camera 23 (output device)
cameras/23/formats = 1
cameras/23/videonr = 23
cameras/24/type = output
cameras/24/mode = mmap, userptr, rw
cameras/24/description = Virtual Camera 24 (output device)
cameras/24/formats = 1
cameras/24/videonr = 24
cameras/25/type = output
cameras/25/mode = mmap, userptr, rw
cameras/25/description = Virtual Camera 25 (output device)
cameras/25/formats = 1
cameras/25/videonr = 25
cameras/26/type = output
cameras/26/mode = mmap, userptr, rw
cameras/26/description = Virtual Camera 26 (output device)
cameras/26/formats = 1
cameras/26/videonr = 26
cameras/27/type = output
cameras/27/mode = mmap, userptr, rw
cameras/27/description = Virtual Camera 27 (output device)
cameras/27/formats = 1
cameras/27/videonr = 27
cameras/28/type = output
cameras/28/mode = mmap, userptr, rw
cameras/28/description = Virtual Camera 28 (output device)
cameras/28/formats = 1
cameras/28/videonr = 28
cameras/29/type = output
cameras/29/mode = mmap, userptr, rw
cameras/29/description = Virtual Camera 29 (output device)
cameras/29/formats = 1
cameras/29/videonr = 29
cameras/30/type = output
cameras/30/mode = mmap, userptr, rw
cameras/30/description = Virtual Camera 30 (output device)
cameras/30/formats = 1
cameras/30/videonr = 30
cameras/31/type = output
cameras/31/mode = mmap, userptr, rw
cameras/31/description = Virtual Camera 31 (output device)
cameras/31/formats = 1
cameras/31/videonr = 31
cameras/32/type = output
cameras/32/mode = mmap, userptr, rw
cameras/32/description = Virtual Camera 32 (output device)
cameras/32/formats = 1
cameras/32/videonr = 32
cameras/33/type = capture
cameras/33/mode = mmap, rw
cameras/33/description = Virtual Camera 33
cameras/33/formats = 1, 2
cameras/33/videonr = 33
cameras/34/type = capture
cameras/34/mode = mmap, rw
cameras/34/description = Virtual Camera 34
cameras/34/formats = 1, 2
cameras/34/videonr = 34
cameras/35/type = capture
cameras/35/mode = mmap, rw
cameras/35/description = Virtual Camera 35
cameras/35/formats = 1, 2
cameras/35/videonr = 35
cameras/36/type = capture
cameras/36/mode = mmap, rw
cameras/36/description = Virtual Camera 36
cameras/36/formats = 1, 2
cameras/36/videonr = 36
cameras/37/type = capture
cameras/37/mode = mmap, rw
cameras/37/description = Virtual Camera 37
cameras/37/formats = 1, 2
cameras/37/videonr = 37
cameras/38/type = capture
cameras/38/mode = mmap, rw
cameras/38/description = Virtual Camera 38
cameras/38/formats = 1, 2
cameras/38/videonr = 38
cameras/39/type = capture
cameras/39/mode = mmap, rw
cameras/39/description = Virtual Camera 39
cameras/39/formats = 1, 2
cameras/39/videonr = 39
cameras/40/type = capture
cameras/40/mode = mmap, rw
cameras/40/description = Virtual Camera 40
cameras/40/formats = 1, 2
cameras/40/videonr = 40
cameras/41/type = capture
cameras/41/mode = mmap, rw
cameras/41/description = Virtual Camera 41
cameras/41/formats = 1, 2
cameras/41/videonr = 41
cameras/42/type = capture
cameras/42/mode = mmap, rw
cameras/42/description = Virtual Camera 42
cameras/42/formats = 1, 2
cameras/42/videonr = 42
cameras/43/type = capture
cameras/43/mode = mmap, rw
cameras/43/description = Virtual Camera 43
cameras/43/formats = 1, 2
cameras/43/videonr = 43
cameras/44/type = capture
cameras/44/mode = mmap, rw
cameras/44/description = Virtual Camera 44
cameras/44/formats = 1, 2
cameras/44/videonr = 44
cameras/45/type = capture
cameras/45/mode = mmap, rw
cameras/45/description = Virtual Camera 45
cameras/45/formats = 1, 2
cameras/45/videonr = 45
cameras/46/type = capture
cameras/46/mode = mmap, rw
cameras/46/description = Virtual Camera 46
cameras/46/formats = 1, 2
cameras/46/videonr = 46
cameras/47/type = capture
cameras/47/mode = mmap, rw
cameras/47/description = Virtual Camera 47
cameras/47/formats = 1, 2
cameras/47/videonr = 47
cameras/48/type = capture
cameras/48/mode = mmap, rw
cameras/48/description = Virtual Camera 48
cameras/48/formats = 1, 2
cameras/48/videonr = 48
cameras/49/type = capture
cameras/49/mode = mmap, rw
cameras/49/description = Virtual Camera 49
cameras/49/formats = 1, 2
cameras/49/videonr = 49
cameras/50/type = capture
cameras/50/mode = mmap, rw
cameras/50/description = Virtual Camera 50
cameras/50/formats = 1, 2
cameras/50/videonr = 50
cameras/51/type = capture
cameras/51/mode = mmap, rw
cameras/51/description = Virtual Camera 51
cameras/51/formats = 1, 2
cameras/51/videonr = 51
cameras/52/type = capture
cameras/52/mode = mmap, rw
cameras/52/description = Virtual Camera 52
cameras/52/formats = 1, 2
cameras/52/videonr = 52
cameras/53/type = capture
cameras/53/mode = mmap, rw
cameras/53/description = Virtual Camera 53
cameras/53/formats = 1, 2
cameras/53/videonr = 53
cameras/54/type = capture
cameras/54/mode = mmap, rw
cameras/54/description = Virtual Camera 54
cameras/54/formats = 1, 2
cameras/54/videonr = 54
cameras/55/type = capture
cameras/55/mode = mmap, rw
cameras/55/description = Virtual Camera 55
cameras/55/formats = 1, 2
cameras/55/videonr = 55
cameras/56/type = capture
cameras/56/mode = mmap, rw
cameras/56/description = Virtual Camera 56
cameras/56/formats = 1, 2
cameras/56/videonr = 56
cameras/57/type = capture
cameras/57/mode = mmap, rw
cameras/57/description = Virtual Camera 57
cameras/57/formats = 1, 2
cameras/57/videonr = 57
cameras/58/type = capture
cameras/58/mode = mmap, rw
cameras/58/description = Virtual Camera 58
cameras/58/formats = 1, 2
cameras/58/videonr = 58
cameras/59/type = capture
cameras/59/mode = mmap, rw
cameras/59/description = Virtual Camera 59
cameras/59/formats = 1, 2
cameras/59/videonr = 59
cameras/60/type = capture
cameras/60/mode = mmap, rw
cameras/60/description = Virtual Camera 60
cameras/60/formats = 1, 2
cameras/60/videonr = 60
cameras/61/type = capture
cameras/61/mode = mmap, rw
cameras/61/description = Virtual Camera 61
cameras/61/formats = 1, 2
cameras/61/videonr = 61
cameras/62/type = capture
cameras/62/mode = mmap, rw
cameras/62/description = Virtual Camera 62
cameras/62/formats = 1, 2
cameras/62/videonr = 62
cameras/63/type = capture
cameras/63/mode = mmap, rw
cameras/63/description = Virtual Camera 63
cameras/63/formats = 1, 2
cameras/63/videonr = 63
cameras/64/type = capture
cameras/64/mode = mmap, rw
cameras/64/description = Virtual Camera 64
cameras/64/formats = 1, 2
cameras/64/videonr = 64
[Formats]
formats/size = 2
formats/1/format = RGB24
formats/1/width = 640
formats/1/height = 480
formats/1/fps = 30
formats/2/format = RGB24, YUY2
formats/2/width = 640
formats/2/height = 480
formats/2/fps = 20/1, 15/2
[Connections]
connections/size = 32
connections/1/connection = 1:33
connections/2/connection = 2:34
connections/3/connection = 3:35
connections/4/connection = 4:36
connections/5/connection = 5:37
connections/6/connection = 6:38
connections/7/connection = 7:39
connections/8/connection = 8:40
connections/9/connection = 9:41
connections/10/connection = 10:42
connections/11/connection = 11:43
connections/12/connection = 12:44
connections/13/connection = 13:45
connections/14/connection = 14:46
connections/15/connection = 15:47
connections/16/connection = 16:48
connections/17/connection = 17:49
connections/18/connection = 18:50
connections/19/connection = 19:51
connections/20/connection = 20:52
connections/21/connection = 21:53
connections/22/connection = 22:54
connections/23/connection = 23:55
connections/24/connection = 24:56
connections/25/connection = 25:57
connections/26/connection = 26:58
connections/27/connection = 27:59
connections/28/connection = 28:60
connections/29/connection = 29:61
connections/30/connection = 30:62
connections/31/connection = 31:63
connections/32/connection = 32:64

After more debugging, I found that all v4l2-compliance tests passed EXCEPT for create/querybuf.

v4l2-compliance SHA   : not available

Driver Info:
	Driver name   : akvcam
	Card type     : Virtual Camera 1 (output device
	Bus info      : platform:akvcam-1
	Driver version: 5.4.101
	Capabilities  : 0x85200002
		Video Output
		Read/Write
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps   : 0x05200002
		Video Output
		Read/Write
		Streaming
		Extended Pix Format

Compliance test for device /dev/video1 (not using libv4l2):

Required ioctls:
	test VIDIOC_QUERYCAP: OK

Allow for multiple opens:
	test second video open: OK
	test VIDIOC_QUERYCAP: OK
	test VIDIOC_G/S_PRIORITY: OK
	test for unlimited opens: OK

Debug ioctls:
	test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
	test VIDIOC_LOG_STATUS: OK

Input ioctls:
	test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
	test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
	test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
	test VIDIOC_ENUMAUDIO: OK (Not Supported)
	test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
	test VIDIOC_G/S_AUDIO: OK (Not Supported)
	Inputs: 0 Audio Inputs: 0 Tuners: 0

Output ioctls:
	test VIDIOC_G/S_MODULATOR: OK (Not Supported)
	test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
	test VIDIOC_ENUMAUDOUT: OK (Not Supported)
	test VIDIOC_G/S/ENUMOUTPUT: OK
	test VIDIOC_G/S_AUDOUT: OK (Not Supported)
	Outputs: 1 Audio Outputs: 0 Modulators: 0

Input/Output configuration ioctls:
	test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
	test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
	test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
	test VIDIOC_G/S_EDID: OK (Not Supported)

Test output 0:

	Control ioctls:
		test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
		test VIDIOC_QUERYCTRL: OK
		test VIDIOC_G/S_CTRL: OK
		test VIDIOC_G/S/TRY_EXT_CTRLS: OK
		test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
		test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
		Standard Controls: 3 Private Controls: 3

	Format ioctls:
		test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
		test VIDIOC_G/S_PARM: OK
		test VIDIOC_G_FBUF: OK (Not Supported)
		test VIDIOC_G_FMT: OK
		test VIDIOC_TRY_FMT: OK
		test VIDIOC_S_FMT: OK
		test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
		test Cropping: OK (Not Supported)
		test Composing: OK (Not Supported)
		test Scaling: OK (Not Supported)

	Codec ioctls:
		test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
		test VIDIOC_G_ENC_INDEX: OK (Not Supported)
		test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)

	Buffer ioctls:
		fail: v4l2-test-buffers.cpp(533): check_0(reqbufs.reserved, sizeof(reqbufs.reserved))
		test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: FAIL
		test VIDIOC_EXPBUF: OK

Test output 0:


Total: 43, Succeeded: 42, Failed: 1, Warnings: 0

I will check, the VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF was managed internally by the v4l2 kernel API, not sure if it's a bug in my side, or you hitted some limit in the API.

Thanks v4l2loopback works on the same machine. So I think there is something wrong in the code

v4loopback compliance test on the same node:

v4l2-compliance -d /dev/video0
v4l2-compliance SHA   : not available

Driver Info:
	Driver name   : v4l2 loopback
	Card type     : Dummy video device (0x0000)
	Bus info      : platform:v4l2loopback-000
	Driver version: 5.4.101
	Capabilities  : 0x85208003
		Video Capture
		Video Output
		Video Memory-to-Memory
		Read/Write
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps   : 0x05208003
		Video Capture
		Video Output
		Video Memory-to-Memory
		Read/Write
		Streaming
		Extended Pix Format

Compliance test for device /dev/video0 (not using libv4l2):

Required ioctls:
		fail: v4l2-compliance.cpp(584): (dcaps & input_caps) && (dcaps & output_caps)
	test VIDIOC_QUERYCAP: FAIL

Allow for multiple opens:
	test second video open: OK
		fail: v4l2-compliance.cpp(584): (dcaps & input_caps) && (dcaps & output_caps)
	test VIDIOC_QUERYCAP: FAIL
	test VIDIOC_G/S_PRIORITY: OK
		fail: v4l2-compliance.cpp(632): !ok
	test for unlimited opens: FAIL

Debug ioctls:
	test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
	test VIDIOC_LOG_STATUS: OK (Not Supported)

Input ioctls:
	test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
	test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
	test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
	test VIDIOC_ENUMAUDIO: OK (Not Supported)
	test VIDIOC_G/S/ENUMINPUT: OK
	test VIDIOC_G/S_AUDIO: OK (Not Supported)
	Inputs: 1 Audio Inputs: 0 Tuners: 0

Output ioctls:
	test VIDIOC_G/S_MODULATOR: OK (Not Supported)
	test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
	test VIDIOC_ENUMAUDOUT: OK (Not Supported)
	test VIDIOC_G/S/ENUMOUTPUT: OK
	test VIDIOC_G/S_AUDOUT: OK (Not Supported)
	Outputs: 1 Audio Outputs: 0 Modulators: 0

Input/Output configuration ioctls:
	test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
	test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
	test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
	test VIDIOC_G/S_EDID: OK (Not Supported)

Test input 0:

	Control ioctls:
		test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
		test VIDIOC_QUERYCTRL: OK
		test VIDIOC_G/S_CTRL: OK
		test VIDIOC_G/S/TRY_EXT_CTRLS: OK
		test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
		test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
		Standard Controls: 1 Private Controls: 4

	Format ioctls:
		fail: v4l2-test-formats.cpp(303): Video Capture cap set, but no Video Capture formats defined
		test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: FAIL
		fail: v4l2-test-formats.cpp(1213): got error 22 when setting parms for buftype 1
		test VIDIOC_G/S_PARM: FAIL
		test VIDIOC_G_FBUF: OK (Not Supported)
		fail: v4l2-test-formats.cpp(590): Video Capture cap set, but no Video Capture formats defined
		test VIDIOC_G_FMT: FAIL
		test VIDIOC_TRY_FMT: OK (Not Supported)
		test VIDIOC_S_FMT: OK (Not Supported)
		test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
		test Cropping: OK (Not Supported)
		test Composing: OK (Not Supported)
		fail: v4l2-test-formats.cpp(1645): doioctl(node, VIDIOC_G_FMT, &fmt)
		test Scaling: FAIL

	Codec ioctls:
		test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
		test VIDIOC_G_ENC_INDEX: OK (Not Supported)
		test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)

	Buffer ioctls:
		test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
		test VIDIOC_EXPBUF: OK (Not Supported)

Test input 0:


Total: 43, Succeeded: 36, Failed: 7, Warnings: 0

@taylorchu which version of v4l-utils are you using?

1.14.2-1

Package: v4l-utils
Version: 1.14.2-1
Priority: optional
Section: universe/utils
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Gregor Jasny <gjasny@googlemail.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1461 kB
Depends: libv4l-0 (= 1.14.2-1), libv4l2rds0 (= 1.14.2-1), libc6 (>= 2.15), libgcc1 (>= 1:3.0), libstdc++6 (>= 5.2), libudev1 (>= 183)
Breaks: ivtv-utils (<< 1.4.1-2), media-ctl
Replaces: ivtv-utils (<< 1.4.1-2), media-ctl
Homepage: https://linuxtv.org/downloads/v4l-utils/
Download-Size: 407 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
Description: Collection of command line video4linux utilities

Yes, the fail is pointing here, and VIDIOC_REQBUFS is managed by vb2_ioctl_reqbufs here, I haven't any kind of access to the v4l2_requestbuffers structure, the bug is in the kernel.

I been testing your config.ini as-is and it was working fine for me, all tests passed. One thing I forgot to ask you was the dmesg log, because now I think the test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: FAIL could have been caused by a segfault in the module.
The module should be more stable now with the latest commits, I'll make a new release in a few days.