MAINTAINERS | 6 + drivers/media/Kconfig | 13 + drivers/media/Makefile | 2 + drivers/media/virtio/Makefile | 8 + drivers/media/virtio/protocol.h | 287 +++++ drivers/media/virtio/scatterlist_builder.c | 574 +++++++++ drivers/media/virtio/scatterlist_builder.h | 112 ++ drivers/media/virtio/session.h | 130 ++ drivers/media/virtio/virtio_media.h | 95 ++ drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++ drivers/media/virtio/virtio_media_ioctls.c | 1338 ++++++++++++++++++++ 11 files changed, 3524 insertions(+) create mode 100644 drivers/media/virtio/Makefile create mode 100644 drivers/media/virtio/protocol.h create mode 100644 drivers/media/virtio/scatterlist_builder.c create mode 100644 drivers/media/virtio/scatterlist_builder.h create mode 100644 drivers/media/virtio/session.h create mode 100644 drivers/media/virtio/virtio_media.h create mode 100644 drivers/media/virtio/virtio_media_driver.c create mode 100644 drivers/media/virtio/virtio_media_ioctls.c
From: Alexandre Courbot <gnurou@gmail.com>
Add the first version of the virtio-media driver.
This driver acts roughly as a V4L2 relay between user-space and the
virtio virtual device on the host, so it is relatively simple, yet
unconventional. It doesn't use VB2 or other frameworks typically used in
a V4L2 driver, and most of its complexity resides in correctly and
efficiently building the virtio descriptor chain to pass to the host,
avoiding copies whenever possible. This is done by
scatterlist_builder.[ch].
This version supports MMAP buffers, while USERPTR buffers can also be
enabled through a driver option. DMABUF support is still pending.
NOTE: This depends on the VIRTIO ID being added in this patch:
https://lore.kernel.org/all/20260310-virtio-media-id-v1-1-be211bcf682b@redhat.com
Signed-off-by: Alexandre Courbot <gnurou@gmail.com>
Co-developed-by: Brian Daniels <briandaniels@google.com>
Signed-off-by: Brian Daniels <briandaniels@google.com>
---
Guest Setup
Tests were ran on a Debian 12 guest running with crosvm. The guest image
was created with:
$ virt-builder debian-12 --root-password password:""
Build crosvm and launch the guest starting at the "Crosvm" section on
this page: https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md#crosvm
NOTE: Before running v4l2-compliance in the guest, you need to install
v4l-utils and ffmpeg:
$ apt update && apt install v4l-utils ffmpeg
---
Compliance Testing
This was tested using v4l2-compliance. Since virtio-media serves as
a proxy to host devices for the guest VMs, we expect the guest
compliance test to essentially match the host compliance test for the
same device.
NOTE: v4l2-compliance changes its test behavior depending on the driver
name. In the guest, the driver name for virtio-media proxied-devices is
always "virtio-media", even if the actual host device has a driver name
of e.g. "uvcvideo". To ensure the test is consistent between the host
and the guest, I created a patch for the v4l2-compliance tool that
allows you to override the driver name. All test results that follow use
this patch:
https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/
All tests used a Logitech USB Webcam C925e.
As tested on the host:
$ v4l2-compliance -d1 -s
v4l2-compliance 1.33.0-5471, 64 bits, 64-bit time_t
v4l2-compliance SHA: 9f2d3ea879ff 2026-05-28 14:45:11
Compliance test for uvcvideo device /dev/video1:
Driver Info:
Driver name : uvcvideo
Card type : Logitech Webcam C925e
Bus info : usb-0000:04:00.1-3
Driver version : 6.18.14
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : Logitech Webcam C925e
Serial : 686F371F
Bus info : usb-0000:04:00.1-3
Media version : 6.18.14
Hardware revision: 0x00000016 (22)
Driver version : 6.18.14
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : Logitech Webcam C925e
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x0200001f: from remote pad 0x100000a of entity 'Processing 3' (Video Pixel Formatter): Data, Enabled, Immutable
Required ioctls:
test MC information (see 'Media Driver Info' above): OK
test VIDIOC_QUERYCAP: OK
test invalid ioctls: OK
Allow for multiple opens:
test second /dev/video1 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 (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 (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 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)
Control ioctls (Input 0):
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
test VIDIOC_QUERYCTRL: OK
test VIDIOC_G/S_CTRL: OK
fail: v4l2-test-controls.cpp(983): ret != EINVAL (got 13)
test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 19 Private Controls: 0
Format ioctls (Input 0):
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 (Input 0):
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 (Input 0):
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test CREATE_BUFS maximum buffers: OK
test VIDIOC_REMOVE_BUFS: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)
test blocking wait: OK
Test input 0:
Streaming ioctls:
test read/write: OK (Not Supported)
Video Capture: Frame #000
Video Capture: Frame #001
Video Capture: Frame #002
Video Capture: Frame #003
Video Capture: Frame #004
Video Capture: Frame #005
Video Capture: Frame #006
Video Capture: Frame #007
Video Capture: Frame #008
Video Capture: Frame #009
Video Capture: Frame #010
Video Capture: Frame #011
Video Capture: Frame #012
Video Capture: Frame #013
Video Capture: Frame #014
Video Capture: Frame #015
Video Capture: Frame #016
Video Capture: Frame #017
Video Capture: Frame #018
Video Capture: Frame #019
Video Capture: Frame #020
Video Capture: Frame #021
Video Capture: Frame #022
Video Capture: Frame #023
Video Capture: Frame #024
Video Capture: Frame #025
Video Capture: Frame #026
Video Capture: Frame #027
Video Capture: Frame #028
Video Capture: Frame #029
Video Capture: Frame #030
Video Capture: Frame #031
Video Capture: Frame #032
Video Capture: Frame #033
Video Capture: Frame #034
Video Capture: Frame #035
Video Capture: Frame #036
Video Capture: Frame #037
Video Capture: Frame #038
Video Capture: Frame #039
Video Capture: Frame #040
Video Capture: Frame #041
Video Capture: Frame #042
Video Capture: Frame #043
Video Capture: Frame #044
Video Capture: Frame #045
Video Capture: Frame #046
Video Capture: Frame #047
Video Capture: Frame #048
Video Capture: Frame #049
Video Capture: Frame #050
Video Capture: Frame #051
Video Capture: Frame #052
Video Capture: Frame #053
Video Capture: Frame #054
Video Capture: Frame #055
Video Capture: Frame #056
Video Capture: Frame #057
Video Capture: Frame #058
Video Capture: Frame #059
test MMAP (no poll, REQBUFS): OK
Video Capture: Frame #000 (select)
Video Capture: Frame #001 (select)
Video Capture: Frame #002 (select)
Video Capture: Frame #003 (select)
Video Capture: Frame #004 (select)
Video Capture: Frame #005 (select)
Video Capture: Frame #006 (select)
Video Capture: Frame #007 (select)
Video Capture: Frame #008 (select)
Video Capture: Frame #009 (select)
Video Capture: Frame #010 (select)
Video Capture: Frame #011 (select)
Video Capture: Frame #012 (select)
Video Capture: Frame #013 (select)
Video Capture: Frame #014 (select)
Video Capture: Frame #015 (select)
Video Capture: Frame #016 (select)
Video Capture: Frame #017 (select)
Video Capture: Frame #018 (select)
Video Capture: Frame #019 (select)
Video Capture: Frame #020 (select)
Video Capture: Frame #021 (select)
Video Capture: Frame #022 (select)
Video Capture: Frame #023 (select)
Video Capture: Frame #024 (select)
Video Capture: Frame #025 (select)
Video Capture: Frame #026 (select)
Video Capture: Frame #027 (select)
Video Capture: Frame #028 (select)
Video Capture: Frame #029 (select)
Video Capture: Frame #030 (select)
Video Capture: Frame #031 (select)
Video Capture: Frame #032 (select)
Video Capture: Frame #033 (select)
Video Capture: Frame #034 (select)
Video Capture: Frame #035 (select)
Video Capture: Frame #036 (select)
Video Capture: Frame #037 (select)
Video Capture: Frame #038 (select)
Video Capture: Frame #039 (select)
Video Capture: Frame #040 (select)
Video Capture: Frame #041 (select)
Video Capture: Frame #042 (select)
Video Capture: Frame #043 (select)
Video Capture: Frame #044 (select)
Video Capture: Frame #045 (select)
Video Capture: Frame #046 (select)
Video Capture: Frame #047 (select)
Video Capture: Frame #048 (select)
Video Capture: Frame #049 (select)
Video Capture: Frame #050 (select)
Video Capture: Frame #051 (select)
Video Capture: Frame #052 (select)
Video Capture: Frame #053 (select)
Video Capture: Frame #054 (select)
Video Capture: Frame #055 (select)
Video Capture: Frame #056 (select)
Video Capture: Frame #057 (select)
Video Capture: Frame #058 (select)
Video Capture: Frame #059 (select)
test MMAP (select, REQBUFS): OK
Video Capture: Frame #000 (epoll)
Video Capture: Frame #001 (epoll)
Video Capture: Frame #002 (epoll)
Video Capture: Frame #003 (epoll)
Video Capture: Frame #004 (epoll)
Video Capture: Frame #005 (epoll)
Video Capture: Frame #006 (epoll)
Video Capture: Frame #007 (epoll)
Video Capture: Frame #008 (epoll)
Video Capture: Frame #009 (epoll)
Video Capture: Frame #010 (epoll)
Video Capture: Frame #011 (epoll)
Video Capture: Frame #012 (epoll)
Video Capture: Frame #013 (epoll)
Video Capture: Frame #014 (epoll)
Video Capture: Frame #015 (epoll)
Video Capture: Frame #016 (epoll)
Video Capture: Frame #017 (epoll)
Video Capture: Frame #018 (epoll)
Video Capture: Frame #019 (epoll)
Video Capture: Frame #020 (epoll)
Video Capture: Frame #021 (epoll)
Video Capture: Frame #022 (epoll)
Video Capture: Frame #023 (epoll)
Video Capture: Frame #024 (epoll)
Video Capture: Frame #025 (epoll)
Video Capture: Frame #026 (epoll)
Video Capture: Frame #027 (epoll)
Video Capture: Frame #028 (epoll)
Video Capture: Frame #029 (epoll)
Video Capture: Frame #030 (epoll)
Video Capture: Frame #031 (epoll)
Video Capture: Frame #032 (epoll)
Video Capture: Frame #033 (epoll)
Video Capture: Frame #034 (epoll)
Video Capture: Frame #035 (epoll)
Video Capture: Frame #036 (epoll)
Video Capture: Frame #037 (epoll)
Video Capture: Frame #038 (epoll)
Video Capture: Frame #039 (epoll)
Video Capture: Frame #040 (epoll)
Video Capture: Frame #041 (epoll)
Video Capture: Frame #042 (epoll)
Video Capture: Frame #043 (epoll)
Video Capture: Frame #044 (epoll)
Video Capture: Frame #045 (epoll)
Video Capture: Frame #046 (epoll)
Video Capture: Frame #047 (epoll)
Video Capture: Frame #048 (epoll)
Video Capture: Frame #049 (epoll)
Video Capture: Frame #050 (epoll)
Video Capture: Frame #051 (epoll)
Video Capture: Frame #052 (epoll)
Video Capture: Frame #053 (epoll)
Video Capture: Frame #054 (epoll)
Video Capture: Frame #055 (epoll)
Video Capture: Frame #056 (epoll)
Video Capture: Frame #057 (epoll)
Video Capture: Frame #058 (epoll)
Video Capture: Frame #059 (epoll)
test MMAP (epoll, REQBUFS): OK
Video Capture: Frame #000
Video Capture: Frame #001
Video Capture: Frame #002
Video Capture: Frame #003
Video Capture: Frame #004
Video Capture: Frame #005
Video Capture: Frame #006
Video Capture: Frame #007
Video Capture: Frame #008
Video Capture: Frame #009
Video Capture: Frame #010
Video Capture: Frame #011
Video Capture: Frame #012
Video Capture: Frame #013
Video Capture: Frame #014
Video Capture: Frame #015
Video Capture: Frame #016
Video Capture: Frame #017
Video Capture: Frame #018
Video Capture: Frame #019
Video Capture: Frame #020
Video Capture: Frame #021
Video Capture: Frame #022
Video Capture: Frame #023
Video Capture: Frame #024
Video Capture: Frame #025
Video Capture: Frame #026
Video Capture: Frame #027
Video Capture: Frame #028
Video Capture: Frame #029
Video Capture: Frame #030
Video Capture: Frame #031
Video Capture: Frame #032
Video Capture: Frame #033
Video Capture: Frame #034
Video Capture: Frame #035
Video Capture: Frame #036
Video Capture: Frame #037
Video Capture: Frame #038
Video Capture: Frame #039
Video Capture: Frame #040
Video Capture: Frame #041
Video Capture: Frame #042
Video Capture: Frame #043
Video Capture: Frame #044
Video Capture: Frame #045
Video Capture: Frame #046
Video Capture: Frame #047
Video Capture: Frame #048
Video Capture: Frame #049
Video Capture: Frame #050
Video Capture: Frame #051
Video Capture: Frame #052
Video Capture: Frame #053
Video Capture: Frame #054
Video Capture: Frame #055
Video Capture: Frame #056
Video Capture: Frame #057
Video Capture: Frame #058
Video Capture: Frame #059
test MMAP (no poll, CREATE_BUFS): OK
Video Capture: Frame #000 (select)
Video Capture: Frame #001 (select)
Video Capture: Frame #002 (select)
Video Capture: Frame #003 (select)
Video Capture: Frame #004 (select)
Video Capture: Frame #005 (select)
Video Capture: Frame #006 (select)
Video Capture: Frame #007 (select)
Video Capture: Frame #008 (select)
Video Capture: Frame #009 (select)
Video Capture: Frame #010 (select)
Video Capture: Frame #011 (select)
Video Capture: Frame #012 (select)
Video Capture: Frame #013 (select)
Video Capture: Frame #014 (select)
Video Capture: Frame #015 (select)
Video Capture: Frame #016 (select)
Video Capture: Frame #017 (select)
Video Capture: Frame #018 (select)
Video Capture: Frame #019 (select)
Video Capture: Frame #020 (select)
Video Capture: Frame #021 (select)
Video Capture: Frame #022 (select)
Video Capture: Frame #023 (select)
Video Capture: Frame #024 (select)
Video Capture: Frame #025 (select)
Video Capture: Frame #026 (select)
Video Capture: Frame #027 (select)
Video Capture: Frame #028 (select)
Video Capture: Frame #029 (select)
Video Capture: Frame #030 (select)
Video Capture: Frame #031 (select)
Video Capture: Frame #032 (select)
Video Capture: Frame #033 (select)
Video Capture: Frame #034 (select)
Video Capture: Frame #035 (select)
Video Capture: Frame #036 (select)
Video Capture: Frame #037 (select)
Video Capture: Frame #038 (select)
Video Capture: Frame #039 (select)
Video Capture: Frame #040 (select)
Video Capture: Frame #041 (select)
Video Capture: Frame #042 (select)
Video Capture: Frame #043 (select)
Video Capture: Frame #044 (select)
Video Capture: Frame #045 (select)
Video Capture: Frame #046 (select)
Video Capture: Frame #047 (select)
Video Capture: Frame #048 (select)
Video Capture: Frame #049 (select)
Video Capture: Frame #050 (select)
Video Capture: Frame #051 (select)
Video Capture: Frame #052 (select)
Video Capture: Frame #053 (select)
Video Capture: Frame #054 (select)
Video Capture: Frame #055 (select)
Video Capture: Frame #056 (select)
Video Capture: Frame #057 (select)
Video Capture: Frame #058 (select)
Video Capture: Frame #059 (select)
test MMAP (select, CREATE_BUFS): OK
Video Capture: Frame #000 (epoll)
Video Capture: Frame #001 (epoll)
Video Capture: Frame #002 (epoll)
Video Capture: Frame #003 (epoll)
Video Capture: Frame #004 (epoll)
Video Capture: Frame #005 (epoll)
Video Capture: Frame #006 (epoll)
Video Capture: Frame #007 (epoll)
Video Capture: Frame #008 (epoll)
Video Capture: Frame #009 (epoll)
Video Capture: Frame #010 (epoll)
Video Capture: Frame #011 (epoll)
Video Capture: Frame #012 (epoll)
Video Capture: Frame #013 (epoll)
Video Capture: Frame #014 (epoll)
Video Capture: Frame #015 (epoll)
Video Capture: Frame #016 (epoll)
Video Capture: Frame #017 (epoll)
Video Capture: Frame #018 (epoll)
Video Capture: Frame #019 (epoll)
Video Capture: Frame #020 (epoll)
Video Capture: Frame #021 (epoll)
Video Capture: Frame #022 (epoll)
Video Capture: Frame #023 (epoll)
Video Capture: Frame #024 (epoll)
Video Capture: Frame #025 (epoll)
Video Capture: Frame #026 (epoll)
Video Capture: Frame #027 (epoll)
Video Capture: Frame #028 (epoll)
Video Capture: Frame #029 (epoll)
Video Capture: Frame #030 (epoll)
Video Capture: Frame #031 (epoll)
Video Capture: Frame #032 (epoll)
Video Capture: Frame #033 (epoll)
Video Capture: Frame #034 (epoll)
Video Capture: Frame #035 (epoll)
Video Capture: Frame #036 (epoll)
Video Capture: Frame #037 (epoll)
Video Capture: Frame #038 (epoll)
Video Capture: Frame #039 (epoll)
Video Capture: Frame #040 (epoll)
Video Capture: Frame #041 (epoll)
Video Capture: Frame #042 (epoll)
Video Capture: Frame #043 (epoll)
Video Capture: Frame #044 (epoll)
Video Capture: Frame #045 (epoll)
Video Capture: Frame #046 (epoll)
Video Capture: Frame #047 (epoll)
Video Capture: Frame #048 (epoll)
Video Capture: Frame #049 (epoll)
Video Capture: Frame #050 (epoll)
Video Capture: Frame #051 (epoll)
Video Capture: Frame #052 (epoll)
Video Capture: Frame #053 (epoll)
Video Capture: Frame #054 (epoll)
Video Capture: Frame #055 (epoll)
Video Capture: Frame #056 (epoll)
Video Capture: Frame #057 (epoll)
Video Capture: Frame #058 (epoll)
Video Capture: Frame #059 (epoll)
test MMAP (epoll, CREATE_BUFS): OK
Video Capture: Frame #000
Video Capture: Frame #001
Video Capture: Frame #002
Video Capture: Frame #003
Video Capture: Frame #004
Video Capture: Frame #005
Video Capture: Frame #006
Video Capture: Frame #007
Video Capture: Frame #008
Video Capture: Frame #009
Video Capture: Frame #010
Video Capture: Frame #011
Video Capture: Frame #012
Video Capture: Frame #013
Video Capture: Frame #014
Video Capture: Frame #015
Video Capture: Frame #016
Video Capture: Frame #017
Video Capture: Frame #018
Video Capture: Frame #019
Video Capture: Frame #020
Video Capture: Frame #021
Video Capture: Frame #022
Video Capture: Frame #023
Video Capture: Frame #024
Video Capture: Frame #025
Video Capture: Frame #026
Video Capture: Frame #027
Video Capture: Frame #028
Video Capture: Frame #029
Video Capture: Frame #030
Video Capture: Frame #031
Video Capture: Frame #032
Video Capture: Frame #033
Video Capture: Frame #034
Video Capture: Frame #035
Video Capture: Frame #036
Video Capture: Frame #037
Video Capture: Frame #038
Video Capture: Frame #039
Video Capture: Frame #040
Video Capture: Frame #041
Video Capture: Frame #042
Video Capture: Frame #043
Video Capture: Frame #044
Video Capture: Frame #045
Video Capture: Frame #046
Video Capture: Frame #047
Video Capture: Frame #048
Video Capture: Frame #049
Video Capture: Frame #050
Video Capture: Frame #051
Video Capture: Frame #052
Video Capture: Frame #053
Video Capture: Frame #054
Video Capture: Frame #055
Video Capture: Frame #056
Video Capture: Frame #057
Video Capture: Frame #058
Video Capture: Frame #059
test USERPTR (no poll): OK
Video Capture: Frame #000 (select)
Video Capture: Frame #001 (select)
Video Capture: Frame #002 (select)
Video Capture: Frame #003 (select)
Video Capture: Frame #004 (select)
Video Capture: Frame #005 (select)
Video Capture: Frame #006 (select)
Video Capture: Frame #007 (select)
Video Capture: Frame #008 (select)
Video Capture: Frame #009 (select)
Video Capture: Frame #010 (select)
Video Capture: Frame #011 (select)
Video Capture: Frame #012 (select)
Video Capture: Frame #013 (select)
Video Capture: Frame #014 (select)
Video Capture: Frame #015 (select)
Video Capture: Frame #016 (select)
Video Capture: Frame #017 (select)
Video Capture: Frame #018 (select)
Video Capture: Frame #019 (select)
Video Capture: Frame #020 (select)
Video Capture: Frame #021 (select)
Video Capture: Frame #022 (select)
Video Capture: Frame #023 (select)
Video Capture: Frame #024 (select)
Video Capture: Frame #025 (select)
Video Capture: Frame #026 (select)
Video Capture: Frame #027 (select)
Video Capture: Frame #028 (select)
Video Capture: Frame #029 (select)
Video Capture: Frame #030 (select)
Video Capture: Frame #031 (select)
Video Capture: Frame #032 (select)
Video Capture: Frame #033 (select)
Video Capture: Frame #034 (select)
Video Capture: Frame #035 (select)
Video Capture: Frame #036 (select)
Video Capture: Frame #037 (select)
Video Capture: Frame #038 (select)
Video Capture: Frame #039 (select)
Video Capture: Frame #040 (select)
Video Capture: Frame #041 (select)
Video Capture: Frame #042 (select)
Video Capture: Frame #043 (select)
Video Capture: Frame #044 (select)
Video Capture: Frame #045 (select)
Video Capture: Frame #046 (select)
Video Capture: Frame #047 (select)
Video Capture: Frame #048 (select)
Video Capture: Frame #049 (select)
Video Capture: Frame #050 (select)
Video Capture: Frame #051 (select)
Video Capture: Frame #052 (select)
Video Capture: Frame #053 (select)
Video Capture: Frame #054 (select)
Video Capture: Frame #055 (select)
Video Capture: Frame #056 (select)
Video Capture: Frame #057 (select)
Video Capture: Frame #058 (select)
Video Capture: Frame #059 (select)
test USERPTR (select): OK
test DMABUF: Cannot test, specify --expbuf-device
Total for uvcvideo device /dev/video1: 58, Succeeded: 57, Failed: 1, Warnings: 0
As tested on the guest:
$ v4l2-compliance -d0 -s --driver-name uvcvideo
v4l2-compliance 1.33.0-5457, 64 bits, 64-bit time_t
v4l2-compliance SHA: e7e240f546f3 2026-05-28 17:06:12
Compliance test for uvcvideo device (overridden from virtio-media) /dev/video0:
Driver Info:
Driver name : uvcvideo
Card type : Logitech Webcam C925e
Bus info : platform:virtio-media
Driver version : 7.1.0
Capabilities : 0x84200001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Required ioctls:
test VIDIOC_QUERYCAP: OK
test invalid ioctls: OK
Allow for multiple opens:
test second /dev/video0 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 (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
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 (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 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)
Control ioctls (Input 0):
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
test VIDIOC_QUERYCTRL: OK
test VIDIOC_G/S_CTRL: OK
fail: v4l2-test-controls.cpp(981): ret (got 22)
test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 19 Private Controls: 0
Format ioctls (Input 0):
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 (Input 0):
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 (Input 0):
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test CREATE_BUFS maximum buffers: OK
test VIDIOC_REMOVE_BUFS: OK
test VIDIOC_EXPBUF: OK (Not Supported)
test Requests: OK (Not Supported)
test blocking wait: OK
Test input 0:
Streaming ioctls:
test read/write: OK (Not Supported)
Video Capture: Frame #000
Video Capture: Frame #001
Video Capture: Frame #002
Video Capture: Frame #003
Video Capture: Frame #004
Video Capture: Frame #005
Video Capture: Frame #006
Video Capture: Frame #007
Video Capture: Frame #008
Video Capture: Frame #009
Video Capture: Frame #010
Video Capture: Frame #011
Video Capture: Frame #012
Video Capture: Frame #013
Video Capture: Frame #014
Video Capture: Frame #015
Video Capture: Frame #016
Video Capture: Frame #017
Video Capture: Frame #018
Video Capture: Frame #019
Video Capture: Frame #020
Video Capture: Frame #021
Video Capture: Frame #022
Video Capture: Frame #023
Video Capture: Frame #024
Video Capture: Frame #025
Video Capture: Frame #026
Video Capture: Frame #027
Video Capture: Frame #028
Video Capture: Frame #029
Video Capture: Frame #030
Video Capture: Frame #031
Video Capture: Frame #032
Video Capture: Frame #033
Video Capture: Frame #034
Video Capture: Frame #035
Video Capture: Frame #036
Video Capture: Frame #037
Video Capture: Frame #038
Video Capture: Frame #039
Video Capture: Frame #040
Video Capture: Frame #041
Video Capture: Frame #042
Video Capture: Frame #043
Video Capture: Frame #044
Video Capture: Frame #045
Video Capture: Frame #046
Video Capture: Frame #047
Video Capture: Frame #048
Video Capture: Frame #049
Video Capture: Frame #050
Video Capture: Frame #051
Video Capture: Frame #052
Video Capture: Frame #053
Video Capture: Frame #054
Video Capture: Frame #055
Video Capture: Frame #056
Video Capture: Frame #057
Video Capture: Frame #058
Video Capture: Frame #059
test MMAP (no poll, REQBUFS): OK
Video Capture: Frame #000 (select)
Video Capture: Frame #001 (select)
Video Capture: Frame #002 (select)
Video Capture: Frame #003 (select)
Video Capture: Frame #004 (select)
Video Capture: Frame #005 (select)
Video Capture: Frame #006 (select)
Video Capture: Frame #007 (select)
Video Capture: Frame #008 (select)
Video Capture: Frame #009 (select)
Video Capture: Frame #010 (select)
Video Capture: Frame #011 (select)
Video Capture: Frame #012 (select)
Video Capture: Frame #013 (select)
Video Capture: Frame #014 (select)
Video Capture: Frame #015 (select)
Video Capture: Frame #016 (select)
Video Capture: Frame #017 (select)
Video Capture: Frame #018 (select)
Video Capture: Frame #019 (select)
Video Capture: Frame #020 (select)
Video Capture: Frame #021 (select)
Video Capture: Frame #022 (select)
Video Capture: Frame #023 (select)
Video Capture: Frame #024 (select)
Video Capture: Frame #025 (select)
Video Capture: Frame #026 (select)
Video Capture: Frame #027 (select)
Video Capture: Frame #028 (select)
Video Capture: Frame #029 (select)
Video Capture: Frame #030 (select)
Video Capture: Frame #031 (select)
Video Capture: Frame #032 (select)
Video Capture: Frame #033 (select)
Video Capture: Frame #034 (select)
Video Capture: Frame #035 (select)
Video Capture: Frame #036 (select)
Video Capture: Frame #037 (select)
Video Capture: Frame #038 (select)
Video Capture: Frame #039 (select)
Video Capture: Frame #040 (select)
Video Capture: Frame #041 (select)
Video Capture: Frame #042 (select)
Video Capture: Frame #043 (select)
Video Capture: Frame #044 (select)
Video Capture: Frame #045 (select)
Video Capture: Frame #046 (select)
Video Capture: Frame #047 (select)
Video Capture: Frame #048 (select)
Video Capture: Frame #049 (select)
Video Capture: Frame #050 (select)
Video Capture: Frame #051 (select)
Video Capture: Frame #052 (select)
Video Capture: Frame #053 (select)
Video Capture: Frame #054 (select)
Video Capture: Frame #055 (select)
Video Capture: Frame #056 (select)
Video Capture: Frame #057 (select)
Video Capture: Frame #058 (select)
Video Capture: Frame #059 (select)
test MMAP (select, REQBUFS): OK
Video Capture: Frame #000 (epoll)
Video Capture: Frame #001 (epoll)
Video Capture: Frame #002 (epoll)
Video Capture: Frame #003 (epoll)
Video Capture: Frame #004 (epoll)
Video Capture: Frame #005 (epoll)
Video Capture: Frame #006 (epoll)
Video Capture: Frame #007 (epoll)
Video Capture: Frame #008 (epoll)
Video Capture: Frame #009 (epoll)
Video Capture: Frame #010 (epoll)
Video Capture: Frame #011 (epoll)
Video Capture: Frame #012 (epoll)
Video Capture: Frame #013 (epoll)
Video Capture: Frame #014 (epoll)
Video Capture: Frame #015 (epoll)
Video Capture: Frame #016 (epoll)
Video Capture: Frame #017 (epoll)
Video Capture: Frame #018 (epoll)
Video Capture: Frame #019 (epoll)
Video Capture: Frame #020 (epoll)
Video Capture: Frame #021 (epoll)
Video Capture: Frame #022 (epoll)
Video Capture: Frame #023 (epoll)
Video Capture: Frame #024 (epoll)
Video Capture: Frame #025 (epoll)
Video Capture: Frame #026 (epoll)
Video Capture: Frame #027 (epoll)
Video Capture: Frame #028 (epoll)
Video Capture: Frame #029 (epoll)
Video Capture: Frame #030 (epoll)
Video Capture: Frame #031 (epoll)
Video Capture: Frame #032 (epoll)
Video Capture: Frame #033 (epoll)
Video Capture: Frame #034 (epoll)
Video Capture: Frame #035 (epoll)
Video Capture: Frame #036 (epoll)
Video Capture: Frame #037 (epoll)
Video Capture: Frame #038 (epoll)
Video Capture: Frame #039 (epoll)
Video Capture: Frame #040 (epoll)
Video Capture: Frame #041 (epoll)
Video Capture: Frame #042 (epoll)
Video Capture: Frame #043 (epoll)
Video Capture: Frame #044 (epoll)
Video Capture: Frame #045 (epoll)
Video Capture: Frame #046 (epoll)
Video Capture: Frame #047 (epoll)
Video Capture: Frame #048 (epoll)
Video Capture: Frame #049 (epoll)
Video Capture: Frame #050 (epoll)
Video Capture: Frame #051 (epoll)
Video Capture: Frame #052 (epoll)
Video Capture: Frame #053 (epoll)
Video Capture: Frame #054 (epoll)
Video Capture: Frame #055 (epoll)
Video Capture: Frame #056 (epoll)
Video Capture: Frame #057 (epoll)
Video Capture: Frame #058 (epoll)
Video Capture: Frame #059 (epoll)
test MMAP (epoll, REQBUFS): OK
Video Capture: Frame #000
Video Capture: Frame #001
Video Capture: Frame #002
Video Capture: Frame #003
Video Capture: Frame #004
Video Capture: Frame #005
Video Capture: Frame #006
Video Capture: Frame #007
Video Capture: Frame #008
Video Capture: Frame #009
Video Capture: Frame #010
Video Capture: Frame #011
Video Capture: Frame #012
Video Capture: Frame #013
Video Capture: Frame #014
Video Capture: Frame #015
Video Capture: Frame #016
Video Capture: Frame #017
Video Capture: Frame #018
Video Capture: Frame #019
Video Capture: Frame #020
Video Capture: Frame #021
Video Capture: Frame #022
Video Capture: Frame #023
Video Capture: Frame #024
Video Capture: Frame #025
Video Capture: Frame #026
Video Capture: Frame #027
Video Capture: Frame #028
Video Capture: Frame #029
Video Capture: Frame #030
Video Capture: Frame #031
Video Capture: Frame #032
Video Capture: Frame #033
Video Capture: Frame #034
Video Capture: Frame #035
Video Capture: Frame #036
Video Capture: Frame #037
Video Capture: Frame #038
Video Capture: Frame #039
Video Capture: Frame #040
Video Capture: Frame #041
Video Capture: Frame #042
Video Capture: Frame #043
Video Capture: Frame #044
Video Capture: Frame #045
Video Capture: Frame #046
Video Capture: Frame #047
Video Capture: Frame #048
Video Capture: Frame #049
Video Capture: Frame #050
Video Capture: Frame #051
Video Capture: Frame #052
Video Capture: Frame #053
Video Capture: Frame #054
Video Capture: Frame #055
Video Capture: Frame #056
Video Capture: Frame #057
Video Capture: Frame #058
Video Capture: Frame #059
test MMAP (no poll, CREATE_BUFS): OK
Video Capture: Frame #000 (select)
Video Capture: Frame #001 (select)
Video Capture: Frame #002 (select)
Video Capture: Frame #003 (select)
Video Capture: Frame #004 (select)
Video Capture: Frame #005 (select)
Video Capture: Frame #006 (select)
Video Capture: Frame #007 (select)
Video Capture: Frame #008 (select)
Video Capture: Frame #009 (select)
Video Capture: Frame #010 (select)
Video Capture: Frame #011 (select)
Video Capture: Frame #012 (select)
Video Capture: Frame #013 (select)
Video Capture: Frame #014 (select)
Video Capture: Frame #015 (select)
Video Capture: Frame #016 (select)
Video Capture: Frame #017 (select)
Video Capture: Frame #018 (select)
Video Capture: Frame #019 (select)
Video Capture: Frame #020 (select)
Video Capture: Frame #021 (select)
Video Capture: Frame #022 (select)
Video Capture: Frame #023 (select)
Video Capture: Frame #024 (select)
Video Capture: Frame #025 (select)
Video Capture: Frame #026 (select)
Video Capture: Frame #027 (select)
Video Capture: Frame #028 (select)
Video Capture: Frame #029 (select)
Video Capture: Frame #030 (select)
Video Capture: Frame #031 (select)
Video Capture: Frame #032 (select)
Video Capture: Frame #033 (select)
Video Capture: Frame #034 (select)
Video Capture: Frame #035 (select)
Video Capture: Frame #036 (select)
Video Capture: Frame #037 (select)
Video Capture: Frame #038 (select)
Video Capture: Frame #039 (select)
Video Capture: Frame #040 (select)
Video Capture: Frame #041 (select)
Video Capture: Frame #042 (select)
Video Capture: Frame #043 (select)
Video Capture: Frame #044 (select)
Video Capture: Frame #045 (select)
Video Capture: Frame #046 (select)
Video Capture: Frame #047 (select)
Video Capture: Frame #048 (select)
Video Capture: Frame #049 (select)
Video Capture: Frame #050 (select)
Video Capture: Frame #051 (select)
Video Capture: Frame #052 (select)
Video Capture: Frame #053 (select)
Video Capture: Frame #054 (select)
Video Capture: Frame #055 (select)
Video Capture: Frame #056 (select)
Video Capture: Frame #057 (select)
Video Capture: Frame #058 (select)
Video Capture: Frame #059 (select)
test MMAP (select, CREATE_BUFS): OK
Video Capture: Frame #000 (epoll)
Video Capture: Frame #001 (epoll)
Video Capture: Frame #002 (epoll)
Video Capture: Frame #003 (epoll)
Video Capture: Frame #004 (epoll)
Video Capture: Frame #005 (epoll)
Video Capture: Frame #006 (epoll)
Video Capture: Frame #007 (epoll)
Video Capture: Frame #008 (epoll)
Video Capture: Frame #009 (epoll)
Video Capture: Frame #010 (epoll)
Video Capture: Frame #011 (epoll)
Video Capture: Frame #012 (epoll)
Video Capture: Frame #013 (epoll)
Video Capture: Frame #014 (epoll)
Video Capture: Frame #015 (epoll)
Video Capture: Frame #016 (epoll)
Video Capture: Frame #017 (epoll)
Video Capture: Frame #018 (epoll)
Video Capture: Frame #019 (epoll)
Video Capture: Frame #020 (epoll)
Video Capture: Frame #021 (epoll)
Video Capture: Frame #022 (epoll)
Video Capture: Frame #023 (epoll)
Video Capture: Frame #024 (epoll)
Video Capture: Frame #025 (epoll)
Video Capture: Frame #026 (epoll)
Video Capture: Frame #027 (epoll)
Video Capture: Frame #028 (epoll)
Video Capture: Frame #029 (epoll)
Video Capture: Frame #030 (epoll)
Video Capture: Frame #031 (epoll)
Video Capture: Frame #032 (epoll)
Video Capture: Frame #033 (epoll)
Video Capture: Frame #034 (epoll)
Video Capture: Frame #035 (epoll)
Video Capture: Frame #036 (epoll)
Video Capture: Frame #037 (epoll)
Video Capture: Frame #038 (epoll)
Video Capture: Frame #039 (epoll)
Video Capture: Frame #040 (epoll)
Video Capture: Frame #041 (epoll)
Video Capture: Frame #042 (epoll)
Video Capture: Frame #043 (epoll)
Video Capture: Frame #044 (epoll)
Video Capture: Frame #045 (epoll)
Video Capture: Frame #046 (epoll)
Video Capture: Frame #047 (epoll)
Video Capture: Frame #048 (epoll)
Video Capture: Frame #049 (epoll)
Video Capture: Frame #050 (epoll)
Video Capture: Frame #051 (epoll)
Video Capture: Frame #052 (epoll)
Video Capture: Frame #053 (epoll)
Video Capture: Frame #054 (epoll)
Video Capture: Frame #055 (epoll)
Video Capture: Frame #056 (epoll)
Video Capture: Frame #057 (epoll)
Video Capture: Frame #058 (epoll)
Video Capture: Frame #059 (epoll)
test MMAP (epoll, CREATE_BUFS): OK
test USERPTR (no poll): OK (Not Supported)
test USERPTR (select): OK (Not Supported)
test DMABUF (no poll): OK (Not Supported)
test DMABUF (select): OK (Not Supported)
Total for uvcvideo device /dev/video0: 59, Succeeded: 58, Failed: 1, Warnings: 0
---
Changes in v4:
- Rebased on top of v7.1-rc1
- Replace usages of filep->private_data with file_to_v4l2_fh()
throughout the driver
- Link to v3: https://lore.kernel.org/r/20250412-virtio-media-v3-1-97dc94c18398@gmail.com
Changes in v3:
- Rebased on top of v6.15-rc1 and removes obsolete control callbacks.
- Link to v2: https://lore.kernel.org/r/20250201-virtio-media-v2-1-ac840681452d@gmail.com
Changes in v2:
- Fixed kernel test robot and media CI warnings (ignored a few false
positives).
- Changed in-driver email address to personal one since my Google one
will soon become invalid.
- Link to v1: https://lore.kernel.org/r/20250123-virtio-media-v1-1-81e2549b86b9@gmail.com
Brian Daniels (8):
media: virtio: Add protocol
media: virtio: Add virtio-media driver structs and function
declarations
media: virtio: Add virtio-media session related structures
media: virtio: Add scatterlist_builder
media: virtio: Add virtio_media_ioctls
media: virtio: Add virtio_media_driver
media: virtio: Add virtio-media to the build system
media: virtio: Add MAINTAINERS entry
MAINTAINERS | 6 +
drivers/media/Kconfig | 13 +
drivers/media/Makefile | 2 +
drivers/media/virtio/Makefile | 8 +
drivers/media/virtio/protocol.h | 287 +++++
drivers/media/virtio/scatterlist_builder.c | 574 +++++++++
drivers/media/virtio/scatterlist_builder.h | 112 ++
drivers/media/virtio/session.h | 130 ++
drivers/media/virtio/virtio_media.h | 95 ++
drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++
drivers/media/virtio/virtio_media_ioctls.c | 1338 ++++++++++++++++++++
11 files changed, 3524 insertions(+)
create mode 100644 drivers/media/virtio/Makefile
create mode 100644 drivers/media/virtio/protocol.h
create mode 100644 drivers/media/virtio/scatterlist_builder.c
create mode 100644 drivers/media/virtio/scatterlist_builder.h
create mode 100644 drivers/media/virtio/session.h
create mode 100644 drivers/media/virtio/virtio_media.h
create mode 100644 drivers/media/virtio/virtio_media_driver.c
create mode 100644 drivers/media/virtio/virtio_media_ioctls.c
base-commit: 06cb687a5132fcffe624c0070576ab852ac6b568
--
2.55.0.rc0.799.gd6f94ed593-goog
On Mon, Jun 22, 2026 at 04:43:35PM -0400, Brian Daniels wrote: > From: Alexandre Courbot <gnurou@gmail.com> > > Add the first version of the virtio-media driver. > > This driver acts roughly as a V4L2 relay between user-space and the > virtio virtual device on the host, so it is relatively simple, yet > unconventional. It doesn't use VB2 or other frameworks typically used in > a V4L2 driver, and most of its complexity resides in correctly and > efficiently building the virtio descriptor chain to pass to the host, > avoiding copies whenever possible. This is done by > scatterlist_builder.[ch]. > > This version supports MMAP buffers, while USERPTR buffers can also be > enabled through a driver option. DMABUF support is still pending. > > NOTE: This depends on the VIRTIO ID being added in this patch: > https://lore.kernel.org/all/20260310-virtio-media-id-v1-1-be211bcf682b@redhat.com > > Signed-off-by: Alexandre Courbot <gnurou@gmail.com> > Co-developed-by: Brian Daniels <briandaniels@google.com> > Signed-off-by: Brian Daniels <briandaniels@google.com> Thanks for the patches! Sent some comments on individual patches. > --- > Guest Setup > > Tests were ran on a Debian 12 guest running with crosvm. The guest image > was created with: > > $ virt-builder debian-12 --root-password password:"" > > Build crosvm and launch the guest starting at the "Crosvm" section on > this page: https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md#crosvm > > NOTE: Before running v4l2-compliance in the guest, you need to install > v4l-utils and ffmpeg: > > $ apt update && apt install v4l-utils ffmpeg > > --- > Compliance Testing > > This was tested using v4l2-compliance. Since virtio-media serves as > a proxy to host devices for the guest VMs, we expect the guest > compliance test to essentially match the host compliance test for the > same device. > > NOTE: v4l2-compliance changes its test behavior depending on the driver > name. In the guest, the driver name for virtio-media proxied-devices is > always "virtio-media", even if the actual host device has a driver name > of e.g. "uvcvideo". To ensure the test is consistent between the host > and the guest, I created a patch for the v4l2-compliance tool that > allows you to override the driver name. All test results that follow use > this patch: > https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/ > > All tests used a Logitech USB Webcam C925e. > > As tested on the host: > > $ v4l2-compliance -d1 -s > > v4l2-compliance 1.33.0-5471, 64 bits, 64-bit time_t > v4l2-compliance SHA: 9f2d3ea879ff 2026-05-28 14:45:11 > > Compliance test for uvcvideo device /dev/video1: > > Driver Info: > Driver name : uvcvideo > Card type : Logitech Webcam C925e > Bus info : usb-0000:04:00.1-3 > Driver version : 6.18.14 > Capabilities : 0x84a00001 > Video Capture > Metadata Capture > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x04200001 > Video Capture > Streaming > Extended Pix Format > Media Driver Info: > Driver name : uvcvideo > Model : Logitech Webcam C925e > Serial : 686F371F > Bus info : usb-0000:04:00.1-3 > Media version : 6.18.14 > Hardware revision: 0x00000016 (22) > Driver version : 6.18.14 > Interface Info: > ID : 0x03000002 > Type : V4L Video > Entity Info: > ID : 0x00000001 (1) > Name : Logitech Webcam C925e > Function : V4L2 I/O > Flags : default > Pad 0x01000007 : 0: Sink > Link 0x0200001f: from remote pad 0x100000a of entity 'Processing 3' (Video Pixel Formatter): Data, Enabled, Immutable > > Required ioctls: > test MC information (see 'Media Driver Info' above): OK > test VIDIOC_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/video1 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 (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 (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 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) > > Control ioctls (Input 0): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > fail: v4l2-test-controls.cpp(983): ret != EINVAL (got 13) > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 19 Private Controls: 0 > > Format ioctls (Input 0): > 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 (Input 0): > 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 (Input 0): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > test blocking wait: OK > > Test input 0: > > Streaming ioctls: > test read/write: OK (Not Supported) > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > Video Capture: Frame #010 > Video Capture: Frame #011 > Video Capture: Frame #012 > Video Capture: Frame #013 > Video Capture: Frame #014 > Video Capture: Frame #015 > Video Capture: Frame #016 > Video Capture: Frame #017 > Video Capture: Frame #018 > Video Capture: Frame #019 > Video Capture: Frame #020 > Video Capture: Frame #021 > Video Capture: Frame #022 > Video Capture: Frame #023 > Video Capture: Frame #024 > Video Capture: Frame #025 > Video Capture: Frame #026 > Video Capture: Frame #027 > Video Capture: Frame #028 > Video Capture: Frame #029 > Video Capture: Frame #030 > Video Capture: Frame #031 > Video Capture: Frame #032 > Video Capture: Frame #033 > Video Capture: Frame #034 > Video Capture: Frame #035 > Video Capture: Frame #036 > Video Capture: Frame #037 > Video Capture: Frame #038 > Video Capture: Frame #039 > Video Capture: Frame #040 > Video Capture: Frame #041 > Video Capture: Frame #042 > Video Capture: Frame #043 > Video Capture: Frame #044 > Video Capture: Frame #045 > Video Capture: Frame #046 > Video Capture: Frame #047 > Video Capture: Frame #048 > Video Capture: Frame #049 > Video Capture: Frame #050 > Video Capture: Frame #051 > Video Capture: Frame #052 > Video Capture: Frame #053 > Video Capture: Frame #054 > Video Capture: Frame #055 > Video Capture: Frame #056 > Video Capture: Frame #057 > Video Capture: Frame #058 > Video Capture: Frame #059 > > test MMAP (no poll, REQBUFS): OK > > Video Capture: Frame #000 (select) > Video Capture: Frame #001 (select) > Video Capture: Frame #002 (select) > Video Capture: Frame #003 (select) > Video Capture: Frame #004 (select) > Video Capture: Frame #005 (select) > Video Capture: Frame #006 (select) > Video Capture: Frame #007 (select) > Video Capture: Frame #008 (select) > Video Capture: Frame #009 (select) > Video Capture: Frame #010 (select) > Video Capture: Frame #011 (select) > Video Capture: Frame #012 (select) > Video Capture: Frame #013 (select) > Video Capture: Frame #014 (select) > Video Capture: Frame #015 (select) > Video Capture: Frame #016 (select) > Video Capture: Frame #017 (select) > Video Capture: Frame #018 (select) > Video Capture: Frame #019 (select) > Video Capture: Frame #020 (select) > Video Capture: Frame #021 (select) > Video Capture: Frame #022 (select) > Video Capture: Frame #023 (select) > Video Capture: Frame #024 (select) > Video Capture: Frame #025 (select) > Video Capture: Frame #026 (select) > Video Capture: Frame #027 (select) > Video Capture: Frame #028 (select) > Video Capture: Frame #029 (select) > Video Capture: Frame #030 (select) > Video Capture: Frame #031 (select) > Video Capture: Frame #032 (select) > Video Capture: Frame #033 (select) > Video Capture: Frame #034 (select) > Video Capture: Frame #035 (select) > Video Capture: Frame #036 (select) > Video Capture: Frame #037 (select) > Video Capture: Frame #038 (select) > Video Capture: Frame #039 (select) > Video Capture: Frame #040 (select) > Video Capture: Frame #041 (select) > Video Capture: Frame #042 (select) > Video Capture: Frame #043 (select) > Video Capture: Frame #044 (select) > Video Capture: Frame #045 (select) > Video Capture: Frame #046 (select) > Video Capture: Frame #047 (select) > Video Capture: Frame #048 (select) > Video Capture: Frame #049 (select) > Video Capture: Frame #050 (select) > Video Capture: Frame #051 (select) > Video Capture: Frame #052 (select) > Video Capture: Frame #053 (select) > Video Capture: Frame #054 (select) > Video Capture: Frame #055 (select) > Video Capture: Frame #056 (select) > Video Capture: Frame #057 (select) > Video Capture: Frame #058 (select) > Video Capture: Frame #059 (select) > > test MMAP (select, REQBUFS): OK > > Video Capture: Frame #000 (epoll) > Video Capture: Frame #001 (epoll) > Video Capture: Frame #002 (epoll) > Video Capture: Frame #003 (epoll) > Video Capture: Frame #004 (epoll) > Video Capture: Frame #005 (epoll) > Video Capture: Frame #006 (epoll) > Video Capture: Frame #007 (epoll) > Video Capture: Frame #008 (epoll) > Video Capture: Frame #009 (epoll) > Video Capture: Frame #010 (epoll) > Video Capture: Frame #011 (epoll) > Video Capture: Frame #012 (epoll) > Video Capture: Frame #013 (epoll) > Video Capture: Frame #014 (epoll) > Video Capture: Frame #015 (epoll) > Video Capture: Frame #016 (epoll) > Video Capture: Frame #017 (epoll) > Video Capture: Frame #018 (epoll) > Video Capture: Frame #019 (epoll) > Video Capture: Frame #020 (epoll) > Video Capture: Frame #021 (epoll) > Video Capture: Frame #022 (epoll) > Video Capture: Frame #023 (epoll) > Video Capture: Frame #024 (epoll) > Video Capture: Frame #025 (epoll) > Video Capture: Frame #026 (epoll) > Video Capture: Frame #027 (epoll) > Video Capture: Frame #028 (epoll) > Video Capture: Frame #029 (epoll) > Video Capture: Frame #030 (epoll) > Video Capture: Frame #031 (epoll) > Video Capture: Frame #032 (epoll) > Video Capture: Frame #033 (epoll) > Video Capture: Frame #034 (epoll) > Video Capture: Frame #035 (epoll) > Video Capture: Frame #036 (epoll) > Video Capture: Frame #037 (epoll) > Video Capture: Frame #038 (epoll) > Video Capture: Frame #039 (epoll) > Video Capture: Frame #040 (epoll) > Video Capture: Frame #041 (epoll) > Video Capture: Frame #042 (epoll) > Video Capture: Frame #043 (epoll) > Video Capture: Frame #044 (epoll) > Video Capture: Frame #045 (epoll) > Video Capture: Frame #046 (epoll) > Video Capture: Frame #047 (epoll) > Video Capture: Frame #048 (epoll) > Video Capture: Frame #049 (epoll) > Video Capture: Frame #050 (epoll) > Video Capture: Frame #051 (epoll) > Video Capture: Frame #052 (epoll) > Video Capture: Frame #053 (epoll) > Video Capture: Frame #054 (epoll) > Video Capture: Frame #055 (epoll) > Video Capture: Frame #056 (epoll) > Video Capture: Frame #057 (epoll) > Video Capture: Frame #058 (epoll) > Video Capture: Frame #059 (epoll) > > test MMAP (epoll, REQBUFS): OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > Video Capture: Frame #010 > Video Capture: Frame #011 > Video Capture: Frame #012 > Video Capture: Frame #013 > Video Capture: Frame #014 > Video Capture: Frame #015 > Video Capture: Frame #016 > Video Capture: Frame #017 > Video Capture: Frame #018 > Video Capture: Frame #019 > Video Capture: Frame #020 > Video Capture: Frame #021 > Video Capture: Frame #022 > Video Capture: Frame #023 > Video Capture: Frame #024 > Video Capture: Frame #025 > Video Capture: Frame #026 > Video Capture: Frame #027 > Video Capture: Frame #028 > Video Capture: Frame #029 > Video Capture: Frame #030 > Video Capture: Frame #031 > Video Capture: Frame #032 > Video Capture: Frame #033 > Video Capture: Frame #034 > Video Capture: Frame #035 > Video Capture: Frame #036 > Video Capture: Frame #037 > Video Capture: Frame #038 > Video Capture: Frame #039 > Video Capture: Frame #040 > Video Capture: Frame #041 > Video Capture: Frame #042 > Video Capture: Frame #043 > Video Capture: Frame #044 > Video Capture: Frame #045 > Video Capture: Frame #046 > Video Capture: Frame #047 > Video Capture: Frame #048 > Video Capture: Frame #049 > Video Capture: Frame #050 > Video Capture: Frame #051 > Video Capture: Frame #052 > Video Capture: Frame #053 > Video Capture: Frame #054 > Video Capture: Frame #055 > Video Capture: Frame #056 > Video Capture: Frame #057 > Video Capture: Frame #058 > Video Capture: Frame #059 > > test MMAP (no poll, CREATE_BUFS): OK > > Video Capture: Frame #000 (select) > Video Capture: Frame #001 (select) > Video Capture: Frame #002 (select) > Video Capture: Frame #003 (select) > Video Capture: Frame #004 (select) > Video Capture: Frame #005 (select) > Video Capture: Frame #006 (select) > Video Capture: Frame #007 (select) > Video Capture: Frame #008 (select) > Video Capture: Frame #009 (select) > Video Capture: Frame #010 (select) > Video Capture: Frame #011 (select) > Video Capture: Frame #012 (select) > Video Capture: Frame #013 (select) > Video Capture: Frame #014 (select) > Video Capture: Frame #015 (select) > Video Capture: Frame #016 (select) > Video Capture: Frame #017 (select) > Video Capture: Frame #018 (select) > Video Capture: Frame #019 (select) > Video Capture: Frame #020 (select) > Video Capture: Frame #021 (select) > Video Capture: Frame #022 (select) > Video Capture: Frame #023 (select) > Video Capture: Frame #024 (select) > Video Capture: Frame #025 (select) > Video Capture: Frame #026 (select) > Video Capture: Frame #027 (select) > Video Capture: Frame #028 (select) > Video Capture: Frame #029 (select) > Video Capture: Frame #030 (select) > Video Capture: Frame #031 (select) > Video Capture: Frame #032 (select) > Video Capture: Frame #033 (select) > Video Capture: Frame #034 (select) > Video Capture: Frame #035 (select) > Video Capture: Frame #036 (select) > Video Capture: Frame #037 (select) > Video Capture: Frame #038 (select) > Video Capture: Frame #039 (select) > Video Capture: Frame #040 (select) > Video Capture: Frame #041 (select) > Video Capture: Frame #042 (select) > Video Capture: Frame #043 (select) > Video Capture: Frame #044 (select) > Video Capture: Frame #045 (select) > Video Capture: Frame #046 (select) > Video Capture: Frame #047 (select) > Video Capture: Frame #048 (select) > Video Capture: Frame #049 (select) > Video Capture: Frame #050 (select) > Video Capture: Frame #051 (select) > Video Capture: Frame #052 (select) > Video Capture: Frame #053 (select) > Video Capture: Frame #054 (select) > Video Capture: Frame #055 (select) > Video Capture: Frame #056 (select) > Video Capture: Frame #057 (select) > Video Capture: Frame #058 (select) > Video Capture: Frame #059 (select) > > test MMAP (select, CREATE_BUFS): OK > > Video Capture: Frame #000 (epoll) > Video Capture: Frame #001 (epoll) > Video Capture: Frame #002 (epoll) > Video Capture: Frame #003 (epoll) > Video Capture: Frame #004 (epoll) > Video Capture: Frame #005 (epoll) > Video Capture: Frame #006 (epoll) > Video Capture: Frame #007 (epoll) > Video Capture: Frame #008 (epoll) > Video Capture: Frame #009 (epoll) > Video Capture: Frame #010 (epoll) > Video Capture: Frame #011 (epoll) > Video Capture: Frame #012 (epoll) > Video Capture: Frame #013 (epoll) > Video Capture: Frame #014 (epoll) > Video Capture: Frame #015 (epoll) > Video Capture: Frame #016 (epoll) > Video Capture: Frame #017 (epoll) > Video Capture: Frame #018 (epoll) > Video Capture: Frame #019 (epoll) > Video Capture: Frame #020 (epoll) > Video Capture: Frame #021 (epoll) > Video Capture: Frame #022 (epoll) > Video Capture: Frame #023 (epoll) > Video Capture: Frame #024 (epoll) > Video Capture: Frame #025 (epoll) > Video Capture: Frame #026 (epoll) > Video Capture: Frame #027 (epoll) > Video Capture: Frame #028 (epoll) > Video Capture: Frame #029 (epoll) > Video Capture: Frame #030 (epoll) > Video Capture: Frame #031 (epoll) > Video Capture: Frame #032 (epoll) > Video Capture: Frame #033 (epoll) > Video Capture: Frame #034 (epoll) > Video Capture: Frame #035 (epoll) > Video Capture: Frame #036 (epoll) > Video Capture: Frame #037 (epoll) > Video Capture: Frame #038 (epoll) > Video Capture: Frame #039 (epoll) > Video Capture: Frame #040 (epoll) > Video Capture: Frame #041 (epoll) > Video Capture: Frame #042 (epoll) > Video Capture: Frame #043 (epoll) > Video Capture: Frame #044 (epoll) > Video Capture: Frame #045 (epoll) > Video Capture: Frame #046 (epoll) > Video Capture: Frame #047 (epoll) > Video Capture: Frame #048 (epoll) > Video Capture: Frame #049 (epoll) > Video Capture: Frame #050 (epoll) > Video Capture: Frame #051 (epoll) > Video Capture: Frame #052 (epoll) > Video Capture: Frame #053 (epoll) > Video Capture: Frame #054 (epoll) > Video Capture: Frame #055 (epoll) > Video Capture: Frame #056 (epoll) > Video Capture: Frame #057 (epoll) > Video Capture: Frame #058 (epoll) > Video Capture: Frame #059 (epoll) > > test MMAP (epoll, CREATE_BUFS): OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > Video Capture: Frame #010 > Video Capture: Frame #011 > Video Capture: Frame #012 > Video Capture: Frame #013 > Video Capture: Frame #014 > Video Capture: Frame #015 > Video Capture: Frame #016 > Video Capture: Frame #017 > Video Capture: Frame #018 > Video Capture: Frame #019 > Video Capture: Frame #020 > Video Capture: Frame #021 > Video Capture: Frame #022 > Video Capture: Frame #023 > Video Capture: Frame #024 > Video Capture: Frame #025 > Video Capture: Frame #026 > Video Capture: Frame #027 > Video Capture: Frame #028 > Video Capture: Frame #029 > Video Capture: Frame #030 > Video Capture: Frame #031 > Video Capture: Frame #032 > Video Capture: Frame #033 > Video Capture: Frame #034 > Video Capture: Frame #035 > Video Capture: Frame #036 > Video Capture: Frame #037 > Video Capture: Frame #038 > Video Capture: Frame #039 > Video Capture: Frame #040 > Video Capture: Frame #041 > Video Capture: Frame #042 > Video Capture: Frame #043 > Video Capture: Frame #044 > Video Capture: Frame #045 > Video Capture: Frame #046 > Video Capture: Frame #047 > Video Capture: Frame #048 > Video Capture: Frame #049 > Video Capture: Frame #050 > Video Capture: Frame #051 > Video Capture: Frame #052 > Video Capture: Frame #053 > Video Capture: Frame #054 > Video Capture: Frame #055 > Video Capture: Frame #056 > Video Capture: Frame #057 > Video Capture: Frame #058 > Video Capture: Frame #059 > > test USERPTR (no poll): OK > > Video Capture: Frame #000 (select) > Video Capture: Frame #001 (select) > Video Capture: Frame #002 (select) > Video Capture: Frame #003 (select) > Video Capture: Frame #004 (select) > Video Capture: Frame #005 (select) > Video Capture: Frame #006 (select) > Video Capture: Frame #007 (select) > Video Capture: Frame #008 (select) > Video Capture: Frame #009 (select) > Video Capture: Frame #010 (select) > Video Capture: Frame #011 (select) > Video Capture: Frame #012 (select) > Video Capture: Frame #013 (select) > Video Capture: Frame #014 (select) > Video Capture: Frame #015 (select) > Video Capture: Frame #016 (select) > Video Capture: Frame #017 (select) > Video Capture: Frame #018 (select) > Video Capture: Frame #019 (select) > Video Capture: Frame #020 (select) > Video Capture: Frame #021 (select) > Video Capture: Frame #022 (select) > Video Capture: Frame #023 (select) > Video Capture: Frame #024 (select) > Video Capture: Frame #025 (select) > Video Capture: Frame #026 (select) > Video Capture: Frame #027 (select) > Video Capture: Frame #028 (select) > Video Capture: Frame #029 (select) > Video Capture: Frame #030 (select) > Video Capture: Frame #031 (select) > Video Capture: Frame #032 (select) > Video Capture: Frame #033 (select) > Video Capture: Frame #034 (select) > Video Capture: Frame #035 (select) > Video Capture: Frame #036 (select) > Video Capture: Frame #037 (select) > Video Capture: Frame #038 (select) > Video Capture: Frame #039 (select) > Video Capture: Frame #040 (select) > Video Capture: Frame #041 (select) > Video Capture: Frame #042 (select) > Video Capture: Frame #043 (select) > Video Capture: Frame #044 (select) > Video Capture: Frame #045 (select) > Video Capture: Frame #046 (select) > Video Capture: Frame #047 (select) > Video Capture: Frame #048 (select) > Video Capture: Frame #049 (select) > Video Capture: Frame #050 (select) > Video Capture: Frame #051 (select) > Video Capture: Frame #052 (select) > Video Capture: Frame #053 (select) > Video Capture: Frame #054 (select) > Video Capture: Frame #055 (select) > Video Capture: Frame #056 (select) > Video Capture: Frame #057 (select) > Video Capture: Frame #058 (select) > Video Capture: Frame #059 (select) > > test USERPTR (select): OK > test DMABUF: Cannot test, specify --expbuf-device > > Total for uvcvideo device /dev/video1: 58, Succeeded: 57, Failed: 1, Warnings: 0 > > As tested on the guest: > > $ v4l2-compliance -d0 -s --driver-name uvcvideo > > v4l2-compliance 1.33.0-5457, 64 bits, 64-bit time_t > v4l2-compliance SHA: e7e240f546f3 2026-05-28 17:06:12 > > Compliance test for uvcvideo device (overridden from virtio-media) /dev/video0: > > Driver Info: > Driver name : uvcvideo > Card type : Logitech Webcam C925e > Bus info : platform:virtio-media > Driver version : 7.1.0 > Capabilities : 0x84200001 > Video Capture > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x04200001 > Video Capture > Streaming > Extended Pix Format > > Required ioctls: > test VIDIOC_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/video0 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 (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 > 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 (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 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) > > Control ioctls (Input 0): > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > test VIDIOC_QUERYCTRL: OK > test VIDIOC_G/S_CTRL: OK > fail: v4l2-test-controls.cpp(981): ret (got 22) > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 19 Private Controls: 0 > > Format ioctls (Input 0): > 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 (Input 0): > 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 (Input 0): > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK (Not Supported) > test Requests: OK (Not Supported) > test blocking wait: OK > > Test input 0: > > Streaming ioctls: > test read/write: OK (Not Supported) > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > Video Capture: Frame #010 > Video Capture: Frame #011 > Video Capture: Frame #012 > Video Capture: Frame #013 > Video Capture: Frame #014 > Video Capture: Frame #015 > Video Capture: Frame #016 > Video Capture: Frame #017 > Video Capture: Frame #018 > Video Capture: Frame #019 > Video Capture: Frame #020 > Video Capture: Frame #021 > Video Capture: Frame #022 > Video Capture: Frame #023 > Video Capture: Frame #024 > Video Capture: Frame #025 > Video Capture: Frame #026 > Video Capture: Frame #027 > Video Capture: Frame #028 > Video Capture: Frame #029 > Video Capture: Frame #030 > Video Capture: Frame #031 > Video Capture: Frame #032 > Video Capture: Frame #033 > Video Capture: Frame #034 > Video Capture: Frame #035 > Video Capture: Frame #036 > Video Capture: Frame #037 > Video Capture: Frame #038 > Video Capture: Frame #039 > Video Capture: Frame #040 > Video Capture: Frame #041 > Video Capture: Frame #042 > Video Capture: Frame #043 > Video Capture: Frame #044 > Video Capture: Frame #045 > Video Capture: Frame #046 > Video Capture: Frame #047 > Video Capture: Frame #048 > Video Capture: Frame #049 > Video Capture: Frame #050 > Video Capture: Frame #051 > Video Capture: Frame #052 > Video Capture: Frame #053 > Video Capture: Frame #054 > Video Capture: Frame #055 > Video Capture: Frame #056 > Video Capture: Frame #057 > Video Capture: Frame #058 > Video Capture: Frame #059 > > test MMAP (no poll, REQBUFS): OK > > Video Capture: Frame #000 (select) > Video Capture: Frame #001 (select) > Video Capture: Frame #002 (select) > Video Capture: Frame #003 (select) > Video Capture: Frame #004 (select) > Video Capture: Frame #005 (select) > Video Capture: Frame #006 (select) > Video Capture: Frame #007 (select) > Video Capture: Frame #008 (select) > Video Capture: Frame #009 (select) > Video Capture: Frame #010 (select) > Video Capture: Frame #011 (select) > Video Capture: Frame #012 (select) > Video Capture: Frame #013 (select) > Video Capture: Frame #014 (select) > Video Capture: Frame #015 (select) > Video Capture: Frame #016 (select) > Video Capture: Frame #017 (select) > Video Capture: Frame #018 (select) > Video Capture: Frame #019 (select) > Video Capture: Frame #020 (select) > Video Capture: Frame #021 (select) > Video Capture: Frame #022 (select) > Video Capture: Frame #023 (select) > Video Capture: Frame #024 (select) > Video Capture: Frame #025 (select) > Video Capture: Frame #026 (select) > Video Capture: Frame #027 (select) > Video Capture: Frame #028 (select) > Video Capture: Frame #029 (select) > Video Capture: Frame #030 (select) > Video Capture: Frame #031 (select) > Video Capture: Frame #032 (select) > Video Capture: Frame #033 (select) > Video Capture: Frame #034 (select) > Video Capture: Frame #035 (select) > Video Capture: Frame #036 (select) > Video Capture: Frame #037 (select) > Video Capture: Frame #038 (select) > Video Capture: Frame #039 (select) > Video Capture: Frame #040 (select) > Video Capture: Frame #041 (select) > Video Capture: Frame #042 (select) > Video Capture: Frame #043 (select) > Video Capture: Frame #044 (select) > Video Capture: Frame #045 (select) > Video Capture: Frame #046 (select) > Video Capture: Frame #047 (select) > Video Capture: Frame #048 (select) > Video Capture: Frame #049 (select) > Video Capture: Frame #050 (select) > Video Capture: Frame #051 (select) > Video Capture: Frame #052 (select) > Video Capture: Frame #053 (select) > Video Capture: Frame #054 (select) > Video Capture: Frame #055 (select) > Video Capture: Frame #056 (select) > Video Capture: Frame #057 (select) > Video Capture: Frame #058 (select) > Video Capture: Frame #059 (select) > > test MMAP (select, REQBUFS): OK > > Video Capture: Frame #000 (epoll) > Video Capture: Frame #001 (epoll) > Video Capture: Frame #002 (epoll) > Video Capture: Frame #003 (epoll) > Video Capture: Frame #004 (epoll) > Video Capture: Frame #005 (epoll) > Video Capture: Frame #006 (epoll) > Video Capture: Frame #007 (epoll) > Video Capture: Frame #008 (epoll) > Video Capture: Frame #009 (epoll) > Video Capture: Frame #010 (epoll) > Video Capture: Frame #011 (epoll) > Video Capture: Frame #012 (epoll) > Video Capture: Frame #013 (epoll) > Video Capture: Frame #014 (epoll) > Video Capture: Frame #015 (epoll) > Video Capture: Frame #016 (epoll) > Video Capture: Frame #017 (epoll) > Video Capture: Frame #018 (epoll) > Video Capture: Frame #019 (epoll) > Video Capture: Frame #020 (epoll) > Video Capture: Frame #021 (epoll) > Video Capture: Frame #022 (epoll) > Video Capture: Frame #023 (epoll) > Video Capture: Frame #024 (epoll) > Video Capture: Frame #025 (epoll) > Video Capture: Frame #026 (epoll) > Video Capture: Frame #027 (epoll) > Video Capture: Frame #028 (epoll) > Video Capture: Frame #029 (epoll) > Video Capture: Frame #030 (epoll) > Video Capture: Frame #031 (epoll) > Video Capture: Frame #032 (epoll) > Video Capture: Frame #033 (epoll) > Video Capture: Frame #034 (epoll) > Video Capture: Frame #035 (epoll) > Video Capture: Frame #036 (epoll) > Video Capture: Frame #037 (epoll) > Video Capture: Frame #038 (epoll) > Video Capture: Frame #039 (epoll) > Video Capture: Frame #040 (epoll) > Video Capture: Frame #041 (epoll) > Video Capture: Frame #042 (epoll) > Video Capture: Frame #043 (epoll) > Video Capture: Frame #044 (epoll) > Video Capture: Frame #045 (epoll) > Video Capture: Frame #046 (epoll) > Video Capture: Frame #047 (epoll) > Video Capture: Frame #048 (epoll) > Video Capture: Frame #049 (epoll) > Video Capture: Frame #050 (epoll) > Video Capture: Frame #051 (epoll) > Video Capture: Frame #052 (epoll) > Video Capture: Frame #053 (epoll) > Video Capture: Frame #054 (epoll) > Video Capture: Frame #055 (epoll) > Video Capture: Frame #056 (epoll) > Video Capture: Frame #057 (epoll) > Video Capture: Frame #058 (epoll) > Video Capture: Frame #059 (epoll) > > test MMAP (epoll, REQBUFS): OK > > Video Capture: Frame #000 > Video Capture: Frame #001 > Video Capture: Frame #002 > Video Capture: Frame #003 > Video Capture: Frame #004 > Video Capture: Frame #005 > Video Capture: Frame #006 > Video Capture: Frame #007 > Video Capture: Frame #008 > Video Capture: Frame #009 > Video Capture: Frame #010 > Video Capture: Frame #011 > Video Capture: Frame #012 > Video Capture: Frame #013 > Video Capture: Frame #014 > Video Capture: Frame #015 > Video Capture: Frame #016 > Video Capture: Frame #017 > Video Capture: Frame #018 > Video Capture: Frame #019 > Video Capture: Frame #020 > Video Capture: Frame #021 > Video Capture: Frame #022 > Video Capture: Frame #023 > Video Capture: Frame #024 > Video Capture: Frame #025 > Video Capture: Frame #026 > Video Capture: Frame #027 > Video Capture: Frame #028 > Video Capture: Frame #029 > Video Capture: Frame #030 > Video Capture: Frame #031 > Video Capture: Frame #032 > Video Capture: Frame #033 > Video Capture: Frame #034 > Video Capture: Frame #035 > Video Capture: Frame #036 > Video Capture: Frame #037 > Video Capture: Frame #038 > Video Capture: Frame #039 > Video Capture: Frame #040 > Video Capture: Frame #041 > Video Capture: Frame #042 > Video Capture: Frame #043 > Video Capture: Frame #044 > Video Capture: Frame #045 > Video Capture: Frame #046 > Video Capture: Frame #047 > Video Capture: Frame #048 > Video Capture: Frame #049 > Video Capture: Frame #050 > Video Capture: Frame #051 > Video Capture: Frame #052 > Video Capture: Frame #053 > Video Capture: Frame #054 > Video Capture: Frame #055 > Video Capture: Frame #056 > Video Capture: Frame #057 > Video Capture: Frame #058 > Video Capture: Frame #059 > > test MMAP (no poll, CREATE_BUFS): OK > > Video Capture: Frame #000 (select) > Video Capture: Frame #001 (select) > Video Capture: Frame #002 (select) > Video Capture: Frame #003 (select) > Video Capture: Frame #004 (select) > Video Capture: Frame #005 (select) > Video Capture: Frame #006 (select) > Video Capture: Frame #007 (select) > Video Capture: Frame #008 (select) > Video Capture: Frame #009 (select) > Video Capture: Frame #010 (select) > Video Capture: Frame #011 (select) > Video Capture: Frame #012 (select) > Video Capture: Frame #013 (select) > Video Capture: Frame #014 (select) > Video Capture: Frame #015 (select) > Video Capture: Frame #016 (select) > Video Capture: Frame #017 (select) > Video Capture: Frame #018 (select) > Video Capture: Frame #019 (select) > Video Capture: Frame #020 (select) > Video Capture: Frame #021 (select) > Video Capture: Frame #022 (select) > Video Capture: Frame #023 (select) > Video Capture: Frame #024 (select) > Video Capture: Frame #025 (select) > Video Capture: Frame #026 (select) > Video Capture: Frame #027 (select) > Video Capture: Frame #028 (select) > Video Capture: Frame #029 (select) > Video Capture: Frame #030 (select) > Video Capture: Frame #031 (select) > Video Capture: Frame #032 (select) > Video Capture: Frame #033 (select) > Video Capture: Frame #034 (select) > Video Capture: Frame #035 (select) > Video Capture: Frame #036 (select) > Video Capture: Frame #037 (select) > Video Capture: Frame #038 (select) > Video Capture: Frame #039 (select) > Video Capture: Frame #040 (select) > Video Capture: Frame #041 (select) > Video Capture: Frame #042 (select) > Video Capture: Frame #043 (select) > Video Capture: Frame #044 (select) > Video Capture: Frame #045 (select) > Video Capture: Frame #046 (select) > Video Capture: Frame #047 (select) > Video Capture: Frame #048 (select) > Video Capture: Frame #049 (select) > Video Capture: Frame #050 (select) > Video Capture: Frame #051 (select) > Video Capture: Frame #052 (select) > Video Capture: Frame #053 (select) > Video Capture: Frame #054 (select) > Video Capture: Frame #055 (select) > Video Capture: Frame #056 (select) > Video Capture: Frame #057 (select) > Video Capture: Frame #058 (select) > Video Capture: Frame #059 (select) > > test MMAP (select, CREATE_BUFS): OK > > Video Capture: Frame #000 (epoll) > Video Capture: Frame #001 (epoll) > Video Capture: Frame #002 (epoll) > Video Capture: Frame #003 (epoll) > Video Capture: Frame #004 (epoll) > Video Capture: Frame #005 (epoll) > Video Capture: Frame #006 (epoll) > Video Capture: Frame #007 (epoll) > Video Capture: Frame #008 (epoll) > Video Capture: Frame #009 (epoll) > Video Capture: Frame #010 (epoll) > Video Capture: Frame #011 (epoll) > Video Capture: Frame #012 (epoll) > Video Capture: Frame #013 (epoll) > Video Capture: Frame #014 (epoll) > Video Capture: Frame #015 (epoll) > Video Capture: Frame #016 (epoll) > Video Capture: Frame #017 (epoll) > Video Capture: Frame #018 (epoll) > Video Capture: Frame #019 (epoll) > Video Capture: Frame #020 (epoll) > Video Capture: Frame #021 (epoll) > Video Capture: Frame #022 (epoll) > Video Capture: Frame #023 (epoll) > Video Capture: Frame #024 (epoll) > Video Capture: Frame #025 (epoll) > Video Capture: Frame #026 (epoll) > Video Capture: Frame #027 (epoll) > Video Capture: Frame #028 (epoll) > Video Capture: Frame #029 (epoll) > Video Capture: Frame #030 (epoll) > Video Capture: Frame #031 (epoll) > Video Capture: Frame #032 (epoll) > Video Capture: Frame #033 (epoll) > Video Capture: Frame #034 (epoll) > Video Capture: Frame #035 (epoll) > Video Capture: Frame #036 (epoll) > Video Capture: Frame #037 (epoll) > Video Capture: Frame #038 (epoll) > Video Capture: Frame #039 (epoll) > Video Capture: Frame #040 (epoll) > Video Capture: Frame #041 (epoll) > Video Capture: Frame #042 (epoll) > Video Capture: Frame #043 (epoll) > Video Capture: Frame #044 (epoll) > Video Capture: Frame #045 (epoll) > Video Capture: Frame #046 (epoll) > Video Capture: Frame #047 (epoll) > Video Capture: Frame #048 (epoll) > Video Capture: Frame #049 (epoll) > Video Capture: Frame #050 (epoll) > Video Capture: Frame #051 (epoll) > Video Capture: Frame #052 (epoll) > Video Capture: Frame #053 (epoll) > Video Capture: Frame #054 (epoll) > Video Capture: Frame #055 (epoll) > Video Capture: Frame #056 (epoll) > Video Capture: Frame #057 (epoll) > Video Capture: Frame #058 (epoll) > Video Capture: Frame #059 (epoll) > > test MMAP (epoll, CREATE_BUFS): OK > test USERPTR (no poll): OK (Not Supported) > test USERPTR (select): OK (Not Supported) > test DMABUF (no poll): OK (Not Supported) > test DMABUF (select): OK (Not Supported) > > Total for uvcvideo device /dev/video0: 59, Succeeded: 58, Failed: 1, Warnings: 0 > > --- > Changes in v4: > - Rebased on top of v7.1-rc1 > - Replace usages of filep->private_data with file_to_v4l2_fh() > throughout the driver > - Link to v3: https://lore.kernel.org/r/20250412-virtio-media-v3-1-97dc94c18398@gmail.com > > Changes in v3: > - Rebased on top of v6.15-rc1 and removes obsolete control callbacks. > - Link to v2: https://lore.kernel.org/r/20250201-virtio-media-v2-1-ac840681452d@gmail.com > > Changes in v2: > - Fixed kernel test robot and media CI warnings (ignored a few false > positives). > - Changed in-driver email address to personal one since my Google one > will soon become invalid. > - Link to v1: https://lore.kernel.org/r/20250123-virtio-media-v1-1-81e2549b86b9@gmail.com > > Brian Daniels (8): > media: virtio: Add protocol > media: virtio: Add virtio-media driver structs and function > declarations > media: virtio: Add virtio-media session related structures > media: virtio: Add scatterlist_builder > media: virtio: Add virtio_media_ioctls > media: virtio: Add virtio_media_driver > media: virtio: Add virtio-media to the build system > media: virtio: Add MAINTAINERS entry > > MAINTAINERS | 6 + > drivers/media/Kconfig | 13 + > drivers/media/Makefile | 2 + > drivers/media/virtio/Makefile | 8 + > drivers/media/virtio/protocol.h | 287 +++++ > drivers/media/virtio/scatterlist_builder.c | 574 +++++++++ > drivers/media/virtio/scatterlist_builder.h | 112 ++ > drivers/media/virtio/session.h | 130 ++ > drivers/media/virtio/virtio_media.h | 95 ++ > drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++ > drivers/media/virtio/virtio_media_ioctls.c | 1338 ++++++++++++++++++++ > 11 files changed, 3524 insertions(+) > create mode 100644 drivers/media/virtio/Makefile > create mode 100644 drivers/media/virtio/protocol.h > create mode 100644 drivers/media/virtio/scatterlist_builder.c > create mode 100644 drivers/media/virtio/scatterlist_builder.h > create mode 100644 drivers/media/virtio/session.h > create mode 100644 drivers/media/virtio/virtio_media.h > create mode 100644 drivers/media/virtio/virtio_media_driver.c > create mode 100644 drivers/media/virtio/virtio_media_ioctls.c > > > base-commit: 06cb687a5132fcffe624c0070576ab852ac6b568 > -- > 2.55.0.rc0.799.gd6f94ed593-goog
> > From: Alexandre Courbot <gnurou@gmail.com> > > > > Add the first version of the virtio-media driver. > > > > This driver acts roughly as a V4L2 relay between user-space and the > > virtio virtual device on the host, so it is relatively simple, yet > > unconventional. It doesn't use VB2 or other frameworks typically used in > > a V4L2 driver, and most of its complexity resides in correctly and > > efficiently building the virtio descriptor chain to pass to the host, > > avoiding copies whenever possible. This is done by > > scatterlist_builder.[ch]. > > > > This version supports MMAP buffers, while USERPTR buffers can also be > > enabled through a driver option. DMABUF support is still pending. > > > > NOTE: This depends on the VIRTIO ID being added in this patch: > > https://lore.kernel.org/all/20260310-virtio-media-id-v1-1-be211bcf682b@redhat.com I saw some CI build failures come back, but that should be resolved if the patch above is merged. If you'd rather me add it to this patch series let me know. > > Signed-off-by: Alexandre Courbot <gnurou@gmail.com> > > Co-developed-by: Brian Daniels <briandaniels@google.com> > > Signed-off-by: Brian Daniels <briandaniels@google.com> > > Thanks for the patches! > Sent some comments on individual patches. Thanks for the feedback! I've started to prepare v5 based on the comments so far, I'll hold off on sending it until we've resolved the other open threads. > > --- > > Guest Setup > > > > Tests were ran on a Debian 12 guest running with crosvm. The guest image > > was created with: > > > > $ virt-builder debian-12 --root-password password:"" > > > > Build crosvm and launch the guest starting at the "Crosvm" section on > > this page: https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md#crosvm > > > > NOTE: Before running v4l2-compliance in the guest, you need to install > > v4l-utils and ffmpeg: > > > > $ apt update && apt install v4l-utils ffmpeg > > > > --- > > Compliance Testing > > > > This was tested using v4l2-compliance. Since virtio-media serves as > > a proxy to host devices for the guest VMs, we expect the guest > > compliance test to essentially match the host compliance test for the > > same device. > > > > NOTE: v4l2-compliance changes its test behavior depending on the driver > > name. In the guest, the driver name for virtio-media proxied-devices is > > always "virtio-media", even if the actual host device has a driver name > > of e.g. "uvcvideo". To ensure the test is consistent between the host > > and the guest, I created a patch for the v4l2-compliance tool that > > allows you to override the driver name. All test results that follow use > > this patch: > > https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/ > > > > All tests used a Logitech USB Webcam C925e. > > > > As tested on the host: > > > > $ v4l2-compliance -d1 -s > > > > v4l2-compliance 1.33.0-5471, 64 bits, 64-bit time_t > > v4l2-compliance SHA: 9f2d3ea879ff 2026-05-28 14:45:11 > > > > Compliance test for uvcvideo device /dev/video1: > > > > Driver Info: > > Driver name : uvcvideo > > Card type : Logitech Webcam C925e > > Bus info : usb-0000:04:00.1-3 > > Driver version : 6.18.14 > > Capabilities : 0x84a00001 > > Video Capture > > Metadata Capture > > Streaming > > Extended Pix Format > > Device Capabilities > > Device Caps : 0x04200001 > > Video Capture > > Streaming > > Extended Pix Format > > Media Driver Info: > > Driver name : uvcvideo > > Model : Logitech Webcam C925e > > Serial : 686F371F > > Bus info : usb-0000:04:00.1-3 > > Media version : 6.18.14 > > Hardware revision: 0x00000016 (22) > > Driver version : 6.18.14 > > Interface Info: > > ID : 0x03000002 > > Type : V4L Video > > Entity Info: > > ID : 0x00000001 (1) > > Name : Logitech Webcam C925e > > Function : V4L2 I/O > > Flags : default > > Pad 0x01000007 : 0: Sink > > Link 0x0200001f: from remote pad 0x100000a of entity 'Processing 3' (Video Pixel Formatter): Data, Enabled, Immutable > > > > Required ioctls: > > test MC information (see 'Media Driver Info' above): OK > > test VIDIOC_QUERYCAP: OK > > test invalid ioctls: OK > > > > Allow for multiple opens: > > test second /dev/video1 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 (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 (Not Supported) > > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > Outputs: 0 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) > > > > Control ioctls (Input 0): > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > test VIDIOC_QUERYCTRL: OK > > test VIDIOC_G/S_CTRL: OK > > fail: v4l2-test-controls.cpp(983): ret != EINVAL (got 13) > > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > Standard Controls: 19 Private Controls: 0 > > > > Format ioctls (Input 0): > > 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 (Input 0): > > 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 (Input 0): > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > test CREATE_BUFS maximum buffers: OK > > test VIDIOC_REMOVE_BUFS: OK > > test VIDIOC_EXPBUF: OK > > test Requests: OK (Not Supported) > > test blocking wait: OK > > > > Test input 0: > > > > Streaming ioctls: > > test read/write: OK (Not Supported) > > > > Video Capture: Frame #000 > > Video Capture: Frame #001 > > Video Capture: Frame #002 > > Video Capture: Frame #003 > > Video Capture: Frame #004 > > Video Capture: Frame #005 > > Video Capture: Frame #006 > > Video Capture: Frame #007 > > Video Capture: Frame #008 > > Video Capture: Frame #009 > > Video Capture: Frame #010 > > Video Capture: Frame #011 > > Video Capture: Frame #012 > > Video Capture: Frame #013 > > Video Capture: Frame #014 > > Video Capture: Frame #015 > > Video Capture: Frame #016 > > Video Capture: Frame #017 > > Video Capture: Frame #018 > > Video Capture: Frame #019 > > Video Capture: Frame #020 > > Video Capture: Frame #021 > > Video Capture: Frame #022 > > Video Capture: Frame #023 > > Video Capture: Frame #024 > > Video Capture: Frame #025 > > Video Capture: Frame #026 > > Video Capture: Frame #027 > > Video Capture: Frame #028 > > Video Capture: Frame #029 > > Video Capture: Frame #030 > > Video Capture: Frame #031 > > Video Capture: Frame #032 > > Video Capture: Frame #033 > > Video Capture: Frame #034 > > Video Capture: Frame #035 > > Video Capture: Frame #036 > > Video Capture: Frame #037 > > Video Capture: Frame #038 > > Video Capture: Frame #039 > > Video Capture: Frame #040 > > Video Capture: Frame #041 > > Video Capture: Frame #042 > > Video Capture: Frame #043 > > Video Capture: Frame #044 > > Video Capture: Frame #045 > > Video Capture: Frame #046 > > Video Capture: Frame #047 > > Video Capture: Frame #048 > > Video Capture: Frame #049 > > Video Capture: Frame #050 > > Video Capture: Frame #051 > > Video Capture: Frame #052 > > Video Capture: Frame #053 > > Video Capture: Frame #054 > > Video Capture: Frame #055 > > Video Capture: Frame #056 > > Video Capture: Frame #057 > > Video Capture: Frame #058 > > Video Capture: Frame #059 > > > > test MMAP (no poll, REQBUFS): OK > > > > Video Capture: Frame #000 (select) > > Video Capture: Frame #001 (select) > > Video Capture: Frame #002 (select) > > Video Capture: Frame #003 (select) > > Video Capture: Frame #004 (select) > > Video Capture: Frame #005 (select) > > Video Capture: Frame #006 (select) > > Video Capture: Frame #007 (select) > > Video Capture: Frame #008 (select) > > Video Capture: Frame #009 (select) > > Video Capture: Frame #010 (select) > > Video Capture: Frame #011 (select) > > Video Capture: Frame #012 (select) > > Video Capture: Frame #013 (select) > > Video Capture: Frame #014 (select) > > Video Capture: Frame #015 (select) > > Video Capture: Frame #016 (select) > > Video Capture: Frame #017 (select) > > Video Capture: Frame #018 (select) > > Video Capture: Frame #019 (select) > > Video Capture: Frame #020 (select) > > Video Capture: Frame #021 (select) > > Video Capture: Frame #022 (select) > > Video Capture: Frame #023 (select) > > Video Capture: Frame #024 (select) > > Video Capture: Frame #025 (select) > > Video Capture: Frame #026 (select) > > Video Capture: Frame #027 (select) > > Video Capture: Frame #028 (select) > > Video Capture: Frame #029 (select) > > Video Capture: Frame #030 (select) > > Video Capture: Frame #031 (select) > > Video Capture: Frame #032 (select) > > Video Capture: Frame #033 (select) > > Video Capture: Frame #034 (select) > > Video Capture: Frame #035 (select) > > Video Capture: Frame #036 (select) > > Video Capture: Frame #037 (select) > > Video Capture: Frame #038 (select) > > Video Capture: Frame #039 (select) > > Video Capture: Frame #040 (select) > > Video Capture: Frame #041 (select) > > Video Capture: Frame #042 (select) > > Video Capture: Frame #043 (select) > > Video Capture: Frame #044 (select) > > Video Capture: Frame #045 (select) > > Video Capture: Frame #046 (select) > > Video Capture: Frame #047 (select) > > Video Capture: Frame #048 (select) > > Video Capture: Frame #049 (select) > > Video Capture: Frame #050 (select) > > Video Capture: Frame #051 (select) > > Video Capture: Frame #052 (select) > > Video Capture: Frame #053 (select) > > Video Capture: Frame #054 (select) > > Video Capture: Frame #055 (select) > > Video Capture: Frame #056 (select) > > Video Capture: Frame #057 (select) > > Video Capture: Frame #058 (select) > > Video Capture: Frame #059 (select) > > > > test MMAP (select, REQBUFS): OK > > > > Video Capture: Frame #000 (epoll) > > Video Capture: Frame #001 (epoll) > > Video Capture: Frame #002 (epoll) > > Video Capture: Frame #003 (epoll) > > Video Capture: Frame #004 (epoll) > > Video Capture: Frame #005 (epoll) > > Video Capture: Frame #006 (epoll) > > Video Capture: Frame #007 (epoll) > > Video Capture: Frame #008 (epoll) > > Video Capture: Frame #009 (epoll) > > Video Capture: Frame #010 (epoll) > > Video Capture: Frame #011 (epoll) > > Video Capture: Frame #012 (epoll) > > Video Capture: Frame #013 (epoll) > > Video Capture: Frame #014 (epoll) > > Video Capture: Frame #015 (epoll) > > Video Capture: Frame #016 (epoll) > > Video Capture: Frame #017 (epoll) > > Video Capture: Frame #018 (epoll) > > Video Capture: Frame #019 (epoll) > > Video Capture: Frame #020 (epoll) > > Video Capture: Frame #021 (epoll) > > Video Capture: Frame #022 (epoll) > > Video Capture: Frame #023 (epoll) > > Video Capture: Frame #024 (epoll) > > Video Capture: Frame #025 (epoll) > > Video Capture: Frame #026 (epoll) > > Video Capture: Frame #027 (epoll) > > Video Capture: Frame #028 (epoll) > > Video Capture: Frame #029 (epoll) > > Video Capture: Frame #030 (epoll) > > Video Capture: Frame #031 (epoll) > > Video Capture: Frame #032 (epoll) > > Video Capture: Frame #033 (epoll) > > Video Capture: Frame #034 (epoll) > > Video Capture: Frame #035 (epoll) > > Video Capture: Frame #036 (epoll) > > Video Capture: Frame #037 (epoll) > > Video Capture: Frame #038 (epoll) > > Video Capture: Frame #039 (epoll) > > Video Capture: Frame #040 (epoll) > > Video Capture: Frame #041 (epoll) > > Video Capture: Frame #042 (epoll) > > Video Capture: Frame #043 (epoll) > > Video Capture: Frame #044 (epoll) > > Video Capture: Frame #045 (epoll) > > Video Capture: Frame #046 (epoll) > > Video Capture: Frame #047 (epoll) > > Video Capture: Frame #048 (epoll) > > Video Capture: Frame #049 (epoll) > > Video Capture: Frame #050 (epoll) > > Video Capture: Frame #051 (epoll) > > Video Capture: Frame #052 (epoll) > > Video Capture: Frame #053 (epoll) > > Video Capture: Frame #054 (epoll) > > Video Capture: Frame #055 (epoll) > > Video Capture: Frame #056 (epoll) > > Video Capture: Frame #057 (epoll) > > Video Capture: Frame #058 (epoll) > > Video Capture: Frame #059 (epoll) > > > > test MMAP (epoll, REQBUFS): OK > > > > Video Capture: Frame #000 > > Video Capture: Frame #001 > > Video Capture: Frame #002 > > Video Capture: Frame #003 > > Video Capture: Frame #004 > > Video Capture: Frame #005 > > Video Capture: Frame #006 > > Video Capture: Frame #007 > > Video Capture: Frame #008 > > Video Capture: Frame #009 > > Video Capture: Frame #010 > > Video Capture: Frame #011 > > Video Capture: Frame #012 > > Video Capture: Frame #013 > > Video Capture: Frame #014 > > Video Capture: Frame #015 > > Video Capture: Frame #016 > > Video Capture: Frame #017 > > Video Capture: Frame #018 > > Video Capture: Frame #019 > > Video Capture: Frame #020 > > Video Capture: Frame #021 > > Video Capture: Frame #022 > > Video Capture: Frame #023 > > Video Capture: Frame #024 > > Video Capture: Frame #025 > > Video Capture: Frame #026 > > Video Capture: Frame #027 > > Video Capture: Frame #028 > > Video Capture: Frame #029 > > Video Capture: Frame #030 > > Video Capture: Frame #031 > > Video Capture: Frame #032 > > Video Capture: Frame #033 > > Video Capture: Frame #034 > > Video Capture: Frame #035 > > Video Capture: Frame #036 > > Video Capture: Frame #037 > > Video Capture: Frame #038 > > Video Capture: Frame #039 > > Video Capture: Frame #040 > > Video Capture: Frame #041 > > Video Capture: Frame #042 > > Video Capture: Frame #043 > > Video Capture: Frame #044 > > Video Capture: Frame #045 > > Video Capture: Frame #046 > > Video Capture: Frame #047 > > Video Capture: Frame #048 > > Video Capture: Frame #049 > > Video Capture: Frame #050 > > Video Capture: Frame #051 > > Video Capture: Frame #052 > > Video Capture: Frame #053 > > Video Capture: Frame #054 > > Video Capture: Frame #055 > > Video Capture: Frame #056 > > Video Capture: Frame #057 > > Video Capture: Frame #058 > > Video Capture: Frame #059 > > > > test MMAP (no poll, CREATE_BUFS): OK > > > > Video Capture: Frame #000 (select) > > Video Capture: Frame #001 (select) > > Video Capture: Frame #002 (select) > > Video Capture: Frame #003 (select) > > Video Capture: Frame #004 (select) > > Video Capture: Frame #005 (select) > > Video Capture: Frame #006 (select) > > Video Capture: Frame #007 (select) > > Video Capture: Frame #008 (select) > > Video Capture: Frame #009 (select) > > Video Capture: Frame #010 (select) > > Video Capture: Frame #011 (select) > > Video Capture: Frame #012 (select) > > Video Capture: Frame #013 (select) > > Video Capture: Frame #014 (select) > > Video Capture: Frame #015 (select) > > Video Capture: Frame #016 (select) > > Video Capture: Frame #017 (select) > > Video Capture: Frame #018 (select) > > Video Capture: Frame #019 (select) > > Video Capture: Frame #020 (select) > > Video Capture: Frame #021 (select) > > Video Capture: Frame #022 (select) > > Video Capture: Frame #023 (select) > > Video Capture: Frame #024 (select) > > Video Capture: Frame #025 (select) > > Video Capture: Frame #026 (select) > > Video Capture: Frame #027 (select) > > Video Capture: Frame #028 (select) > > Video Capture: Frame #029 (select) > > Video Capture: Frame #030 (select) > > Video Capture: Frame #031 (select) > > Video Capture: Frame #032 (select) > > Video Capture: Frame #033 (select) > > Video Capture: Frame #034 (select) > > Video Capture: Frame #035 (select) > > Video Capture: Frame #036 (select) > > Video Capture: Frame #037 (select) > > Video Capture: Frame #038 (select) > > Video Capture: Frame #039 (select) > > Video Capture: Frame #040 (select) > > Video Capture: Frame #041 (select) > > Video Capture: Frame #042 (select) > > Video Capture: Frame #043 (select) > > Video Capture: Frame #044 (select) > > Video Capture: Frame #045 (select) > > Video Capture: Frame #046 (select) > > Video Capture: Frame #047 (select) > > Video Capture: Frame #048 (select) > > Video Capture: Frame #049 (select) > > Video Capture: Frame #050 (select) > > Video Capture: Frame #051 (select) > > Video Capture: Frame #052 (select) > > Video Capture: Frame #053 (select) > > Video Capture: Frame #054 (select) > > Video Capture: Frame #055 (select) > > Video Capture: Frame #056 (select) > > Video Capture: Frame #057 (select) > > Video Capture: Frame #058 (select) > > Video Capture: Frame #059 (select) > > > > test MMAP (select, CREATE_BUFS): OK > > > > Video Capture: Frame #000 (epoll) > > Video Capture: Frame #001 (epoll) > > Video Capture: Frame #002 (epoll) > > Video Capture: Frame #003 (epoll) > > Video Capture: Frame #004 (epoll) > > Video Capture: Frame #005 (epoll) > > Video Capture: Frame #006 (epoll) > > Video Capture: Frame #007 (epoll) > > Video Capture: Frame #008 (epoll) > > Video Capture: Frame #009 (epoll) > > Video Capture: Frame #010 (epoll) > > Video Capture: Frame #011 (epoll) > > Video Capture: Frame #012 (epoll) > > Video Capture: Frame #013 (epoll) > > Video Capture: Frame #014 (epoll) > > Video Capture: Frame #015 (epoll) > > Video Capture: Frame #016 (epoll) > > Video Capture: Frame #017 (epoll) > > Video Capture: Frame #018 (epoll) > > Video Capture: Frame #019 (epoll) > > Video Capture: Frame #020 (epoll) > > Video Capture: Frame #021 (epoll) > > Video Capture: Frame #022 (epoll) > > Video Capture: Frame #023 (epoll) > > Video Capture: Frame #024 (epoll) > > Video Capture: Frame #025 (epoll) > > Video Capture: Frame #026 (epoll) > > Video Capture: Frame #027 (epoll) > > Video Capture: Frame #028 (epoll) > > Video Capture: Frame #029 (epoll) > > Video Capture: Frame #030 (epoll) > > Video Capture: Frame #031 (epoll) > > Video Capture: Frame #032 (epoll) > > Video Capture: Frame #033 (epoll) > > Video Capture: Frame #034 (epoll) > > Video Capture: Frame #035 (epoll) > > Video Capture: Frame #036 (epoll) > > Video Capture: Frame #037 (epoll) > > Video Capture: Frame #038 (epoll) > > Video Capture: Frame #039 (epoll) > > Video Capture: Frame #040 (epoll) > > Video Capture: Frame #041 (epoll) > > Video Capture: Frame #042 (epoll) > > Video Capture: Frame #043 (epoll) > > Video Capture: Frame #044 (epoll) > > Video Capture: Frame #045 (epoll) > > Video Capture: Frame #046 (epoll) > > Video Capture: Frame #047 (epoll) > > Video Capture: Frame #048 (epoll) > > Video Capture: Frame #049 (epoll) > > Video Capture: Frame #050 (epoll) > > Video Capture: Frame #051 (epoll) > > Video Capture: Frame #052 (epoll) > > Video Capture: Frame #053 (epoll) > > Video Capture: Frame #054 (epoll) > > Video Capture: Frame #055 (epoll) > > Video Capture: Frame #056 (epoll) > > Video Capture: Frame #057 (epoll) > > Video Capture: Frame #058 (epoll) > > Video Capture: Frame #059 (epoll) > > > > test MMAP (epoll, CREATE_BUFS): OK > > > > Video Capture: Frame #000 > > Video Capture: Frame #001 > > Video Capture: Frame #002 > > Video Capture: Frame #003 > > Video Capture: Frame #004 > > Video Capture: Frame #005 > > Video Capture: Frame #006 > > Video Capture: Frame #007 > > Video Capture: Frame #008 > > Video Capture: Frame #009 > > Video Capture: Frame #010 > > Video Capture: Frame #011 > > Video Capture: Frame #012 > > Video Capture: Frame #013 > > Video Capture: Frame #014 > > Video Capture: Frame #015 > > Video Capture: Frame #016 > > Video Capture: Frame #017 > > Video Capture: Frame #018 > > Video Capture: Frame #019 > > Video Capture: Frame #020 > > Video Capture: Frame #021 > > Video Capture: Frame #022 > > Video Capture: Frame #023 > > Video Capture: Frame #024 > > Video Capture: Frame #025 > > Video Capture: Frame #026 > > Video Capture: Frame #027 > > Video Capture: Frame #028 > > Video Capture: Frame #029 > > Video Capture: Frame #030 > > Video Capture: Frame #031 > > Video Capture: Frame #032 > > Video Capture: Frame #033 > > Video Capture: Frame #034 > > Video Capture: Frame #035 > > Video Capture: Frame #036 > > Video Capture: Frame #037 > > Video Capture: Frame #038 > > Video Capture: Frame #039 > > Video Capture: Frame #040 > > Video Capture: Frame #041 > > Video Capture: Frame #042 > > Video Capture: Frame #043 > > Video Capture: Frame #044 > > Video Capture: Frame #045 > > Video Capture: Frame #046 > > Video Capture: Frame #047 > > Video Capture: Frame #048 > > Video Capture: Frame #049 > > Video Capture: Frame #050 > > Video Capture: Frame #051 > > Video Capture: Frame #052 > > Video Capture: Frame #053 > > Video Capture: Frame #054 > > Video Capture: Frame #055 > > Video Capture: Frame #056 > > Video Capture: Frame #057 > > Video Capture: Frame #058 > > Video Capture: Frame #059 > > > > test USERPTR (no poll): OK > > > > Video Capture: Frame #000 (select) > > Video Capture: Frame #001 (select) > > Video Capture: Frame #002 (select) > > Video Capture: Frame #003 (select) > > Video Capture: Frame #004 (select) > > Video Capture: Frame #005 (select) > > Video Capture: Frame #006 (select) > > Video Capture: Frame #007 (select) > > Video Capture: Frame #008 (select) > > Video Capture: Frame #009 (select) > > Video Capture: Frame #010 (select) > > Video Capture: Frame #011 (select) > > Video Capture: Frame #012 (select) > > Video Capture: Frame #013 (select) > > Video Capture: Frame #014 (select) > > Video Capture: Frame #015 (select) > > Video Capture: Frame #016 (select) > > Video Capture: Frame #017 (select) > > Video Capture: Frame #018 (select) > > Video Capture: Frame #019 (select) > > Video Capture: Frame #020 (select) > > Video Capture: Frame #021 (select) > > Video Capture: Frame #022 (select) > > Video Capture: Frame #023 (select) > > Video Capture: Frame #024 (select) > > Video Capture: Frame #025 (select) > > Video Capture: Frame #026 (select) > > Video Capture: Frame #027 (select) > > Video Capture: Frame #028 (select) > > Video Capture: Frame #029 (select) > > Video Capture: Frame #030 (select) > > Video Capture: Frame #031 (select) > > Video Capture: Frame #032 (select) > > Video Capture: Frame #033 (select) > > Video Capture: Frame #034 (select) > > Video Capture: Frame #035 (select) > > Video Capture: Frame #036 (select) > > Video Capture: Frame #037 (select) > > Video Capture: Frame #038 (select) > > Video Capture: Frame #039 (select) > > Video Capture: Frame #040 (select) > > Video Capture: Frame #041 (select) > > Video Capture: Frame #042 (select) > > Video Capture: Frame #043 (select) > > Video Capture: Frame #044 (select) > > Video Capture: Frame #045 (select) > > Video Capture: Frame #046 (select) > > Video Capture: Frame #047 (select) > > Video Capture: Frame #048 (select) > > Video Capture: Frame #049 (select) > > Video Capture: Frame #050 (select) > > Video Capture: Frame #051 (select) > > Video Capture: Frame #052 (select) > > Video Capture: Frame #053 (select) > > Video Capture: Frame #054 (select) > > Video Capture: Frame #055 (select) > > Video Capture: Frame #056 (select) > > Video Capture: Frame #057 (select) > > Video Capture: Frame #058 (select) > > Video Capture: Frame #059 (select) > > > > test USERPTR (select): OK > > test DMABUF: Cannot test, specify --expbuf-device > > > > Total for uvcvideo device /dev/video1: 58, Succeeded: 57, Failed: 1, Warnings: 0 > > > > As tested on the guest: > > > > $ v4l2-compliance -d0 -s --driver-name uvcvideo > > > > v4l2-compliance 1.33.0-5457, 64 bits, 64-bit time_t > > v4l2-compliance SHA: e7e240f546f3 2026-05-28 17:06:12 > > > > Compliance test for uvcvideo device (overridden from virtio-media) /dev/video0: > > > > Driver Info: > > Driver name : uvcvideo > > Card type : Logitech Webcam C925e > > Bus info : platform:virtio-media > > Driver version : 7.1.0 > > Capabilities : 0x84200001 > > Video Capture > > Streaming > > Extended Pix Format > > Device Capabilities > > Device Caps : 0x04200001 > > Video Capture > > Streaming > > Extended Pix Format > > > > Required ioctls: > > test VIDIOC_QUERYCAP: OK > > test invalid ioctls: OK > > > > Allow for multiple opens: > > test second /dev/video0 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 (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 > > 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 (Not Supported) > > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > Outputs: 0 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) > > > > Control ioctls (Input 0): > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > test VIDIOC_QUERYCTRL: OK > > test VIDIOC_G/S_CTRL: OK > > fail: v4l2-test-controls.cpp(981): ret (got 22) > > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > Standard Controls: 19 Private Controls: 0 > > > > Format ioctls (Input 0): > > 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 (Input 0): > > 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 (Input 0): > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > test CREATE_BUFS maximum buffers: OK > > test VIDIOC_REMOVE_BUFS: OK > > test VIDIOC_EXPBUF: OK (Not Supported) > > test Requests: OK (Not Supported) > > test blocking wait: OK > > > > Test input 0: > > > > Streaming ioctls: > > test read/write: OK (Not Supported) > > > > Video Capture: Frame #000 > > Video Capture: Frame #001 > > Video Capture: Frame #002 > > Video Capture: Frame #003 > > Video Capture: Frame #004 > > Video Capture: Frame #005 > > Video Capture: Frame #006 > > Video Capture: Frame #007 > > Video Capture: Frame #008 > > Video Capture: Frame #009 > > Video Capture: Frame #010 > > Video Capture: Frame #011 > > Video Capture: Frame #012 > > Video Capture: Frame #013 > > Video Capture: Frame #014 > > Video Capture: Frame #015 > > Video Capture: Frame #016 > > Video Capture: Frame #017 > > Video Capture: Frame #018 > > Video Capture: Frame #019 > > Video Capture: Frame #020 > > Video Capture: Frame #021 > > Video Capture: Frame #022 > > Video Capture: Frame #023 > > Video Capture: Frame #024 > > Video Capture: Frame #025 > > Video Capture: Frame #026 > > Video Capture: Frame #027 > > Video Capture: Frame #028 > > Video Capture: Frame #029 > > Video Capture: Frame #030 > > Video Capture: Frame #031 > > Video Capture: Frame #032 > > Video Capture: Frame #033 > > Video Capture: Frame #034 > > Video Capture: Frame #035 > > Video Capture: Frame #036 > > Video Capture: Frame #037 > > Video Capture: Frame #038 > > Video Capture: Frame #039 > > Video Capture: Frame #040 > > Video Capture: Frame #041 > > Video Capture: Frame #042 > > Video Capture: Frame #043 > > Video Capture: Frame #044 > > Video Capture: Frame #045 > > Video Capture: Frame #046 > > Video Capture: Frame #047 > > Video Capture: Frame #048 > > Video Capture: Frame #049 > > Video Capture: Frame #050 > > Video Capture: Frame #051 > > Video Capture: Frame #052 > > Video Capture: Frame #053 > > Video Capture: Frame #054 > > Video Capture: Frame #055 > > Video Capture: Frame #056 > > Video Capture: Frame #057 > > Video Capture: Frame #058 > > Video Capture: Frame #059 > > > > test MMAP (no poll, REQBUFS): OK > > > > Video Capture: Frame #000 (select) > > Video Capture: Frame #001 (select) > > Video Capture: Frame #002 (select) > > Video Capture: Frame #003 (select) > > Video Capture: Frame #004 (select) > > Video Capture: Frame #005 (select) > > Video Capture: Frame #006 (select) > > Video Capture: Frame #007 (select) > > Video Capture: Frame #008 (select) > > Video Capture: Frame #009 (select) > > Video Capture: Frame #010 (select) > > Video Capture: Frame #011 (select) > > Video Capture: Frame #012 (select) > > Video Capture: Frame #013 (select) > > Video Capture: Frame #014 (select) > > Video Capture: Frame #015 (select) > > Video Capture: Frame #016 (select) > > Video Capture: Frame #017 (select) > > Video Capture: Frame #018 (select) > > Video Capture: Frame #019 (select) > > Video Capture: Frame #020 (select) > > Video Capture: Frame #021 (select) > > Video Capture: Frame #022 (select) > > Video Capture: Frame #023 (select) > > Video Capture: Frame #024 (select) > > Video Capture: Frame #025 (select) > > Video Capture: Frame #026 (select) > > Video Capture: Frame #027 (select) > > Video Capture: Frame #028 (select) > > Video Capture: Frame #029 (select) > > Video Capture: Frame #030 (select) > > Video Capture: Frame #031 (select) > > Video Capture: Frame #032 (select) > > Video Capture: Frame #033 (select) > > Video Capture: Frame #034 (select) > > Video Capture: Frame #035 (select) > > Video Capture: Frame #036 (select) > > Video Capture: Frame #037 (select) > > Video Capture: Frame #038 (select) > > Video Capture: Frame #039 (select) > > Video Capture: Frame #040 (select) > > Video Capture: Frame #041 (select) > > Video Capture: Frame #042 (select) > > Video Capture: Frame #043 (select) > > Video Capture: Frame #044 (select) > > Video Capture: Frame #045 (select) > > Video Capture: Frame #046 (select) > > Video Capture: Frame #047 (select) > > Video Capture: Frame #048 (select) > > Video Capture: Frame #049 (select) > > Video Capture: Frame #050 (select) > > Video Capture: Frame #051 (select) > > Video Capture: Frame #052 (select) > > Video Capture: Frame #053 (select) > > Video Capture: Frame #054 (select) > > Video Capture: Frame #055 (select) > > Video Capture: Frame #056 (select) > > Video Capture: Frame #057 (select) > > Video Capture: Frame #058 (select) > > Video Capture: Frame #059 (select) > > > > test MMAP (select, REQBUFS): OK > > > > Video Capture: Frame #000 (epoll) > > Video Capture: Frame #001 (epoll) > > Video Capture: Frame #002 (epoll) > > Video Capture: Frame #003 (epoll) > > Video Capture: Frame #004 (epoll) > > Video Capture: Frame #005 (epoll) > > Video Capture: Frame #006 (epoll) > > Video Capture: Frame #007 (epoll) > > Video Capture: Frame #008 (epoll) > > Video Capture: Frame #009 (epoll) > > Video Capture: Frame #010 (epoll) > > Video Capture: Frame #011 (epoll) > > Video Capture: Frame #012 (epoll) > > Video Capture: Frame #013 (epoll) > > Video Capture: Frame #014 (epoll) > > Video Capture: Frame #015 (epoll) > > Video Capture: Frame #016 (epoll) > > Video Capture: Frame #017 (epoll) > > Video Capture: Frame #018 (epoll) > > Video Capture: Frame #019 (epoll) > > Video Capture: Frame #020 (epoll) > > Video Capture: Frame #021 (epoll) > > Video Capture: Frame #022 (epoll) > > Video Capture: Frame #023 (epoll) > > Video Capture: Frame #024 (epoll) > > Video Capture: Frame #025 (epoll) > > Video Capture: Frame #026 (epoll) > > Video Capture: Frame #027 (epoll) > > Video Capture: Frame #028 (epoll) > > Video Capture: Frame #029 (epoll) > > Video Capture: Frame #030 (epoll) > > Video Capture: Frame #031 (epoll) > > Video Capture: Frame #032 (epoll) > > Video Capture: Frame #033 (epoll) > > Video Capture: Frame #034 (epoll) > > Video Capture: Frame #035 (epoll) > > Video Capture: Frame #036 (epoll) > > Video Capture: Frame #037 (epoll) > > Video Capture: Frame #038 (epoll) > > Video Capture: Frame #039 (epoll) > > Video Capture: Frame #040 (epoll) > > Video Capture: Frame #041 (epoll) > > Video Capture: Frame #042 (epoll) > > Video Capture: Frame #043 (epoll) > > Video Capture: Frame #044 (epoll) > > Video Capture: Frame #045 (epoll) > > Video Capture: Frame #046 (epoll) > > Video Capture: Frame #047 (epoll) > > Video Capture: Frame #048 (epoll) > > Video Capture: Frame #049 (epoll) > > Video Capture: Frame #050 (epoll) > > Video Capture: Frame #051 (epoll) > > Video Capture: Frame #052 (epoll) > > Video Capture: Frame #053 (epoll) > > Video Capture: Frame #054 (epoll) > > Video Capture: Frame #055 (epoll) > > Video Capture: Frame #056 (epoll) > > Video Capture: Frame #057 (epoll) > > Video Capture: Frame #058 (epoll) > > Video Capture: Frame #059 (epoll) > > > > test MMAP (epoll, REQBUFS): OK > > > > Video Capture: Frame #000 > > Video Capture: Frame #001 > > Video Capture: Frame #002 > > Video Capture: Frame #003 > > Video Capture: Frame #004 > > Video Capture: Frame #005 > > Video Capture: Frame #006 > > Video Capture: Frame #007 > > Video Capture: Frame #008 > > Video Capture: Frame #009 > > Video Capture: Frame #010 > > Video Capture: Frame #011 > > Video Capture: Frame #012 > > Video Capture: Frame #013 > > Video Capture: Frame #014 > > Video Capture: Frame #015 > > Video Capture: Frame #016 > > Video Capture: Frame #017 > > Video Capture: Frame #018 > > Video Capture: Frame #019 > > Video Capture: Frame #020 > > Video Capture: Frame #021 > > Video Capture: Frame #022 > > Video Capture: Frame #023 > > Video Capture: Frame #024 > > Video Capture: Frame #025 > > Video Capture: Frame #026 > > Video Capture: Frame #027 > > Video Capture: Frame #028 > > Video Capture: Frame #029 > > Video Capture: Frame #030 > > Video Capture: Frame #031 > > Video Capture: Frame #032 > > Video Capture: Frame #033 > > Video Capture: Frame #034 > > Video Capture: Frame #035 > > Video Capture: Frame #036 > > Video Capture: Frame #037 > > Video Capture: Frame #038 > > Video Capture: Frame #039 > > Video Capture: Frame #040 > > Video Capture: Frame #041 > > Video Capture: Frame #042 > > Video Capture: Frame #043 > > Video Capture: Frame #044 > > Video Capture: Frame #045 > > Video Capture: Frame #046 > > Video Capture: Frame #047 > > Video Capture: Frame #048 > > Video Capture: Frame #049 > > Video Capture: Frame #050 > > Video Capture: Frame #051 > > Video Capture: Frame #052 > > Video Capture: Frame #053 > > Video Capture: Frame #054 > > Video Capture: Frame #055 > > Video Capture: Frame #056 > > Video Capture: Frame #057 > > Video Capture: Frame #058 > > Video Capture: Frame #059 > > > > test MMAP (no poll, CREATE_BUFS): OK > > > > Video Capture: Frame #000 (select) > > Video Capture: Frame #001 (select) > > Video Capture: Frame #002 (select) > > Video Capture: Frame #003 (select) > > Video Capture: Frame #004 (select) > > Video Capture: Frame #005 (select) > > Video Capture: Frame #006 (select) > > Video Capture: Frame #007 (select) > > Video Capture: Frame #008 (select) > > Video Capture: Frame #009 (select) > > Video Capture: Frame #010 (select) > > Video Capture: Frame #011 (select) > > Video Capture: Frame #012 (select) > > Video Capture: Frame #013 (select) > > Video Capture: Frame #014 (select) > > Video Capture: Frame #015 (select) > > Video Capture: Frame #016 (select) > > Video Capture: Frame #017 (select) > > Video Capture: Frame #018 (select) > > Video Capture: Frame #019 (select) > > Video Capture: Frame #020 (select) > > Video Capture: Frame #021 (select) > > Video Capture: Frame #022 (select) > > Video Capture: Frame #023 (select) > > Video Capture: Frame #024 (select) > > Video Capture: Frame #025 (select) > > Video Capture: Frame #026 (select) > > Video Capture: Frame #027 (select) > > Video Capture: Frame #028 (select) > > Video Capture: Frame #029 (select) > > Video Capture: Frame #030 (select) > > Video Capture: Frame #031 (select) > > Video Capture: Frame #032 (select) > > Video Capture: Frame #033 (select) > > Video Capture: Frame #034 (select) > > Video Capture: Frame #035 (select) > > Video Capture: Frame #036 (select) > > Video Capture: Frame #037 (select) > > Video Capture: Frame #038 (select) > > Video Capture: Frame #039 (select) > > Video Capture: Frame #040 (select) > > Video Capture: Frame #041 (select) > > Video Capture: Frame #042 (select) > > Video Capture: Frame #043 (select) > > Video Capture: Frame #044 (select) > > Video Capture: Frame #045 (select) > > Video Capture: Frame #046 (select) > > Video Capture: Frame #047 (select) > > Video Capture: Frame #048 (select) > > Video Capture: Frame #049 (select) > > Video Capture: Frame #050 (select) > > Video Capture: Frame #051 (select) > > Video Capture: Frame #052 (select) > > Video Capture: Frame #053 (select) > > Video Capture: Frame #054 (select) > > Video Capture: Frame #055 (select) > > Video Capture: Frame #056 (select) > > Video Capture: Frame #057 (select) > > Video Capture: Frame #058 (select) > > Video Capture: Frame #059 (select) > > > > test MMAP (select, CREATE_BUFS): OK > > > > Video Capture: Frame #000 (epoll) > > Video Capture: Frame #001 (epoll) > > Video Capture: Frame #002 (epoll) > > Video Capture: Frame #003 (epoll) > > Video Capture: Frame #004 (epoll) > > Video Capture: Frame #005 (epoll) > > Video Capture: Frame #006 (epoll) > > Video Capture: Frame #007 (epoll) > > Video Capture: Frame #008 (epoll) > > Video Capture: Frame #009 (epoll) > > Video Capture: Frame #010 (epoll) > > Video Capture: Frame #011 (epoll) > > Video Capture: Frame #012 (epoll) > > Video Capture: Frame #013 (epoll) > > Video Capture: Frame #014 (epoll) > > Video Capture: Frame #015 (epoll) > > Video Capture: Frame #016 (epoll) > > Video Capture: Frame #017 (epoll) > > Video Capture: Frame #018 (epoll) > > Video Capture: Frame #019 (epoll) > > Video Capture: Frame #020 (epoll) > > Video Capture: Frame #021 (epoll) > > Video Capture: Frame #022 (epoll) > > Video Capture: Frame #023 (epoll) > > Video Capture: Frame #024 (epoll) > > Video Capture: Frame #025 (epoll) > > Video Capture: Frame #026 (epoll) > > Video Capture: Frame #027 (epoll) > > Video Capture: Frame #028 (epoll) > > Video Capture: Frame #029 (epoll) > > Video Capture: Frame #030 (epoll) > > Video Capture: Frame #031 (epoll) > > Video Capture: Frame #032 (epoll) > > Video Capture: Frame #033 (epoll) > > Video Capture: Frame #034 (epoll) > > Video Capture: Frame #035 (epoll) > > Video Capture: Frame #036 (epoll) > > Video Capture: Frame #037 (epoll) > > Video Capture: Frame #038 (epoll) > > Video Capture: Frame #039 (epoll) > > Video Capture: Frame #040 (epoll) > > Video Capture: Frame #041 (epoll) > > Video Capture: Frame #042 (epoll) > > Video Capture: Frame #043 (epoll) > > Video Capture: Frame #044 (epoll) > > Video Capture: Frame #045 (epoll) > > Video Capture: Frame #046 (epoll) > > Video Capture: Frame #047 (epoll) > > Video Capture: Frame #048 (epoll) > > Video Capture: Frame #049 (epoll) > > Video Capture: Frame #050 (epoll) > > Video Capture: Frame #051 (epoll) > > Video Capture: Frame #052 (epoll) > > Video Capture: Frame #053 (epoll) > > Video Capture: Frame #054 (epoll) > > Video Capture: Frame #055 (epoll) > > Video Capture: Frame #056 (epoll) > > Video Capture: Frame #057 (epoll) > > Video Capture: Frame #058 (epoll) > > Video Capture: Frame #059 (epoll) > > > > test MMAP (epoll, CREATE_BUFS): OK > > test USERPTR (no poll): OK (Not Supported) > > test USERPTR (select): OK (Not Supported) > > test DMABUF (no poll): OK (Not Supported) > > test DMABUF (select): OK (Not Supported) > > > > Total for uvcvideo device /dev/video0: 59, Succeeded: 58, Failed: 1, Warnings: 0 > > > > --- > > Changes in v4: > > - Rebased on top of v7.1-rc1 > > - Replace usages of filep->private_data with file_to_v4l2_fh() > > throughout the driver > > - Link to v3: https://lore.kernel.org/r/20250412-virtio-media-v3-1-97dc94c18398@gmail.com > > > > Changes in v3: > > - Rebased on top of v6.15-rc1 and removes obsolete control callbacks. > > - Link to v2: https://lore.kernel.org/r/20250201-virtio-media-v2-1-ac840681452d@gmail.com > > > > Changes in v2: > > - Fixed kernel test robot and media CI warnings (ignored a few false > > positives). > > - Changed in-driver email address to personal one since my Google one > > will soon become invalid. > > - Link to v1: https://lore.kernel.org/r/20250123-virtio-media-v1-1-81e2549b86b9@gmail.com > > > > Brian Daniels (8): > > media: virtio: Add protocol > > media: virtio: Add virtio-media driver structs and function > > declarations > > media: virtio: Add virtio-media session related structures > > media: virtio: Add scatterlist_builder > > media: virtio: Add virtio_media_ioctls > > media: virtio: Add virtio_media_driver > > media: virtio: Add virtio-media to the build system > > media: virtio: Add MAINTAINERS entry > > > > MAINTAINERS | 6 + > > drivers/media/Kconfig | 13 + > > drivers/media/Makefile | 2 + > > drivers/media/virtio/Makefile | 8 + > > drivers/media/virtio/protocol.h | 287 +++++ > > drivers/media/virtio/scatterlist_builder.c | 574 +++++++++ > > drivers/media/virtio/scatterlist_builder.h | 112 ++ > > drivers/media/virtio/session.h | 130 ++ > > drivers/media/virtio/virtio_media.h | 95 ++ > > drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++ > > drivers/media/virtio/virtio_media_ioctls.c | 1338 ++++++++++++++++++++ > > 11 files changed, 3524 insertions(+) > > create mode 100644 drivers/media/virtio/Makefile > > create mode 100644 drivers/media/virtio/protocol.h > > create mode 100644 drivers/media/virtio/scatterlist_builder.c > > create mode 100644 drivers/media/virtio/scatterlist_builder.h > > create mode 100644 drivers/media/virtio/session.h > > create mode 100644 drivers/media/virtio/virtio_media.h > > create mode 100644 drivers/media/virtio/virtio_media_driver.c > > create mode 100644 drivers/media/virtio/virtio_media_ioctls.c > > > > > > base-commit: 06cb687a5132fcffe624c0070576ab852ac6b568
Hi Michael, Would you prefer more time to review these changes, or should I go ahead and upload a v5 based on the existing comments? Thanks, Brian On Thu, Jun 25, 2026 at 4:21 PM Brian Daniels <briandaniels@google.com> wrote: > > > > From: Alexandre Courbot <gnurou@gmail.com> > > > > > > Add the first version of the virtio-media driver. > > > > > > This driver acts roughly as a V4L2 relay between user-space and the > > > virtio virtual device on the host, so it is relatively simple, yet > > > unconventional. It doesn't use VB2 or other frameworks typically used in > > > a V4L2 driver, and most of its complexity resides in correctly and > > > efficiently building the virtio descriptor chain to pass to the host, > > > avoiding copies whenever possible. This is done by > > > scatterlist_builder.[ch]. > > > > > > This version supports MMAP buffers, while USERPTR buffers can also be > > > enabled through a driver option. DMABUF support is still pending. > > > > > > NOTE: This depends on the VIRTIO ID being added in this patch: > > > https://lore.kernel.org/all/20260310-virtio-media-id-v1-1-be211bcf682b@redhat.com > > I saw some CI build failures come back, but that should be resolved if the > patch above is merged. If you'd rather me add it to this patch series let me > know. > > > > Signed-off-by: Alexandre Courbot <gnurou@gmail.com> > > > Co-developed-by: Brian Daniels <briandaniels@google.com> > > > Signed-off-by: Brian Daniels <briandaniels@google.com> > > > > Thanks for the patches! > > Sent some comments on individual patches. > > Thanks for the feedback! > > I've started to prepare v5 based on the comments so far, I'll hold off on > sending it until we've resolved the other open threads. > > > > --- > > > Guest Setup > > > > > > Tests were ran on a Debian 12 guest running with crosvm. The guest image > > > was created with: > > > > > > $ virt-builder debian-12 --root-password password:"" > > > > > > Build crosvm and launch the guest starting at the "Crosvm" section on > > > this page: https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md#crosvm > > > > > > NOTE: Before running v4l2-compliance in the guest, you need to install > > > v4l-utils and ffmpeg: > > > > > > $ apt update && apt install v4l-utils ffmpeg > > > > > > --- > > > Compliance Testing > > > > > > This was tested using v4l2-compliance. Since virtio-media serves as > > > a proxy to host devices for the guest VMs, we expect the guest > > > compliance test to essentially match the host compliance test for the > > > same device. > > > > > > NOTE: v4l2-compliance changes its test behavior depending on the driver > > > name. In the guest, the driver name for virtio-media proxied-devices is > > > always "virtio-media", even if the actual host device has a driver name > > > of e.g. "uvcvideo". To ensure the test is consistent between the host > > > and the guest, I created a patch for the v4l2-compliance tool that > > > allows you to override the driver name. All test results that follow use > > > this patch: > > > https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/ > > > > > > All tests used a Logitech USB Webcam C925e. > > > > > > As tested on the host: > > > > > > $ v4l2-compliance -d1 -s > > > > > > v4l2-compliance 1.33.0-5471, 64 bits, 64-bit time_t > > > v4l2-compliance SHA: 9f2d3ea879ff 2026-05-28 14:45:11 > > > > > > Compliance test for uvcvideo device /dev/video1: > > > > > > Driver Info: > > > Driver name : uvcvideo > > > Card type : Logitech Webcam C925e > > > Bus info : usb-0000:04:00.1-3 > > > Driver version : 6.18.14 > > > Capabilities : 0x84a00001 > > > Video Capture > > > Metadata Capture > > > Streaming > > > Extended Pix Format > > > Device Capabilities > > > Device Caps : 0x04200001 > > > Video Capture > > > Streaming > > > Extended Pix Format > > > Media Driver Info: > > > Driver name : uvcvideo > > > Model : Logitech Webcam C925e > > > Serial : 686F371F > > > Bus info : usb-0000:04:00.1-3 > > > Media version : 6.18.14 > > > Hardware revision: 0x00000016 (22) > > > Driver version : 6.18.14 > > > Interface Info: > > > ID : 0x03000002 > > > Type : V4L Video > > > Entity Info: > > > ID : 0x00000001 (1) > > > Name : Logitech Webcam C925e > > > Function : V4L2 I/O > > > Flags : default > > > Pad 0x01000007 : 0: Sink > > > Link 0x0200001f: from remote pad 0x100000a of entity 'Processing 3' (Video Pixel Formatter): Data, Enabled, Immutable > > > > > > Required ioctls: > > > test MC information (see 'Media Driver Info' above): OK > > > test VIDIOC_QUERYCAP: OK > > > test invalid ioctls: OK > > > > > > Allow for multiple opens: > > > test second /dev/video1 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 (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 (Not Supported) > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > > Outputs: 0 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) > > > > > > Control ioctls (Input 0): > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > > test VIDIOC_QUERYCTRL: OK > > > test VIDIOC_G/S_CTRL: OK > > > fail: v4l2-test-controls.cpp(983): ret != EINVAL (got 13) > > > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > > Standard Controls: 19 Private Controls: 0 > > > > > > Format ioctls (Input 0): > > > 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 (Input 0): > > > 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 (Input 0): > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > > test CREATE_BUFS maximum buffers: OK > > > test VIDIOC_REMOVE_BUFS: OK > > > test VIDIOC_EXPBUF: OK > > > test Requests: OK (Not Supported) > > > test blocking wait: OK > > > > > > Test input 0: > > > > > > Streaming ioctls: > > > test read/write: OK (Not Supported) > > > > > > Video Capture: Frame #000 > > > Video Capture: Frame #001 > > > Video Capture: Frame #002 > > > Video Capture: Frame #003 > > > Video Capture: Frame #004 > > > Video Capture: Frame #005 > > > Video Capture: Frame #006 > > > Video Capture: Frame #007 > > > Video Capture: Frame #008 > > > Video Capture: Frame #009 > > > Video Capture: Frame #010 > > > Video Capture: Frame #011 > > > Video Capture: Frame #012 > > > Video Capture: Frame #013 > > > Video Capture: Frame #014 > > > Video Capture: Frame #015 > > > Video Capture: Frame #016 > > > Video Capture: Frame #017 > > > Video Capture: Frame #018 > > > Video Capture: Frame #019 > > > Video Capture: Frame #020 > > > Video Capture: Frame #021 > > > Video Capture: Frame #022 > > > Video Capture: Frame #023 > > > Video Capture: Frame #024 > > > Video Capture: Frame #025 > > > Video Capture: Frame #026 > > > Video Capture: Frame #027 > > > Video Capture: Frame #028 > > > Video Capture: Frame #029 > > > Video Capture: Frame #030 > > > Video Capture: Frame #031 > > > Video Capture: Frame #032 > > > Video Capture: Frame #033 > > > Video Capture: Frame #034 > > > Video Capture: Frame #035 > > > Video Capture: Frame #036 > > > Video Capture: Frame #037 > > > Video Capture: Frame #038 > > > Video Capture: Frame #039 > > > Video Capture: Frame #040 > > > Video Capture: Frame #041 > > > Video Capture: Frame #042 > > > Video Capture: Frame #043 > > > Video Capture: Frame #044 > > > Video Capture: Frame #045 > > > Video Capture: Frame #046 > > > Video Capture: Frame #047 > > > Video Capture: Frame #048 > > > Video Capture: Frame #049 > > > Video Capture: Frame #050 > > > Video Capture: Frame #051 > > > Video Capture: Frame #052 > > > Video Capture: Frame #053 > > > Video Capture: Frame #054 > > > Video Capture: Frame #055 > > > Video Capture: Frame #056 > > > Video Capture: Frame #057 > > > Video Capture: Frame #058 > > > Video Capture: Frame #059 > > > > > > test MMAP (no poll, REQBUFS): OK > > > > > > Video Capture: Frame #000 (select) > > > Video Capture: Frame #001 (select) > > > Video Capture: Frame #002 (select) > > > Video Capture: Frame #003 (select) > > > Video Capture: Frame #004 (select) > > > Video Capture: Frame #005 (select) > > > Video Capture: Frame #006 (select) > > > Video Capture: Frame #007 (select) > > > Video Capture: Frame #008 (select) > > > Video Capture: Frame #009 (select) > > > Video Capture: Frame #010 (select) > > > Video Capture: Frame #011 (select) > > > Video Capture: Frame #012 (select) > > > Video Capture: Frame #013 (select) > > > Video Capture: Frame #014 (select) > > > Video Capture: Frame #015 (select) > > > Video Capture: Frame #016 (select) > > > Video Capture: Frame #017 (select) > > > Video Capture: Frame #018 (select) > > > Video Capture: Frame #019 (select) > > > Video Capture: Frame #020 (select) > > > Video Capture: Frame #021 (select) > > > Video Capture: Frame #022 (select) > > > Video Capture: Frame #023 (select) > > > Video Capture: Frame #024 (select) > > > Video Capture: Frame #025 (select) > > > Video Capture: Frame #026 (select) > > > Video Capture: Frame #027 (select) > > > Video Capture: Frame #028 (select) > > > Video Capture: Frame #029 (select) > > > Video Capture: Frame #030 (select) > > > Video Capture: Frame #031 (select) > > > Video Capture: Frame #032 (select) > > > Video Capture: Frame #033 (select) > > > Video Capture: Frame #034 (select) > > > Video Capture: Frame #035 (select) > > > Video Capture: Frame #036 (select) > > > Video Capture: Frame #037 (select) > > > Video Capture: Frame #038 (select) > > > Video Capture: Frame #039 (select) > > > Video Capture: Frame #040 (select) > > > Video Capture: Frame #041 (select) > > > Video Capture: Frame #042 (select) > > > Video Capture: Frame #043 (select) > > > Video Capture: Frame #044 (select) > > > Video Capture: Frame #045 (select) > > > Video Capture: Frame #046 (select) > > > Video Capture: Frame #047 (select) > > > Video Capture: Frame #048 (select) > > > Video Capture: Frame #049 (select) > > > Video Capture: Frame #050 (select) > > > Video Capture: Frame #051 (select) > > > Video Capture: Frame #052 (select) > > > Video Capture: Frame #053 (select) > > > Video Capture: Frame #054 (select) > > > Video Capture: Frame #055 (select) > > > Video Capture: Frame #056 (select) > > > Video Capture: Frame #057 (select) > > > Video Capture: Frame #058 (select) > > > Video Capture: Frame #059 (select) > > > > > > test MMAP (select, REQBUFS): OK > > > > > > Video Capture: Frame #000 (epoll) > > > Video Capture: Frame #001 (epoll) > > > Video Capture: Frame #002 (epoll) > > > Video Capture: Frame #003 (epoll) > > > Video Capture: Frame #004 (epoll) > > > Video Capture: Frame #005 (epoll) > > > Video Capture: Frame #006 (epoll) > > > Video Capture: Frame #007 (epoll) > > > Video Capture: Frame #008 (epoll) > > > Video Capture: Frame #009 (epoll) > > > Video Capture: Frame #010 (epoll) > > > Video Capture: Frame #011 (epoll) > > > Video Capture: Frame #012 (epoll) > > > Video Capture: Frame #013 (epoll) > > > Video Capture: Frame #014 (epoll) > > > Video Capture: Frame #015 (epoll) > > > Video Capture: Frame #016 (epoll) > > > Video Capture: Frame #017 (epoll) > > > Video Capture: Frame #018 (epoll) > > > Video Capture: Frame #019 (epoll) > > > Video Capture: Frame #020 (epoll) > > > Video Capture: Frame #021 (epoll) > > > Video Capture: Frame #022 (epoll) > > > Video Capture: Frame #023 (epoll) > > > Video Capture: Frame #024 (epoll) > > > Video Capture: Frame #025 (epoll) > > > Video Capture: Frame #026 (epoll) > > > Video Capture: Frame #027 (epoll) > > > Video Capture: Frame #028 (epoll) > > > Video Capture: Frame #029 (epoll) > > > Video Capture: Frame #030 (epoll) > > > Video Capture: Frame #031 (epoll) > > > Video Capture: Frame #032 (epoll) > > > Video Capture: Frame #033 (epoll) > > > Video Capture: Frame #034 (epoll) > > > Video Capture: Frame #035 (epoll) > > > Video Capture: Frame #036 (epoll) > > > Video Capture: Frame #037 (epoll) > > > Video Capture: Frame #038 (epoll) > > > Video Capture: Frame #039 (epoll) > > > Video Capture: Frame #040 (epoll) > > > Video Capture: Frame #041 (epoll) > > > Video Capture: Frame #042 (epoll) > > > Video Capture: Frame #043 (epoll) > > > Video Capture: Frame #044 (epoll) > > > Video Capture: Frame #045 (epoll) > > > Video Capture: Frame #046 (epoll) > > > Video Capture: Frame #047 (epoll) > > > Video Capture: Frame #048 (epoll) > > > Video Capture: Frame #049 (epoll) > > > Video Capture: Frame #050 (epoll) > > > Video Capture: Frame #051 (epoll) > > > Video Capture: Frame #052 (epoll) > > > Video Capture: Frame #053 (epoll) > > > Video Capture: Frame #054 (epoll) > > > Video Capture: Frame #055 (epoll) > > > Video Capture: Frame #056 (epoll) > > > Video Capture: Frame #057 (epoll) > > > Video Capture: Frame #058 (epoll) > > > Video Capture: Frame #059 (epoll) > > > > > > test MMAP (epoll, REQBUFS): OK > > > > > > Video Capture: Frame #000 > > > Video Capture: Frame #001 > > > Video Capture: Frame #002 > > > Video Capture: Frame #003 > > > Video Capture: Frame #004 > > > Video Capture: Frame #005 > > > Video Capture: Frame #006 > > > Video Capture: Frame #007 > > > Video Capture: Frame #008 > > > Video Capture: Frame #009 > > > Video Capture: Frame #010 > > > Video Capture: Frame #011 > > > Video Capture: Frame #012 > > > Video Capture: Frame #013 > > > Video Capture: Frame #014 > > > Video Capture: Frame #015 > > > Video Capture: Frame #016 > > > Video Capture: Frame #017 > > > Video Capture: Frame #018 > > > Video Capture: Frame #019 > > > Video Capture: Frame #020 > > > Video Capture: Frame #021 > > > Video Capture: Frame #022 > > > Video Capture: Frame #023 > > > Video Capture: Frame #024 > > > Video Capture: Frame #025 > > > Video Capture: Frame #026 > > > Video Capture: Frame #027 > > > Video Capture: Frame #028 > > > Video Capture: Frame #029 > > > Video Capture: Frame #030 > > > Video Capture: Frame #031 > > > Video Capture: Frame #032 > > > Video Capture: Frame #033 > > > Video Capture: Frame #034 > > > Video Capture: Frame #035 > > > Video Capture: Frame #036 > > > Video Capture: Frame #037 > > > Video Capture: Frame #038 > > > Video Capture: Frame #039 > > > Video Capture: Frame #040 > > > Video Capture: Frame #041 > > > Video Capture: Frame #042 > > > Video Capture: Frame #043 > > > Video Capture: Frame #044 > > > Video Capture: Frame #045 > > > Video Capture: Frame #046 > > > Video Capture: Frame #047 > > > Video Capture: Frame #048 > > > Video Capture: Frame #049 > > > Video Capture: Frame #050 > > > Video Capture: Frame #051 > > > Video Capture: Frame #052 > > > Video Capture: Frame #053 > > > Video Capture: Frame #054 > > > Video Capture: Frame #055 > > > Video Capture: Frame #056 > > > Video Capture: Frame #057 > > > Video Capture: Frame #058 > > > Video Capture: Frame #059 > > > > > > test MMAP (no poll, CREATE_BUFS): OK > > > > > > Video Capture: Frame #000 (select) > > > Video Capture: Frame #001 (select) > > > Video Capture: Frame #002 (select) > > > Video Capture: Frame #003 (select) > > > Video Capture: Frame #004 (select) > > > Video Capture: Frame #005 (select) > > > Video Capture: Frame #006 (select) > > > Video Capture: Frame #007 (select) > > > Video Capture: Frame #008 (select) > > > Video Capture: Frame #009 (select) > > > Video Capture: Frame #010 (select) > > > Video Capture: Frame #011 (select) > > > Video Capture: Frame #012 (select) > > > Video Capture: Frame #013 (select) > > > Video Capture: Frame #014 (select) > > > Video Capture: Frame #015 (select) > > > Video Capture: Frame #016 (select) > > > Video Capture: Frame #017 (select) > > > Video Capture: Frame #018 (select) > > > Video Capture: Frame #019 (select) > > > Video Capture: Frame #020 (select) > > > Video Capture: Frame #021 (select) > > > Video Capture: Frame #022 (select) > > > Video Capture: Frame #023 (select) > > > Video Capture: Frame #024 (select) > > > Video Capture: Frame #025 (select) > > > Video Capture: Frame #026 (select) > > > Video Capture: Frame #027 (select) > > > Video Capture: Frame #028 (select) > > > Video Capture: Frame #029 (select) > > > Video Capture: Frame #030 (select) > > > Video Capture: Frame #031 (select) > > > Video Capture: Frame #032 (select) > > > Video Capture: Frame #033 (select) > > > Video Capture: Frame #034 (select) > > > Video Capture: Frame #035 (select) > > > Video Capture: Frame #036 (select) > > > Video Capture: Frame #037 (select) > > > Video Capture: Frame #038 (select) > > > Video Capture: Frame #039 (select) > > > Video Capture: Frame #040 (select) > > > Video Capture: Frame #041 (select) > > > Video Capture: Frame #042 (select) > > > Video Capture: Frame #043 (select) > > > Video Capture: Frame #044 (select) > > > Video Capture: Frame #045 (select) > > > Video Capture: Frame #046 (select) > > > Video Capture: Frame #047 (select) > > > Video Capture: Frame #048 (select) > > > Video Capture: Frame #049 (select) > > > Video Capture: Frame #050 (select) > > > Video Capture: Frame #051 (select) > > > Video Capture: Frame #052 (select) > > > Video Capture: Frame #053 (select) > > > Video Capture: Frame #054 (select) > > > Video Capture: Frame #055 (select) > > > Video Capture: Frame #056 (select) > > > Video Capture: Frame #057 (select) > > > Video Capture: Frame #058 (select) > > > Video Capture: Frame #059 (select) > > > > > > test MMAP (select, CREATE_BUFS): OK > > > > > > Video Capture: Frame #000 (epoll) > > > Video Capture: Frame #001 (epoll) > > > Video Capture: Frame #002 (epoll) > > > Video Capture: Frame #003 (epoll) > > > Video Capture: Frame #004 (epoll) > > > Video Capture: Frame #005 (epoll) > > > Video Capture: Frame #006 (epoll) > > > Video Capture: Frame #007 (epoll) > > > Video Capture: Frame #008 (epoll) > > > Video Capture: Frame #009 (epoll) > > > Video Capture: Frame #010 (epoll) > > > Video Capture: Frame #011 (epoll) > > > Video Capture: Frame #012 (epoll) > > > Video Capture: Frame #013 (epoll) > > > Video Capture: Frame #014 (epoll) > > > Video Capture: Frame #015 (epoll) > > > Video Capture: Frame #016 (epoll) > > > Video Capture: Frame #017 (epoll) > > > Video Capture: Frame #018 (epoll) > > > Video Capture: Frame #019 (epoll) > > > Video Capture: Frame #020 (epoll) > > > Video Capture: Frame #021 (epoll) > > > Video Capture: Frame #022 (epoll) > > > Video Capture: Frame #023 (epoll) > > > Video Capture: Frame #024 (epoll) > > > Video Capture: Frame #025 (epoll) > > > Video Capture: Frame #026 (epoll) > > > Video Capture: Frame #027 (epoll) > > > Video Capture: Frame #028 (epoll) > > > Video Capture: Frame #029 (epoll) > > > Video Capture: Frame #030 (epoll) > > > Video Capture: Frame #031 (epoll) > > > Video Capture: Frame #032 (epoll) > > > Video Capture: Frame #033 (epoll) > > > Video Capture: Frame #034 (epoll) > > > Video Capture: Frame #035 (epoll) > > > Video Capture: Frame #036 (epoll) > > > Video Capture: Frame #037 (epoll) > > > Video Capture: Frame #038 (epoll) > > > Video Capture: Frame #039 (epoll) > > > Video Capture: Frame #040 (epoll) > > > Video Capture: Frame #041 (epoll) > > > Video Capture: Frame #042 (epoll) > > > Video Capture: Frame #043 (epoll) > > > Video Capture: Frame #044 (epoll) > > > Video Capture: Frame #045 (epoll) > > > Video Capture: Frame #046 (epoll) > > > Video Capture: Frame #047 (epoll) > > > Video Capture: Frame #048 (epoll) > > > Video Capture: Frame #049 (epoll) > > > Video Capture: Frame #050 (epoll) > > > Video Capture: Frame #051 (epoll) > > > Video Capture: Frame #052 (epoll) > > > Video Capture: Frame #053 (epoll) > > > Video Capture: Frame #054 (epoll) > > > Video Capture: Frame #055 (epoll) > > > Video Capture: Frame #056 (epoll) > > > Video Capture: Frame #057 (epoll) > > > Video Capture: Frame #058 (epoll) > > > Video Capture: Frame #059 (epoll) > > > > > > test MMAP (epoll, CREATE_BUFS): OK > > > > > > Video Capture: Frame #000 > > > Video Capture: Frame #001 > > > Video Capture: Frame #002 > > > Video Capture: Frame #003 > > > Video Capture: Frame #004 > > > Video Capture: Frame #005 > > > Video Capture: Frame #006 > > > Video Capture: Frame #007 > > > Video Capture: Frame #008 > > > Video Capture: Frame #009 > > > Video Capture: Frame #010 > > > Video Capture: Frame #011 > > > Video Capture: Frame #012 > > > Video Capture: Frame #013 > > > Video Capture: Frame #014 > > > Video Capture: Frame #015 > > > Video Capture: Frame #016 > > > Video Capture: Frame #017 > > > Video Capture: Frame #018 > > > Video Capture: Frame #019 > > > Video Capture: Frame #020 > > > Video Capture: Frame #021 > > > Video Capture: Frame #022 > > > Video Capture: Frame #023 > > > Video Capture: Frame #024 > > > Video Capture: Frame #025 > > > Video Capture: Frame #026 > > > Video Capture: Frame #027 > > > Video Capture: Frame #028 > > > Video Capture: Frame #029 > > > Video Capture: Frame #030 > > > Video Capture: Frame #031 > > > Video Capture: Frame #032 > > > Video Capture: Frame #033 > > > Video Capture: Frame #034 > > > Video Capture: Frame #035 > > > Video Capture: Frame #036 > > > Video Capture: Frame #037 > > > Video Capture: Frame #038 > > > Video Capture: Frame #039 > > > Video Capture: Frame #040 > > > Video Capture: Frame #041 > > > Video Capture: Frame #042 > > > Video Capture: Frame #043 > > > Video Capture: Frame #044 > > > Video Capture: Frame #045 > > > Video Capture: Frame #046 > > > Video Capture: Frame #047 > > > Video Capture: Frame #048 > > > Video Capture: Frame #049 > > > Video Capture: Frame #050 > > > Video Capture: Frame #051 > > > Video Capture: Frame #052 > > > Video Capture: Frame #053 > > > Video Capture: Frame #054 > > > Video Capture: Frame #055 > > > Video Capture: Frame #056 > > > Video Capture: Frame #057 > > > Video Capture: Frame #058 > > > Video Capture: Frame #059 > > > > > > test USERPTR (no poll): OK > > > > > > Video Capture: Frame #000 (select) > > > Video Capture: Frame #001 (select) > > > Video Capture: Frame #002 (select) > > > Video Capture: Frame #003 (select) > > > Video Capture: Frame #004 (select) > > > Video Capture: Frame #005 (select) > > > Video Capture: Frame #006 (select) > > > Video Capture: Frame #007 (select) > > > Video Capture: Frame #008 (select) > > > Video Capture: Frame #009 (select) > > > Video Capture: Frame #010 (select) > > > Video Capture: Frame #011 (select) > > > Video Capture: Frame #012 (select) > > > Video Capture: Frame #013 (select) > > > Video Capture: Frame #014 (select) > > > Video Capture: Frame #015 (select) > > > Video Capture: Frame #016 (select) > > > Video Capture: Frame #017 (select) > > > Video Capture: Frame #018 (select) > > > Video Capture: Frame #019 (select) > > > Video Capture: Frame #020 (select) > > > Video Capture: Frame #021 (select) > > > Video Capture: Frame #022 (select) > > > Video Capture: Frame #023 (select) > > > Video Capture: Frame #024 (select) > > > Video Capture: Frame #025 (select) > > > Video Capture: Frame #026 (select) > > > Video Capture: Frame #027 (select) > > > Video Capture: Frame #028 (select) > > > Video Capture: Frame #029 (select) > > > Video Capture: Frame #030 (select) > > > Video Capture: Frame #031 (select) > > > Video Capture: Frame #032 (select) > > > Video Capture: Frame #033 (select) > > > Video Capture: Frame #034 (select) > > > Video Capture: Frame #035 (select) > > > Video Capture: Frame #036 (select) > > > Video Capture: Frame #037 (select) > > > Video Capture: Frame #038 (select) > > > Video Capture: Frame #039 (select) > > > Video Capture: Frame #040 (select) > > > Video Capture: Frame #041 (select) > > > Video Capture: Frame #042 (select) > > > Video Capture: Frame #043 (select) > > > Video Capture: Frame #044 (select) > > > Video Capture: Frame #045 (select) > > > Video Capture: Frame #046 (select) > > > Video Capture: Frame #047 (select) > > > Video Capture: Frame #048 (select) > > > Video Capture: Frame #049 (select) > > > Video Capture: Frame #050 (select) > > > Video Capture: Frame #051 (select) > > > Video Capture: Frame #052 (select) > > > Video Capture: Frame #053 (select) > > > Video Capture: Frame #054 (select) > > > Video Capture: Frame #055 (select) > > > Video Capture: Frame #056 (select) > > > Video Capture: Frame #057 (select) > > > Video Capture: Frame #058 (select) > > > Video Capture: Frame #059 (select) > > > > > > test USERPTR (select): OK > > > test DMABUF: Cannot test, specify --expbuf-device > > > > > > Total for uvcvideo device /dev/video1: 58, Succeeded: 57, Failed: 1, Warnings: 0 > > > > > > As tested on the guest: > > > > > > $ v4l2-compliance -d0 -s --driver-name uvcvideo > > > > > > v4l2-compliance 1.33.0-5457, 64 bits, 64-bit time_t > > > v4l2-compliance SHA: e7e240f546f3 2026-05-28 17:06:12 > > > > > > Compliance test for uvcvideo device (overridden from virtio-media) /dev/video0: > > > > > > Driver Info: > > > Driver name : uvcvideo > > > Card type : Logitech Webcam C925e > > > Bus info : platform:virtio-media > > > Driver version : 7.1.0 > > > Capabilities : 0x84200001 > > > Video Capture > > > Streaming > > > Extended Pix Format > > > Device Capabilities > > > Device Caps : 0x04200001 > > > Video Capture > > > Streaming > > > Extended Pix Format > > > > > > Required ioctls: > > > test VIDIOC_QUERYCAP: OK > > > test invalid ioctls: OK > > > > > > Allow for multiple opens: > > > test second /dev/video0 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 (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 > > > 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 (Not Supported) > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > > Outputs: 0 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) > > > > > > Control ioctls (Input 0): > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > > test VIDIOC_QUERYCTRL: OK > > > test VIDIOC_G/S_CTRL: OK > > > fail: v4l2-test-controls.cpp(981): ret (got 22) > > > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > > Standard Controls: 19 Private Controls: 0 > > > > > > Format ioctls (Input 0): > > > 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 (Input 0): > > > 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 (Input 0): > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > > test CREATE_BUFS maximum buffers: OK > > > test VIDIOC_REMOVE_BUFS: OK > > > test VIDIOC_EXPBUF: OK (Not Supported) > > > test Requests: OK (Not Supported) > > > test blocking wait: OK > > > > > > Test input 0: > > > > > > Streaming ioctls: > > > test read/write: OK (Not Supported) > > > > > > Video Capture: Frame #000 > > > Video Capture: Frame #001 > > > Video Capture: Frame #002 > > > Video Capture: Frame #003 > > > Video Capture: Frame #004 > > > Video Capture: Frame #005 > > > Video Capture: Frame #006 > > > Video Capture: Frame #007 > > > Video Capture: Frame #008 > > > Video Capture: Frame #009 > > > Video Capture: Frame #010 > > > Video Capture: Frame #011 > > > Video Capture: Frame #012 > > > Video Capture: Frame #013 > > > Video Capture: Frame #014 > > > Video Capture: Frame #015 > > > Video Capture: Frame #016 > > > Video Capture: Frame #017 > > > Video Capture: Frame #018 > > > Video Capture: Frame #019 > > > Video Capture: Frame #020 > > > Video Capture: Frame #021 > > > Video Capture: Frame #022 > > > Video Capture: Frame #023 > > > Video Capture: Frame #024 > > > Video Capture: Frame #025 > > > Video Capture: Frame #026 > > > Video Capture: Frame #027 > > > Video Capture: Frame #028 > > > Video Capture: Frame #029 > > > Video Capture: Frame #030 > > > Video Capture: Frame #031 > > > Video Capture: Frame #032 > > > Video Capture: Frame #033 > > > Video Capture: Frame #034 > > > Video Capture: Frame #035 > > > Video Capture: Frame #036 > > > Video Capture: Frame #037 > > > Video Capture: Frame #038 > > > Video Capture: Frame #039 > > > Video Capture: Frame #040 > > > Video Capture: Frame #041 > > > Video Capture: Frame #042 > > > Video Capture: Frame #043 > > > Video Capture: Frame #044 > > > Video Capture: Frame #045 > > > Video Capture: Frame #046 > > > Video Capture: Frame #047 > > > Video Capture: Frame #048 > > > Video Capture: Frame #049 > > > Video Capture: Frame #050 > > > Video Capture: Frame #051 > > > Video Capture: Frame #052 > > > Video Capture: Frame #053 > > > Video Capture: Frame #054 > > > Video Capture: Frame #055 > > > Video Capture: Frame #056 > > > Video Capture: Frame #057 > > > Video Capture: Frame #058 > > > Video Capture: Frame #059 > > > > > > test MMAP (no poll, REQBUFS): OK > > > > > > Video Capture: Frame #000 (select) > > > Video Capture: Frame #001 (select) > > > Video Capture: Frame #002 (select) > > > Video Capture: Frame #003 (select) > > > Video Capture: Frame #004 (select) > > > Video Capture: Frame #005 (select) > > > Video Capture: Frame #006 (select) > > > Video Capture: Frame #007 (select) > > > Video Capture: Frame #008 (select) > > > Video Capture: Frame #009 (select) > > > Video Capture: Frame #010 (select) > > > Video Capture: Frame #011 (select) > > > Video Capture: Frame #012 (select) > > > Video Capture: Frame #013 (select) > > > Video Capture: Frame #014 (select) > > > Video Capture: Frame #015 (select) > > > Video Capture: Frame #016 (select) > > > Video Capture: Frame #017 (select) > > > Video Capture: Frame #018 (select) > > > Video Capture: Frame #019 (select) > > > Video Capture: Frame #020 (select) > > > Video Capture: Frame #021 (select) > > > Video Capture: Frame #022 (select) > > > Video Capture: Frame #023 (select) > > > Video Capture: Frame #024 (select) > > > Video Capture: Frame #025 (select) > > > Video Capture: Frame #026 (select) > > > Video Capture: Frame #027 (select) > > > Video Capture: Frame #028 (select) > > > Video Capture: Frame #029 (select) > > > Video Capture: Frame #030 (select) > > > Video Capture: Frame #031 (select) > > > Video Capture: Frame #032 (select) > > > Video Capture: Frame #033 (select) > > > Video Capture: Frame #034 (select) > > > Video Capture: Frame #035 (select) > > > Video Capture: Frame #036 (select) > > > Video Capture: Frame #037 (select) > > > Video Capture: Frame #038 (select) > > > Video Capture: Frame #039 (select) > > > Video Capture: Frame #040 (select) > > > Video Capture: Frame #041 (select) > > > Video Capture: Frame #042 (select) > > > Video Capture: Frame #043 (select) > > > Video Capture: Frame #044 (select) > > > Video Capture: Frame #045 (select) > > > Video Capture: Frame #046 (select) > > > Video Capture: Frame #047 (select) > > > Video Capture: Frame #048 (select) > > > Video Capture: Frame #049 (select) > > > Video Capture: Frame #050 (select) > > > Video Capture: Frame #051 (select) > > > Video Capture: Frame #052 (select) > > > Video Capture: Frame #053 (select) > > > Video Capture: Frame #054 (select) > > > Video Capture: Frame #055 (select) > > > Video Capture: Frame #056 (select) > > > Video Capture: Frame #057 (select) > > > Video Capture: Frame #058 (select) > > > Video Capture: Frame #059 (select) > > > > > > test MMAP (select, REQBUFS): OK > > > > > > Video Capture: Frame #000 (epoll) > > > Video Capture: Frame #001 (epoll) > > > Video Capture: Frame #002 (epoll) > > > Video Capture: Frame #003 (epoll) > > > Video Capture: Frame #004 (epoll) > > > Video Capture: Frame #005 (epoll) > > > Video Capture: Frame #006 (epoll) > > > Video Capture: Frame #007 (epoll) > > > Video Capture: Frame #008 (epoll) > > > Video Capture: Frame #009 (epoll) > > > Video Capture: Frame #010 (epoll) > > > Video Capture: Frame #011 (epoll) > > > Video Capture: Frame #012 (epoll) > > > Video Capture: Frame #013 (epoll) > > > Video Capture: Frame #014 (epoll) > > > Video Capture: Frame #015 (epoll) > > > Video Capture: Frame #016 (epoll) > > > Video Capture: Frame #017 (epoll) > > > Video Capture: Frame #018 (epoll) > > > Video Capture: Frame #019 (epoll) > > > Video Capture: Frame #020 (epoll) > > > Video Capture: Frame #021 (epoll) > > > Video Capture: Frame #022 (epoll) > > > Video Capture: Frame #023 (epoll) > > > Video Capture: Frame #024 (epoll) > > > Video Capture: Frame #025 (epoll) > > > Video Capture: Frame #026 (epoll) > > > Video Capture: Frame #027 (epoll) > > > Video Capture: Frame #028 (epoll) > > > Video Capture: Frame #029 (epoll) > > > Video Capture: Frame #030 (epoll) > > > Video Capture: Frame #031 (epoll) > > > Video Capture: Frame #032 (epoll) > > > Video Capture: Frame #033 (epoll) > > > Video Capture: Frame #034 (epoll) > > > Video Capture: Frame #035 (epoll) > > > Video Capture: Frame #036 (epoll) > > > Video Capture: Frame #037 (epoll) > > > Video Capture: Frame #038 (epoll) > > > Video Capture: Frame #039 (epoll) > > > Video Capture: Frame #040 (epoll) > > > Video Capture: Frame #041 (epoll) > > > Video Capture: Frame #042 (epoll) > > > Video Capture: Frame #043 (epoll) > > > Video Capture: Frame #044 (epoll) > > > Video Capture: Frame #045 (epoll) > > > Video Capture: Frame #046 (epoll) > > > Video Capture: Frame #047 (epoll) > > > Video Capture: Frame #048 (epoll) > > > Video Capture: Frame #049 (epoll) > > > Video Capture: Frame #050 (epoll) > > > Video Capture: Frame #051 (epoll) > > > Video Capture: Frame #052 (epoll) > > > Video Capture: Frame #053 (epoll) > > > Video Capture: Frame #054 (epoll) > > > Video Capture: Frame #055 (epoll) > > > Video Capture: Frame #056 (epoll) > > > Video Capture: Frame #057 (epoll) > > > Video Capture: Frame #058 (epoll) > > > Video Capture: Frame #059 (epoll) > > > > > > test MMAP (epoll, REQBUFS): OK > > > > > > Video Capture: Frame #000 > > > Video Capture: Frame #001 > > > Video Capture: Frame #002 > > > Video Capture: Frame #003 > > > Video Capture: Frame #004 > > > Video Capture: Frame #005 > > > Video Capture: Frame #006 > > > Video Capture: Frame #007 > > > Video Capture: Frame #008 > > > Video Capture: Frame #009 > > > Video Capture: Frame #010 > > > Video Capture: Frame #011 > > > Video Capture: Frame #012 > > > Video Capture: Frame #013 > > > Video Capture: Frame #014 > > > Video Capture: Frame #015 > > > Video Capture: Frame #016 > > > Video Capture: Frame #017 > > > Video Capture: Frame #018 > > > Video Capture: Frame #019 > > > Video Capture: Frame #020 > > > Video Capture: Frame #021 > > > Video Capture: Frame #022 > > > Video Capture: Frame #023 > > > Video Capture: Frame #024 > > > Video Capture: Frame #025 > > > Video Capture: Frame #026 > > > Video Capture: Frame #027 > > > Video Capture: Frame #028 > > > Video Capture: Frame #029 > > > Video Capture: Frame #030 > > > Video Capture: Frame #031 > > > Video Capture: Frame #032 > > > Video Capture: Frame #033 > > > Video Capture: Frame #034 > > > Video Capture: Frame #035 > > > Video Capture: Frame #036 > > > Video Capture: Frame #037 > > > Video Capture: Frame #038 > > > Video Capture: Frame #039 > > > Video Capture: Frame #040 > > > Video Capture: Frame #041 > > > Video Capture: Frame #042 > > > Video Capture: Frame #043 > > > Video Capture: Frame #044 > > > Video Capture: Frame #045 > > > Video Capture: Frame #046 > > > Video Capture: Frame #047 > > > Video Capture: Frame #048 > > > Video Capture: Frame #049 > > > Video Capture: Frame #050 > > > Video Capture: Frame #051 > > > Video Capture: Frame #052 > > > Video Capture: Frame #053 > > > Video Capture: Frame #054 > > > Video Capture: Frame #055 > > > Video Capture: Frame #056 > > > Video Capture: Frame #057 > > > Video Capture: Frame #058 > > > Video Capture: Frame #059 > > > > > > test MMAP (no poll, CREATE_BUFS): OK > > > > > > Video Capture: Frame #000 (select) > > > Video Capture: Frame #001 (select) > > > Video Capture: Frame #002 (select) > > > Video Capture: Frame #003 (select) > > > Video Capture: Frame #004 (select) > > > Video Capture: Frame #005 (select) > > > Video Capture: Frame #006 (select) > > > Video Capture: Frame #007 (select) > > > Video Capture: Frame #008 (select) > > > Video Capture: Frame #009 (select) > > > Video Capture: Frame #010 (select) > > > Video Capture: Frame #011 (select) > > > Video Capture: Frame #012 (select) > > > Video Capture: Frame #013 (select) > > > Video Capture: Frame #014 (select) > > > Video Capture: Frame #015 (select) > > > Video Capture: Frame #016 (select) > > > Video Capture: Frame #017 (select) > > > Video Capture: Frame #018 (select) > > > Video Capture: Frame #019 (select) > > > Video Capture: Frame #020 (select) > > > Video Capture: Frame #021 (select) > > > Video Capture: Frame #022 (select) > > > Video Capture: Frame #023 (select) > > > Video Capture: Frame #024 (select) > > > Video Capture: Frame #025 (select) > > > Video Capture: Frame #026 (select) > > > Video Capture: Frame #027 (select) > > > Video Capture: Frame #028 (select) > > > Video Capture: Frame #029 (select) > > > Video Capture: Frame #030 (select) > > > Video Capture: Frame #031 (select) > > > Video Capture: Frame #032 (select) > > > Video Capture: Frame #033 (select) > > > Video Capture: Frame #034 (select) > > > Video Capture: Frame #035 (select) > > > Video Capture: Frame #036 (select) > > > Video Capture: Frame #037 (select) > > > Video Capture: Frame #038 (select) > > > Video Capture: Frame #039 (select) > > > Video Capture: Frame #040 (select) > > > Video Capture: Frame #041 (select) > > > Video Capture: Frame #042 (select) > > > Video Capture: Frame #043 (select) > > > Video Capture: Frame #044 (select) > > > Video Capture: Frame #045 (select) > > > Video Capture: Frame #046 (select) > > > Video Capture: Frame #047 (select) > > > Video Capture: Frame #048 (select) > > > Video Capture: Frame #049 (select) > > > Video Capture: Frame #050 (select) > > > Video Capture: Frame #051 (select) > > > Video Capture: Frame #052 (select) > > > Video Capture: Frame #053 (select) > > > Video Capture: Frame #054 (select) > > > Video Capture: Frame #055 (select) > > > Video Capture: Frame #056 (select) > > > Video Capture: Frame #057 (select) > > > Video Capture: Frame #058 (select) > > > Video Capture: Frame #059 (select) > > > > > > test MMAP (select, CREATE_BUFS): OK > > > > > > Video Capture: Frame #000 (epoll) > > > Video Capture: Frame #001 (epoll) > > > Video Capture: Frame #002 (epoll) > > > Video Capture: Frame #003 (epoll) > > > Video Capture: Frame #004 (epoll) > > > Video Capture: Frame #005 (epoll) > > > Video Capture: Frame #006 (epoll) > > > Video Capture: Frame #007 (epoll) > > > Video Capture: Frame #008 (epoll) > > > Video Capture: Frame #009 (epoll) > > > Video Capture: Frame #010 (epoll) > > > Video Capture: Frame #011 (epoll) > > > Video Capture: Frame #012 (epoll) > > > Video Capture: Frame #013 (epoll) > > > Video Capture: Frame #014 (epoll) > > > Video Capture: Frame #015 (epoll) > > > Video Capture: Frame #016 (epoll) > > > Video Capture: Frame #017 (epoll) > > > Video Capture: Frame #018 (epoll) > > > Video Capture: Frame #019 (epoll) > > > Video Capture: Frame #020 (epoll) > > > Video Capture: Frame #021 (epoll) > > > Video Capture: Frame #022 (epoll) > > > Video Capture: Frame #023 (epoll) > > > Video Capture: Frame #024 (epoll) > > > Video Capture: Frame #025 (epoll) > > > Video Capture: Frame #026 (epoll) > > > Video Capture: Frame #027 (epoll) > > > Video Capture: Frame #028 (epoll) > > > Video Capture: Frame #029 (epoll) > > > Video Capture: Frame #030 (epoll) > > > Video Capture: Frame #031 (epoll) > > > Video Capture: Frame #032 (epoll) > > > Video Capture: Frame #033 (epoll) > > > Video Capture: Frame #034 (epoll) > > > Video Capture: Frame #035 (epoll) > > > Video Capture: Frame #036 (epoll) > > > Video Capture: Frame #037 (epoll) > > > Video Capture: Frame #038 (epoll) > > > Video Capture: Frame #039 (epoll) > > > Video Capture: Frame #040 (epoll) > > > Video Capture: Frame #041 (epoll) > > > Video Capture: Frame #042 (epoll) > > > Video Capture: Frame #043 (epoll) > > > Video Capture: Frame #044 (epoll) > > > Video Capture: Frame #045 (epoll) > > > Video Capture: Frame #046 (epoll) > > > Video Capture: Frame #047 (epoll) > > > Video Capture: Frame #048 (epoll) > > > Video Capture: Frame #049 (epoll) > > > Video Capture: Frame #050 (epoll) > > > Video Capture: Frame #051 (epoll) > > > Video Capture: Frame #052 (epoll) > > > Video Capture: Frame #053 (epoll) > > > Video Capture: Frame #054 (epoll) > > > Video Capture: Frame #055 (epoll) > > > Video Capture: Frame #056 (epoll) > > > Video Capture: Frame #057 (epoll) > > > Video Capture: Frame #058 (epoll) > > > Video Capture: Frame #059 (epoll) > > > > > > test MMAP (epoll, CREATE_BUFS): OK > > > test USERPTR (no poll): OK (Not Supported) > > > test USERPTR (select): OK (Not Supported) > > > test DMABUF (no poll): OK (Not Supported) > > > test DMABUF (select): OK (Not Supported) > > > > > > Total for uvcvideo device /dev/video0: 59, Succeeded: 58, Failed: 1, Warnings: 0 > > > > > > --- > > > Changes in v4: > > > - Rebased on top of v7.1-rc1 > > > - Replace usages of filep->private_data with file_to_v4l2_fh() > > > throughout the driver > > > - Link to v3: https://lore.kernel.org/r/20250412-virtio-media-v3-1-97dc94c18398@gmail.com > > > > > > Changes in v3: > > > - Rebased on top of v6.15-rc1 and removes obsolete control callbacks. > > > - Link to v2: https://lore.kernel.org/r/20250201-virtio-media-v2-1-ac840681452d@gmail.com > > > > > > Changes in v2: > > > - Fixed kernel test robot and media CI warnings (ignored a few false > > > positives). > > > - Changed in-driver email address to personal one since my Google one > > > will soon become invalid. > > > - Link to v1: https://lore.kernel.org/r/20250123-virtio-media-v1-1-81e2549b86b9@gmail.com > > > > > > Brian Daniels (8): > > > media: virtio: Add protocol > > > media: virtio: Add virtio-media driver structs and function > > > declarations > > > media: virtio: Add virtio-media session related structures > > > media: virtio: Add scatterlist_builder > > > media: virtio: Add virtio_media_ioctls > > > media: virtio: Add virtio_media_driver > > > media: virtio: Add virtio-media to the build system > > > media: virtio: Add MAINTAINERS entry > > > > > > MAINTAINERS | 6 + > > > drivers/media/Kconfig | 13 + > > > drivers/media/Makefile | 2 + > > > drivers/media/virtio/Makefile | 8 + > > > drivers/media/virtio/protocol.h | 287 +++++ > > > drivers/media/virtio/scatterlist_builder.c | 574 +++++++++ > > > drivers/media/virtio/scatterlist_builder.h | 112 ++ > > > drivers/media/virtio/session.h | 130 ++ > > > drivers/media/virtio/virtio_media.h | 95 ++ > > > drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++ > > > drivers/media/virtio/virtio_media_ioctls.c | 1338 ++++++++++++++++++++ > > > 11 files changed, 3524 insertions(+) > > > create mode 100644 drivers/media/virtio/Makefile > > > create mode 100644 drivers/media/virtio/protocol.h > > > create mode 100644 drivers/media/virtio/scatterlist_builder.c > > > create mode 100644 drivers/media/virtio/scatterlist_builder.h > > > create mode 100644 drivers/media/virtio/session.h > > > create mode 100644 drivers/media/virtio/virtio_media.h > > > create mode 100644 drivers/media/virtio/virtio_media_driver.c > > > create mode 100644 drivers/media/virtio/virtio_media_ioctls.c > > > > > > > > > base-commit: 06cb687a5132fcffe624c0070576ab852ac6b568 > >
On Fri, Jul 10, 2026 at 04:44:14PM -0400, Brian Daniels wrote: > Hi Michael, > > Would you prefer more time to review these changes, or should I go > ahead and upload a v5 based on the existing comments? > > Thanks, > Brian Pls send v5. Thanks! > On Thu, Jun 25, 2026 at 4:21 PM Brian Daniels <briandaniels@google.com> wrote: > > > > > > From: Alexandre Courbot <gnurou@gmail.com> > > > > > > > > Add the first version of the virtio-media driver. > > > > > > > > This driver acts roughly as a V4L2 relay between user-space and the > > > > virtio virtual device on the host, so it is relatively simple, yet > > > > unconventional. It doesn't use VB2 or other frameworks typically used in > > > > a V4L2 driver, and most of its complexity resides in correctly and > > > > efficiently building the virtio descriptor chain to pass to the host, > > > > avoiding copies whenever possible. This is done by > > > > scatterlist_builder.[ch]. > > > > > > > > This version supports MMAP buffers, while USERPTR buffers can also be > > > > enabled through a driver option. DMABUF support is still pending. > > > > > > > > NOTE: This depends on the VIRTIO ID being added in this patch: > > > > https://lore.kernel.org/all/20260310-virtio-media-id-v1-1-be211bcf682b@redhat.com > > > > I saw some CI build failures come back, but that should be resolved if the > > patch above is merged. If you'd rather me add it to this patch series let me > > know. > > > > > > Signed-off-by: Alexandre Courbot <gnurou@gmail.com> > > > > Co-developed-by: Brian Daniels <briandaniels@google.com> > > > > Signed-off-by: Brian Daniels <briandaniels@google.com> > > > > > > Thanks for the patches! > > > Sent some comments on individual patches. > > > > Thanks for the feedback! > > > > I've started to prepare v5 based on the comments so far, I'll hold off on > > sending it until we've resolved the other open threads. > > > > > > --- > > > > Guest Setup > > > > > > > > Tests were ran on a Debian 12 guest running with crosvm. The guest image > > > > was created with: > > > > > > > > $ virt-builder debian-12 --root-password password:"" > > > > > > > > Build crosvm and launch the guest starting at the "Crosvm" section on > > > > this page: https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md#crosvm > > > > > > > > NOTE: Before running v4l2-compliance in the guest, you need to install > > > > v4l-utils and ffmpeg: > > > > > > > > $ apt update && apt install v4l-utils ffmpeg > > > > > > > > --- > > > > Compliance Testing > > > > > > > > This was tested using v4l2-compliance. Since virtio-media serves as > > > > a proxy to host devices for the guest VMs, we expect the guest > > > > compliance test to essentially match the host compliance test for the > > > > same device. > > > > > > > > NOTE: v4l2-compliance changes its test behavior depending on the driver > > > > name. In the guest, the driver name for virtio-media proxied-devices is > > > > always "virtio-media", even if the actual host device has a driver name > > > > of e.g. "uvcvideo". To ensure the test is consistent between the host > > > > and the guest, I created a patch for the v4l2-compliance tool that > > > > allows you to override the driver name. All test results that follow use > > > > this patch: > > > > https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/ > > > > > > > > All tests used a Logitech USB Webcam C925e. > > > > > > > > As tested on the host: > > > > > > > > $ v4l2-compliance -d1 -s > > > > > > > > v4l2-compliance 1.33.0-5471, 64 bits, 64-bit time_t > > > > v4l2-compliance SHA: 9f2d3ea879ff 2026-05-28 14:45:11 > > > > > > > > Compliance test for uvcvideo device /dev/video1: > > > > > > > > Driver Info: > > > > Driver name : uvcvideo > > > > Card type : Logitech Webcam C925e > > > > Bus info : usb-0000:04:00.1-3 > > > > Driver version : 6.18.14 > > > > Capabilities : 0x84a00001 > > > > Video Capture > > > > Metadata Capture > > > > Streaming > > > > Extended Pix Format > > > > Device Capabilities > > > > Device Caps : 0x04200001 > > > > Video Capture > > > > Streaming > > > > Extended Pix Format > > > > Media Driver Info: > > > > Driver name : uvcvideo > > > > Model : Logitech Webcam C925e > > > > Serial : 686F371F > > > > Bus info : usb-0000:04:00.1-3 > > > > Media version : 6.18.14 > > > > Hardware revision: 0x00000016 (22) > > > > Driver version : 6.18.14 > > > > Interface Info: > > > > ID : 0x03000002 > > > > Type : V4L Video > > > > Entity Info: > > > > ID : 0x00000001 (1) > > > > Name : Logitech Webcam C925e > > > > Function : V4L2 I/O > > > > Flags : default > > > > Pad 0x01000007 : 0: Sink > > > > Link 0x0200001f: from remote pad 0x100000a of entity 'Processing 3' (Video Pixel Formatter): Data, Enabled, Immutable > > > > > > > > Required ioctls: > > > > test MC information (see 'Media Driver Info' above): OK > > > > test VIDIOC_QUERYCAP: OK > > > > test invalid ioctls: OK > > > > > > > > Allow for multiple opens: > > > > test second /dev/video1 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 (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 (Not Supported) > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > > > Outputs: 0 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) > > > > > > > > Control ioctls (Input 0): > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > > > test VIDIOC_QUERYCTRL: OK > > > > test VIDIOC_G/S_CTRL: OK > > > > fail: v4l2-test-controls.cpp(983): ret != EINVAL (got 13) > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > > > Standard Controls: 19 Private Controls: 0 > > > > > > > > Format ioctls (Input 0): > > > > 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 (Input 0): > > > > 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 (Input 0): > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > > > test CREATE_BUFS maximum buffers: OK > > > > test VIDIOC_REMOVE_BUFS: OK > > > > test VIDIOC_EXPBUF: OK > > > > test Requests: OK (Not Supported) > > > > test blocking wait: OK > > > > > > > > Test input 0: > > > > > > > > Streaming ioctls: > > > > test read/write: OK (Not Supported) > > > > > > > > Video Capture: Frame #000 > > > > Video Capture: Frame #001 > > > > Video Capture: Frame #002 > > > > Video Capture: Frame #003 > > > > Video Capture: Frame #004 > > > > Video Capture: Frame #005 > > > > Video Capture: Frame #006 > > > > Video Capture: Frame #007 > > > > Video Capture: Frame #008 > > > > Video Capture: Frame #009 > > > > Video Capture: Frame #010 > > > > Video Capture: Frame #011 > > > > Video Capture: Frame #012 > > > > Video Capture: Frame #013 > > > > Video Capture: Frame #014 > > > > Video Capture: Frame #015 > > > > Video Capture: Frame #016 > > > > Video Capture: Frame #017 > > > > Video Capture: Frame #018 > > > > Video Capture: Frame #019 > > > > Video Capture: Frame #020 > > > > Video Capture: Frame #021 > > > > Video Capture: Frame #022 > > > > Video Capture: Frame #023 > > > > Video Capture: Frame #024 > > > > Video Capture: Frame #025 > > > > Video Capture: Frame #026 > > > > Video Capture: Frame #027 > > > > Video Capture: Frame #028 > > > > Video Capture: Frame #029 > > > > Video Capture: Frame #030 > > > > Video Capture: Frame #031 > > > > Video Capture: Frame #032 > > > > Video Capture: Frame #033 > > > > Video Capture: Frame #034 > > > > Video Capture: Frame #035 > > > > Video Capture: Frame #036 > > > > Video Capture: Frame #037 > > > > Video Capture: Frame #038 > > > > Video Capture: Frame #039 > > > > Video Capture: Frame #040 > > > > Video Capture: Frame #041 > > > > Video Capture: Frame #042 > > > > Video Capture: Frame #043 > > > > Video Capture: Frame #044 > > > > Video Capture: Frame #045 > > > > Video Capture: Frame #046 > > > > Video Capture: Frame #047 > > > > Video Capture: Frame #048 > > > > Video Capture: Frame #049 > > > > Video Capture: Frame #050 > > > > Video Capture: Frame #051 > > > > Video Capture: Frame #052 > > > > Video Capture: Frame #053 > > > > Video Capture: Frame #054 > > > > Video Capture: Frame #055 > > > > Video Capture: Frame #056 > > > > Video Capture: Frame #057 > > > > Video Capture: Frame #058 > > > > Video Capture: Frame #059 > > > > > > > > test MMAP (no poll, REQBUFS): OK > > > > > > > > Video Capture: Frame #000 (select) > > > > Video Capture: Frame #001 (select) > > > > Video Capture: Frame #002 (select) > > > > Video Capture: Frame #003 (select) > > > > Video Capture: Frame #004 (select) > > > > Video Capture: Frame #005 (select) > > > > Video Capture: Frame #006 (select) > > > > Video Capture: Frame #007 (select) > > > > Video Capture: Frame #008 (select) > > > > Video Capture: Frame #009 (select) > > > > Video Capture: Frame #010 (select) > > > > Video Capture: Frame #011 (select) > > > > Video Capture: Frame #012 (select) > > > > Video Capture: Frame #013 (select) > > > > Video Capture: Frame #014 (select) > > > > Video Capture: Frame #015 (select) > > > > Video Capture: Frame #016 (select) > > > > Video Capture: Frame #017 (select) > > > > Video Capture: Frame #018 (select) > > > > Video Capture: Frame #019 (select) > > > > Video Capture: Frame #020 (select) > > > > Video Capture: Frame #021 (select) > > > > Video Capture: Frame #022 (select) > > > > Video Capture: Frame #023 (select) > > > > Video Capture: Frame #024 (select) > > > > Video Capture: Frame #025 (select) > > > > Video Capture: Frame #026 (select) > > > > Video Capture: Frame #027 (select) > > > > Video Capture: Frame #028 (select) > > > > Video Capture: Frame #029 (select) > > > > Video Capture: Frame #030 (select) > > > > Video Capture: Frame #031 (select) > > > > Video Capture: Frame #032 (select) > > > > Video Capture: Frame #033 (select) > > > > Video Capture: Frame #034 (select) > > > > Video Capture: Frame #035 (select) > > > > Video Capture: Frame #036 (select) > > > > Video Capture: Frame #037 (select) > > > > Video Capture: Frame #038 (select) > > > > Video Capture: Frame #039 (select) > > > > Video Capture: Frame #040 (select) > > > > Video Capture: Frame #041 (select) > > > > Video Capture: Frame #042 (select) > > > > Video Capture: Frame #043 (select) > > > > Video Capture: Frame #044 (select) > > > > Video Capture: Frame #045 (select) > > > > Video Capture: Frame #046 (select) > > > > Video Capture: Frame #047 (select) > > > > Video Capture: Frame #048 (select) > > > > Video Capture: Frame #049 (select) > > > > Video Capture: Frame #050 (select) > > > > Video Capture: Frame #051 (select) > > > > Video Capture: Frame #052 (select) > > > > Video Capture: Frame #053 (select) > > > > Video Capture: Frame #054 (select) > > > > Video Capture: Frame #055 (select) > > > > Video Capture: Frame #056 (select) > > > > Video Capture: Frame #057 (select) > > > > Video Capture: Frame #058 (select) > > > > Video Capture: Frame #059 (select) > > > > > > > > test MMAP (select, REQBUFS): OK > > > > > > > > Video Capture: Frame #000 (epoll) > > > > Video Capture: Frame #001 (epoll) > > > > Video Capture: Frame #002 (epoll) > > > > Video Capture: Frame #003 (epoll) > > > > Video Capture: Frame #004 (epoll) > > > > Video Capture: Frame #005 (epoll) > > > > Video Capture: Frame #006 (epoll) > > > > Video Capture: Frame #007 (epoll) > > > > Video Capture: Frame #008 (epoll) > > > > Video Capture: Frame #009 (epoll) > > > > Video Capture: Frame #010 (epoll) > > > > Video Capture: Frame #011 (epoll) > > > > Video Capture: Frame #012 (epoll) > > > > Video Capture: Frame #013 (epoll) > > > > Video Capture: Frame #014 (epoll) > > > > Video Capture: Frame #015 (epoll) > > > > Video Capture: Frame #016 (epoll) > > > > Video Capture: Frame #017 (epoll) > > > > Video Capture: Frame #018 (epoll) > > > > Video Capture: Frame #019 (epoll) > > > > Video Capture: Frame #020 (epoll) > > > > Video Capture: Frame #021 (epoll) > > > > Video Capture: Frame #022 (epoll) > > > > Video Capture: Frame #023 (epoll) > > > > Video Capture: Frame #024 (epoll) > > > > Video Capture: Frame #025 (epoll) > > > > Video Capture: Frame #026 (epoll) > > > > Video Capture: Frame #027 (epoll) > > > > Video Capture: Frame #028 (epoll) > > > > Video Capture: Frame #029 (epoll) > > > > Video Capture: Frame #030 (epoll) > > > > Video Capture: Frame #031 (epoll) > > > > Video Capture: Frame #032 (epoll) > > > > Video Capture: Frame #033 (epoll) > > > > Video Capture: Frame #034 (epoll) > > > > Video Capture: Frame #035 (epoll) > > > > Video Capture: Frame #036 (epoll) > > > > Video Capture: Frame #037 (epoll) > > > > Video Capture: Frame #038 (epoll) > > > > Video Capture: Frame #039 (epoll) > > > > Video Capture: Frame #040 (epoll) > > > > Video Capture: Frame #041 (epoll) > > > > Video Capture: Frame #042 (epoll) > > > > Video Capture: Frame #043 (epoll) > > > > Video Capture: Frame #044 (epoll) > > > > Video Capture: Frame #045 (epoll) > > > > Video Capture: Frame #046 (epoll) > > > > Video Capture: Frame #047 (epoll) > > > > Video Capture: Frame #048 (epoll) > > > > Video Capture: Frame #049 (epoll) > > > > Video Capture: Frame #050 (epoll) > > > > Video Capture: Frame #051 (epoll) > > > > Video Capture: Frame #052 (epoll) > > > > Video Capture: Frame #053 (epoll) > > > > Video Capture: Frame #054 (epoll) > > > > Video Capture: Frame #055 (epoll) > > > > Video Capture: Frame #056 (epoll) > > > > Video Capture: Frame #057 (epoll) > > > > Video Capture: Frame #058 (epoll) > > > > Video Capture: Frame #059 (epoll) > > > > > > > > test MMAP (epoll, REQBUFS): OK > > > > > > > > Video Capture: Frame #000 > > > > Video Capture: Frame #001 > > > > Video Capture: Frame #002 > > > > Video Capture: Frame #003 > > > > Video Capture: Frame #004 > > > > Video Capture: Frame #005 > > > > Video Capture: Frame #006 > > > > Video Capture: Frame #007 > > > > Video Capture: Frame #008 > > > > Video Capture: Frame #009 > > > > Video Capture: Frame #010 > > > > Video Capture: Frame #011 > > > > Video Capture: Frame #012 > > > > Video Capture: Frame #013 > > > > Video Capture: Frame #014 > > > > Video Capture: Frame #015 > > > > Video Capture: Frame #016 > > > > Video Capture: Frame #017 > > > > Video Capture: Frame #018 > > > > Video Capture: Frame #019 > > > > Video Capture: Frame #020 > > > > Video Capture: Frame #021 > > > > Video Capture: Frame #022 > > > > Video Capture: Frame #023 > > > > Video Capture: Frame #024 > > > > Video Capture: Frame #025 > > > > Video Capture: Frame #026 > > > > Video Capture: Frame #027 > > > > Video Capture: Frame #028 > > > > Video Capture: Frame #029 > > > > Video Capture: Frame #030 > > > > Video Capture: Frame #031 > > > > Video Capture: Frame #032 > > > > Video Capture: Frame #033 > > > > Video Capture: Frame #034 > > > > Video Capture: Frame #035 > > > > Video Capture: Frame #036 > > > > Video Capture: Frame #037 > > > > Video Capture: Frame #038 > > > > Video Capture: Frame #039 > > > > Video Capture: Frame #040 > > > > Video Capture: Frame #041 > > > > Video Capture: Frame #042 > > > > Video Capture: Frame #043 > > > > Video Capture: Frame #044 > > > > Video Capture: Frame #045 > > > > Video Capture: Frame #046 > > > > Video Capture: Frame #047 > > > > Video Capture: Frame #048 > > > > Video Capture: Frame #049 > > > > Video Capture: Frame #050 > > > > Video Capture: Frame #051 > > > > Video Capture: Frame #052 > > > > Video Capture: Frame #053 > > > > Video Capture: Frame #054 > > > > Video Capture: Frame #055 > > > > Video Capture: Frame #056 > > > > Video Capture: Frame #057 > > > > Video Capture: Frame #058 > > > > Video Capture: Frame #059 > > > > > > > > test MMAP (no poll, CREATE_BUFS): OK > > > > > > > > Video Capture: Frame #000 (select) > > > > Video Capture: Frame #001 (select) > > > > Video Capture: Frame #002 (select) > > > > Video Capture: Frame #003 (select) > > > > Video Capture: Frame #004 (select) > > > > Video Capture: Frame #005 (select) > > > > Video Capture: Frame #006 (select) > > > > Video Capture: Frame #007 (select) > > > > Video Capture: Frame #008 (select) > > > > Video Capture: Frame #009 (select) > > > > Video Capture: Frame #010 (select) > > > > Video Capture: Frame #011 (select) > > > > Video Capture: Frame #012 (select) > > > > Video Capture: Frame #013 (select) > > > > Video Capture: Frame #014 (select) > > > > Video Capture: Frame #015 (select) > > > > Video Capture: Frame #016 (select) > > > > Video Capture: Frame #017 (select) > > > > Video Capture: Frame #018 (select) > > > > Video Capture: Frame #019 (select) > > > > Video Capture: Frame #020 (select) > > > > Video Capture: Frame #021 (select) > > > > Video Capture: Frame #022 (select) > > > > Video Capture: Frame #023 (select) > > > > Video Capture: Frame #024 (select) > > > > Video Capture: Frame #025 (select) > > > > Video Capture: Frame #026 (select) > > > > Video Capture: Frame #027 (select) > > > > Video Capture: Frame #028 (select) > > > > Video Capture: Frame #029 (select) > > > > Video Capture: Frame #030 (select) > > > > Video Capture: Frame #031 (select) > > > > Video Capture: Frame #032 (select) > > > > Video Capture: Frame #033 (select) > > > > Video Capture: Frame #034 (select) > > > > Video Capture: Frame #035 (select) > > > > Video Capture: Frame #036 (select) > > > > Video Capture: Frame #037 (select) > > > > Video Capture: Frame #038 (select) > > > > Video Capture: Frame #039 (select) > > > > Video Capture: Frame #040 (select) > > > > Video Capture: Frame #041 (select) > > > > Video Capture: Frame #042 (select) > > > > Video Capture: Frame #043 (select) > > > > Video Capture: Frame #044 (select) > > > > Video Capture: Frame #045 (select) > > > > Video Capture: Frame #046 (select) > > > > Video Capture: Frame #047 (select) > > > > Video Capture: Frame #048 (select) > > > > Video Capture: Frame #049 (select) > > > > Video Capture: Frame #050 (select) > > > > Video Capture: Frame #051 (select) > > > > Video Capture: Frame #052 (select) > > > > Video Capture: Frame #053 (select) > > > > Video Capture: Frame #054 (select) > > > > Video Capture: Frame #055 (select) > > > > Video Capture: Frame #056 (select) > > > > Video Capture: Frame #057 (select) > > > > Video Capture: Frame #058 (select) > > > > Video Capture: Frame #059 (select) > > > > > > > > test MMAP (select, CREATE_BUFS): OK > > > > > > > > Video Capture: Frame #000 (epoll) > > > > Video Capture: Frame #001 (epoll) > > > > Video Capture: Frame #002 (epoll) > > > > Video Capture: Frame #003 (epoll) > > > > Video Capture: Frame #004 (epoll) > > > > Video Capture: Frame #005 (epoll) > > > > Video Capture: Frame #006 (epoll) > > > > Video Capture: Frame #007 (epoll) > > > > Video Capture: Frame #008 (epoll) > > > > Video Capture: Frame #009 (epoll) > > > > Video Capture: Frame #010 (epoll) > > > > Video Capture: Frame #011 (epoll) > > > > Video Capture: Frame #012 (epoll) > > > > Video Capture: Frame #013 (epoll) > > > > Video Capture: Frame #014 (epoll) > > > > Video Capture: Frame #015 (epoll) > > > > Video Capture: Frame #016 (epoll) > > > > Video Capture: Frame #017 (epoll) > > > > Video Capture: Frame #018 (epoll) > > > > Video Capture: Frame #019 (epoll) > > > > Video Capture: Frame #020 (epoll) > > > > Video Capture: Frame #021 (epoll) > > > > Video Capture: Frame #022 (epoll) > > > > Video Capture: Frame #023 (epoll) > > > > Video Capture: Frame #024 (epoll) > > > > Video Capture: Frame #025 (epoll) > > > > Video Capture: Frame #026 (epoll) > > > > Video Capture: Frame #027 (epoll) > > > > Video Capture: Frame #028 (epoll) > > > > Video Capture: Frame #029 (epoll) > > > > Video Capture: Frame #030 (epoll) > > > > Video Capture: Frame #031 (epoll) > > > > Video Capture: Frame #032 (epoll) > > > > Video Capture: Frame #033 (epoll) > > > > Video Capture: Frame #034 (epoll) > > > > Video Capture: Frame #035 (epoll) > > > > Video Capture: Frame #036 (epoll) > > > > Video Capture: Frame #037 (epoll) > > > > Video Capture: Frame #038 (epoll) > > > > Video Capture: Frame #039 (epoll) > > > > Video Capture: Frame #040 (epoll) > > > > Video Capture: Frame #041 (epoll) > > > > Video Capture: Frame #042 (epoll) > > > > Video Capture: Frame #043 (epoll) > > > > Video Capture: Frame #044 (epoll) > > > > Video Capture: Frame #045 (epoll) > > > > Video Capture: Frame #046 (epoll) > > > > Video Capture: Frame #047 (epoll) > > > > Video Capture: Frame #048 (epoll) > > > > Video Capture: Frame #049 (epoll) > > > > Video Capture: Frame #050 (epoll) > > > > Video Capture: Frame #051 (epoll) > > > > Video Capture: Frame #052 (epoll) > > > > Video Capture: Frame #053 (epoll) > > > > Video Capture: Frame #054 (epoll) > > > > Video Capture: Frame #055 (epoll) > > > > Video Capture: Frame #056 (epoll) > > > > Video Capture: Frame #057 (epoll) > > > > Video Capture: Frame #058 (epoll) > > > > Video Capture: Frame #059 (epoll) > > > > > > > > test MMAP (epoll, CREATE_BUFS): OK > > > > > > > > Video Capture: Frame #000 > > > > Video Capture: Frame #001 > > > > Video Capture: Frame #002 > > > > Video Capture: Frame #003 > > > > Video Capture: Frame #004 > > > > Video Capture: Frame #005 > > > > Video Capture: Frame #006 > > > > Video Capture: Frame #007 > > > > Video Capture: Frame #008 > > > > Video Capture: Frame #009 > > > > Video Capture: Frame #010 > > > > Video Capture: Frame #011 > > > > Video Capture: Frame #012 > > > > Video Capture: Frame #013 > > > > Video Capture: Frame #014 > > > > Video Capture: Frame #015 > > > > Video Capture: Frame #016 > > > > Video Capture: Frame #017 > > > > Video Capture: Frame #018 > > > > Video Capture: Frame #019 > > > > Video Capture: Frame #020 > > > > Video Capture: Frame #021 > > > > Video Capture: Frame #022 > > > > Video Capture: Frame #023 > > > > Video Capture: Frame #024 > > > > Video Capture: Frame #025 > > > > Video Capture: Frame #026 > > > > Video Capture: Frame #027 > > > > Video Capture: Frame #028 > > > > Video Capture: Frame #029 > > > > Video Capture: Frame #030 > > > > Video Capture: Frame #031 > > > > Video Capture: Frame #032 > > > > Video Capture: Frame #033 > > > > Video Capture: Frame #034 > > > > Video Capture: Frame #035 > > > > Video Capture: Frame #036 > > > > Video Capture: Frame #037 > > > > Video Capture: Frame #038 > > > > Video Capture: Frame #039 > > > > Video Capture: Frame #040 > > > > Video Capture: Frame #041 > > > > Video Capture: Frame #042 > > > > Video Capture: Frame #043 > > > > Video Capture: Frame #044 > > > > Video Capture: Frame #045 > > > > Video Capture: Frame #046 > > > > Video Capture: Frame #047 > > > > Video Capture: Frame #048 > > > > Video Capture: Frame #049 > > > > Video Capture: Frame #050 > > > > Video Capture: Frame #051 > > > > Video Capture: Frame #052 > > > > Video Capture: Frame #053 > > > > Video Capture: Frame #054 > > > > Video Capture: Frame #055 > > > > Video Capture: Frame #056 > > > > Video Capture: Frame #057 > > > > Video Capture: Frame #058 > > > > Video Capture: Frame #059 > > > > > > > > test USERPTR (no poll): OK > > > > > > > > Video Capture: Frame #000 (select) > > > > Video Capture: Frame #001 (select) > > > > Video Capture: Frame #002 (select) > > > > Video Capture: Frame #003 (select) > > > > Video Capture: Frame #004 (select) > > > > Video Capture: Frame #005 (select) > > > > Video Capture: Frame #006 (select) > > > > Video Capture: Frame #007 (select) > > > > Video Capture: Frame #008 (select) > > > > Video Capture: Frame #009 (select) > > > > Video Capture: Frame #010 (select) > > > > Video Capture: Frame #011 (select) > > > > Video Capture: Frame #012 (select) > > > > Video Capture: Frame #013 (select) > > > > Video Capture: Frame #014 (select) > > > > Video Capture: Frame #015 (select) > > > > Video Capture: Frame #016 (select) > > > > Video Capture: Frame #017 (select) > > > > Video Capture: Frame #018 (select) > > > > Video Capture: Frame #019 (select) > > > > Video Capture: Frame #020 (select) > > > > Video Capture: Frame #021 (select) > > > > Video Capture: Frame #022 (select) > > > > Video Capture: Frame #023 (select) > > > > Video Capture: Frame #024 (select) > > > > Video Capture: Frame #025 (select) > > > > Video Capture: Frame #026 (select) > > > > Video Capture: Frame #027 (select) > > > > Video Capture: Frame #028 (select) > > > > Video Capture: Frame #029 (select) > > > > Video Capture: Frame #030 (select) > > > > Video Capture: Frame #031 (select) > > > > Video Capture: Frame #032 (select) > > > > Video Capture: Frame #033 (select) > > > > Video Capture: Frame #034 (select) > > > > Video Capture: Frame #035 (select) > > > > Video Capture: Frame #036 (select) > > > > Video Capture: Frame #037 (select) > > > > Video Capture: Frame #038 (select) > > > > Video Capture: Frame #039 (select) > > > > Video Capture: Frame #040 (select) > > > > Video Capture: Frame #041 (select) > > > > Video Capture: Frame #042 (select) > > > > Video Capture: Frame #043 (select) > > > > Video Capture: Frame #044 (select) > > > > Video Capture: Frame #045 (select) > > > > Video Capture: Frame #046 (select) > > > > Video Capture: Frame #047 (select) > > > > Video Capture: Frame #048 (select) > > > > Video Capture: Frame #049 (select) > > > > Video Capture: Frame #050 (select) > > > > Video Capture: Frame #051 (select) > > > > Video Capture: Frame #052 (select) > > > > Video Capture: Frame #053 (select) > > > > Video Capture: Frame #054 (select) > > > > Video Capture: Frame #055 (select) > > > > Video Capture: Frame #056 (select) > > > > Video Capture: Frame #057 (select) > > > > Video Capture: Frame #058 (select) > > > > Video Capture: Frame #059 (select) > > > > > > > > test USERPTR (select): OK > > > > test DMABUF: Cannot test, specify --expbuf-device > > > > > > > > Total for uvcvideo device /dev/video1: 58, Succeeded: 57, Failed: 1, Warnings: 0 > > > > > > > > As tested on the guest: > > > > > > > > $ v4l2-compliance -d0 -s --driver-name uvcvideo > > > > > > > > v4l2-compliance 1.33.0-5457, 64 bits, 64-bit time_t > > > > v4l2-compliance SHA: e7e240f546f3 2026-05-28 17:06:12 > > > > > > > > Compliance test for uvcvideo device (overridden from virtio-media) /dev/video0: > > > > > > > > Driver Info: > > > > Driver name : uvcvideo > > > > Card type : Logitech Webcam C925e > > > > Bus info : platform:virtio-media > > > > Driver version : 7.1.0 > > > > Capabilities : 0x84200001 > > > > Video Capture > > > > Streaming > > > > Extended Pix Format > > > > Device Capabilities > > > > Device Caps : 0x04200001 > > > > Video Capture > > > > Streaming > > > > Extended Pix Format > > > > > > > > Required ioctls: > > > > test VIDIOC_QUERYCAP: OK > > > > test invalid ioctls: OK > > > > > > > > Allow for multiple opens: > > > > test second /dev/video0 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 (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 > > > > 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 (Not Supported) > > > > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > > > Outputs: 0 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) > > > > > > > > Control ioctls (Input 0): > > > > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > > > test VIDIOC_QUERYCTRL: OK > > > > test VIDIOC_G/S_CTRL: OK > > > > fail: v4l2-test-controls.cpp(981): ret (got 22) > > > > test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > > > > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > > > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > > > Standard Controls: 19 Private Controls: 0 > > > > > > > > Format ioctls (Input 0): > > > > 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 (Input 0): > > > > 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 (Input 0): > > > > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > > > test CREATE_BUFS maximum buffers: OK > > > > test VIDIOC_REMOVE_BUFS: OK > > > > test VIDIOC_EXPBUF: OK (Not Supported) > > > > test Requests: OK (Not Supported) > > > > test blocking wait: OK > > > > > > > > Test input 0: > > > > > > > > Streaming ioctls: > > > > test read/write: OK (Not Supported) > > > > > > > > Video Capture: Frame #000 > > > > Video Capture: Frame #001 > > > > Video Capture: Frame #002 > > > > Video Capture: Frame #003 > > > > Video Capture: Frame #004 > > > > Video Capture: Frame #005 > > > > Video Capture: Frame #006 > > > > Video Capture: Frame #007 > > > > Video Capture: Frame #008 > > > > Video Capture: Frame #009 > > > > Video Capture: Frame #010 > > > > Video Capture: Frame #011 > > > > Video Capture: Frame #012 > > > > Video Capture: Frame #013 > > > > Video Capture: Frame #014 > > > > Video Capture: Frame #015 > > > > Video Capture: Frame #016 > > > > Video Capture: Frame #017 > > > > Video Capture: Frame #018 > > > > Video Capture: Frame #019 > > > > Video Capture: Frame #020 > > > > Video Capture: Frame #021 > > > > Video Capture: Frame #022 > > > > Video Capture: Frame #023 > > > > Video Capture: Frame #024 > > > > Video Capture: Frame #025 > > > > Video Capture: Frame #026 > > > > Video Capture: Frame #027 > > > > Video Capture: Frame #028 > > > > Video Capture: Frame #029 > > > > Video Capture: Frame #030 > > > > Video Capture: Frame #031 > > > > Video Capture: Frame #032 > > > > Video Capture: Frame #033 > > > > Video Capture: Frame #034 > > > > Video Capture: Frame #035 > > > > Video Capture: Frame #036 > > > > Video Capture: Frame #037 > > > > Video Capture: Frame #038 > > > > Video Capture: Frame #039 > > > > Video Capture: Frame #040 > > > > Video Capture: Frame #041 > > > > Video Capture: Frame #042 > > > > Video Capture: Frame #043 > > > > Video Capture: Frame #044 > > > > Video Capture: Frame #045 > > > > Video Capture: Frame #046 > > > > Video Capture: Frame #047 > > > > Video Capture: Frame #048 > > > > Video Capture: Frame #049 > > > > Video Capture: Frame #050 > > > > Video Capture: Frame #051 > > > > Video Capture: Frame #052 > > > > Video Capture: Frame #053 > > > > Video Capture: Frame #054 > > > > Video Capture: Frame #055 > > > > Video Capture: Frame #056 > > > > Video Capture: Frame #057 > > > > Video Capture: Frame #058 > > > > Video Capture: Frame #059 > > > > > > > > test MMAP (no poll, REQBUFS): OK > > > > > > > > Video Capture: Frame #000 (select) > > > > Video Capture: Frame #001 (select) > > > > Video Capture: Frame #002 (select) > > > > Video Capture: Frame #003 (select) > > > > Video Capture: Frame #004 (select) > > > > Video Capture: Frame #005 (select) > > > > Video Capture: Frame #006 (select) > > > > Video Capture: Frame #007 (select) > > > > Video Capture: Frame #008 (select) > > > > Video Capture: Frame #009 (select) > > > > Video Capture: Frame #010 (select) > > > > Video Capture: Frame #011 (select) > > > > Video Capture: Frame #012 (select) > > > > Video Capture: Frame #013 (select) > > > > Video Capture: Frame #014 (select) > > > > Video Capture: Frame #015 (select) > > > > Video Capture: Frame #016 (select) > > > > Video Capture: Frame #017 (select) > > > > Video Capture: Frame #018 (select) > > > > Video Capture: Frame #019 (select) > > > > Video Capture: Frame #020 (select) > > > > Video Capture: Frame #021 (select) > > > > Video Capture: Frame #022 (select) > > > > Video Capture: Frame #023 (select) > > > > Video Capture: Frame #024 (select) > > > > Video Capture: Frame #025 (select) > > > > Video Capture: Frame #026 (select) > > > > Video Capture: Frame #027 (select) > > > > Video Capture: Frame #028 (select) > > > > Video Capture: Frame #029 (select) > > > > Video Capture: Frame #030 (select) > > > > Video Capture: Frame #031 (select) > > > > Video Capture: Frame #032 (select) > > > > Video Capture: Frame #033 (select) > > > > Video Capture: Frame #034 (select) > > > > Video Capture: Frame #035 (select) > > > > Video Capture: Frame #036 (select) > > > > Video Capture: Frame #037 (select) > > > > Video Capture: Frame #038 (select) > > > > Video Capture: Frame #039 (select) > > > > Video Capture: Frame #040 (select) > > > > Video Capture: Frame #041 (select) > > > > Video Capture: Frame #042 (select) > > > > Video Capture: Frame #043 (select) > > > > Video Capture: Frame #044 (select) > > > > Video Capture: Frame #045 (select) > > > > Video Capture: Frame #046 (select) > > > > Video Capture: Frame #047 (select) > > > > Video Capture: Frame #048 (select) > > > > Video Capture: Frame #049 (select) > > > > Video Capture: Frame #050 (select) > > > > Video Capture: Frame #051 (select) > > > > Video Capture: Frame #052 (select) > > > > Video Capture: Frame #053 (select) > > > > Video Capture: Frame #054 (select) > > > > Video Capture: Frame #055 (select) > > > > Video Capture: Frame #056 (select) > > > > Video Capture: Frame #057 (select) > > > > Video Capture: Frame #058 (select) > > > > Video Capture: Frame #059 (select) > > > > > > > > test MMAP (select, REQBUFS): OK > > > > > > > > Video Capture: Frame #000 (epoll) > > > > Video Capture: Frame #001 (epoll) > > > > Video Capture: Frame #002 (epoll) > > > > Video Capture: Frame #003 (epoll) > > > > Video Capture: Frame #004 (epoll) > > > > Video Capture: Frame #005 (epoll) > > > > Video Capture: Frame #006 (epoll) > > > > Video Capture: Frame #007 (epoll) > > > > Video Capture: Frame #008 (epoll) > > > > Video Capture: Frame #009 (epoll) > > > > Video Capture: Frame #010 (epoll) > > > > Video Capture: Frame #011 (epoll) > > > > Video Capture: Frame #012 (epoll) > > > > Video Capture: Frame #013 (epoll) > > > > Video Capture: Frame #014 (epoll) > > > > Video Capture: Frame #015 (epoll) > > > > Video Capture: Frame #016 (epoll) > > > > Video Capture: Frame #017 (epoll) > > > > Video Capture: Frame #018 (epoll) > > > > Video Capture: Frame #019 (epoll) > > > > Video Capture: Frame #020 (epoll) > > > > Video Capture: Frame #021 (epoll) > > > > Video Capture: Frame #022 (epoll) > > > > Video Capture: Frame #023 (epoll) > > > > Video Capture: Frame #024 (epoll) > > > > Video Capture: Frame #025 (epoll) > > > > Video Capture: Frame #026 (epoll) > > > > Video Capture: Frame #027 (epoll) > > > > Video Capture: Frame #028 (epoll) > > > > Video Capture: Frame #029 (epoll) > > > > Video Capture: Frame #030 (epoll) > > > > Video Capture: Frame #031 (epoll) > > > > Video Capture: Frame #032 (epoll) > > > > Video Capture: Frame #033 (epoll) > > > > Video Capture: Frame #034 (epoll) > > > > Video Capture: Frame #035 (epoll) > > > > Video Capture: Frame #036 (epoll) > > > > Video Capture: Frame #037 (epoll) > > > > Video Capture: Frame #038 (epoll) > > > > Video Capture: Frame #039 (epoll) > > > > Video Capture: Frame #040 (epoll) > > > > Video Capture: Frame #041 (epoll) > > > > Video Capture: Frame #042 (epoll) > > > > Video Capture: Frame #043 (epoll) > > > > Video Capture: Frame #044 (epoll) > > > > Video Capture: Frame #045 (epoll) > > > > Video Capture: Frame #046 (epoll) > > > > Video Capture: Frame #047 (epoll) > > > > Video Capture: Frame #048 (epoll) > > > > Video Capture: Frame #049 (epoll) > > > > Video Capture: Frame #050 (epoll) > > > > Video Capture: Frame #051 (epoll) > > > > Video Capture: Frame #052 (epoll) > > > > Video Capture: Frame #053 (epoll) > > > > Video Capture: Frame #054 (epoll) > > > > Video Capture: Frame #055 (epoll) > > > > Video Capture: Frame #056 (epoll) > > > > Video Capture: Frame #057 (epoll) > > > > Video Capture: Frame #058 (epoll) > > > > Video Capture: Frame #059 (epoll) > > > > > > > > test MMAP (epoll, REQBUFS): OK > > > > > > > > Video Capture: Frame #000 > > > > Video Capture: Frame #001 > > > > Video Capture: Frame #002 > > > > Video Capture: Frame #003 > > > > Video Capture: Frame #004 > > > > Video Capture: Frame #005 > > > > Video Capture: Frame #006 > > > > Video Capture: Frame #007 > > > > Video Capture: Frame #008 > > > > Video Capture: Frame #009 > > > > Video Capture: Frame #010 > > > > Video Capture: Frame #011 > > > > Video Capture: Frame #012 > > > > Video Capture: Frame #013 > > > > Video Capture: Frame #014 > > > > Video Capture: Frame #015 > > > > Video Capture: Frame #016 > > > > Video Capture: Frame #017 > > > > Video Capture: Frame #018 > > > > Video Capture: Frame #019 > > > > Video Capture: Frame #020 > > > > Video Capture: Frame #021 > > > > Video Capture: Frame #022 > > > > Video Capture: Frame #023 > > > > Video Capture: Frame #024 > > > > Video Capture: Frame #025 > > > > Video Capture: Frame #026 > > > > Video Capture: Frame #027 > > > > Video Capture: Frame #028 > > > > Video Capture: Frame #029 > > > > Video Capture: Frame #030 > > > > Video Capture: Frame #031 > > > > Video Capture: Frame #032 > > > > Video Capture: Frame #033 > > > > Video Capture: Frame #034 > > > > Video Capture: Frame #035 > > > > Video Capture: Frame #036 > > > > Video Capture: Frame #037 > > > > Video Capture: Frame #038 > > > > Video Capture: Frame #039 > > > > Video Capture: Frame #040 > > > > Video Capture: Frame #041 > > > > Video Capture: Frame #042 > > > > Video Capture: Frame #043 > > > > Video Capture: Frame #044 > > > > Video Capture: Frame #045 > > > > Video Capture: Frame #046 > > > > Video Capture: Frame #047 > > > > Video Capture: Frame #048 > > > > Video Capture: Frame #049 > > > > Video Capture: Frame #050 > > > > Video Capture: Frame #051 > > > > Video Capture: Frame #052 > > > > Video Capture: Frame #053 > > > > Video Capture: Frame #054 > > > > Video Capture: Frame #055 > > > > Video Capture: Frame #056 > > > > Video Capture: Frame #057 > > > > Video Capture: Frame #058 > > > > Video Capture: Frame #059 > > > > > > > > test MMAP (no poll, CREATE_BUFS): OK > > > > > > > > Video Capture: Frame #000 (select) > > > > Video Capture: Frame #001 (select) > > > > Video Capture: Frame #002 (select) > > > > Video Capture: Frame #003 (select) > > > > Video Capture: Frame #004 (select) > > > > Video Capture: Frame #005 (select) > > > > Video Capture: Frame #006 (select) > > > > Video Capture: Frame #007 (select) > > > > Video Capture: Frame #008 (select) > > > > Video Capture: Frame #009 (select) > > > > Video Capture: Frame #010 (select) > > > > Video Capture: Frame #011 (select) > > > > Video Capture: Frame #012 (select) > > > > Video Capture: Frame #013 (select) > > > > Video Capture: Frame #014 (select) > > > > Video Capture: Frame #015 (select) > > > > Video Capture: Frame #016 (select) > > > > Video Capture: Frame #017 (select) > > > > Video Capture: Frame #018 (select) > > > > Video Capture: Frame #019 (select) > > > > Video Capture: Frame #020 (select) > > > > Video Capture: Frame #021 (select) > > > > Video Capture: Frame #022 (select) > > > > Video Capture: Frame #023 (select) > > > > Video Capture: Frame #024 (select) > > > > Video Capture: Frame #025 (select) > > > > Video Capture: Frame #026 (select) > > > > Video Capture: Frame #027 (select) > > > > Video Capture: Frame #028 (select) > > > > Video Capture: Frame #029 (select) > > > > Video Capture: Frame #030 (select) > > > > Video Capture: Frame #031 (select) > > > > Video Capture: Frame #032 (select) > > > > Video Capture: Frame #033 (select) > > > > Video Capture: Frame #034 (select) > > > > Video Capture: Frame #035 (select) > > > > Video Capture: Frame #036 (select) > > > > Video Capture: Frame #037 (select) > > > > Video Capture: Frame #038 (select) > > > > Video Capture: Frame #039 (select) > > > > Video Capture: Frame #040 (select) > > > > Video Capture: Frame #041 (select) > > > > Video Capture: Frame #042 (select) > > > > Video Capture: Frame #043 (select) > > > > Video Capture: Frame #044 (select) > > > > Video Capture: Frame #045 (select) > > > > Video Capture: Frame #046 (select) > > > > Video Capture: Frame #047 (select) > > > > Video Capture: Frame #048 (select) > > > > Video Capture: Frame #049 (select) > > > > Video Capture: Frame #050 (select) > > > > Video Capture: Frame #051 (select) > > > > Video Capture: Frame #052 (select) > > > > Video Capture: Frame #053 (select) > > > > Video Capture: Frame #054 (select) > > > > Video Capture: Frame #055 (select) > > > > Video Capture: Frame #056 (select) > > > > Video Capture: Frame #057 (select) > > > > Video Capture: Frame #058 (select) > > > > Video Capture: Frame #059 (select) > > > > > > > > test MMAP (select, CREATE_BUFS): OK > > > > > > > > Video Capture: Frame #000 (epoll) > > > > Video Capture: Frame #001 (epoll) > > > > Video Capture: Frame #002 (epoll) > > > > Video Capture: Frame #003 (epoll) > > > > Video Capture: Frame #004 (epoll) > > > > Video Capture: Frame #005 (epoll) > > > > Video Capture: Frame #006 (epoll) > > > > Video Capture: Frame #007 (epoll) > > > > Video Capture: Frame #008 (epoll) > > > > Video Capture: Frame #009 (epoll) > > > > Video Capture: Frame #010 (epoll) > > > > Video Capture: Frame #011 (epoll) > > > > Video Capture: Frame #012 (epoll) > > > > Video Capture: Frame #013 (epoll) > > > > Video Capture: Frame #014 (epoll) > > > > Video Capture: Frame #015 (epoll) > > > > Video Capture: Frame #016 (epoll) > > > > Video Capture: Frame #017 (epoll) > > > > Video Capture: Frame #018 (epoll) > > > > Video Capture: Frame #019 (epoll) > > > > Video Capture: Frame #020 (epoll) > > > > Video Capture: Frame #021 (epoll) > > > > Video Capture: Frame #022 (epoll) > > > > Video Capture: Frame #023 (epoll) > > > > Video Capture: Frame #024 (epoll) > > > > Video Capture: Frame #025 (epoll) > > > > Video Capture: Frame #026 (epoll) > > > > Video Capture: Frame #027 (epoll) > > > > Video Capture: Frame #028 (epoll) > > > > Video Capture: Frame #029 (epoll) > > > > Video Capture: Frame #030 (epoll) > > > > Video Capture: Frame #031 (epoll) > > > > Video Capture: Frame #032 (epoll) > > > > Video Capture: Frame #033 (epoll) > > > > Video Capture: Frame #034 (epoll) > > > > Video Capture: Frame #035 (epoll) > > > > Video Capture: Frame #036 (epoll) > > > > Video Capture: Frame #037 (epoll) > > > > Video Capture: Frame #038 (epoll) > > > > Video Capture: Frame #039 (epoll) > > > > Video Capture: Frame #040 (epoll) > > > > Video Capture: Frame #041 (epoll) > > > > Video Capture: Frame #042 (epoll) > > > > Video Capture: Frame #043 (epoll) > > > > Video Capture: Frame #044 (epoll) > > > > Video Capture: Frame #045 (epoll) > > > > Video Capture: Frame #046 (epoll) > > > > Video Capture: Frame #047 (epoll) > > > > Video Capture: Frame #048 (epoll) > > > > Video Capture: Frame #049 (epoll) > > > > Video Capture: Frame #050 (epoll) > > > > Video Capture: Frame #051 (epoll) > > > > Video Capture: Frame #052 (epoll) > > > > Video Capture: Frame #053 (epoll) > > > > Video Capture: Frame #054 (epoll) > > > > Video Capture: Frame #055 (epoll) > > > > Video Capture: Frame #056 (epoll) > > > > Video Capture: Frame #057 (epoll) > > > > Video Capture: Frame #058 (epoll) > > > > Video Capture: Frame #059 (epoll) > > > > > > > > test MMAP (epoll, CREATE_BUFS): OK > > > > test USERPTR (no poll): OK (Not Supported) > > > > test USERPTR (select): OK (Not Supported) > > > > test DMABUF (no poll): OK (Not Supported) > > > > test DMABUF (select): OK (Not Supported) > > > > > > > > Total for uvcvideo device /dev/video0: 59, Succeeded: 58, Failed: 1, Warnings: 0 > > > > > > > > --- > > > > Changes in v4: > > > > - Rebased on top of v7.1-rc1 > > > > - Replace usages of filep->private_data with file_to_v4l2_fh() > > > > throughout the driver > > > > - Link to v3: https://lore.kernel.org/r/20250412-virtio-media-v3-1-97dc94c18398@gmail.com > > > > > > > > Changes in v3: > > > > - Rebased on top of v6.15-rc1 and removes obsolete control callbacks. > > > > - Link to v2: https://lore.kernel.org/r/20250201-virtio-media-v2-1-ac840681452d@gmail.com > > > > > > > > Changes in v2: > > > > - Fixed kernel test robot and media CI warnings (ignored a few false > > > > positives). > > > > - Changed in-driver email address to personal one since my Google one > > > > will soon become invalid. > > > > - Link to v1: https://lore.kernel.org/r/20250123-virtio-media-v1-1-81e2549b86b9@gmail.com > > > > > > > > Brian Daniels (8): > > > > media: virtio: Add protocol > > > > media: virtio: Add virtio-media driver structs and function > > > > declarations > > > > media: virtio: Add virtio-media session related structures > > > > media: virtio: Add scatterlist_builder > > > > media: virtio: Add virtio_media_ioctls > > > > media: virtio: Add virtio_media_driver > > > > media: virtio: Add virtio-media to the build system > > > > media: virtio: Add MAINTAINERS entry > > > > > > > > MAINTAINERS | 6 + > > > > drivers/media/Kconfig | 13 + > > > > drivers/media/Makefile | 2 + > > > > drivers/media/virtio/Makefile | 8 + > > > > drivers/media/virtio/protocol.h | 287 +++++ > > > > drivers/media/virtio/scatterlist_builder.c | 574 +++++++++ > > > > drivers/media/virtio/scatterlist_builder.h | 112 ++ > > > > drivers/media/virtio/session.h | 130 ++ > > > > drivers/media/virtio/virtio_media.h | 95 ++ > > > > drivers/media/virtio/virtio_media_driver.c | 959 ++++++++++++++ > > > > drivers/media/virtio/virtio_media_ioctls.c | 1338 ++++++++++++++++++++ > > > > 11 files changed, 3524 insertions(+) > > > > create mode 100644 drivers/media/virtio/Makefile > > > > create mode 100644 drivers/media/virtio/protocol.h > > > > create mode 100644 drivers/media/virtio/scatterlist_builder.c > > > > create mode 100644 drivers/media/virtio/scatterlist_builder.h > > > > create mode 100644 drivers/media/virtio/session.h > > > > create mode 100644 drivers/media/virtio/virtio_media.h > > > > create mode 100644 drivers/media/virtio/virtio_media_driver.c > > > > create mode 100644 drivers/media/virtio/virtio_media_ioctls.c > > > > > > > > > > > > base-commit: 06cb687a5132fcffe624c0070576ab852ac6b568 > > > >
On Mon, 22 Jun 2026 16:43:35 -0400 Brian Daniels <briandaniels@google.com> wrote: > From: Alexandre Courbot <gnurou@gmail.com> > > Add the first version of the virtio-media driver. > > This driver acts roughly as a V4L2 relay between user-space and the > virtio virtual device on the host, so it is relatively simple, yet > unconventional. It doesn't use VB2 or other frameworks typically used in > a V4L2 driver, and most of its complexity resides in correctly and > efficiently building the virtio descriptor chain to pass to the host, > avoiding copies whenever possible. This is done by > scatterlist_builder.[ch]. > > This version supports MMAP buffers, while USERPTR buffers can also be > enabled through a driver option. DMABUF support is still pending. In practice, USERPTR was used on several drivers that wanted to share buffers between V4L2 and GPU (so, a previous approach before DMABUF implementation). On my tests with this driver, I was unable use a 1080p camera with V4L2 and GPU on crossvm. Lower resolutions worked. No idea if this was a limitation of crossvm (I only used it to test this driver) or if it is due to a poor MMAP implementation. > Compliance Testing > > This was tested using v4l2-compliance. Since virtio-media serves as > a proxy to host devices for the guest VMs, we expect the guest > compliance test to essentially match the host compliance test for the > same device. > > NOTE: v4l2-compliance changes its test behavior depending on the driver > name. In the guest, the driver name for virtio-media proxied-devices is > always "virtio-media", even if the actual host device has a driver name > of e.g. "uvcvideo". To ensure the test is consistent between the host > and the guest, I created a patch for the v4l2-compliance tool that > allows you to override the driver name. All test results that follow use > this patch: > https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/ As mentioned before, please submit this with their rationale in separate as a [PATCH v4l-utils] to linux-media ML. > > All tests used a Logitech USB Webcam C925e. Please test it displaying inside crossvm - or even better to QEMU if you manage to add virtio-media support to it. Being at QEMU makes a lot easier for everyone to test it. Thanks, Mauro
On Sun, Jul 12, 2026 at 9:10 AM Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote: > > On Mon, 22 Jun 2026 16:43:35 -0400 > Brian Daniels <briandaniels@google.com> wrote: > > > From: Alexandre Courbot <gnurou@gmail.com> > > > > Add the first version of the virtio-media driver. > > > > This driver acts roughly as a V4L2 relay between user-space and the > > virtio virtual device on the host, so it is relatively simple, yet > > unconventional. It doesn't use VB2 or other frameworks typically used in > > a V4L2 driver, and most of its complexity resides in correctly and > > efficiently building the virtio descriptor chain to pass to the host, > > avoiding copies whenever possible. This is done by > > scatterlist_builder.[ch]. > > > > This version supports MMAP buffers, while USERPTR buffers can also be > > enabled through a driver option. DMABUF support is still pending. > > In practice, USERPTR was used on several drivers that wanted to > share buffers between V4L2 and GPU (so, a previous approach before > DMABUF implementation). > > On my tests with this driver, I was unable use a 1080p camera with > V4L2 and GPU on crossvm. Lower resolutions worked. No idea if this > was a limitation of crossvm (I only used it to test this driver) > or if it is due to a poor MMAP implementation. > > > > > Compliance Testing > > > > This was tested using v4l2-compliance. Since virtio-media serves as > > a proxy to host devices for the guest VMs, we expect the guest > > compliance test to essentially match the host compliance test for the > > same device. > > > > NOTE: v4l2-compliance changes its test behavior depending on the driver > > name. In the guest, the driver name for virtio-media proxied-devices is > > always "virtio-media", even if the actual host device has a driver name > > of e.g. "uvcvideo". To ensure the test is consistent between the host > > and the guest, I created a patch for the v4l2-compliance tool that > > allows you to override the driver name. All test results that follow use > > this patch: > > https://lore.kernel.org/r/20260528163448.4031965-1-briandaniels@google.com/ > > As mentioned before, please submit this with their rationale in > separate as a [PATCH v4l-utils] to linux-media ML. > > > > > All tests used a Logitech USB Webcam C925e. > > Please test it displaying inside crossvm - or even better to QEMU if > you manage to add virtio-media support to it. > > Being at QEMU makes a lot easier for everyone to test it. Hi, Regarding the QEMU support mention, I created this series in QEMU to add the virtio-media PCI device: https://lore.kernel.org/all/20260630112310.552606-1-aesteve@redhat.com/ Testing was done using an older driver version at https://github.com/chromeos/virtio-media/tree/main/driver as described in the cover letter. But I can try testing it with this series. Either way, the procedure for using QEMU is in the cover letter, so anyone can try it. BR, Albert. > > > Thanks, > Mauro >
© 2016 - 2026 Red Hat, Inc.