You are on page 1of 15

Video for Linux

2
V 4 L
2
Fig.Interaction between User app &
V4L2 driver
It is a dual layered driver system of which the upper
layer is videodev module.The videodev module is
registered as a character device with major number Fig. Capture Flow Diagram
81. Beneath videodev is the V4L2 drivers module source : VVDN Technologies
User Controls
● BRIGHTNESS
● CONTRAST
● HUE
● WHITENESS
● SHARPNESS
● BACKLIGHT COMPENSATION
Etc.
● Enumerate controls :
int ioctl(int fd, int VIDIOC_QUERYCTRL, struct v4l2_queryctrl *argp)
● Changing controls :
int ioctl(int fd, VIDIOC_G_CTRL, struct v4l2_control *argp)
int ioctl(int fd, VIDIOC_S_CTRL, struct v4l2_control *argp)
struct v4l2_control //videodev2.h
{
__u32 id;
__s32 value;
};
High Brightness image Low Brightness image
Low Contrast image High Contrast image
Normal Hue image Abnormal Hue image
Capturing Image
● int ioctl(int fd, VIDIOC_QBUF, struct v4l2_buffer *argp)
To enqueue an empty (capturing) buffer in the driver's incoming
queue
● int ioctl(int fd, VIDIOC_STREAMON, const int *argp)
● int ioctl(int fd, VIDIOC_STREAMOFF, const int *argp)
The VIDIOC_STREAMON and VIDIOC_STREAMOFF ioctl
start and stop the capture
● int ioctl(int fd, VIDIOC_DQBUF, struct v4l2_buffer *argp)
Applications call the VIDIOC_DQBUF ioctl to dequeue a filled
(capturing)buffer from the driver’s outgoing queue.
Fig.Data Exchange Between Driver and User Space Application
(source: lwn.net)
Reading and Storing Captured
Image
● int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set
*exceptfds, struct timeval *timeout);
Allows a program to monitor multiple file descriptors, waiting until one or
more of the file descriptors become "ready" for some class of I/O
operation without blocking
Alternative to ‘select’ is ‘poll’ system call
Note : ‘ select ‘ is usually called before VIDIOC_DQBUF
● ssize_t write(int fd, const void *buf, size_t count);
buf(memory mapped User space storage)= Storage where captured
data is present
fd(new dest. file) = File where image data has to be stored
Other important IOCTLs
● int ioctl(int fd, VIDIOC_G_INPUT, int *argp) : Query the current video input
● int ioctl(int fd, VIDIOC_S_INPUT, int *argp) : Select the current video input
● int ioctl(int fd, VIDIOC_ENUMINPUT, struct v4l2_input *argp) : Enumerate
video inputs
● int ioctl(int fd, VIDIOC_G_AUDIO, struct v4l2_audio *argp) : Query the
current audio input and its attributes
● int ioctl(int fd, VIDIOC_S_AUDIO, const struct v4l2_audio *argp) : Select
the current audio input and its attributes
● int ioctl(int fd, VIDIOC_G_CTRL, struct v4l2_control *argp) : Used to
adjust AUTOFOCUS
control(struct v4l2_ext_control variable).id = V4L2_CID_FOCUS_AUTO
● List of important headers:
........./linux/videodev2.h
● List of important V4L2 utilities CLI commands:
v4l2-ctl –list-devices : To check available webcams
v4l2-ctl –all : Lists all V4L2 details
v4l2-ctl –set-fmt-video=width=640,height=480,pixelformat=0 : Used to set height and width
of frame
v4l2-ctl -d /dev/video0 –list-formats-ext : Lists the available Picture formats
fswebcam -d v4l2:/dev/video0 -i 0 –list-controls : To display controls current value and range
v4l2-ctl –get-priority : Query the current access priority [VIDIOC_G_PRIORITY]
v4l2-compliance -d /dev/video0 : Tool to test v4l2 API compliance of drivers
v4l2-ctl –get-ctrl=white_balance_temperature : Example to get current value of user controls
● List of some raw image file formats(contains minimally
processed data from the image sensor):
.pef .ptx (Pentax)
.pxn (Logitech)
.R3D (RED Digital Cinema)
.raf (Fuji)
.raw .rw2 (Panasonic)
.raw .rwl .dng (Leica)
.rwz (Rawzor)
.srw (Samsung)
.x3f (Sigma)
● Sources:
Linux TV (https://linuxtv.org)
NXP Semiconductors
LWN.NET(https://lwn.net/)
Nvidia
VVDN Technologies
THANK YOU

You might also like