1*9c942882SAbdelkader Boudih.\" 2*9c942882SAbdelkader Boudih.\" Copyright (c) 2026 Abdelkader Boudih <freebsd@seuros.com> 3*9c942882SAbdelkader Boudih.\" 4*9c942882SAbdelkader Boudih.\" SPDX-License-Identifier: BSD-2-Clause 5*9c942882SAbdelkader Boudih.\" 6*9c942882SAbdelkader Boudih.Dd July 28, 2026 7*9c942882SAbdelkader Boudih.Dt VIDEO 4 8*9c942882SAbdelkader Boudih.Os 9*9c942882SAbdelkader Boudih.Sh NAME 10*9c942882SAbdelkader Boudih.Nm video 11*9c942882SAbdelkader Boudih.Nd video capture framework 12*9c942882SAbdelkader Boudih.Sh SYNOPSIS 13*9c942882SAbdelkader Boudih.Cd device video 14*9c942882SAbdelkader Boudih.Pp 15*9c942882SAbdelkader Boudih.In sys/videoio.h 16*9c942882SAbdelkader Boudih.Sh DESCRIPTION 17*9c942882SAbdelkader BoudihThe 18*9c942882SAbdelkader Boudih.Nm 19*9c942882SAbdelkader Boudihframework provides a common interface for video capture devices. 20*9c942882SAbdelkader BoudihIt creates 21*9c942882SAbdelkader Boudih.Pa /dev/video%d 22*9c942882SAbdelkader Boudihdevice nodes and handles buffer management, memory mapping, and 23*9c942882SAbdelkader Boudihioctl dispatch on behalf of hardware drivers. 24*9c942882SAbdelkader Boudih.Pp 25*9c942882SAbdelkader BoudihUserland applications access capture devices through the 26*9c942882SAbdelkader Boudih.Sy Video4Linux2 27*9c942882SAbdelkader Boudih.Pq V4L2 28*9c942882SAbdelkader Boudihioctl interface. 29*9c942882SAbdelkader BoudihThe framework translates V4L2 requests into driver callbacks, 30*9c942882SAbdelkader Boudihso hardware drivers do not implement ioctls directly. 31*9c942882SAbdelkader Boudih.Pp 32*9c942882SAbdelkader BoudihThe following V4L2 ioctls are supported: 33*9c942882SAbdelkader Boudih.Bl -bullet -compact 34*9c942882SAbdelkader Boudih.It 35*9c942882SAbdelkader Boudih.Dv VIDIOC_QUERYCAP 36*9c942882SAbdelkader Boudih.It 37*9c942882SAbdelkader Boudih.Dv VIDIOC_ENUM_FMT , 38*9c942882SAbdelkader Boudih.Dv VIDIOC_G_FMT , 39*9c942882SAbdelkader Boudih.Dv VIDIOC_S_FMT , 40*9c942882SAbdelkader Boudih.Dv VIDIOC_TRY_FMT 41*9c942882SAbdelkader Boudih.It 42*9c942882SAbdelkader Boudih.Dv VIDIOC_ENUM_FRAMESIZES , 43*9c942882SAbdelkader Boudih.Dv VIDIOC_ENUM_FRAMEINTERVALS 44*9c942882SAbdelkader Boudih.It 45*9c942882SAbdelkader Boudih.Dv VIDIOC_G_PARM , 46*9c942882SAbdelkader Boudih.Dv VIDIOC_S_PARM 47*9c942882SAbdelkader Boudih.It 48*9c942882SAbdelkader Boudih.Dv VIDIOC_ENUMINPUT , 49*9c942882SAbdelkader Boudih.Dv VIDIOC_G_INPUT , 50*9c942882SAbdelkader Boudih.Dv VIDIOC_S_INPUT 51*9c942882SAbdelkader Boudih.It 52*9c942882SAbdelkader Boudih.Dv VIDIOC_QUERYCTRL , 53*9c942882SAbdelkader Boudih.Dv VIDIOC_G_CTRL , 54*9c942882SAbdelkader Boudih.Dv VIDIOC_S_CTRL 55*9c942882SAbdelkader Boudih.It 56*9c942882SAbdelkader Boudih.Dv VIDIOC_REQBUFS , 57*9c942882SAbdelkader Boudih.Dv VIDIOC_QUERYBUF , 58*9c942882SAbdelkader Boudih.Dv VIDIOC_QBUF , 59*9c942882SAbdelkader Boudih.Dv VIDIOC_DQBUF 60*9c942882SAbdelkader Boudih.It 61*9c942882SAbdelkader Boudih.Dv VIDIOC_STREAMON , 62*9c942882SAbdelkader Boudih.Dv VIDIOC_STREAMOFF 63*9c942882SAbdelkader Boudih.El 64*9c942882SAbdelkader Boudih.Pp 65*9c942882SAbdelkader BoudihTwo capture modes are supported: 66*9c942882SAbdelkader Boudih.Bl -tag -width 6n 67*9c942882SAbdelkader Boudih.It Cm read 68*9c942882SAbdelkader BoudihFrames are obtained by calling 69*9c942882SAbdelkader Boudih.Xr read 2 70*9c942882SAbdelkader Boudihon the device node. 71*9c942882SAbdelkader BoudihStreaming starts automatically on the first read. 72*9c942882SAbdelkader Boudih.It Cm mmap 73*9c942882SAbdelkader BoudihBuffers are allocated with 74*9c942882SAbdelkader Boudih.Dv VIDIOC_REQBUFS , 75*9c942882SAbdelkader Boudihmapped with 76*9c942882SAbdelkader Boudih.Xr mmap 2 , 77*9c942882SAbdelkader Boudihand cycled with 78*9c942882SAbdelkader Boudih.Dv VIDIOC_QBUF 79*9c942882SAbdelkader Boudihand 80*9c942882SAbdelkader Boudih.Dv VIDIOC_DQBUF . 81*9c942882SAbdelkader BoudihStreaming is started and stopped with 82*9c942882SAbdelkader Boudih.Dv VIDIOC_STREAMON 83*9c942882SAbdelkader Boudihand 84*9c942882SAbdelkader Boudih.Dv VIDIOC_STREAMOFF . 85*9c942882SAbdelkader Boudih.El 86*9c942882SAbdelkader Boudih.Pp 87*9c942882SAbdelkader BoudihUp to 8 buffers may be allocated per device. 88*9c942882SAbdelkader BoudihBuffer memory remains valid until the last mapping is unmapped, 89*9c942882SAbdelkader Boudiheven if the device is closed or detached. 90*9c942882SAbdelkader Boudih.Sh SEE ALSO 91*9c942882SAbdelkader Boudih.Xr mmap 2 , 92*9c942882SAbdelkader Boudih.Xr read 2 , 93*9c942882SAbdelkader Boudih.Xr fwcam 4 , 94*9c942882SAbdelkader Boudih.Xr uvideo 4 95*9c942882SAbdelkader Boudih.Sh HISTORY 96*9c942882SAbdelkader BoudihThe 97*9c942882SAbdelkader Boudih.Nm 98*9c942882SAbdelkader Boudihframework first appeared in 99*9c942882SAbdelkader Boudih.Fx 16.0 . 100*9c942882SAbdelkader Boudih.Sh AUTHORS 101*9c942882SAbdelkader Boudih.An Abdelkader Boudih Aq Mt freebsd@seuros.com 102