반응형
v4l-utils 을 이용한 카메라 설정 변경
v4l-utils 패키지에 포함된 v4l2-ctl 명령은 video4linux 장치, 비디오 등의 멀티미디어 장치를 설정하고 제어할 수 있도록 한다. 임베디드 시스템에서 v4l-utils 을 이용하여 카메라의 설정을 변경하는 예제를 정리한다.
v4l2-ctl - An application to control video4linux drivers. The v4l2-ctl tool is used to control video4linux devices, either video, vbi, radio or swradio, both input and output. It is able to control almost any aspect of such devices covering the full V4L2 API.
v4l-utils 을 이용한 카메라 설정 변경하기
테스트 환경
- NVIDIA NX Xavier devkit
- 5MP NVIDIA Jetson Nano Camera - e-con Systems
- L4T R32.6.1 / Jetpack 4.6
Ubuntu 에서 v4l-utils 설치하기
터미널에서 apt-get 명령어로 v4l-utils 패키지를 설치한다.
$ sudo apt-get install v4l-utils
v4l-utils 패키지를 설치하면, v4l2-ctl 명령어를 사용할 수 있다. v4l2-ctl 명령어로 설정 가능한 옵션을 list-up 한다.
$ v4l2-ctl -d /dev/video0 --list-ctrls
User Controls
brightness 0x00980900 (int) : min=-15 max=15 step=1 default=0 value=0 flags=slider
contrast 0x00980901 (int) : min=0 max=30 step=1 default=10 value=10 flags=slider
saturation 0x00980902 (int) : min=0 max=60 step=1 default=16 value=16 flags=slider
white_balance_automatic 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=40 max=500 step=1 default=220 value=220 flags=slider
gain 0x00980913 (int) : min=1 max=50 step=1 default=1 value=1
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=1
white_balance_temperature 0x0098091a (int) : min=1000 max=10000 step=1 default=4500 value=4500
sharpness 0x0098091b (int) : min=0 max=127 step=1 default=16 value=16 flags=slider
Camera Controls
exposure_auto 0x009a0901 (menu) : min=0 max=2 default=0 value=0
exposure_time_absolute 0x009a0902 (int) : min=1 max=4300 step=1 default=312 value=312
pan_absolute 0x009a0908 (int) : min=-648000 max=648000 step=1 default=0 value=0
tilt_absolute 0x009a0909 (int) : min=-648000 max=648000 step=1 default=0 value=0
zoom_absolute 0x009a090d (int) : min=100 max=800 step=1 default=100 value=100
roi_window_size 0x009a0924 (int) : min=8 max=64 step=8 default=24 value=24 flags=slider
roi_exposure 0x009a0926 (int) : min=0 max=65535 step=1 default=32896 value=32896 flags=slider
denoise 0x009a092d (int) : min=0 max=15 step=1 default=8 value=8 flags=slider
exposure_compensation 0x009a0931 (int) : min=8000 max=430000 step=1 default=140000 value=140000 flags=slider
bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
height_align 0x009a2066 (int) : min=1 max=16 step=1 default=1 value=1
size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
write_isp_format 0x009a2068 (int) : min=1 max=1 step=1 default=1 value=1
sensor_signal_properties 0x009a2069 (u32) : min=0 max=4294967295 step=1 default=0 [30][18] flags=read-only, has-payload
sensor_image_properties 0x009a206a (u32) : min=0 max=4294967295 step=1 default=0 [30][16] flags=read-only, has-payload
sensor_control_properties 0x009a206b (u32) : min=0 max=4294967295 step=1 default=0 [30][36] flags=read-only, has-payload
sensor_dv_timings 0x009a206c (u32) : min=0 max=4294967295 step=1 default=0 [30][16] flags=read-only, has-payload
low_latency_mode 0x009a206d (bool) : default=0 value=0
preferred_stride 0x009a206e (int) : min=0 max=65535 step=1 default=0 value=0
sensor_modes 0x009a2082 (int) : min=0 max=30 step=1 default=30 value=6 flags=read-only
예제에서 사용하는 카메라의 경우, 위와 같은 값을 설정할 수 있다.
v4l2-ctl 를 통한 flip 예제
예를 들어 v4l2-ctl 명령어를 사용하여 vertical_flip 을 변경하여 상하반전을 해보자. v4l2-ctl 명령어 중에 -C 를 통해 현재의 설정값을 읽을 수 있고, -c 를 통해 설정값을 변경 할 수 있다.
$ v4l2-ctl -d /dev/video0 -C vertical_flip
vertical_flip: 1
$ v4l2-ctl -d /dev/video0 -c vertical_flip=0
$ v4l2-ctl -d /dev/video0 -C vertical_flip
vertical_flip: 0
다음과 같은 스크립트를 만들어서 자동으로 실행하는 방법을 추천한다.
$ cat start.sh
#!/bin/bash
v4l2-ctl -d /dev/video0 -c vertical_flip=1
v4l2-ctl -d /dev/video1 -c vertical_flip=1
참고자료
아래 manpage 를 참고한다.
https://manpages.ubuntu.com/manpages/bionic/man1/v4l2-ctl.1.html
반응형