-
Notifications
You must be signed in to change notification settings - Fork 55
Description
Describe the bug
v4l2compress will only function if -vv options are supplied.
- I've tried adding
-r -w,-rdoes remove some permission denied errors, but the results are the same - Using
-vresults in the same failure - Compression succeeds only when
-vvis supplied- If
-ror-ware supplied with-vv, the failure still occurs
- If
I find it odd that extra verbose logging somehow causes v4l2compress to work, but it does. I'm assuming it's processing the input device differently with this extra verbose output?
To Reproduce
Steps to reproduce the behavior:
- Install archlinuxarm arm64 on a Raspberry Pi 5
- Install upstream arm64 kernel packages
linux-rpi linux-rpi-headers - Install other dependencies:
pacman -S v4l2loopback-utils v4l2loopback-dkms podman - load the
v4l2loopbackdriver. I loaded it with these options (although the options made no difference in behavior)modprobe v4l2loopback video_nr=10 card_label="v4l2compress0" max_width=1280 max_height=720- The loopback device was created:
[root@rpi5-0 ~]# v4l2loopback-ctl list OUTPUT CAPTURE NAME /dev/video10 /dev/video10 v4l2compress0
- Run the various examples provided below (note that it only works with -vv)
- Fails with no
-r,-w,-vor-vv
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -fH264 /dev/video0 /dev/video10
log level:500
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Fails with
-v
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -v -fH264 /dev/video0 /dev/video10
log level:600
[INFO] (V4l2Device.cpp:133) driver:uvcvideo capabilities:84a00001 mandatory:4000001
[INFO] (V4l2Device.cpp:225) /dev/video0:MJPG size:1280x720 bufferSize:1843789
[INFO] (V4l2MmapDevice.cpp:49) Device /dev/video0
[INFO] (V4l2MmapDevice.cpp:73) Device /dev/video0 nb buffer:10
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:0 size:1843789 offset:0
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:1 size:1843789 offset:32768
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:2 size:1843789 offset:65536
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:3 size:1843789 offset:98304
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:4 size:1843789 offset:131072
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:5 size:1843789 offset:163840
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:6 size:1843789 offset:196608
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:7 size:1843789 offset:229376
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:8 size:1843789 offset:262144
mmap: Permission denied
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:9 size:1843789 offset:294912
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
[INFO] (V4l2MmapDevice.cpp:141) Device /dev/video0
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Fails with
-r(although no invalid argument errors)
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -r -fH264 /dev/video0 /dev/video10
log level:500
[ERROR] (V4l2Device.cpp:145) Mandatory capability not available for device:/dev/video0
[ERROR] (V4l2Device.cpp:83) Cannot init device:/dev/video0
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Fails with
-r -w
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -r -w -fH264 /dev/video0 /dev/video10
log level:500
[ERROR] (V4l2Device.cpp:145) Mandatory capability not available for device:/dev/video0
[ERROR] (V4l2Device.cpp:83) Cannot init device:/dev/video0
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Fails with only
-w
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -w -fH264 /dev/video0 /dev/video10
log level:500
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
mmap: Permission denied
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Fails with
-r -w
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -r -w -fH264 /dev/video0 /dev/video10
log level:500
[ERROR] (V4l2Device.cpp:145) Mandatory capability not available for device:/dev/video0
[ERROR] (V4l2Device.cpp:83) Cannot init device:/dev/video0
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0
* Fails with `-r -w -v`
```bash
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -r -w -v -fH264 /dev/video0 /dev/video10
log level:600
[INFO] (V4l2Device.cpp:133) driver:uvcvideo capabilities:84a00001 mandatory:1000001
[ERROR] (V4l2Device.cpp:145) Mandatory capability not available for device:/dev/video0
[ERROR] (V4l2Device.cpp:83) Cannot init device:/dev/video0
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Fails with
-r -w -vv
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -r -w -vv -fH264 /dev/video0 /dev/video10
log level:700
[INFO] (V4l2Device.cpp:133) driver:uvcvideo capabilities:84a00001 mandatory:1000001
[DEBUG] (V4l2Device.cpp:136) /dev/video0 support capture
[DEBUG] (V4l2Device.cpp:139) /dev/video0 support streaming
[ERROR] (V4l2Device.cpp:145) Mandatory capability not available for device:/dev/video0
[ERROR] (V4l2Device.cpp:83) Cannot init device:/dev/video0
[WARN] (v4l2compress.cpp:215) Cannot create V4L2 capture interface for device:/dev/video0- Succeeds with -vv (along with no -r or -w)
- I've successfully passed /dev/video10 v4l2loopback device to v4l2rtspserver and streamed an rtsp feed (via tcp) across my network here
[root@rpi5-0 ~]# podman run --privileged --cap-add=ALL -it --rm --device=/dev/video0:/dev/video0:rwm --device=/dev/video10:/dev/video10:rwm docker.io/mpromonet/v4l2tools:latest -vv -fH264 /dev/video0 /dev/video10
log level:700
[INFO] (V4l2Device.cpp:133) driver:uvcvideo capabilities:84a00001 mandatory:4000001
[DEBUG] (V4l2Device.cpp:136) /dev/video0 support capture
[DEBUG] (V4l2Device.cpp:139) /dev/video0 support streaming
[DEBUG] (V4l2Device.cpp:71) /dev/video0:MJPG size:1280x720 bufferSize:1843789
[INFO] (V4l2Device.cpp:225) /dev/video0:MJPG size:1280x720 bufferSize:1843789
[DEBUG] (V4l2Device.cpp:71) /dev/video0:MJPG size:1280x720 bufferSize:1843789
[INFO] (V4l2MmapDevice.cpp:49) Device /dev/video0
[INFO] (V4l2MmapDevice.cpp:73) Device /dev/video0 nb buffer:10
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:0 size:1843789 offset:0
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:1 size:1843789 offset:32768
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:2 size:1843789 offset:65536
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:3 size:1843789 offset:98304
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:4 size:1843789 offset:131072
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:5 size:1843789 offset:163840
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:6 size:1843789 offset:196608
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:7 size:1843789 offset:229376
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:8 size:1843789 offset:262144
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video0 buffer idx:9 size:1843789 offset:294912
[INFO] (V4l2Device.cpp:133) driver:v4l2 loopback capabilities:85200003 mandatory:4000002
[DEBUG] (V4l2Device.cpp:135) /dev/video10 support output
[DEBUG] (V4l2Device.cpp:136) /dev/video10 support capture
[DEBUG] (V4l2Device.cpp:138) /dev/video10 support read/write
[DEBUG] (V4l2Device.cpp:139) /dev/video10 support streaming
[DEBUG] (V4l2Device.cpp:71) /dev/video10:H264 size:1280x720 bufferSize:3686400
[INFO] (V4l2Device.cpp:225) /dev/video10:H264 size:1280x720 bufferSize:3686400
[DEBUG] (V4l2Device.cpp:71) /dev/video10:H264 size:1280x720 bufferSize:3686400
[INFO] (V4l2MmapDevice.cpp:49) Device /dev/video10
[INFO] (V4l2MmapDevice.cpp:73) Device /dev/video10 nb buffer:2
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video10 buffer idx:0 size:3686400 offset:0
[INFO] (V4l2MmapDevice.cpp:92) Device /dev/video10 buffer idx:1 size:3686400 offset:3686400
[NOTICE] (x264encoder.h:67) rc_method:1
[NOTICE] (x264encoder.h:68) i_qp_constant:-1
x264 [info]: using cpu capabilities: ARMv8 NEON
x264 [info]: profile Constrained Baseline, level 3.1, 4:2:0, 8-bit
[NOTICE] (x264encoder.h:69) f_rf_constant:23
x264 [debug]: frame= 0 QP=20.00 NAL=3 Slice:I Poc:0 I:3600 P:0 SKIP:0 size=3373 bytes
[NOTICE] (v4l2compress.cpp:74) Start Compressing to /dev/video10
[DEBUG] (x264encoder.h:109) Copied nbnal:4 size:3373
x264 [debug]: frame= 1 QP=24.00 NAL=2 Slice:P Poc:2 I:3600 P:0 SKIP:0 size=39883 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:6
[DEBUG] (x264encoder.h:113) Copied size:39883
x264 [debug]: frame= 2 QP=24.00 NAL=2 Slice:P Poc:4 I:1789 P:1810 SKIP:1 size=28903 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:17
[DEBUG] (x264encoder.h:113) Copied size:28903
x264 [debug]: frame= 3 QP=21.00 NAL=2 Slice:P Poc:6 I:211 P:2826 SKIP:563 size=22314 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:17
[DEBUG] (x264encoder.h:113) Copied size:22314
x264 [debug]: frame= 4 QP=22.00 NAL=2 Slice:P Poc:8 I:1819 P:1781 SKIP:0 size=44558 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:44558
x264 [debug]: frame= 5 QP=20.00 NAL=2 Slice:P Poc:10 I:60 P:1954 SKIP:1586 size=12388 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:18
[DEBUG] (x264encoder.h:113) Copied size:12388
x264 [debug]: frame= 6 QP=18.00 NAL=2 Slice:P Poc:12 I:40 P:3207 SKIP:353 size=24584 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:8
[DEBUG] (x264encoder.h:113) Copied size:24584
x264 [debug]: frame= 7 QP=16.00 NAL=2 Slice:P Poc:14 I:8 P:3397 SKIP:195 size=26890 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:26890
x264 [debug]: frame= 8 QP=15.00 NAL=2 Slice:P Poc:16 I:0 P:1653 SKIP:1947 size=8448 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:8448
x264 [debug]: frame= 9 QP=14.00 NAL=2 Slice:P Poc:18 I:2 P:2648 SKIP:950 size=15472 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:8
[DEBUG] (x264encoder.h:113) Copied size:15472
x264 [debug]: frame= 10 QP=21.00 NAL=2 Slice:P Poc:20 I:2042 P:1558 SKIP:0 size=53328 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:53328
x264 [debug]: frame= 11 QP=22.00 NAL=2 Slice:P Poc:22 I:1632 P:1955 SKIP:13 size=41824 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:18
[DEBUG] (x264encoder.h:113) Copied size:41824
x264 [debug]: frame= 12 QP=20.00 NAL=2 Slice:P Poc:24 I:46 P:2022 SKIP:1532 size=13137 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:17
[DEBUG] (x264encoder.h:113) Copied size:13137
x264 [debug]: frame= 13 QP=18.00 NAL=2 Slice:P Poc:26 I:36 P:3237 SKIP:327 size=24908 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:8
[DEBUG] (x264encoder.h:113) Copied size:24908
x264 [debug]: frame= 14 QP=16.00 NAL=2 Slice:P Poc:28 I:12 P:3401 SKIP:187 size=28279 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:28279
x264 [debug]: frame= 15 QP=15.00 NAL=2 Slice:P Poc:30 I:0 P:1630 SKIP:1970 size=8625 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:10
[DEBUG] (x264encoder.h:113) Copied size:8625
x264 [debug]: frame= 16 QP=14.00 NAL=2 Slice:P Poc:32 I:1 P:2663 SKIP:936 size=15859 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:8
[DEBUG] (x264encoder.h:113) Copied size:15859
x264 [debug]: frame= 17 QP=13.00 NAL=2 Slice:P Poc:34 I:0 P:3240 SKIP:360 size=31217 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:31217
x264 [debug]: frame= 18 QP=21.00 NAL=2 Slice:P Poc:36 I:2099 P:1501 SKIP:0 size=52292 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:52292
x264 [debug]: frame= 19 QP=19.00 NAL=2 Slice:P Poc:38 I:13 P:2501 SKIP:1086 size=16983 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:18
[DEBUG] (x264encoder.h:113) Copied size:16983
x264 [debug]: frame= 20 QP=17.00 NAL=2 Slice:P Poc:40 I:7 P:3308 SKIP:285 size=22370 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:22370
x264 [debug]: frame= 21 QP=16.00 NAL=2 Slice:P Poc:42 I:2 P:2900 SKIP:698 size=15157 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:15157
x264 [debug]: frame= 22 QP=14.00 NAL=2 Slice:P Poc:44 I:4 P:3082 SKIP:514 size=24021 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:8
[DEBUG] (x264encoder.h:113) Copied size:24021
x264 [debug]: frame= 23 QP=21.00 NAL=2 Slice:P Poc:46 I:1840 P:1760 SKIP:0 size=48330 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:113) Copied size:48330
x264 [debug]: frame= 24 QP=19.00 NAL=2 Slice:P Poc:48 I:14 P:2536 SKIP:1050 size=17704 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:18
[DEBUG] (x264encoder.h:113) Copied size:17704
x264 [debug]: frame= 25 QP=15.00 NAL=3 Slice:I Poc:0 I:3600 P:0 SKIP:0 size=113613 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:9
[DEBUG] (x264encoder.h:109) Copied nbnal:3 size:113613
x264 [debug]: frame= 26 QP=21.00 NAL=2 Slice:P Poc:2 I:0 P:0 SKIP:3600 size=11 bytes
[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:11
[DEBUG] (x264encoder.h:113) Copied size:11
^C[DEBUG] (v4l2compress.cpp:99) captureTime:0 endodeTime:5SIGINT
x264 [info]: frame I:2 Avg QP:17.50 size: 58493
x264 [info]: frame P:25 Avg QP:18.44 size: 25499
x264 [info]: mb I I16..4: 100.0% 0.0% 0.0%
x264 [info]: mb P I16..4: 17.0% 0.0% 0.0% P16..4: 62.9% 0.0% 0.0% 0.0% 0.0% skip:20.2%
x264 [info]: coded y,uvDC,uvAC intra: 28.2% 81.9% 71.6% inter: 27.9% 56.5% 29.0%
x264 [info]: i16 v,h,dc,p: 27% 19% 24% 31%
x264 [info]: i8c dc,h,v,p: 55% 21% 13% 11%
x264 [info]: kb/s:5588.67Expected behavior
I expect v4l2compress to successfully compress video to the v4l2loopback device without requiring very verbose output. For the time being I will use it with -vv, however this is a significant increase in log output (storage and CPU cycles).
Additional context
I have only tested v4l2rtspserver within a podman container. I have no idea if running the binary makes any difference. I plan to run v4l2compress as an initContainer for my v4l2rtspserver container, which run within a k3s container. Therefore I'm only concerned about the container results.
Camera information:
[root@rpi5-0 ~]# v4l2-ctl -d /dev/video0 --all
Driver Info:
Driver name : uvcvideo
Card type : HD USB Camera: HD USB Camera
Bus info : usb-xhci-hcd.0-2
Driver version : 6.12.38
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 : HD USB Camera: HD USB Camera
Serial : 2020101401
Bus info : usb-xhci-hcd.0-2
Media version : 6.12.38
Hardware revision: 0x00000000 (0)
Driver version : 6.12.38
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : HD USB Camera: HD USB Camera
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000010: from remote pad 0x100000a of entity 'Extension 4' (Video Pixel Formatter): Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1280/720
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 1843789
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1280, Height 720
Default : Left 0, Top 0, Width 1280, Height 720
Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 1280, Height 720, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 1280, Height 720, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
User Controls
brightness 0x00980900 (int) : min=-128 max=127 step=1 default=0 value=0
contrast 0x00980901 (int) : min=0 max=255 step=1 default=128 value=128
saturation 0x00980902 (int) : min=1 max=128 step=1 default=64 value=64
hue 0x00980903 (int) : min=-40 max=40 step=1 default=0 value=0
white_balance_automatic 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=72 max=500 step=1 default=100 value=100
gain 0x00980913 (int) : min=0 max=100 step=1 default=0 value=0
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1 (50 Hz)
0: Disabled
1: 50 Hz
2: 60 Hz
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=0 max=6 step=1 default=3 value=3
backlight_compensation 0x0098091c (int) : min=0 max=2 step=1 default=1 value=1
Camera Controls
auto_exposure 0x009a0901 (menu) : min=0 max=3 default=3 value=3 (Aperture Priority Mode)
1: Manual Mode
3: Aperture Priority Mode
exposure_time_absolute 0x009a0902 (int) : min=1 max=5000 step=1 default=625 value=625 flags=inactive
exposure_dynamic_framerate 0x009a0903 (bool) : default=0 value=1