diff options
Diffstat (limited to 'Documentation/DocBook/media/v4l')
162 files changed, 43983 insertions, 0 deletions
diff --git a/Documentation/DocBook/media/v4l/.gitignore b/Documentation/DocBook/media/v4l/.gitignore new file mode 100644 index 00000000000..d7ec32eafac --- /dev/null +++ b/Documentation/DocBook/media/v4l/.gitignore @@ -0,0 +1 @@ +!*.xml diff --git a/Documentation/DocBook/media/v4l/biblio.xml b/Documentation/DocBook/media/v4l/biblio.xml new file mode 100644 index 00000000000..d2eb79e41a0 --- /dev/null +++ b/Documentation/DocBook/media/v4l/biblio.xml @@ -0,0 +1,269 @@ +  <bibliography> +    <title>References</title> + +    <biblioentry id="eia608"> +      <abbrev>EIA 608-B</abbrev> +      <authorgroup> +	<corpauthor>Electronic Industries Alliance (<ulink +url="http://www.eia.org">http://www.eia.org</ulink>)</corpauthor> +      </authorgroup> +      <title>EIA 608-B "Recommended Practice for Line 21 Data +Service"</title> +    </biblioentry> + +    <biblioentry id="en300294"> +      <abbrev>EN 300 294</abbrev> +      <authorgroup> +	<corpauthor>European Telecommunication Standards Institute +(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor> +      </authorgroup> +      <title>EN 300 294 "625-line television Wide Screen Signalling +(WSS)"</title> +    </biblioentry> + +    <biblioentry id="ets300231"> +      <abbrev>ETS 300 231</abbrev> +      <authorgroup> +	<corpauthor>European Telecommunication Standards Institute +(<ulink +url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor> +      </authorgroup> +      <title>ETS 300 231 "Specification of the domestic video +Programme Delivery Control system (PDC)"</title> +    </biblioentry> + +    <biblioentry id="ets300706"> +      <abbrev>ETS 300 706</abbrev> +      <authorgroup> +	<corpauthor>European Telecommunication Standards Institute +(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor> +      </authorgroup> +      <title>ETS 300 706 "Enhanced Teletext specification"</title> +    </biblioentry> + +    <biblioentry id="mpeg2part1"> +      <abbrev>ISO 13818-1</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>), International +Organisation for Standardisation (<ulink +url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-T Rec. H.222.0 | ISO/IEC 13818-1 "Information +technology — Generic coding of moving pictures and associated +audio information: Systems"</title> +    </biblioentry> + +    <biblioentry id="mpeg2part2"> +      <abbrev>ISO 13818-2</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>), International +Organisation for Standardisation (<ulink +url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-T Rec. H.262 | ISO/IEC 13818-2 "Information +technology — Generic coding of moving pictures and associated +audio information: Video"</title> +    </biblioentry> + +    <biblioentry id="itu470"> +      <abbrev>ITU BT.470</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-R Recommendation BT.470-6 "Conventional Television +Systems"</title> +    </biblioentry> + +    <biblioentry id="itu601"> +      <abbrev>ITU BT.601</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-R Recommendation BT.601-5 "Studio Encoding Parameters +of Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect +Ratios"</title> +    </biblioentry> + +    <biblioentry id="itu653"> +      <abbrev>ITU BT.653</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-R Recommendation BT.653-3 "Teletext systems"</title> +    </biblioentry> + +    <biblioentry id="itu709"> +      <abbrev>ITU BT.709</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-R Recommendation BT.709-5 "Parameter values for the +HDTV standards for production and international programme +exchange"</title> +    </biblioentry> + +    <biblioentry id="itu1119"> +      <abbrev>ITU BT.1119</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union (<ulink +url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-R Recommendation BT.1119 "625-line +television Wide Screen Signalling (WSS)"</title> +    </biblioentry> + +    <biblioentry id="jfif"> +      <abbrev>JFIF</abbrev> +      <authorgroup> +	<corpauthor>Independent JPEG Group (<ulink +url="http://www.ijg.org">http://www.ijg.org</ulink>)</corpauthor> +      </authorgroup> +      <title>JPEG File Interchange Format</title> +      <subtitle>Version 1.02</subtitle> +    </biblioentry> + +    <biblioentry id="itu-t81"> +      <abbrev>ITU-T.81</abbrev> +      <authorgroup> +	<corpauthor>International Telecommunication Union +(<ulink url="http://www.itu.int">http://www.itu.int</ulink>)</corpauthor> +      </authorgroup> +      <title>ITU-T Recommendation T.81 +"Information Technology — Digital Compression and Coding of Continous-Tone +Still Images — Requirements and Guidelines"</title> +    </biblioentry> + +    <biblioentry id="w3c-jpeg-jfif"> +      <abbrev>W3C JPEG JFIF</abbrev> +      <authorgroup> +	<corpauthor>The World Wide Web Consortium (<ulink +url="http://www.w3.org/Graphics/JPEG">http://www.w3.org</ulink>)</corpauthor> +      </authorgroup> +      <title>JPEG JFIF</title> +    </biblioentry> + +    <biblioentry id="smpte12m"> +      <abbrev>SMPTE 12M</abbrev> +      <authorgroup> +	<corpauthor>Society of Motion Picture and Television Engineers +(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> +      </authorgroup> +      <title>SMPTE 12M-1999 "Television, Audio and Film - Time and +Control Code"</title> +    </biblioentry> + +    <biblioentry id="smpte170m"> +      <abbrev>SMPTE 170M</abbrev> +      <authorgroup> +	<corpauthor>Society of Motion Picture and Television Engineers +(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> +      </authorgroup> +      <title>SMPTE 170M-1999 "Television - Composite Analog Video +Signal - NTSC for Studio Applications"</title> +    </biblioentry> + +    <biblioentry id="smpte240m"> +      <abbrev>SMPTE 240M</abbrev> +      <authorgroup> +	<corpauthor>Society of Motion Picture and Television Engineers +(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> +      </authorgroup> +      <title>SMPTE 240M-1999 "Television - Signal Parameters - +1125-Line High-Definition Production"</title> +    </biblioentry> + +    <biblioentry id="iec62106"> +      <abbrev>IEC 62106</abbrev> +      <authorgroup> +	<corpauthor>International Electrotechnical Commission +(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> +      </authorgroup> +      <title>Specification of the radio data system (RDS) for VHF/FM sound broadcasting +in the frequency range from 87,5 to 108,0 MHz</title> +    </biblioentry> + +    <biblioentry id="nrsc4"> +      <abbrev>NRSC-4-B</abbrev> +      <authorgroup> +	<corpauthor>National Radio Systems Committee +(<ulink url="http://www.nrscstandards.org">http://www.nrscstandards.org</ulink>)</corpauthor> +      </authorgroup> +      <title>NRSC-4-B: United States RBDS Standard</title> +    </biblioentry> + +    <biblioentry id="iso12232"> +      <abbrev>ISO 12232:2006</abbrev> +      <authorgroup> +	<corpauthor>International Organization for Standardization +(<ulink url="http://www.iso.org">http://www.iso.org</ulink>)</corpauthor> +      </authorgroup> +      <title>Photography — Digital still cameras — Determination +      of exposure index, ISO speed ratings, standard output sensitivity, and +      recommended exposure index</title> +    </biblioentry> + +    <biblioentry id="cea861"> +      <abbrev>CEA-861-E</abbrev> +      <authorgroup> +	<corpauthor>Consumer Electronics Association +(<ulink url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor> +      </authorgroup> +      <title>A DTV Profile for Uncompressed High Speed Digital Interfaces</title> +    </biblioentry> + +    <biblioentry id="vesadmt"> +      <abbrev>VESA DMT</abbrev> +      <authorgroup> +	<corpauthor>Video Electronics Standards Association +(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor> +      </authorgroup> +      <title>VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT)</title> +    </biblioentry> + +    <biblioentry id="vesaedid"> +      <abbrev>EDID</abbrev> +      <authorgroup> +	<corpauthor>Video Electronics Standards Association +(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor> +      </authorgroup> +      <title>VESA Enhanced Extended Display Identification Data Standard</title> +      <subtitle>Release A, Revision 2</subtitle> +    </biblioentry> + +    <biblioentry id="hdcp"> +      <abbrev>HDCP</abbrev> +      <authorgroup> +	<corpauthor>Digital Content Protection LLC +(<ulink url="http://www.digital-cp.com">http://www.digital-cp.com</ulink>)</corpauthor> +      </authorgroup> +      <title>High-bandwidth Digital Content Protection System</title> +      <subtitle>Revision 1.3</subtitle> +    </biblioentry> + +    <biblioentry id="hdmi"> +      <abbrev>HDMI</abbrev> +      <authorgroup> +	<corpauthor>HDMI Licensing LLC +(<ulink url="http://www.hdmi.org">http://www.hdmi.org</ulink>)</corpauthor> +      </authorgroup> +      <title>High-Definition Multimedia Interface</title> +      <subtitle>Specification Version 1.4a</subtitle> +    </biblioentry> + +    <biblioentry id="dp"> +      <abbrev>DP</abbrev> +      <authorgroup> +	<corpauthor>Video Electronics Standards Association +(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor> +      </authorgroup> +      <title>VESA DisplayPort Standard</title> +      <subtitle>Version 1, Revision 2</subtitle> +    </biblioentry> + +  </bibliography> diff --git a/Documentation/DocBook/media/v4l/capture.c.xml b/Documentation/DocBook/media/v4l/capture.c.xml new file mode 100644 index 00000000000..1c5c49a2de5 --- /dev/null +++ b/Documentation/DocBook/media/v4l/capture.c.xml @@ -0,0 +1,659 @@ +<programlisting> +/* + *  V4L2 video capture example + * + *  This program can be used and distributed without restrictions. + * + *      This program is provided with the V4L2 API + * see http://linuxtv.org/docs.php for more information + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#include <getopt.h>             /* getopt_long() */ + +#include <fcntl.h>              /* low-level i/o */ +#include <unistd.h> +#include <errno.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <sys/ioctl.h> + +#include <linux/videodev2.h> + +#define CLEAR(x) memset(&(x), 0, sizeof(x)) + +enum io_method { +        IO_METHOD_READ, +        IO_METHOD_MMAP, +        IO_METHOD_USERPTR, +}; + +struct buffer { +        void   *start; +        size_t  length; +}; + +static char            *dev_name; +static enum io_method   io = IO_METHOD_MMAP; +static int              fd = -1; +struct buffer          *buffers; +static unsigned int     n_buffers; +static int              out_buf; +static int              force_format; +static int              frame_count = 70; + +static void errno_exit(const char *s) +{ +        fprintf(stderr, "%s error %d, %s\n", s, errno, strerror(errno)); +        exit(EXIT_FAILURE); +} + +static int xioctl(int fh, int request, void *arg) +{ +        int r; + +        do { +                r = ioctl(fh, request, arg); +        } while (-1 == r && EINTR == errno); + +        return r; +} + +static void process_image(const void *p, int size) +{ +        if (out_buf) +                fwrite(p, size, 1, stdout); + +        fflush(stderr); +        fprintf(stderr, "."); +        fflush(stdout); +} + +static int read_frame(void) +{ +        struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; +        unsigned int i; + +        switch (io) { +        case IO_METHOD_READ: +                if (-1 == read(fd, buffers[0].start, buffers[0].length)) { +                        switch (errno) { +                        case EAGAIN: +                                return 0; + +                        case EIO: +                                /* Could ignore EIO, see spec. */ + +                                /* fall through */ + +                        default: +                                errno_exit("read"); +                        } +                } + +                process_image(buffers[0].start, buffers[0].length); +                break; + +        case IO_METHOD_MMAP: +                CLEAR(buf); + +                buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                buf.memory = V4L2_MEMORY_MMAP; + +                if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { +                        switch (errno) { +                        case EAGAIN: +                                return 0; + +                        case EIO: +                                /* Could ignore EIO, see spec. */ + +                                /* fall through */ + +                        default: +                                errno_exit("VIDIOC_DQBUF"); +                        } +                } + +                assert(buf.index < n_buffers); + +                process_image(buffers[buf.index].start, buf.bytesused); + +                if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) +                        errno_exit("VIDIOC_QBUF"); +                break; + +        case IO_METHOD_USERPTR: +                CLEAR(buf); + +                buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                buf.memory = V4L2_MEMORY_USERPTR; + +                if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { +                        switch (errno) { +                        case EAGAIN: +                                return 0; + +                        case EIO: +                                /* Could ignore EIO, see spec. */ + +                                /* fall through */ + +                        default: +                                errno_exit("VIDIOC_DQBUF"); +                        } +                } + +                for (i = 0; i < n_buffers; ++i) +                        if (buf.m.userptr == (unsigned long)buffers[i].start +                            && buf.length == buffers[i].length) +                                break; + +                assert(i < n_buffers); + +                process_image((void *)buf.m.userptr, buf.bytesused); + +                if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) +                        errno_exit("VIDIOC_QBUF"); +                break; +        } + +        return 1; +} + +static void mainloop(void) +{ +        unsigned int count; + +        count = frame_count; + +        while (count-- > 0) { +                for (;;) { +                        fd_set fds; +                        struct timeval tv; +                        int r; + +                        FD_ZERO(&fds); +                        FD_SET(fd, &fds); + +                        /* Timeout. */ +                        tv.tv_sec = 2; +                        tv.tv_usec = 0; + +                        r = select(fd + 1, &fds, NULL, NULL, &tv); + +                        if (-1 == r) { +                                if (EINTR == errno) +                                        continue; +                                errno_exit("select"); +                        } + +                        if (0 == r) { +                                fprintf(stderr, "select timeout\n"); +                                exit(EXIT_FAILURE); +                        } + +                        if (read_frame()) +                                break; +                        /* EAGAIN - continue select loop. */ +                } +        } +} + +static void stop_capturing(void) +{ +        enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type; + +        switch (io) { +        case IO_METHOD_READ: +                /* Nothing to do. */ +                break; + +        case IO_METHOD_MMAP: +        case IO_METHOD_USERPTR: +                type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type)) +                        errno_exit("VIDIOC_STREAMOFF"); +                break; +        } +} + +static void start_capturing(void) +{ +        unsigned int i; +        enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type; + +        switch (io) { +        case IO_METHOD_READ: +                /* Nothing to do. */ +                break; + +        case IO_METHOD_MMAP: +                for (i = 0; i < n_buffers; ++i) { +                        struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; + +                        CLEAR(buf); +                        buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                        buf.memory = V4L2_MEMORY_MMAP; +                        buf.index = i; + +                        if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) +                                errno_exit("VIDIOC_QBUF"); +                } +                type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) +                        errno_exit("VIDIOC_STREAMON"); +                break; + +        case IO_METHOD_USERPTR: +                for (i = 0; i < n_buffers; ++i) { +                        struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; + +                        CLEAR(buf); +                        buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                        buf.memory = V4L2_MEMORY_USERPTR; +                        buf.index = i; +                        buf.m.userptr = (unsigned long)buffers[i].start; +                        buf.length = buffers[i].length; + +                        if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) +                                errno_exit("VIDIOC_QBUF"); +                } +                type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) +                        errno_exit("VIDIOC_STREAMON"); +                break; +        } +} + +static void uninit_device(void) +{ +        unsigned int i; + +        switch (io) { +        case IO_METHOD_READ: +                free(buffers[0].start); +                break; + +        case IO_METHOD_MMAP: +                for (i = 0; i < n_buffers; ++i) +                        if (-1 == munmap(buffers[i].start, buffers[i].length)) +                                errno_exit("munmap"); +                break; + +        case IO_METHOD_USERPTR: +                for (i = 0; i < n_buffers; ++i) +                        free(buffers[i].start); +                break; +        } + +        free(buffers); +} + +static void init_read(unsigned int buffer_size) +{ +        buffers = calloc(1, sizeof(*buffers)); + +        if (!buffers) { +                fprintf(stderr, "Out of memory\n"); +                exit(EXIT_FAILURE); +        } + +        buffers[0].length = buffer_size; +        buffers[0].start = malloc(buffer_size); + +        if (!buffers[0].start) { +                fprintf(stderr, "Out of memory\n"); +                exit(EXIT_FAILURE); +        } +} + +static void init_mmap(void) +{ +        struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req; + +        CLEAR(req); + +        req.count = 4; +        req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +        req.memory = V4L2_MEMORY_MMAP; + +        if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) { +                if (EINVAL == errno) { +                        fprintf(stderr, "%s does not support " +                                 "memory mapping\n", dev_name); +                        exit(EXIT_FAILURE); +                } else { +                        errno_exit("VIDIOC_REQBUFS"); +                } +        } + +        if (req.count < 2) { +                fprintf(stderr, "Insufficient buffer memory on %s\n", +                         dev_name); +                exit(EXIT_FAILURE); +        } + +        buffers = calloc(req.count, sizeof(*buffers)); + +        if (!buffers) { +                fprintf(stderr, "Out of memory\n"); +                exit(EXIT_FAILURE); +        } + +        for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { +                struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; + +                CLEAR(buf); + +                buf.type        = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                buf.memory      = V4L2_MEMORY_MMAP; +                buf.index       = n_buffers; + +                if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf)) +                        errno_exit("VIDIOC_QUERYBUF"); + +                buffers[n_buffers].length = buf.length; +                buffers[n_buffers].start = +                        mmap(NULL /* start anywhere */, +                              buf.length, +                              PROT_READ | PROT_WRITE /* required */, +                              MAP_SHARED /* recommended */, +                              fd, buf.m.offset); + +                if (MAP_FAILED == buffers[n_buffers].start) +                        errno_exit("mmap"); +        } +} + +static void init_userp(unsigned int buffer_size) +{ +        struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req; + +        CLEAR(req); + +        req.count  = 4; +        req.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE; +        req.memory = V4L2_MEMORY_USERPTR; + +        if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) { +                if (EINVAL == errno) { +                        fprintf(stderr, "%s does not support " +                                 "user pointer i/o\n", dev_name); +                        exit(EXIT_FAILURE); +                } else { +                        errno_exit("VIDIOC_REQBUFS"); +                } +        } + +        buffers = calloc(4, sizeof(*buffers)); + +        if (!buffers) { +                fprintf(stderr, "Out of memory\n"); +                exit(EXIT_FAILURE); +        } + +        for (n_buffers = 0; n_buffers < 4; ++n_buffers) { +                buffers[n_buffers].length = buffer_size; +                buffers[n_buffers].start = malloc(buffer_size); + +                if (!buffers[n_buffers].start) { +                        fprintf(stderr, "Out of memory\n"); +                        exit(EXIT_FAILURE); +                } +        } +} + +static void init_device(void) +{ +        struct <link linkend="v4l2-capability">v4l2_capability</link> cap; +        struct <link linkend="v4l2-cropcap">v4l2_cropcap</link> cropcap; +        struct <link linkend="v4l2-crop">v4l2_crop</link> crop; +        struct <link linkend="v4l2-format">v4l2_format</link> fmt; +        unsigned int min; + +        if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) { +                if (EINVAL == errno) { +                        fprintf(stderr, "%s is no V4L2 device\n", +                                 dev_name); +                        exit(EXIT_FAILURE); +                } else { +                        errno_exit("VIDIOC_QUERYCAP"); +                } +        } + +        if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { +                fprintf(stderr, "%s is no video capture device\n", +                         dev_name); +                exit(EXIT_FAILURE); +        } + +        switch (io) { +        case IO_METHOD_READ: +                if (!(cap.capabilities & V4L2_CAP_READWRITE)) { +                        fprintf(stderr, "%s does not support read i/o\n", +                                 dev_name); +                        exit(EXIT_FAILURE); +                } +                break; + +        case IO_METHOD_MMAP: +        case IO_METHOD_USERPTR: +                if (!(cap.capabilities & V4L2_CAP_STREAMING)) { +                        fprintf(stderr, "%s does not support streaming i/o\n", +                                 dev_name); +                        exit(EXIT_FAILURE); +                } +                break; +        } + + +        /* Select video input, video standard and tune here. */ + + +        CLEAR(cropcap); + +        cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +        if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) { +                crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                crop.c = cropcap.defrect; /* reset to default */ + +                if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) { +                        switch (errno) { +                        case EINVAL: +                                /* Cropping not supported. */ +                                break; +                        default: +                                /* Errors ignored. */ +                                break; +                        } +                } +        } else { +                /* Errors ignored. */ +        } + + +        CLEAR(fmt); + +        fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +        if (force_format) { +                fmt.fmt.pix.width       = 640; +                fmt.fmt.pix.height      = 480; +                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; +                fmt.fmt.pix.field       = V4L2_FIELD_INTERLACED; + +                if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt)) +                        errno_exit("VIDIOC_S_FMT"); + +                /* Note VIDIOC_S_FMT may change width and height. */ +        } else { +                /* Preserve original settings as set by v4l2-ctl for example */ +                if (-1 == xioctl(fd, VIDIOC_G_FMT, &fmt)) +                        errno_exit("VIDIOC_G_FMT"); +        } + +        /* Buggy driver paranoia. */ +        min = fmt.fmt.pix.width * 2; +        if (fmt.fmt.pix.bytesperline < min) +                fmt.fmt.pix.bytesperline = min; +        min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height; +        if (fmt.fmt.pix.sizeimage < min) +                fmt.fmt.pix.sizeimage = min; + +        switch (io) { +        case IO_METHOD_READ: +                init_read(fmt.fmt.pix.sizeimage); +                break; + +        case IO_METHOD_MMAP: +                init_mmap(); +                break; + +        case IO_METHOD_USERPTR: +                init_userp(fmt.fmt.pix.sizeimage); +                break; +        } +} + +static void close_device(void) +{ +        if (-1 == close(fd)) +                errno_exit("close"); + +        fd = -1; +} + +static void open_device(void) +{ +        struct stat st; + +        if (-1 == stat(dev_name, &st)) { +                fprintf(stderr, "Cannot identify '%s': %d, %s\n", +                         dev_name, errno, strerror(errno)); +                exit(EXIT_FAILURE); +        } + +        if (!S_ISCHR(st.st_mode)) { +                fprintf(stderr, "%s is no device\n", dev_name); +                exit(EXIT_FAILURE); +        } + +        fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0); + +        if (-1 == fd) { +                fprintf(stderr, "Cannot open '%s': %d, %s\n", +                         dev_name, errno, strerror(errno)); +                exit(EXIT_FAILURE); +        } +} + +static void usage(FILE *fp, int argc, char **argv) +{ +        fprintf(fp, +                 "Usage: %s [options]\n\n" +                 "Version 1.3\n" +                 "Options:\n" +                 "-d | --device name   Video device name [%s]\n" +                 "-h | --help          Print this message\n" +                 "-m | --mmap          Use memory mapped buffers [default]\n" +                 "-r | --read          Use read() calls\n" +                 "-u | --userp         Use application allocated buffers\n" +                 "-o | --output        Outputs stream to stdout\n" +                 "-f | --format        Force format to 640x480 YUYV\n" +                 "-c | --count         Number of frames to grab [%i]\n" +                 "", +                 argv[0], dev_name, frame_count); +} + +static const char short_options[] = "d:hmruofc:"; + +static const struct option +long_options[] = { +        { "device", required_argument, NULL, 'd' }, +        { "help",   no_argument,       NULL, 'h' }, +        { "mmap",   no_argument,       NULL, 'm' }, +        { "read",   no_argument,       NULL, 'r' }, +        { "userp",  no_argument,       NULL, 'u' }, +        { "output", no_argument,       NULL, 'o' }, +        { "format", no_argument,       NULL, 'f' }, +        { "count",  required_argument, NULL, 'c' }, +        { 0, 0, 0, 0 } +}; + +int main(int argc, char **argv) +{ +        dev_name = "/dev/video0"; + +        for (;;) { +                int idx; +                int c; + +                c = getopt_long(argc, argv, +                                short_options, long_options, &idx); + +                if (-1 == c) +                        break; + +                switch (c) { +                case 0: /* getopt_long() flag */ +                        break; + +                case 'd': +                        dev_name = optarg; +                        break; + +                case 'h': +                        usage(stdout, argc, argv); +                        exit(EXIT_SUCCESS); + +                case 'm': +                        io = IO_METHOD_MMAP; +                        break; + +                case 'r': +                        io = IO_METHOD_READ; +                        break; + +                case 'u': +                        io = IO_METHOD_USERPTR; +                        break; + +                case 'o': +                        out_buf++; +                        break; + +                case 'f': +                        force_format++; +                        break; + +                case 'c': +                        errno = 0; +                        frame_count = strtol(optarg, NULL, 0); +                        if (errno) +                                errno_exit(optarg); +                        break; + +                default: +                        usage(stderr, argc, argv); +                        exit(EXIT_FAILURE); +                } +        } + +        open_device(); +        init_device(); +        start_capturing(); +        mainloop(); +        stop_capturing(); +        uninit_device(); +        close_device(); +        fprintf(stderr, "\n"); +        return 0; +} +</programlisting> diff --git a/Documentation/DocBook/media/v4l/common.xml b/Documentation/DocBook/media/v4l/common.xml new file mode 100644 index 00000000000..71f6bf9e735 --- /dev/null +++ b/Documentation/DocBook/media/v4l/common.xml @@ -0,0 +1,1102 @@ +  <title>Common API Elements</title> + +  <para>Programming a V4L2 device consists of these +steps:</para> + +  <itemizedlist> +    <listitem> +      <para>Opening the device</para> +    </listitem> +    <listitem> +      <para>Changing device properties, selecting a video and audio +input, video standard, picture brightness a. o.</para> +    </listitem> +    <listitem> +      <para>Negotiating a data format</para> +    </listitem> +    <listitem> +      <para>Negotiating an input/output method</para> +    </listitem> +    <listitem> +      <para>The actual input/output loop</para> +    </listitem> +    <listitem> +      <para>Closing the device</para> +    </listitem> +  </itemizedlist> + +  <para>In practice most steps are optional and can be executed out of +order. It depends on the V4L2 device type, you can read about the +details in <xref linkend="devices" />. In this chapter we will discuss +the basic concepts applicable to all devices.</para> + +  <section id="open"> +    <title>Opening and Closing Devices</title> + +    <section> +      <title>Device Naming</title> + +      <para>V4L2 drivers are implemented as kernel modules, loaded +manually by the system administrator or automatically when a device is +first discovered. The driver modules plug into the "videodev" kernel +module. It provides helper functions and a common application +interface specified in this document.</para> + +      <para>Each driver thus loaded registers one or more device nodes +with major number 81 and a minor number between 0 and 255. Minor numbers +are allocated dynamically unless the kernel is compiled with the kernel +option CONFIG_VIDEO_FIXED_MINOR_RANGES. In that case minor numbers are +allocated in ranges depending on the device node type (video, radio, etc.).</para> + +      <para>Many drivers support "video_nr", "radio_nr" or "vbi_nr" +module options to select specific video/radio/vbi node numbers. This allows +the user to request that the device node is named e.g. /dev/video5 instead +of leaving it to chance. When the driver supports multiple devices of the same +type more than one device node number can be assigned, separated by commas: +	<informalexample> +	  <screen> +> modprobe mydriver video_nr=0,1 radio_nr=0,1</screen> +	</informalexample></para> + +      <para>In <filename>/etc/modules.conf</filename> this may be +written as: <informalexample> +	  <screen> +options mydriver video_nr=0,1 radio_nr=0,1 +	  </screen> +	</informalexample> When no device node number is given as module +option the driver supplies a default.</para> + +      <para>Normally udev will create the device nodes in /dev automatically +for you. If udev is not installed, then you need to enable the +CONFIG_VIDEO_FIXED_MINOR_RANGES kernel option in order to be able to correctly +relate a minor number to a device node number. I.e., you need to be certain +that minor number 5 maps to device node name video5. With this kernel option +different device types have different minor number ranges. These ranges are +listed in <xref linkend="devices" />. +</para> + +      <para>The creation of character special files (with +<application>mknod</application>) is a privileged operation and +devices cannot be opened by major and minor number. That means +applications cannot <emphasis>reliable</emphasis> scan for loaded or +installed drivers. The user must enter a device name, or the +application can try the conventional device names.</para> +    </section> + +    <section id="related"> +      <title>Related Devices</title> + +      <para>Devices can support several functions. For example +video capturing, VBI capturing and radio support.</para> + +      <para>The V4L2 API creates different nodes for each of these functions.</para> + +      <para>The V4L2 API was designed with the idea that one device node could support +all functions. However, in practice this never worked: this 'feature' +was never used by applications and many drivers did not support it and if +they did it was certainly never tested. In addition, switching a device +node between different functions only works when using the streaming I/O +API, not with the read()/write() API.</para> + +      <para>Today each device node supports just one function.</para> + +      <para>Besides video input or output the hardware may also +support audio sampling or playback. If so, these functions are +implemented as ALSA PCM devices with optional ALSA audio mixer +devices.</para> + +      <para>One problem with all these devices is that the V4L2 API +makes no provisions to find these related devices. Some really +complex devices use the Media Controller (see <xref linkend="media_controller" />) +which can be used for this purpose. But most drivers do not use it, +and while some code exists that uses sysfs to discover related devices +(see libmedia_dev in the <ulink url="http://git.linuxtv.org/v4l-utils/">v4l-utils</ulink> +git repository), there is no library yet that can provide a single API towards +both Media Controller-based devices and devices that do not use the Media Controller. +If you want to work on this please write to the linux-media mailing list: &v4l-ml;.</para> +    </section> + +    <section> +      <title>Multiple Opens</title> + +      <para>V4L2 devices can be opened more than once.<footnote><para> +There are still some old and obscure drivers that have not been updated to +allow for multiple opens. This implies that for such drivers &func-open; can +return an &EBUSY; when the device is already in use.</para></footnote> +When this is supported by the driver, users can for example start a +"panel" application to change controls like brightness or audio +volume, while another application captures video and audio. In other words, panel +applications are comparable to an ALSA audio mixer application. +Just opening a V4L2 device should not change the state of the device.<footnote> +<para>Unfortunately, opening a radio device often switches the state of the +device to radio mode in many drivers. This behavior should be fixed eventually +as it violates the V4L2 specification.</para></footnote></para> + +      <para>Once an application has allocated the memory buffers needed for +streaming data (by calling the &VIDIOC-REQBUFS; or &VIDIOC-CREATE-BUFS; ioctls, +or implicitly by calling the &func-read; or &func-write; functions) that +application (filehandle) becomes the owner of the device. It is no longer +allowed to make changes that would affect the buffer sizes (e.g. by calling +the &VIDIOC-S-FMT; ioctl) and other applications are no longer allowed to allocate +buffers or start or stop streaming. The &EBUSY; will be returned instead.</para> + +      <para>Merely opening a V4L2 device does not grant exclusive +access.<footnote> +	  <para>Drivers could recognize the +<constant>O_EXCL</constant> open flag. Presently this is not required, +so applications cannot know if it really works.</para> +	</footnote> Initiating data exchange however assigns the right +to read or write the requested type of data, and to change related +properties, to this file descriptor. Applications can request +additional access privileges using the priority mechanism described in +<xref linkend="app-pri" />.</para> +    </section> + +    <section> +      <title>Shared Data Streams</title> + +      <para>V4L2 drivers should not support multiple applications +reading or writing the same data stream on a device by copying +buffers, time multiplexing or similar means. This is better handled by +a proxy application in user space.</para> +    </section> + +    <section> +      <title>Functions</title> + +    <para>To open and close V4L2 devices applications use the +&func-open; and &func-close; function, respectively. Devices are +programmed using the &func-ioctl; function as explained in the +following sections.</para> +    </section> +  </section> + +  <section id="querycap"> +    <title>Querying Capabilities</title> + +    <para>Because V4L2 covers a wide variety of devices not all +aspects of the API are equally applicable to all types of devices. +Furthermore devices of the same type have different capabilities and +this specification permits the omission of a few complicated and less +important parts of the API.</para> + +    <para>The &VIDIOC-QUERYCAP; ioctl is available to check if the kernel +device is compatible with this specification, and to query the <link +linkend="devices">functions</link> and <link linkend="io">I/O +methods</link> supported by the device.</para> + +    <para>Starting with kernel version 3.1, VIDIOC-QUERYCAP will return the +V4L2 API version used by the driver, with generally matches the Kernel version. +There's no need of using &VIDIOC-QUERYCAP; to check if a specific ioctl is +supported, the V4L2 core now returns ENOTTY if a driver doesn't provide +support for an ioctl.</para> + +    <para>Other features can be queried +by calling the respective ioctl, for example &VIDIOC-ENUMINPUT; +to learn about the number, types and names of video connectors on the +device. Although abstraction is a major objective of this API, the +&VIDIOC-QUERYCAP; ioctl also allows driver specific applications to reliably identify +the driver.</para> + +    <para>All V4L2 drivers must support +<constant>VIDIOC_QUERYCAP</constant>. Applications should always call +this ioctl after opening the device.</para> +  </section> + +  <section id="app-pri"> +    <title>Application Priority</title> + +    <para>When multiple applications share a device it may be +desirable to assign them different priorities. Contrary to the +traditional "rm -rf /" school of thought a video recording application +could for example block other applications from changing video +controls or switching the current TV channel. Another objective is to +permit low priority applications working in background, which can be +preempted by user controlled applications and automatically regain +control of the device at a later time.</para> + +    <para>Since these features cannot be implemented entirely in user +space V4L2 defines the &VIDIOC-G-PRIORITY; and &VIDIOC-S-PRIORITY; +ioctls to request and query the access priority associate with a file +descriptor. Opening a device assigns a medium priority, compatible +with earlier versions of V4L2 and drivers not supporting these ioctls. +Applications requiring a different priority will usually call +<constant>VIDIOC_S_PRIORITY</constant> after verifying the device with +the &VIDIOC-QUERYCAP; ioctl.</para> + +    <para>Ioctls changing driver properties, such as &VIDIOC-S-INPUT;, +return an &EBUSY; after another application obtained higher priority.</para> +  </section> + +  <section id="video"> +    <title>Video Inputs and Outputs</title> + +    <para>Video inputs and outputs are physical connectors of a +device. These can be for example RF connectors (antenna/cable), CVBS +a.k.a. Composite Video, S-Video or RGB connectors. Video and VBI +capture devices have inputs. Video and VBI output devices have outputs, +at least one each. Radio devices have no video inputs or outputs.</para> + +    <para>To learn about the number and attributes of the +available inputs and outputs applications can enumerate them with the +&VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; ioctl, respectively. The +&v4l2-input; returned by the <constant>VIDIOC_ENUMINPUT</constant> +ioctl also contains signal status information applicable when the +current video input is queried.</para> + +    <para>The &VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; ioctls return the +index of the current video input or output. To select a different +input or output applications call the &VIDIOC-S-INPUT; and +&VIDIOC-S-OUTPUT; ioctls. Drivers must implement all the input ioctls +when the device has one or more inputs, all the output ioctls when the +device has one or more outputs.</para> + +    <example> +      <title>Information about the current video input</title> + +      <programlisting> +&v4l2-input; input; +int index; + +if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &index)) { +	perror("VIDIOC_G_INPUT"); +	exit(EXIT_FAILURE); +} + +memset(&input, 0, sizeof(input)); +input.index = index; + +if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { +	perror("VIDIOC_ENUMINPUT"); +	exit(EXIT_FAILURE); +} + +printf("Current input: %s\n", input.name); +      </programlisting> +    </example> + +    <example> +      <title>Switching to the first video input</title> + +      <programlisting> +int index; + +index = 0; + +if (-1 == ioctl(fd, &VIDIOC-S-INPUT;, &index)) { +	perror("VIDIOC_S_INPUT"); +	exit(EXIT_FAILURE); +} +      </programlisting> +    </example> +  </section> + +  <section id="audio"> +    <title>Audio Inputs and Outputs</title> + +    <para>Audio inputs and outputs are physical connectors of a +device. Video capture devices have inputs, output devices have +outputs, zero or more each. Radio devices have no audio inputs or +outputs. They have exactly one tuner which in fact +<emphasis>is</emphasis> an audio source, but this API associates +tuners with video inputs or outputs only, and radio devices have +none of these.<footnote> +	<para>Actually &v4l2-audio; ought to have a +<structfield>tuner</structfield> field like &v4l2-input;, not only +making the API more consistent but also permitting radio devices with +multiple tuners.</para> +      </footnote> A connector on a TV card to loop back the received +audio signal to a sound card is not considered an audio output.</para> + +    <para>Audio and video inputs and outputs are associated. Selecting +a video source also selects an audio source. This is most evident when +the video and audio source is a tuner. Further audio connectors can +combine with more than one video input or output. Assumed two +composite video inputs and two audio inputs exist, there may be up to +four valid combinations. The relation of video and audio connectors +is defined in the <structfield>audioset</structfield> field of the +respective &v4l2-input; or &v4l2-output;, where each bit represents +the index number, starting at zero, of one audio input or output.</para> + +    <para>To learn about the number and attributes of the +available inputs and outputs applications can enumerate them with the +&VIDIOC-ENUMAUDIO; and &VIDIOC-ENUMAUDOUT; ioctl, respectively. The +&v4l2-audio; returned by the <constant>VIDIOC_ENUMAUDIO</constant> ioctl +also contains signal status information applicable when the current +audio input is queried.</para> + +    <para>The &VIDIOC-G-AUDIO; and &VIDIOC-G-AUDOUT; ioctls report +the current audio input and output, respectively. Note that, unlike +&VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; these ioctls return a structure +as <constant>VIDIOC_ENUMAUDIO</constant> and +<constant>VIDIOC_ENUMAUDOUT</constant> do, not just an index.</para> + +    <para>To select an audio input and change its properties +applications call the &VIDIOC-S-AUDIO; ioctl. To select an audio +output (which presently has no changeable properties) applications +call the &VIDIOC-S-AUDOUT; ioctl.</para> + +    <para>Drivers must implement all audio input ioctls when the device +has multiple selectable audio inputs, all audio output ioctls when the +device has multiple selectable audio outputs. When the device has any +audio inputs or outputs the driver must set the <constant>V4L2_CAP_AUDIO</constant> +flag in the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl.</para> + +    <example> +      <title>Information about the current audio input</title> + +      <programlisting> +&v4l2-audio; audio; + +memset(&audio, 0, sizeof(audio)); + +if (-1 == ioctl(fd, &VIDIOC-G-AUDIO;, &audio)) { +	perror("VIDIOC_G_AUDIO"); +	exit(EXIT_FAILURE); +} + +printf("Current input: %s\n", audio.name); +      </programlisting> +    </example> + +    <example> +      <title>Switching to the first audio input</title> + +      <programlisting> +&v4l2-audio; audio; + +memset(&audio, 0, sizeof(audio)); /* clear audio.mode, audio.reserved */ + +audio.index = 0; + +if (-1 == ioctl(fd, &VIDIOC-S-AUDIO;, &audio)) { +	perror("VIDIOC_S_AUDIO"); +	exit(EXIT_FAILURE); +} +      </programlisting> +    </example> +  </section> + +  <section id="tuner"> +    <title>Tuners and Modulators</title> + +    <section> +      <title>Tuners</title> + +      <para>Video input devices can have one or more tuners +demodulating a RF signal. Each tuner is associated with one or more +video inputs, depending on the number of RF connectors on the tuner. +The <structfield>type</structfield> field of the respective +&v4l2-input; returned by the &VIDIOC-ENUMINPUT; ioctl is set to +<constant>V4L2_INPUT_TYPE_TUNER</constant> and its +<structfield>tuner</structfield> field contains the index number of +the tuner.</para> + +      <para>Radio input devices have exactly one tuner with index zero, no +video inputs.</para> + +      <para>To query and change tuner properties applications use the +&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctls, respectively. The +&v4l2-tuner; returned by <constant>VIDIOC_G_TUNER</constant> also +contains signal status information applicable when the tuner of the +current video or radio input is queried. Note that +<constant>VIDIOC_S_TUNER</constant> does not switch the current tuner, +when there is more than one at all. The tuner is solely determined by +the current video input. Drivers must support both ioctls and set the +<constant>V4L2_CAP_TUNER</constant> flag in the &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl when the device has one or +more tuners.</para> +    </section> + +    <section> +      <title>Modulators</title> + +      <para>Video output devices can have one or more modulators, uh, +modulating a video signal for radiation or connection to the antenna +input of a TV set or video recorder. Each modulator is associated with +one or more video outputs, depending on the number of RF connectors on +the modulator. The <structfield>type</structfield> field of the +respective &v4l2-output; returned by the &VIDIOC-ENUMOUTPUT; ioctl is +set to <constant>V4L2_OUTPUT_TYPE_MODULATOR</constant> and its +<structfield>modulator</structfield> field contains the index number +of the modulator.</para> + +      <para>Radio output devices have exactly one modulator with index +zero, no video outputs.</para> + +      <para>A video or radio device cannot support both a tuner and a +modulator. Two separate device nodes will have to be used for such +hardware, one that supports the tuner functionality and one that supports +the modulator functionality. The reason is a limitation with the +&VIDIOC-S-FREQUENCY; ioctl where you cannot specify whether the frequency +is for a tuner or a modulator.</para> + +      <para>To query and change modulator properties applications use +the &VIDIOC-G-MODULATOR; and &VIDIOC-S-MODULATOR; ioctl. Note that +<constant>VIDIOC_S_MODULATOR</constant> does not switch the current +modulator, when there is more than one at all. The modulator is solely +determined by the current video output. Drivers must support both +ioctls and set the <constant>V4L2_CAP_MODULATOR</constant> flag in +the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl when the +device has one or more modulators.</para> +    </section> + +    <section> +      <title>Radio Frequency</title> + +      <para>To get and set the tuner or modulator radio frequency +applications use the &VIDIOC-G-FREQUENCY; and &VIDIOC-S-FREQUENCY; +ioctl which both take a pointer to a &v4l2-frequency;. These ioctls +are used for TV and radio devices alike. Drivers must support both +ioctls when the tuner or modulator ioctls are supported, or +when the device is a radio device.</para> +    </section> +  </section> + +  <section id="standard"> +    <title>Video Standards</title> + +    <para>Video devices typically support one or more different video +standards or variations of standards. Each video input and output may +support another set of standards. This set is reported by the +<structfield>std</structfield> field of &v4l2-input; and +&v4l2-output; returned by the &VIDIOC-ENUMINPUT; and +&VIDIOC-ENUMOUTPUT; ioctls, respectively.</para> + +    <para>V4L2 defines one bit for each analog video standard +currently in use worldwide, and sets aside bits for driver defined +standards, ⪚ hybrid standards to watch NTSC video tapes on PAL TVs +and vice versa. Applications can use the predefined bits to select a +particular standard, although presenting the user a menu of supported +standards is preferred. To enumerate and query the attributes of the +supported standards applications use the &VIDIOC-ENUMSTD; ioctl.</para> + +    <para>Many of the defined standards are actually just variations +of a few major standards. The hardware may in fact not distinguish +between them, or do so internal and switch automatically. Therefore +enumerated standards also contain sets of one or more standard +bits.</para> + +    <para>Assume a hypothetic tuner capable of demodulating B/PAL, +G/PAL and I/PAL signals. The first enumerated standard is a set of B +and G/PAL, switched automatically depending on the selected radio +frequency in UHF or VHF band. Enumeration gives a "PAL-B/G" or "PAL-I" +choice. Similar a Composite input may collapse standards, enumerating +"PAL-B/G/H/I", "NTSC-M" and "SECAM-D/K".<footnote> +	<para>Some users are already confused by technical terms PAL, +NTSC and SECAM. There is no point asking them to distinguish between +B, G, D, or K when the software or hardware can do that +automatically.</para> +    </footnote></para> + +    <para>To query and select the standard used by the current video +input or output applications call the &VIDIOC-G-STD; and +&VIDIOC-S-STD; ioctl, respectively. The <emphasis>received</emphasis> +standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the +parameter of all these ioctls is a pointer to a &v4l2-std-id; type +(a standard set), <emphasis>not</emphasis> an index into the standard +enumeration. Drivers must implement all video standard ioctls +when the device has one or more video inputs or outputs.</para> + +    <para>Special rules apply to devices such as USB cameras where the notion of video +standards makes little sense. More generally for any capture or output device +which is: <itemizedlist> +	<listitem> +	  <para>incapable of capturing fields or frames at the nominal +rate of the video standard, or</para> +	</listitem> +	<listitem> +	  <para>that does not support the video standard formats at all.</para> +	</listitem> +      </itemizedlist> Here the driver shall set the +<structfield>std</structfield> field of &v4l2-input; and &v4l2-output; +to zero and the <constant>VIDIOC_G_STD</constant>, +<constant>VIDIOC_S_STD</constant>, +<constant>VIDIOC_QUERYSTD</constant> and +<constant>VIDIOC_ENUMSTD</constant> ioctls shall return the +&ENOTTY; or the &EINVAL;.</para> +	<para>Applications can make use of the <xref linkend="input-capabilities" /> and +<xref linkend="output-capabilities"/> flags to determine whether the video standard ioctls +can be used with the given input or output.</para> + +    <example> +      <title>Information about the current video standard</title> + +      <programlisting> +&v4l2-std-id; std_id; +&v4l2-standard; standard; + +if (-1 == ioctl(fd, &VIDIOC-G-STD;, &std_id)) { +	/* Note when VIDIOC_ENUMSTD always returns ENOTTY this +	   is no video device or it falls under the USB exception, +	   and VIDIOC_G_STD returning ENOTTY is no error. */ + +	perror("VIDIOC_G_STD"); +	exit(EXIT_FAILURE); +} + +memset(&standard, 0, sizeof(standard)); +standard.index = 0; + +while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) { +	if (standard.id & std_id) { +	       printf("Current video standard: %s\n", standard.name); +	       exit(EXIT_SUCCESS); +	} + +	standard.index++; +} + +/* EINVAL indicates the end of the enumeration, which cannot be +   empty unless this device falls under the USB exception. */ + +if (errno == EINVAL || standard.index == 0) { +	perror("VIDIOC_ENUMSTD"); +	exit(EXIT_FAILURE); +} +      </programlisting> +    </example> + +    <example> +      <title>Listing the video standards supported by the current +input</title> + +      <programlisting> +&v4l2-input; input; +&v4l2-standard; standard; + +memset(&input, 0, sizeof(input)); + +if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) { +	perror("VIDIOC_G_INPUT"); +	exit(EXIT_FAILURE); +} + +if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { +	perror("VIDIOC_ENUM_INPUT"); +	exit(EXIT_FAILURE); +} + +printf("Current input %s supports:\n", input.name); + +memset(&standard, 0, sizeof(standard)); +standard.index = 0; + +while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) { +	if (standard.id & input.std) +		printf("%s\n", standard.name); + +	standard.index++; +} + +/* EINVAL indicates the end of the enumeration, which cannot be +   empty unless this device falls under the USB exception. */ + +if (errno != EINVAL || standard.index == 0) { +	perror("VIDIOC_ENUMSTD"); +	exit(EXIT_FAILURE); +} +      </programlisting> +    </example> + +    <example> +      <title>Selecting a new video standard</title> + +      <programlisting> +&v4l2-input; input; +&v4l2-std-id; std_id; + +memset(&input, 0, sizeof(input)); + +if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) { +	perror("VIDIOC_G_INPUT"); +	exit(EXIT_FAILURE); +} + +if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { +	perror("VIDIOC_ENUM_INPUT"); +	exit(EXIT_FAILURE); +} + +if (0 == (input.std & V4L2_STD_PAL_BG)) { +	fprintf(stderr, "Oops. B/G PAL is not supported.\n"); +	exit(EXIT_FAILURE); +} + +/* Note this is also supposed to work when only B +   <emphasis>or</emphasis> G/PAL is supported. */ + +std_id = V4L2_STD_PAL_BG; + +if (-1 == ioctl(fd, &VIDIOC-S-STD;, &std_id)) { +	perror("VIDIOC_S_STD"); +	exit(EXIT_FAILURE); +} +      </programlisting> +    </example> +  </section> +  <section id="dv-timings"> +	<title>Digital Video (DV) Timings</title> +	<para> +	The video standards discussed so far have been dealing with Analog TV and the +corresponding video timings. Today there are many more different hardware interfaces +such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry +video signals and there is a need to extend the API to select the video timings +for these interfaces. Since it is not possible to extend the &v4l2-std-id; due to +the limited bits available, a new set of ioctls was added to set/get video timings at +the input and output.</para> + +	<para>These ioctls deal with the detailed digital video timings that define +each video format. This includes parameters such as the active video width and height, +signal polarities, frontporches, backporches, sync widths etc. The <filename>linux/v4l2-dv-timings.h</filename> +header can be used to get the timings of the formats in the <xref linkend="cea861" /> and +<xref linkend="vesadmt" /> standards. +	</para> + +	<para>To enumerate and query the attributes of the DV timings supported by a device +	applications use the &VIDIOC-ENUM-DV-TIMINGS; and &VIDIOC-DV-TIMINGS-CAP; ioctls. +	To set DV timings for the device applications use the +&VIDIOC-S-DV-TIMINGS; ioctl and to get current DV timings they use the +&VIDIOC-G-DV-TIMINGS; ioctl. To detect the DV timings as seen by the video receiver applications +use the &VIDIOC-QUERY-DV-TIMINGS; ioctl.</para> +	<para>Applications can make use of the <xref linkend="input-capabilities" /> and +<xref linkend="output-capabilities"/> flags to determine whether the digital video ioctls +can be used with the given input or output.</para> +  </section> + +  &sub-controls; + +  <section id="format"> +    <title>Data Formats</title> + +    <section> +      <title>Data Format Negotiation</title> + +      <para>Different devices exchange different kinds of data with +applications, for example video images, raw or sliced VBI data, RDS +datagrams. Even within one kind many different formats are possible, +in particular an abundance of image formats. Although drivers must +provide a default and the selection persists across closing and +reopening a device, applications should always negotiate a data format +before engaging in data exchange. Negotiation means the application +asks for a particular format and the driver selects and reports the +best the hardware can do to satisfy the request. Of course +applications can also just query the current selection.</para> + +      <para>A single mechanism exists to negotiate all data formats +using the aggregate &v4l2-format; and the &VIDIOC-G-FMT; and +&VIDIOC-S-FMT; ioctls. Additionally the &VIDIOC-TRY-FMT; ioctl can be +used to examine what the hardware <emphasis>could</emphasis> do, +without actually selecting a new data format. The data formats +supported by the V4L2 API are covered in the respective device section +in <xref linkend="devices" />. For a closer look at image formats see +<xref linkend="pixfmt" />.</para> + +      <para>The <constant>VIDIOC_S_FMT</constant> ioctl is a major +turning-point in the initialization sequence. Prior to this point +multiple panel applications can access the same device concurrently to +select the current input, change controls or modify other properties. +The first <constant>VIDIOC_S_FMT</constant> assigns a logical stream +(video data, VBI data etc.) exclusively to one file descriptor.</para> + +      <para>Exclusive means no other application, more precisely no +other file descriptor, can grab this stream or change device +properties inconsistent with the negotiated parameters. A video +standard change for example, when the new standard uses a different +number of scan lines, can invalidate the selected image format. +Therefore only the file descriptor owning the stream can make +invalidating changes. Accordingly multiple file descriptors which +grabbed different logical streams prevent each other from interfering +with their settings. When for example video overlay is about to start +or already in progress, simultaneous video capturing may be restricted +to the same cropping and image size.</para> + +      <para>When applications omit the +<constant>VIDIOC_S_FMT</constant> ioctl its locking side effects are +implied by the next step, the selection of an I/O method with the +&VIDIOC-REQBUFS; ioctl or implicit with the first &func-read; or +&func-write; call.</para> + +      <para>Generally only one logical stream can be assigned to a +file descriptor, the exception being drivers permitting simultaneous +video capturing and overlay using the same file descriptor for +compatibility with V4L and earlier versions of V4L2. Switching the +logical stream or returning into "panel mode" is possible by closing +and reopening the device. Drivers <emphasis>may</emphasis> support a +switch using <constant>VIDIOC_S_FMT</constant>.</para> + +      <para>All drivers exchanging data with +applications must support the <constant>VIDIOC_G_FMT</constant> and +<constant>VIDIOC_S_FMT</constant> ioctl. Implementation of the +<constant>VIDIOC_TRY_FMT</constant> is highly recommended but +optional.</para> +    </section> + +    <section> +      <title>Image Format Enumeration</title> + +      <para>Apart of the generic format negotiation functions +a special ioctl to enumerate all image formats supported by video +capture, overlay or output devices is available.<footnote> +	  <para>Enumerating formats an application has no a-priori +knowledge of (otherwise it could explicitly ask for them and need not +enumerate) seems useless, but there are applications serving as proxy +between drivers and the actual video applications for which this is +useful.</para> +	</footnote></para> + +      <para>The &VIDIOC-ENUM-FMT; ioctl must be supported +by all drivers exchanging image data with applications.</para> + +      <important> +	<para>Drivers are not supposed to convert image formats in +kernel space. They must enumerate only formats directly supported by +the hardware. If necessary driver writers should publish an example +conversion routine or library for integration into applications.</para> +      </important> +    </section> +  </section> + +  &sub-planar-apis; + +  <section id="crop"> +    <title>Image Cropping, Insertion and Scaling</title> + +    <para>Some video capture devices can sample a subsection of the +picture and shrink or enlarge it to an image of arbitrary size. We +call these abilities cropping and scaling. Some video output devices +can scale an image up or down and insert it at an arbitrary scan line +and horizontal offset into a video signal.</para> + +    <para>Applications can use the following API to select an area in +the video signal, query the default area and the hardware limits. +<emphasis>Despite their name, the &VIDIOC-CROPCAP;, &VIDIOC-G-CROP; +and &VIDIOC-S-CROP; ioctls apply to input as well as output +devices.</emphasis></para> + +    <para>Scaling requires a source and a target. On a video capture +or overlay device the source is the video signal, and the cropping +ioctls determine the area actually sampled. The target are images +read by the application or overlaid onto the graphics screen. Their +size (and position for an overlay) is negotiated with the +&VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctls.</para> + +    <para>On a video output device the source are the images passed in +by the application, and their size is again negotiated with the +<constant>VIDIOC_G/S_FMT</constant> ioctls, or may be encoded in a +compressed video stream. The target is the video signal, and the +cropping ioctls determine the area where the images are +inserted.</para> + +    <para>Source and target rectangles are defined even if the device +does not support scaling or the <constant>VIDIOC_G/S_CROP</constant> +ioctls. Their size (and position where applicable) will be fixed in +this case. <emphasis>All capture and output device must support the +<constant>VIDIOC_CROPCAP</constant> ioctl such that applications can +determine if scaling takes place.</emphasis></para> + +    <section> +      <title>Cropping Structures</title> + +      <figure id="crop-scale"> +	<title>Image Cropping, Insertion and Scaling</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="crop.pdf" format="PS" /> +	  </imageobject> +	  <imageobject> +	    <imagedata fileref="crop.gif" format="GIF" /> +	  </imageobject> +	  <textobject> +	    <phrase>The cropping, insertion and scaling process</phrase> +	  </textobject> +	</mediaobject> +      </figure> + +      <para>For capture devices the coordinates of the top left +corner, width and height of the area which can be sampled is given by +the <structfield>bounds</structfield> substructure of the +&v4l2-cropcap; returned by the <constant>VIDIOC_CROPCAP</constant> +ioctl. To support a wide range of hardware this specification does not +define an origin or units. However by convention drivers should +horizontally count unscaled samples relative to 0H (the leading edge +of the horizontal sync pulse, see <xref linkend="vbi-hsync" />). +Vertically ITU-R line +numbers of the first field (<xref linkend="vbi-525" />, <xref +linkend="vbi-625" />), multiplied by two if the driver can capture both +fields.</para> + +      <para>The top left corner, width and height of the source +rectangle, that is the area actually sampled, is given by &v4l2-crop; +using the same coordinate system as &v4l2-cropcap;. Applications can +use the <constant>VIDIOC_G_CROP</constant> and +<constant>VIDIOC_S_CROP</constant> ioctls to get and set this +rectangle. It must lie completely within the capture boundaries and +the driver may further adjust the requested size and/or position +according to hardware limitations.</para> + +      <para>Each capture device has a default source rectangle, given +by the <structfield>defrect</structfield> substructure of +&v4l2-cropcap;. The center of this rectangle shall align with the +center of the active picture area of the video signal, and cover what +the driver writer considers the complete picture. Drivers shall reset +the source rectangle to the default when the driver is first loaded, +but not later.</para> + +      <para>For output devices these structures and ioctls are used +accordingly, defining the <emphasis>target</emphasis> rectangle where +the images will be inserted into the video signal.</para> + +    </section> + +    <section> +      <title>Scaling Adjustments</title> + +      <para>Video hardware can have various cropping, insertion and +scaling limitations. It may only scale up or down, support only +discrete scaling factors, or have different scaling abilities in +horizontal and vertical direction. Also it may not support scaling at +all. At the same time the &v4l2-crop; rectangle may have to be +aligned, and both the source and target rectangles may have arbitrary +upper and lower size limits. In particular the maximum +<structfield>width</structfield> and <structfield>height</structfield> +in &v4l2-crop; may be smaller than the +&v4l2-cropcap;.<structfield>bounds</structfield> area. Therefore, as +usual, drivers are expected to adjust the requested parameters and +return the actual values selected.</para> + +      <para>Applications can change the source or the target rectangle +first, as they may prefer a particular image size or a certain area in +the video signal. If the driver has to adjust both to satisfy hardware +limitations, the last requested rectangle shall take priority, and the +driver should preferably adjust the opposite one. The &VIDIOC-TRY-FMT; +ioctl however shall not change the driver state and therefore only +adjust the requested rectangle.</para> + +      <para>Suppose scaling on a video capture device is restricted to +a factor 1:1 or 2:1 in either direction and the target image size must +be a multiple of 16 × 16 pixels. The source cropping +rectangle is set to defaults, which are also the upper limit in this +example, of 640 × 400 pixels at offset 0, 0. An +application requests an image size of 300 × 225 +pixels, assuming video will be scaled down from the "full picture" +accordingly. The driver sets the image size to the closest possible +values 304 × 224, then chooses the cropping rectangle +closest to the requested size, that is 608 × 224 +(224 × 2:1 would exceed the limit 400). The offset +0, 0 is still valid, thus unmodified. Given the default cropping +rectangle reported by <constant>VIDIOC_CROPCAP</constant> the +application can easily propose another offset to center the cropping +rectangle.</para> + +      <para>Now the application may insist on covering an area using a +picture aspect ratio closer to the original request, so it asks for a +cropping rectangle of 608 × 456 pixels. The present +scaling factors limit cropping to 640 × 384, so the +driver returns the cropping size 608 × 384 and adjusts +the image size to closest possible 304 × 192.</para> + +    </section> + +    <section> +      <title>Examples</title> + +      <para>Source and target rectangles shall remain unchanged across +closing and reopening a device, such that piping data into or out of a +device will work without special preparations. More advanced +applications should ensure the parameters are suitable before starting +I/O.</para> + +      <example> +	<title>Resetting the cropping parameters</title> + +	<para>(A video capture device is assumed; change +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> for other +devices.)</para> + +	<programlisting> +&v4l2-cropcap; cropcap; +&v4l2-crop; crop; + +memset (&cropcap, 0, sizeof (cropcap)); +cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +if (-1 == ioctl (fd, &VIDIOC-CROPCAP;, &cropcap)) { +	perror ("VIDIOC_CROPCAP"); +	exit (EXIT_FAILURE); +} + +memset (&crop, 0, sizeof (crop)); +crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +crop.c = cropcap.defrect; + +/* Ignore if cropping is not supported (EINVAL). */ + +if (-1 == ioctl (fd, &VIDIOC-S-CROP;, &crop) +    && errno != EINVAL) { +	perror ("VIDIOC_S_CROP"); +	exit (EXIT_FAILURE); +} +      </programlisting> +      </example> + +      <example> +	<title>Simple downscaling</title> + +	<para>(A video capture device is assumed.)</para> + +	<programlisting> +&v4l2-cropcap; cropcap; +&v4l2-format; format; + +reset_cropping_parameters (); + +/* Scale down to 1/4 size of full picture. */ + +memset (&format, 0, sizeof (format)); /* defaults */ + +format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +format.fmt.pix.width = cropcap.defrect.width >> 1; +format.fmt.pix.height = cropcap.defrect.height >> 1; +format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; + +if (-1 == ioctl (fd, &VIDIOC-S-FMT;, &format)) { +	perror ("VIDIOC_S_FORMAT"); +	exit (EXIT_FAILURE); +} + +/* We could check the actual image size now, the actual scaling factor +   or if the driver can scale at all. */ +	</programlisting> +      </example> + +      <example> +	<title>Selecting an output area</title> + +	<programlisting> +&v4l2-cropcap; cropcap; +&v4l2-crop; crop; + +memset (&cropcap, 0, sizeof (cropcap)); +cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; + +if (-1 == ioctl (fd, VIDIOC_CROPCAP;, &cropcap)) { +	perror ("VIDIOC_CROPCAP"); +	exit (EXIT_FAILURE); +} + +memset (&crop, 0, sizeof (crop)); + +crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; +crop.c = cropcap.defrect; + +/* Scale the width and height to 50 % of their original size +   and center the output. */ + +crop.c.width /= 2; +crop.c.height /= 2; +crop.c.left += crop.c.width / 2; +crop.c.top += crop.c.height / 2; + +/* Ignore if cropping is not supported (EINVAL). */ + +if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) +    && errno != EINVAL) { +	perror ("VIDIOC_S_CROP"); +	exit (EXIT_FAILURE); +} +</programlisting> +      </example> + +      <example> +	<title>Current scaling factor and pixel aspect</title> + +	<para>(A video capture device is assumed.)</para> + +	<programlisting> +&v4l2-cropcap; cropcap; +&v4l2-crop; crop; +&v4l2-format; format; +double hscale, vscale; +double aspect; +int dwidth, dheight; + +memset (&cropcap, 0, sizeof (cropcap)); +cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +if (-1 == ioctl (fd, &VIDIOC-CROPCAP;, &cropcap)) { +	perror ("VIDIOC_CROPCAP"); +	exit (EXIT_FAILURE); +} + +memset (&crop, 0, sizeof (crop)); +crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +if (-1 == ioctl (fd, &VIDIOC-G-CROP;, &crop)) { +	if (errno != EINVAL) { +		perror ("VIDIOC_G_CROP"); +		exit (EXIT_FAILURE); +	} + +	/* Cropping not supported. */ +	crop.c = cropcap.defrect; +} + +memset (&format, 0, sizeof (format)); +format.fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +if (-1 == ioctl (fd, &VIDIOC-G-FMT;, &format)) { +	perror ("VIDIOC_G_FMT"); +	exit (EXIT_FAILURE); +} + +/* The scaling applied by the driver. */ + +hscale = format.fmt.pix.width / (double) crop.c.width; +vscale = format.fmt.pix.height / (double) crop.c.height; + +aspect = cropcap.pixelaspect.numerator / +	 (double) cropcap.pixelaspect.denominator; +aspect = aspect * hscale / vscale; + +/* Devices following ITU-R BT.601 do not capture +   square pixels. For playback on a computer monitor +   we should scale the images to this size. */ + +dwidth = format.fmt.pix.width / aspect; +dheight = format.fmt.pix.height; +	</programlisting> +      </example> +    </section> +  </section> + +  &sub-selection-api; + +  <section id="streaming-par"> +    <title>Streaming Parameters</title> + +    <para>Streaming parameters are intended to optimize the video +capture process as well as I/O. Presently applications can request a +high quality capture mode with the &VIDIOC-S-PARM; ioctl.</para> + +    <para>The current video standard determines a nominal number of +frames per second. If less than this number of frames is to be +captured or output, applications can request frame skipping or +duplicating on the driver side. This is especially useful when using +the &func-read; or &func-write;, which are not augmented by timestamps +or sequence counters, and to avoid unnecessary data copying.</para> + +    <para>Finally these ioctls can be used to determine the number of +buffers used internally by a driver in read/write mode. For +implications see the section discussing the &func-read; +function.</para> + +    <para>To get and set the streaming parameters applications call +the &VIDIOC-G-PARM; and &VIDIOC-S-PARM; ioctl, respectively. They take +a pointer to a &v4l2-streamparm;, which contains a union holding +separate parameters for input and output devices.</para> + +    <para>These ioctls are optional, drivers need not implement +them. If so, they return the &EINVAL;.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml new file mode 100644 index 00000000000..eee6f0f4aa4 --- /dev/null +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -0,0 +1,2695 @@ +  <title>Changes</title> + +  <para>The following chapters document the evolution of the V4L2 API, +errata or extensions. They are also intended to help application and +driver writers to port or update their code.</para> + +  <section id="diff-v4l"> +    <title>Differences between V4L and V4L2</title> + +    <para>The Video For Linux API was first introduced in Linux 2.1 to +unify and replace various TV and radio device related interfaces, +developed independently by driver writers in prior years. Starting +with Linux 2.5 the much improved V4L2 API replaces the V4L API. +The support for the old V4L calls were removed from Kernel, but the +library <xref linkend="libv4l" /> supports the conversion of a V4L +API system call into a V4L2 one.</para> + +    <section> +      <title>Opening and Closing Devices</title> + +      <para>For compatibility reasons the character device file names +recommended for V4L2 video capture, overlay, radio and raw +vbi capture devices did not change from those used by V4L. They are +listed in <xref linkend="devices" /> and below in <xref +	  linkend="v4l-dev" />.</para> + +      <para>The teletext devices (minor range 192-223) have been removed in +V4L2 and no longer exist. There is no hardware available anymore for handling +pure teletext. Instead raw or sliced VBI is used.</para> + +      <para>The V4L <filename>videodev</filename> module automatically +assigns minor numbers to drivers in load order, depending on the +registered device type. We recommend that V4L2 drivers by default +register devices with the same numbers, but the system administrator +can assign arbitrary minor numbers using driver module options. The +major device number remains 81.</para> + +      <table id="v4l-dev"> +	<title>V4L Device Types, Names and Numbers</title> +	<tgroup cols="3"> +	  <thead> +	    <row> +	      <entry>Device Type</entry> +	      <entry>File Name</entry> +	      <entry>Minor Numbers</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row> +	      <entry>Video capture and overlay</entry> +	      <entry><para><filename>/dev/video</filename> and +<filename>/dev/bttv0</filename><footnote> <para>According to +Documentation/devices.txt these should be symbolic links to +<filename>/dev/video0</filename>. Note the original bttv interface is +not compatible with V4L or V4L2.</para> </footnote>, +<filename>/dev/video0</filename> to +<filename>/dev/video63</filename></para></entry> +	      <entry>0-63</entry> +	    </row> +	    <row> +	      <entry>Radio receiver</entry> +	      <entry><para><filename>/dev/radio</filename><footnote> +		    <para>According to +<filename>Documentation/devices.txt</filename> a symbolic link to +<filename>/dev/radio0</filename>.</para> +		  </footnote>, <filename>/dev/radio0</filename> to +<filename>/dev/radio63</filename></para></entry> +	      <entry>64-127</entry> +	    </row> +	    <row> +	      <entry>Raw VBI capture</entry> +	      <entry><para><filename>/dev/vbi</filename>, +<filename>/dev/vbi0</filename> to +<filename>/dev/vbi31</filename></para></entry> +	      <entry>224-255</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> + +      <para>V4L prohibits (or used to prohibit) multiple opens of a +device file. V4L2 drivers <emphasis>may</emphasis> support multiple +opens, see <xref linkend="open" /> for details and consequences.</para> + +      <para>V4L drivers respond to V4L2 ioctls with an &EINVAL;.</para> +    </section> + +    <section> +      <title>Querying Capabilities</title> + +      <para>The V4L <constant>VIDIOCGCAP</constant> ioctl is +equivalent to V4L2's &VIDIOC-QUERYCAP;.</para> + +      <para>The <structfield>name</structfield> field in struct +<structname>video_capability</structname> became +<structfield>card</structfield> in &v4l2-capability;, +<structfield>type</structfield> was replaced by +<structfield>capabilities</structfield>. Note V4L2 does not +distinguish between device types like this, better think of basic +video input, video output and radio devices supporting a set of +related functions like video capturing, video overlay and VBI +capturing. See <xref linkend="open" /> for an +introduction.<informaltable> +	  <tgroup cols="3"> +	    <thead> +	      <row> +		<entry>struct +<structname>video_capability</structname> +<structfield>type</structfield></entry> +		<entry>&v4l2-capability; +<structfield>capabilities</structfield> flags</entry> +		<entry>Purpose</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row> +		<entry><constant>VID_TYPE_CAPTURE</constant></entry> +		<entry><constant>V4L2_CAP_VIDEO_CAPTURE</constant></entry> +		<entry>The <link linkend="capture">video +capture</link> interface is supported.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_TUNER</constant></entry> +		<entry><constant>V4L2_CAP_TUNER</constant></entry> +		<entry>The device has a <link linkend="tuner">tuner or +modulator</link>.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_TELETEXT</constant></entry> +		<entry><constant>V4L2_CAP_VBI_CAPTURE</constant></entry> +		<entry>The <link linkend="raw-vbi">raw VBI +capture</link> interface is supported.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_OVERLAY</constant></entry> +		<entry><constant>V4L2_CAP_VIDEO_OVERLAY</constant></entry> +		<entry>The <link linkend="overlay">video +overlay</link> interface is supported.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_CHROMAKEY</constant></entry> +		<entry><constant>V4L2_FBUF_CAP_CHROMAKEY</constant> in +field <structfield>capability</structfield> of +&v4l2-framebuffer;</entry> +		<entry>Whether chromakey overlay is supported. For +more information on overlay see +<xref linkend="overlay" />.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_CLIPPING</constant></entry> +		<entry><constant>V4L2_FBUF_CAP_LIST_CLIPPING</constant> +and <constant>V4L2_FBUF_CAP_BITMAP_CLIPPING</constant> in field +<structfield>capability</structfield> of &v4l2-framebuffer;</entry> +		<entry>Whether clipping the overlaid image is +supported, see <xref linkend="overlay" />.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_FRAMERAM</constant></entry> +		<entry><constant>V4L2_FBUF_CAP_EXTERNOVERLAY</constant> +<emphasis>not set</emphasis> in field +<structfield>capability</structfield> of &v4l2-framebuffer;</entry> +		<entry>Whether overlay overwrites frame buffer memory, +see <xref linkend="overlay" />.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_SCALES</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>This flag indicates if the hardware can scale +images. The V4L2 API implies the scale factor by setting the cropping +dimensions and image size with the &VIDIOC-S-CROP; and &VIDIOC-S-FMT; +ioctl, respectively. The driver returns the closest sizes possible. +For more information on cropping and scaling see <xref +		    linkend="crop" />.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_MONOCHROME</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>Applications can enumerate the supported image +formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device +supports grey scale capturing only. For more information on image +formats see <xref linkend="pixfmt" />.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_SUBCAPTURE</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>Applications can call the &VIDIOC-G-CROP; ioctl +to determine if the device supports capturing a subsection of the full +picture ("cropping" in V4L2). If not, the ioctl returns the &EINVAL;. +For more information on cropping and scaling see <xref +		    linkend="crop" />.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_MPEG_DECODER</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>Applications can enumerate the supported image +formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device +supports MPEG streams.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_MPEG_ENCODER</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>See above.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_MJPEG_DECODER</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>See above.</entry> +	      </row> +	      <row> +		<entry><constant>VID_TYPE_MJPEG_ENCODER</constant></entry> +		<entry><constant>-</constant></entry> +		<entry>See above.</entry> +	      </row> +	    </tbody> +	  </tgroup> +	</informaltable></para> + +      <para>The <structfield>audios</structfield> field was replaced +by <structfield>capabilities</structfield> flag +<constant>V4L2_CAP_AUDIO</constant>, indicating +<emphasis>if</emphasis> the device has any audio inputs or outputs. To +determine their number applications can enumerate audio inputs with +the &VIDIOC-G-AUDIO; ioctl. The audio ioctls are described in <xref +	  linkend="audio" />.</para> + +      <para>The <structfield>maxwidth</structfield>, +<structfield>maxheight</structfield>, +<structfield>minwidth</structfield> and +<structfield>minheight</structfield> fields were removed. Calling the +&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT; ioctl with the desired dimensions +returns the closest size possible, taking into account the current +video standard, cropping and scaling limitations.</para> +    </section> + +    <section> +      <title>Video Sources</title> + +      <para>V4L provides the <constant>VIDIOCGCHAN</constant> and +<constant>VIDIOCSCHAN</constant> ioctl using struct +<structname>video_channel</structname> to enumerate +the video inputs of a V4L device. The equivalent V4L2 ioctls +are &VIDIOC-ENUMINPUT;, &VIDIOC-G-INPUT; and &VIDIOC-S-INPUT; +using &v4l2-input; as discussed in <xref linkend="video" />.</para> + +      <para>The <structfield>channel</structfield> field counting +inputs was renamed to <structfield>index</structfield>, the video +input types were renamed as follows: <informaltable> +	  <tgroup cols="2"> +	    <thead> +	      <row> +		<entry>struct <structname>video_channel</structname> +<structfield>type</structfield></entry> +		<entry>&v4l2-input; +<structfield>type</structfield></entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row> +		<entry><constant>VIDEO_TYPE_TV</constant></entry> +		<entry><constant>V4L2_INPUT_TYPE_TUNER</constant></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_TYPE_CAMERA</constant></entry> +		<entry><constant>V4L2_INPUT_TYPE_CAMERA</constant></entry> +	      </row> +	    </tbody> +	  </tgroup> +	</informaltable></para> + +      <para>Unlike the <structfield>tuners</structfield> field +expressing the number of tuners of this input, V4L2 assumes each video +input is connected to at most one tuner. However a tuner can have more +than one input, &ie; RF connectors, and a device can have multiple +tuners. The index number of the tuner associated with the input, if +any, is stored in field <structfield>tuner</structfield> of +&v4l2-input;. Enumeration of tuners is discussed in <xref +	  linkend="tuner" />.</para> + +      <para>The redundant <constant>VIDEO_VC_TUNER</constant> flag was +dropped. Video inputs associated with a tuner are of type +<constant>V4L2_INPUT_TYPE_TUNER</constant>. The +<constant>VIDEO_VC_AUDIO</constant> flag was replaced by the +<structfield>audioset</structfield> field. V4L2 considers devices with +up to 32 audio inputs. Each set bit in the +<structfield>audioset</structfield> field represents one audio input +this video input combines with. For information about audio inputs and +how to switch between them see <xref linkend="audio" />.</para> + +      <para>The <structfield>norm</structfield> field describing the +supported video standards was replaced by +<structfield>std</structfield>. The V4L specification mentions a flag +<constant>VIDEO_VC_NORM</constant> indicating whether the standard can +be changed. This flag was a later addition together with the +<structfield>norm</structfield> field and has been removed in the +meantime. V4L2 has a similar, albeit more comprehensive approach +to video standards, see <xref linkend="standard" /> for more +information.</para> +    </section> + +    <section> +      <title>Tuning</title> + +      <para>The V4L <constant>VIDIOCGTUNER</constant> and +<constant>VIDIOCSTUNER</constant> ioctl and struct +<structname>video_tuner</structname> can be used to enumerate the +tuners of a V4L TV or radio device. The equivalent V4L2 ioctls are +&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; using &v4l2-tuner;. Tuners are +covered in <xref linkend="tuner" />.</para> + +      <para>The <structfield>tuner</structfield> field counting tuners +was renamed to <structfield>index</structfield>. The fields +<structfield>name</structfield>, <structfield>rangelow</structfield> +and <structfield>rangehigh</structfield> remained unchanged.</para> + +      <para>The <constant>VIDEO_TUNER_PAL</constant>, +<constant>VIDEO_TUNER_NTSC</constant> and +<constant>VIDEO_TUNER_SECAM</constant> flags indicating the supported +video standards were dropped. This information is now contained in the +associated &v4l2-input;. No replacement exists for the +<constant>VIDEO_TUNER_NORM</constant> flag indicating whether the +video standard can be switched. The <structfield>mode</structfield> +field to select a different video standard was replaced by a whole new +set of ioctls and structures described in <xref linkend="standard" />. +Due to its ubiquity it should be mentioned the BTTV driver supports +several standards in addition to the regular +<constant>VIDEO_MODE_PAL</constant> (0), +<constant>VIDEO_MODE_NTSC</constant>, +<constant>VIDEO_MODE_SECAM</constant> and +<constant>VIDEO_MODE_AUTO</constant> (3). Namely N/PAL Argentina, +M/PAL, N/PAL, and NTSC Japan with numbers 3-6 (sic).</para> + +      <para>The <constant>VIDEO_TUNER_STEREO_ON</constant> flag +indicating stereo reception became +<constant>V4L2_TUNER_SUB_STEREO</constant> in field +<structfield>rxsubchans</structfield>. This field also permits the +detection of monaural and bilingual audio, see the definition of +&v4l2-tuner; for details. Presently no replacement exists for the +<constant>VIDEO_TUNER_RDS_ON</constant> and +<constant>VIDEO_TUNER_MBS_ON</constant> flags.</para> + +      <para> The <constant>VIDEO_TUNER_LOW</constant> flag was renamed +to <constant>V4L2_TUNER_CAP_LOW</constant> in the &v4l2-tuner; +<structfield>capability</structfield> field.</para> + +      <para>The <constant>VIDIOCGFREQ</constant> and +<constant>VIDIOCSFREQ</constant> ioctl to change the tuner frequency +where renamed to &VIDIOC-G-FREQUENCY; and  &VIDIOC-S-FREQUENCY;. They +take a pointer to a &v4l2-frequency; instead of an unsigned long +integer.</para> +    </section> + +    <section id="v4l-image-properties"> +      <title>Image Properties</title> + +      <para>V4L2 has no equivalent of the +<constant>VIDIOCGPICT</constant> and <constant>VIDIOCSPICT</constant> +ioctl and struct <structname>video_picture</structname>. The following +fields where replaced by V4L2 controls accessible with the +&VIDIOC-QUERYCTRL;, &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls:<informaltable> +	  <tgroup cols="2"> +	    <thead> +	      <row> +		<entry>struct <structname>video_picture</structname></entry> +		<entry>V4L2 Control ID</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row> +		<entry><structfield>brightness</structfield></entry> +		<entry><constant>V4L2_CID_BRIGHTNESS</constant></entry> +	      </row> +	      <row> +		<entry><structfield>hue</structfield></entry> +		<entry><constant>V4L2_CID_HUE</constant></entry> +	      </row> +	      <row> +		<entry><structfield>colour</structfield></entry> +		<entry><constant>V4L2_CID_SATURATION</constant></entry> +	      </row> +	      <row> +		<entry><structfield>contrast</structfield></entry> +		<entry><constant>V4L2_CID_CONTRAST</constant></entry> +	      </row> +	      <row> +		<entry><structfield>whiteness</structfield></entry> +		<entry><constant>V4L2_CID_WHITENESS</constant></entry> +	      </row> +	    </tbody> +	  </tgroup> +	</informaltable></para> + +      <para>The V4L picture controls are assumed to range from 0 to +65535 with no particular reset value. The V4L2 API permits arbitrary +limits and defaults which can be queried with the &VIDIOC-QUERYCTRL; +ioctl. For general information about controls see <xref +linkend="control" />.</para> + +      <para>The <structfield>depth</structfield> (average number of +bits per pixel) of a video image is implied by the selected image +format. V4L2 does not explicitly provide such information assuming +applications recognizing the format are aware of the image depth and +others need not know. The <structfield>palette</structfield> field +moved into the &v4l2-pix-format;:<informaltable> +	  <tgroup cols="2"> +	    <thead> +	      <row> +		<entry>struct <structname>video_picture</structname> +<structfield>palette</structfield></entry> +		<entry>&v4l2-pix-format; +<structfield>pixfmt</structfield></entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row> +		<entry><constant>VIDEO_PALETTE_GREY</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-GREY"><constant>V4L2_PIX_FMT_GREY</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_HI240</constant></entry> +		<entry><para><link +linkend="pixfmt-reserved"><constant>V4L2_PIX_FMT_HI240</constant></link><footnote> +		      <para>This is a custom format used by the BTTV +driver, not one of the V4L2 standard formats.</para> +		    </footnote></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_RGB565</constant></entry> +		<entry><para><link +linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_RGB565</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_RGB555</constant></entry> +		<entry><para><link +linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_RGB555</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_RGB24</constant></entry> +		<entry><para><link +linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_BGR24</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_RGB32</constant></entry> +		<entry><para><link +linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_BGR32</constant></link><footnote> +		      <para>Presumably all V4L RGB formats are +little-endian, although some drivers might interpret them according to machine endianness. V4L2 defines little-endian, big-endian and red/blue +swapped variants. For details see <xref linkend="pixfmt-rgb" />.</para> +		    </footnote></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV422</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link></para></entry> +	      </row> +	      <row> +		<entry><para><constant>VIDEO_PALETTE_YUYV</constant><footnote> +		      <para><constant>VIDEO_PALETTE_YUV422</constant> +and <constant>VIDEO_PALETTE_YUYV</constant> are the same formats. Some +V4L drivers respond to one, some to the other.</para> +		    </footnote></para></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_UYVY</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-UYVY"><constant>V4L2_PIX_FMT_UYVY</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV420</constant></entry> +		<entry>None</entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV411</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-Y41P"><constant>V4L2_PIX_FMT_Y41P</constant></link><footnote> +		      <para>Not to be confused with +<constant>V4L2_PIX_FMT_YUV411P</constant>, which is a planar +format.</para> </footnote></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_RAW</constant></entry> +		<entry><para>None<footnote> <para>V4L explains this +as: "RAW capture (BT848)"</para> </footnote></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV422P</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-YUV422P"><constant>V4L2_PIX_FMT_YUV422P</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV411P</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-YUV411P"><constant>V4L2_PIX_FMT_YUV411P</constant></link><footnote> +		      <para>Not to be confused with +<constant>V4L2_PIX_FMT_Y41P</constant>, which is a packed +format.</para> </footnote></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV420P</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link></para></entry> +	      </row> +	      <row> +		<entry><constant>VIDEO_PALETTE_YUV410P</constant></entry> +		<entry><para><link +linkend="V4L2-PIX-FMT-YVU410"><constant>V4L2_PIX_FMT_YVU410</constant></link></para></entry> +	      </row> +	    </tbody> +	  </tgroup> +	</informaltable></para> + +      <para>V4L2 image formats are defined in <xref +linkend="pixfmt" />. The image format can be selected with the +&VIDIOC-S-FMT; ioctl.</para> +    </section> + +    <section> +      <title>Audio</title> + +      <para>The <constant>VIDIOCGAUDIO</constant> and +<constant>VIDIOCSAUDIO</constant> ioctl and struct +<structname>video_audio</structname> are used to enumerate the +audio inputs of a V4L device. The equivalent V4L2 ioctls are +&VIDIOC-G-AUDIO; and &VIDIOC-S-AUDIO; using &v4l2-audio; as +discussed in <xref linkend="audio" />.</para> + +      <para>The <structfield>audio</structfield> "channel number" +field counting audio inputs was renamed to +<structfield>index</structfield>.</para> + +      <para>On <constant>VIDIOCSAUDIO</constant> the +<structfield>mode</structfield> field selects <emphasis>one</emphasis> +of the <constant>VIDEO_SOUND_MONO</constant>, +<constant>VIDEO_SOUND_STEREO</constant>, +<constant>VIDEO_SOUND_LANG1</constant> or +<constant>VIDEO_SOUND_LANG2</constant> audio demodulation modes. When +the current audio standard is BTSC +<constant>VIDEO_SOUND_LANG2</constant> refers to SAP and +<constant>VIDEO_SOUND_LANG1</constant> is meaningless. Also +undocumented in the V4L specification, there is no way to query the +selected mode. On <constant>VIDIOCGAUDIO</constant> the driver returns +the <emphasis>actually received</emphasis> audio programmes in this +field. In the V4L2 API this information is stored in the &v4l2-tuner; +<structfield>rxsubchans</structfield> and +<structfield>audmode</structfield> fields, respectively. See <xref +linkend="tuner" /> for more information on tuners. Related to audio +modes &v4l2-audio; also reports if this is a mono or stereo +input, regardless if the source is a tuner.</para> + +      <para>The following fields where replaced by V4L2 controls +accessible with the &VIDIOC-QUERYCTRL;, &VIDIOC-G-CTRL; and +&VIDIOC-S-CTRL; ioctls:<informaltable> +	  <tgroup cols="2"> +	    <thead> +	      <row> +		<entry>struct +<structname>video_audio</structname></entry> +		<entry>V4L2 Control ID</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row> +		<entry><structfield>volume</structfield></entry> +		<entry><constant>V4L2_CID_AUDIO_VOLUME</constant></entry> +	      </row> +	      <row> +		<entry><structfield>bass</structfield></entry> +		<entry><constant>V4L2_CID_AUDIO_BASS</constant></entry> +	      </row> +	      <row> +		<entry><structfield>treble</structfield></entry> +		<entry><constant>V4L2_CID_AUDIO_TREBLE</constant></entry> +	      </row> +	      <row> +		<entry><structfield>balance</structfield></entry> +		<entry><constant>V4L2_CID_AUDIO_BALANCE</constant></entry> +	      </row> +	    </tbody> +	  </tgroup> +	</informaltable></para> + +      <para>To determine which of these controls are supported by a +driver V4L provides the <structfield>flags</structfield> +<constant>VIDEO_AUDIO_VOLUME</constant>, +<constant>VIDEO_AUDIO_BASS</constant>, +<constant>VIDEO_AUDIO_TREBLE</constant> and +<constant>VIDEO_AUDIO_BALANCE</constant>. In the V4L2 API the +&VIDIOC-QUERYCTRL; ioctl reports if the respective control is +supported. Accordingly the <constant>VIDEO_AUDIO_MUTABLE</constant> +and <constant>VIDEO_AUDIO_MUTE</constant> flags where replaced by the +boolean <constant>V4L2_CID_AUDIO_MUTE</constant> control.</para> + +      <para>All V4L2 controls have a <structfield>step</structfield> +attribute replacing the struct <structname>video_audio</structname> +<structfield>step</structfield> field. The V4L audio controls are +assumed to range from 0 to 65535 with no particular reset value. The +V4L2 API permits arbitrary limits and defaults which can be queried +with the &VIDIOC-QUERYCTRL; ioctl. For general information about +controls see <xref linkend="control" />.</para> +    </section> + +    <section> +      <title>Frame Buffer Overlay</title> + +      <para>The V4L2 ioctls equivalent to +<constant>VIDIOCGFBUF</constant> and <constant>VIDIOCSFBUF</constant> +are &VIDIOC-G-FBUF; and &VIDIOC-S-FBUF;. The +<structfield>base</structfield> field of struct +<structname>video_buffer</structname> remained unchanged, except V4L2 +defines a flag to indicate non-destructive overlays instead of a +<constant>NULL</constant> pointer. All other fields moved into the +&v4l2-pix-format; <structfield>fmt</structfield> substructure of +&v4l2-framebuffer;. The <structfield>depth</structfield> field was +replaced by <structfield>pixelformat</structfield>. See <xref +	  linkend="pixfmt-rgb" /> for a list of RGB formats and their +respective color depths.</para> + +      <para>Instead of the special ioctls +<constant>VIDIOCGWIN</constant> and <constant>VIDIOCSWIN</constant> +V4L2 uses the general-purpose data format negotiation ioctls +&VIDIOC-G-FMT; and &VIDIOC-S-FMT;. They take a pointer to a +&v4l2-format; as argument. Here the <structfield>win</structfield> +member of the <structfield>fmt</structfield> union is used, a +&v4l2-window;.</para> + +      <para>The <structfield>x</structfield>, +<structfield>y</structfield>, <structfield>width</structfield> and +<structfield>height</structfield> fields of struct +<structname>video_window</structname> moved into &v4l2-rect; +substructure <structfield>w</structfield> of struct +<structname>v4l2_window</structname>. The +<structfield>chromakey</structfield>, +<structfield>clips</structfield>, and +<structfield>clipcount</structfield> fields remained unchanged. Struct +<structname>video_clip</structname> was renamed to &v4l2-clip;, also +containing a struct <structname>v4l2_rect</structname>, but the +semantics are still the same.</para> + +      <para>The <constant>VIDEO_WINDOW_INTERLACE</constant> flag was +dropped. Instead applications must set the +<structfield>field</structfield> field to +<constant>V4L2_FIELD_ANY</constant> or +<constant>V4L2_FIELD_INTERLACED</constant>. The +<constant>VIDEO_WINDOW_CHROMAKEY</constant> flag moved into +&v4l2-framebuffer;, under the new name +<constant>V4L2_FBUF_FLAG_CHROMAKEY</constant>.</para> + +      <para>In V4L, storing a bitmap pointer in +<structfield>clips</structfield> and setting +<structfield>clipcount</structfield> to +<constant>VIDEO_CLIP_BITMAP</constant> (-1) requests bitmap +clipping, using a fixed size bitmap of 1024 × 625 bits. Struct +<structname>v4l2_window</structname> has a separate +<structfield>bitmap</structfield> pointer field for this purpose and +the bitmap size is determined by <structfield>w.width</structfield> and +<structfield>w.height</structfield>.</para> + +      <para>The <constant>VIDIOCCAPTURE</constant> ioctl to enable or +disable overlay was renamed to &VIDIOC-OVERLAY;.</para> +    </section> + +    <section> +      <title>Cropping</title> + +      <para>To capture only a subsection of the full picture V4L +defines the <constant>VIDIOCGCAPTURE</constant> and +<constant>VIDIOCSCAPTURE</constant> ioctls using struct +<structname>video_capture</structname>. The equivalent V4L2 ioctls are +&VIDIOC-G-CROP; and &VIDIOC-S-CROP; using &v4l2-crop;, and the related +&VIDIOC-CROPCAP; ioctl. This is a rather complex matter, see +<xref linkend="crop" /> for details.</para> + +      <para>The <structfield>x</structfield>, +<structfield>y</structfield>, <structfield>width</structfield> and +<structfield>height</structfield> fields moved into &v4l2-rect; +substructure <structfield>c</structfield> of struct +<structname>v4l2_crop</structname>. The +<structfield>decimation</structfield> field was dropped. In the V4L2 +API the scaling factor is implied by the size of the cropping +rectangle and the size of the captured or overlaid image.</para> + +      <para>The <constant>VIDEO_CAPTURE_ODD</constant> +and <constant>VIDEO_CAPTURE_EVEN</constant> flags to capture only the +odd or even field, respectively, were replaced by +<constant>V4L2_FIELD_TOP</constant> and +<constant>V4L2_FIELD_BOTTOM</constant> in the field named +<structfield>field</structfield> of &v4l2-pix-format; and +&v4l2-window;. These structures are used to select a capture or +overlay format with the &VIDIOC-S-FMT; ioctl.</para> +    </section> + +    <section> +      <title>Reading Images, Memory Mapping</title> + +      <section> +	<title>Capturing using the read method</title> + +	<para>There is no essential difference between reading images +from a V4L or V4L2 device using the &func-read; function, however V4L2 +drivers are not required to support this I/O method. Applications can +determine if the function is available with the &VIDIOC-QUERYCAP; +ioctl. All V4L2 devices exchanging data with applications must support +the &func-select; and &func-poll; functions.</para> + +	<para>To select an image format and size, V4L provides the +<constant>VIDIOCSPICT</constant> and <constant>VIDIOCSWIN</constant> +ioctls. V4L2 uses the general-purpose data format negotiation ioctls +&VIDIOC-G-FMT; and &VIDIOC-S-FMT;. They take a pointer to a +&v4l2-format; as argument, here the &v4l2-pix-format; named +<structfield>pix</structfield> of its <structfield>fmt</structfield> +union is used.</para> + +	<para>For more information about the V4L2 read interface see +<xref linkend="rw" />.</para> +      </section> +      <section> +	<title>Capturing using memory mapping</title> + +	<para>Applications can read from V4L devices by mapping +buffers in device memory, or more often just buffers allocated in +DMA-able system memory, into their address space. This avoids the data +copying overhead of the read method. V4L2 supports memory mapping as +well, with a few differences.</para> + +	<informaltable> +	  <tgroup cols="2"> +	    <thead> +	      <row> +		<entry>V4L</entry> +		<entry>V4L2</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row> +		<entry></entry> +		<entry>The image format must be selected before +buffers are allocated, with the &VIDIOC-S-FMT; ioctl. When no format +is selected the driver may use the last, possibly by another +application requested format.</entry> +	      </row> +	      <row> +		<entry><para>Applications cannot change the number of +buffers. The it is built into the driver, unless it has a module +option to change the number when the driver module is +loaded.</para></entry> +		<entry><para>The &VIDIOC-REQBUFS; ioctl allocates the +desired number of buffers, this is a required step in the initialization +sequence.</para></entry> +	      </row> +	      <row> +		<entry><para>Drivers map all buffers as one contiguous +range of memory. The <constant>VIDIOCGMBUF</constant> ioctl is +available to query the number of buffers, the offset of each buffer +from the start of the virtual file, and the overall amount of memory +used, which can be used as arguments for the &func-mmap; +function.</para></entry> +		<entry><para>Buffers are individually mapped. The +offset and size of each buffer can be determined with the +&VIDIOC-QUERYBUF; ioctl.</para></entry> +	      </row> +	      <row> +		<entry><para>The <constant>VIDIOCMCAPTURE</constant> +ioctl prepares a buffer for capturing. It also determines the image +format for this buffer. The ioctl returns immediately, eventually with +an &EAGAIN; if no video signal had been detected. When the driver +supports more than one buffer applications can call the ioctl multiple +times and thus have multiple outstanding capture +requests.</para><para>The <constant>VIDIOCSYNC</constant> ioctl +suspends execution until a particular buffer has been +filled.</para></entry> +		<entry><para>Drivers maintain an incoming and outgoing +queue. &VIDIOC-QBUF; enqueues any empty buffer into the incoming +queue. Filled buffers are dequeued from the outgoing queue with the +&VIDIOC-DQBUF; ioctl. To wait until filled buffers become available this +function, &func-select; or &func-poll; can be used. The +&VIDIOC-STREAMON; ioctl must be called once after enqueuing one or +more buffers to start capturing. Its counterpart +&VIDIOC-STREAMOFF; stops capturing and dequeues all buffers from both +queues. Applications can query the signal status, if known, with the +&VIDIOC-ENUMINPUT; ioctl.</para></entry> +	      </row> +	    </tbody> +	  </tgroup> +	</informaltable> + +	<para>For a more in-depth discussion of memory mapping and +examples, see <xref linkend="mmap" />.</para> +      </section> +    </section> + +    <section> +      <title>Reading Raw VBI Data</title> + +      <para>Originally the V4L API did not specify a raw VBI capture +interface, only the device file <filename>/dev/vbi</filename> was +reserved for this purpose. The only driver supporting this interface +was the BTTV driver, de-facto defining the V4L VBI interface. Reading +from the device yields a raw VBI image with the following +parameters:<informaltable> +	    <tgroup cols="2"> +	      <thead> +		<row> +		  <entry>&v4l2-vbi-format;</entry> +		  <entry>V4L, BTTV driver</entry> +		</row> +	      </thead> +	      <tbody valign="top"> +		<row> +		  <entry>sampling_rate</entry> +		  <entry>28636363 Hz NTSC (or any other 525-line +standard); 35468950 Hz PAL and SECAM (625-line standards)</entry> +		</row> +		<row> +		  <entry>offset</entry> +		  <entry>?</entry> +		</row> +		<row> +		  <entry>samples_per_line</entry> +		  <entry>2048</entry> +		</row> +		<row> +		  <entry>sample_format</entry> +		  <entry>V4L2_PIX_FMT_GREY. The last four bytes (a +machine endianness integer) contain a frame counter.</entry> +		</row> +		<row> +		  <entry>start[]</entry> +		  <entry>10, 273 NTSC; 22, 335 PAL and SECAM</entry> +		</row> +		<row> +		  <entry>count[]</entry> +		  <entry><para>16, 16<footnote><para>Old driver +versions used different values, eventually the custom +<constant>BTTV_VBISIZE</constant> ioctl was added to query the +correct values.</para></footnote></para></entry> +		</row> +		<row> +		  <entry>flags</entry> +		  <entry>0</entry> +		</row> +	      </tbody> +	    </tgroup> +	</informaltable></para> + +      <para>Undocumented in the V4L specification, in Linux 2.3 the +<constant>VIDIOCGVBIFMT</constant> and +<constant>VIDIOCSVBIFMT</constant> ioctls using struct +<structname>vbi_format</structname> were added to determine the VBI +image parameters. These ioctls are only partially compatible with the +V4L2 VBI interface specified in <xref linkend="raw-vbi" />.</para> + +      <para>An <structfield>offset</structfield> field does not +exist, <structfield>sample_format</structfield> is supposed to be +<constant>VIDEO_PALETTE_RAW</constant>, equivalent to +<constant>V4L2_PIX_FMT_GREY</constant>. The remaining fields are +probably equivalent to &v4l2-vbi-format;.</para> + +      <para>Apparently only the Zoran (ZR 36120) driver implements +these ioctls. The semantics differ from those specified for V4L2 in two +ways. The parameters are reset on &func-open; and +<constant>VIDIOCSVBIFMT</constant> always returns an &EINVAL; if the +parameters are invalid.</para> +    </section> + +    <section> +      <title>Miscellaneous</title> + +      <para>V4L2 has no equivalent of the +<constant>VIDIOCGUNIT</constant> ioctl. Applications can find the VBI +device associated with a video capture device (or vice versa) by +reopening the device and requesting VBI data. For details see +<xref linkend="open" />.</para> + +      <para>No replacement exists for <constant>VIDIOCKEY</constant>, +and the V4L functions for microcode programming. A new interface for +MPEG compression and playback devices is documented in <xref +	  linkend="extended-controls" />.</para> +    </section> + +  </section> + +  <section id="hist-v4l2"> +    <title>Changes of the V4L2 API</title> + +    <para>Soon after the V4L API was added to the kernel it was +criticised as too inflexible. In August 1998 Bill Dirks proposed a +number of improvements and began to work on documentation, example +drivers and applications. With the help of other volunteers this +eventually became the V4L2 API, not just an extension but a +replacement for the V4L API. However it took another four years and +two stable kernel releases until the new API was finally accepted for +inclusion into the kernel in its present form.</para> + +    <section> +      <title>Early Versions</title> +      <para>1998-08-20: First version.</para> + +      <para>1998-08-27: The &func-select; function was introduced.</para> + +      <para>1998-09-10: New video standard interface.</para> + +      <para>1998-09-18: The <constant>VIDIOC_NONCAP</constant> ioctl +was replaced by the otherwise meaningless <constant>O_TRUNC</constant> +&func-open; flag, and the aliases <constant>O_NONCAP</constant> and +<constant>O_NOIO</constant> were defined. Applications can set this +flag if they intend to access controls only, as opposed to capture +applications which need exclusive access. The +<constant>VIDEO_STD_XXX</constant> identifiers are now ordinals +instead of flags, and the <function>video_std_construct()</function> +helper function takes id and transmission arguments.</para> + +      <para>1998-09-28: Revamped video standard. Made video controls +individually enumerable.</para> + +      <para>1998-10-02: The <structfield>id</structfield> field was +removed from struct <structname>video_standard</structname> and the +color subcarrier fields were renamed. The &VIDIOC-QUERYSTD; ioctl was +renamed to &VIDIOC-ENUMSTD;, &VIDIOC-G-INPUT; to &VIDIOC-ENUMINPUT;. A +first draft of the Codec API was released.</para> + +      <para>1998-11-08: Many minor changes. Most symbols have been +renamed. Some material changes to &v4l2-capability;.</para> + +      <para>1998-11-12: The read/write directon of some ioctls was misdefined.</para> + +      <para>1998-11-14: <constant>V4L2_PIX_FMT_RGB24</constant> +changed to <constant>V4L2_PIX_FMT_BGR24</constant>, and +<constant>V4L2_PIX_FMT_RGB32</constant> changed to +<constant>V4L2_PIX_FMT_BGR32</constant>. Audio controls are now +accessible with the &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls under +names starting with <constant>V4L2_CID_AUDIO</constant>. The +<constant>V4L2_MAJOR</constant> define was removed from +<filename>videodev.h</filename> since it was only used once in the +<filename>videodev</filename> kernel module. The +<constant>YUV422</constant> and <constant>YUV411</constant> planar +image formats were added.</para> + +      <para>1998-11-28: A few ioctl symbols changed. Interfaces for codecs and +video output devices were added.</para> + +      <para>1999-01-14: A raw VBI capture interface was added.</para> + +      <para>1999-01-19: The <constant>VIDIOC_NEXTBUF</constant> ioctl +      was removed.</para> +    </section> + +    <section> +      <title>V4L2 Version 0.16 1999-01-31</title> +      <para>1999-01-27: There is now one QBUF ioctl, VIDIOC_QWBUF and VIDIOC_QRBUF +are gone. VIDIOC_QBUF takes a v4l2_buffer as a parameter. Added +digital zoom (cropping) controls.</para> +    </section> + +    <!-- Where's 0.17? mhs couldn't find that videodev.h, perhaps Bill +	 forgot to bump the version number or never released it. --> + +    <section> +      <title>V4L2 Version 0.18 1999-03-16</title> +      <para>Added a v4l to V4L2 ioctl compatibility layer to +videodev.c. Driver writers, this changes how you implement your ioctl +handler. See the Driver Writer's Guide. Added some more control id +codes.</para> +    </section> + +    <section> +      <title>V4L2 Version 0.19 1999-06-05</title> +      <para>1999-03-18: Fill in the category and catname fields of +v4l2_queryctrl objects before passing them to the driver. Required a +minor change to the VIDIOC_QUERYCTRL handlers in the sample +drivers.</para> +      <para>1999-03-31: Better compatibility for v4l memory capture +ioctls. Requires changes to drivers to fully support new compatibility +features, see Driver Writer's Guide and v4l2cap.c. Added new control +IDs: V4L2_CID_HFLIP, _VFLIP. Changed V4L2_PIX_FMT_YUV422P to _YUV422P, +and _YUV411P to _YUV411P.</para> +      <para>1999-04-04: Added a few more control IDs.</para> +      <para>1999-04-07: Added the button control type.</para> +      <para>1999-05-02: Fixed a typo in videodev.h, and added the +V4L2_CTRL_FLAG_GRAYED (later V4L2_CTRL_FLAG_GRABBED) flag.</para> +      <para>1999-05-20: Definition of VIDIOC_G_CTRL was wrong causing +a malfunction of this ioctl.</para> +      <para>1999-06-05: Changed the value of +V4L2_CID_WHITENESS.</para> +    </section> + +    <section> +      <title>V4L2 Version 0.20 (1999-09-10)</title> + +      <para>Version 0.20 introduced a number of changes which were +<emphasis>not backward compatible</emphasis> with 0.19 and earlier +versions. Purpose of these changes was to simplify the API, while +making it more extensible and following common Linux driver API +conventions.</para> + +      <orderedlist> +	<listitem> +	  <para>Some typos in <constant>V4L2_FMT_FLAG</constant> +symbols were fixed. &v4l2-clip; was changed for compatibility with +v4l. (1999-08-30)</para> +	</listitem> + +	<listitem> +	  <para><constant>V4L2_TUNER_SUB_LANG1</constant> was added. +(1999-09-05)</para> +	</listitem> + +	<listitem> +	  <para>All ioctl() commands that used an integer argument now +take a pointer to an integer. Where it makes sense, ioctls will return +the actual new value in the integer pointed to by the argument, a +common convention in the V4L2 API. The affected ioctls are: +VIDIOC_PREVIEW, VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ, +VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT. For example +<programlisting> +err = ioctl (fd, VIDIOC_XXX, V4L2_XXX); +</programlisting> becomes <programlisting> +int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &a); +</programlisting> +	  </para> +	</listitem> + +	<listitem> +	  <para>All the different get- and set-format commands were +swept into one &VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctl taking a union +and a type field selecting the union member as parameter. Purpose is to +simplify the API by eliminating several ioctls and to allow new and +driver private data streams without adding new ioctls.</para> + +	  <para>This change obsoletes the following ioctls: +<constant>VIDIOC_S_INFMT</constant>, +<constant>VIDIOC_G_INFMT</constant>, +<constant>VIDIOC_S_OUTFMT</constant>, +<constant>VIDIOC_G_OUTFMT</constant>, +<constant>VIDIOC_S_VBIFMT</constant> and +<constant>VIDIOC_G_VBIFMT</constant>. The image format structure +<structname>v4l2_format</structname> was renamed to &v4l2-pix-format;, +while &v4l2-format; is now the envelopping structure for all format +negotiations.</para> +	</listitem> + +	<listitem> +	  <para>Similar to the changes above, the +<constant>VIDIOC_G_PARM</constant> and +<constant>VIDIOC_S_PARM</constant> ioctls were merged with +<constant>VIDIOC_G_OUTPARM</constant> and +<constant>VIDIOC_S_OUTPARM</constant>. A +<structfield>type</structfield> field in the new &v4l2-streamparm; +selects the respective union member.</para> + +	  <para>This change obsoletes the +<constant>VIDIOC_G_OUTPARM</constant> and +<constant>VIDIOC_S_OUTPARM</constant> ioctls.</para> +	</listitem> + +	<listitem> +	  <para>Control enumeration was simplified, and two new +control flags were introduced and one dropped. The +<structfield>catname</structfield> field was replaced by a +<structfield>group</structfield> field.</para> + +	  <para>Drivers can now flag unsupported and temporarily +unavailable controls with <constant>V4L2_CTRL_FLAG_DISABLED</constant> +and <constant>V4L2_CTRL_FLAG_GRABBED</constant> respectively. The +<structfield>group</structfield> name indicates a possibly narrower +classification than the <structfield>category</structfield>. In other +words, there may be multiple groups within a category. Controls within +a group would typically be drawn within a group box. Controls in +different categories might have a greater separation, or may even +appear in separate windows.</para> +	</listitem> + +	<listitem> +	  <para>The &v4l2-buffer; <structfield>timestamp</structfield> +was changed to a 64 bit integer, containing the sampling or output +time of the frame in nanoseconds. Additionally timestamps will be in +absolute system time, not starting from zero at the beginning of a +stream. The data type name for timestamps is stamp_t, defined as a +signed 64-bit integer. Output devices should not send a buffer out +until the time in the timestamp field has arrived. I would like to +follow SGI's lead, and adopt a multimedia timestamping system like +their UST (Unadjusted System Time). See +http://web.archive.org/web/*/http://reality.sgi.com +/cpirazzi_engr/lg/time/intro.html. +UST uses timestamps that are 64-bit signed integers +(not struct timeval's) and given in nanosecond units. The UST clock +starts at zero when the system is booted and runs continuously and +uniformly. It takes a little over 292 years for UST to overflow. There +is no way to set the UST clock. The regular Linux time-of-day clock +can be changed periodically, which would cause errors if it were being +used for timestamping a multimedia stream. A real UST style clock will +require some support in the kernel that is not there yet. But in +anticipation, I will change the timestamp field to a 64-bit integer, +and I will change the v4l2_masterclock_gettime() function (used only +by drivers) to return a 64-bit integer.</para> +	</listitem> + +	<listitem> +	  <para>A <structfield>sequence</structfield> field was added +to &v4l2-buffer;. The <structfield>sequence</structfield> field counts +captured frames, it is ignored by output devices. When a capture +driver drops a frame, the sequence number of that frame is +skipped.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 Version 0.20 incremental changes</title> +      <!-- Version number didn't change anymore, reason unknown. --> + +      <para>1999-12-23: In &v4l2-vbi-format; the +<structfield>reserved1</structfield> field became +<structfield>offset</structfield>. Previously drivers were required to +clear the <structfield>reserved1</structfield> field.</para> + +      <para>2000-01-13: The +      <constant>V4L2_FMT_FLAG_NOT_INTERLACED</constant> flag was added.</para> + +      <para>2000-07-31: The <filename>linux/poll.h</filename> header +is now included by <filename>videodev.h</filename> for compatibility +with the original <filename>videodev.h</filename> file.</para> + +      <para>2000-11-20: <constant>V4L2_TYPE_VBI_OUTPUT</constant> and +<constant>V4L2_PIX_FMT_Y41P</constant> were added.</para> + +      <para>2000-11-25: <constant>V4L2_TYPE_VBI_INPUT</constant> was +added.</para> + +      <para>2000-12-04: A couple typos in symbol names were fixed.</para> + +      <para>2001-01-18: To avoid namespace conflicts the +<constant>fourcc</constant> macro defined in the +<filename>videodev.h</filename> header file was renamed to +<constant>v4l2_fourcc</constant>.</para> + +      <para>2001-01-25: A possible driver-level compatibility problem +between the <filename>videodev.h</filename> file in Linux 2.4.0 and +the <filename>videodev.h</filename> file included in the +<filename>videodevX</filename> patch was fixed. Users of an earlier +version of <filename>videodevX</filename> on Linux 2.4.0 should +recompile their V4L and V4L2 drivers.</para> + +      <para>2001-01-26: A possible kernel-level incompatibility +between the <filename>videodev.h</filename> file in the +<filename>videodevX</filename> patch and the +<filename>videodev.h</filename> file in Linux 2.2.x with devfs patches +applied was fixed.</para> + +      <para>2001-03-02: Certain V4L ioctls which pass data in both +direction although they are defined with read-only parameter, did not +work correctly through the backward compatibility layer. +[Solution?]</para> + +      <para>2001-04-13: Big endian 16-bit RGB formats were added.</para> + +      <para>2001-09-17: New YUV formats and the &VIDIOC-G-FREQUENCY; and +&VIDIOC-S-FREQUENCY; ioctls were added. (The old +<constant>VIDIOC_G_FREQ</constant> and +<constant>VIDIOC_S_FREQ</constant> ioctls did not take multiple tuners +into account.)</para> + +      <para>2000-09-18: <constant>V4L2_BUF_TYPE_VBI</constant> was +added. This may <emphasis>break compatibility</emphasis> as the +&VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctls may fail now if the struct +<structname>v4l2_fmt</structname> <structfield>type</structfield> +field does not contain <constant>V4L2_BUF_TYPE_VBI</constant>. In the +documentation of the &v4l2-vbi-format; +<structfield>offset</structfield> field the ambiguous phrase "rising +edge" was changed to "leading edge".</para> +    </section> + +    <section> +      <title>V4L2 Version 0.20 2000-11-23</title> + +      <para>A number of changes were made to the raw VBI +interface.</para> + +      <orderedlist> +	<listitem> +	  <para>Figures clarifying the line numbering scheme were +added to the V4L2 API specification. The +<structfield>start</structfield>[0] and +<structfield>start</structfield>[1] fields no longer count line +numbers beginning at zero. Rationale: a) The previous definition was +unclear. b) The <structfield>start</structfield>[] values are ordinal +numbers. c) There is no point in inventing a new line numbering +scheme. We now use line number as defined by ITU-R, period. +Compatibility: Add one to the start values. Applications depending on +the previous semantics may not function correctly.</para> +	</listitem> + +	<listitem> +	  <para>The restriction "count[0] > 0 and count[1] > 0" +has been relaxed  to "(count[0] + count[1]) > 0". Rationale: +Drivers may allocate resources at scan line granularity and some data +services are transmitted only on the first field. The comment that +both <structfield>count</structfield> values will usually be equal is +misleading and pointless and has been removed. This change +<emphasis>breaks compatibility</emphasis> with earlier versions: +Drivers may return EINVAL, applications may not function +correctly.</para> +	</listitem> + +	<listitem> +	  <para>Drivers are again permitted to return negative +(unknown) start values as proposed earlier. Why this feature was +dropped is unclear. This change may <emphasis>break +compatibility</emphasis> with applications depending on the start +values being positive. The use of <constant>EBUSY</constant> and +<constant>EINVAL</constant> error codes with the &VIDIOC-S-FMT; ioctl +was clarified. The &EBUSY; was finally documented, and the +<structfield>reserved2</structfield> field which was previously +mentioned only in the <filename>videodev.h</filename> header +file.</para> +	</listitem> + +	<listitem> +	  <para>New buffer types +<constant>V4L2_TYPE_VBI_INPUT</constant> and +<constant>V4L2_TYPE_VBI_OUTPUT</constant> were added. The former is an +alias for the old <constant>V4L2_TYPE_VBI</constant>, the latter was +missing in the <filename>videodev.h</filename> file.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 Version 0.20 2002-07-25</title> +      <para>Added sliced VBI interface proposal.</para> +    </section> + +    <section> +      <title>V4L2 in Linux 2.5.46, 2002-10</title> + +      <para>Around October-November 2002, prior to an announced +feature freeze of Linux 2.5, the API was revised, drawing from +experience with V4L2 0.20. This unnamed version was finally merged +into Linux 2.5.46.</para> + +      <orderedlist> +	<listitem> +	  <para>As specified in <xref linkend="related" />, drivers +must make related device functions available under all minor device +numbers.</para> +	</listitem> + +	<listitem> +	  <para>The &func-open; function requires access mode +<constant>O_RDWR</constant> regardless of the device type. All V4L2 +drivers exchanging data with applications must support the +<constant>O_NONBLOCK</constant> flag. The <constant>O_NOIO</constant> +flag, a V4L2 symbol which aliased the meaningless +<constant>O_TRUNC</constant> to indicate accesses without data +exchange (panel applications) was dropped. Drivers must stay in "panel +mode" until the application attempts to initiate a data exchange, see +<xref linkend="open" />.</para> +	</listitem> + +	<listitem> +	  <para>The &v4l2-capability; changed dramatically. Note that +also the size of the structure changed, which is encoded in the ioctl +request code, thus older V4L2 devices will respond with an &EINVAL; to +the new &VIDIOC-QUERYCAP; ioctl.</para> + +	  <para>There are new fields to identify the driver, a new RDS +device function <constant>V4L2_CAP_RDS_CAPTURE</constant>, the +<constant>V4L2_CAP_AUDIO</constant> flag indicates if the device has +any audio connectors, another I/O capability +<constant>V4L2_CAP_ASYNCIO</constant> can be flagged. In response to +these changes the <structfield>type</structfield> field became a bit +set and was merged into the <structfield>flags</structfield> field. +<constant>V4L2_FLAG_TUNER</constant> was renamed to +<constant>V4L2_CAP_TUNER</constant>, +<constant>V4L2_CAP_VIDEO_OVERLAY</constant> replaced +<constant>V4L2_FLAG_PREVIEW</constant> and +<constant>V4L2_CAP_VBI_CAPTURE</constant> and +<constant>V4L2_CAP_VBI_OUTPUT</constant> replaced +<constant>V4L2_FLAG_DATA_SERVICE</constant>. +<constant>V4L2_FLAG_READ</constant> and +<constant>V4L2_FLAG_WRITE</constant> were merged into +<constant>V4L2_CAP_READWRITE</constant>.</para> + +	  <para>The redundant fields +<structfield>inputs</structfield>, <structfield>outputs</structfield> +and <structfield>audios</structfield> were removed. These properties +can be determined as described in <xref linkend="video" /> and <xref +linkend="audio" />.</para> + +	  <para>The somewhat volatile and therefore barely useful +fields <structfield>maxwidth</structfield>, +<structfield>maxheight</structfield>, +<structfield>minwidth</structfield>, +<structfield>minheight</structfield>, +<structfield>maxframerate</structfield> were removed. This information +is available as described in <xref linkend="format" /> and +<xref linkend="standard" />.</para> + +	  <para><constant>V4L2_FLAG_SELECT</constant> was removed. We +believe the select() function is important enough to require support +of it in all V4L2 drivers exchanging data with applications. The +redundant <constant>V4L2_FLAG_MONOCHROME</constant> flag was removed, +this information is available as described in <xref +	      linkend="format" />.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-input; the +<structfield>assoc_audio</structfield> field and the +<structfield>capability</structfield> field and its only flag +<constant>V4L2_INPUT_CAP_AUDIO</constant> was replaced by the new +<structfield>audioset</structfield> field. Instead of linking one +video input to one audio input this field reports all audio inputs +this video input combines with.</para> + +	  <para>New fields are <structfield>tuner</structfield> +(reversing the former link from tuners to video inputs), +<structfield>std</structfield> and +<structfield>status</structfield>.</para> + +	  <para>Accordingly &v4l2-output; lost its +<structfield>capability</structfield> and +<structfield>assoc_audio</structfield> fields. +<structfield>audioset</structfield>, +<structfield>modulator</structfield> and +<structfield>std</structfield> where added instead.</para> +	</listitem> + +	<listitem> +	  <para>The &v4l2-audio; field +<structfield>audio</structfield> was renamed to +<structfield>index</structfield>, for consistency with other +structures. A new capability flag +<constant>V4L2_AUDCAP_STEREO</constant> was added to indicated if the +audio input in question supports stereo sound. +<constant>V4L2_AUDCAP_EFFECTS</constant> and the corresponding +<constant>V4L2_AUDMODE</constant> flags where removed. This can be +easily implemented using controls. (However the same applies to AVL +which is still there.)</para> + +	  <para>Again for consistency the &v4l2-audioout; field +<structfield>audio</structfield> was renamed to +<structfield>index</structfield>.</para> +	</listitem> + +	<listitem> +	  <para>The &v4l2-tuner; +<structfield>input</structfield> field was replaced by an +<structfield>index</structfield> field, permitting devices with +multiple tuners. The link between video inputs and tuners is now +reversed, inputs point to their tuner. The +<structfield>std</structfield> substructure became a +simple set (more about this below) and moved into &v4l2-input;. A +<structfield>type</structfield> field was added.</para> + +	  <para>Accordingly in &v4l2-modulator; the +<structfield>output</structfield> was replaced by an +<structfield>index</structfield> field.</para> + +	  <para>In &v4l2-frequency; the +<structfield>port</structfield> field was replaced by a +<structfield>tuner</structfield> field containing the respective tuner +or modulator index number. A tuner <structfield>type</structfield> +field was added and the <structfield>reserved</structfield> field +became larger for future extensions (satellite tuners in +particular).</para> +	</listitem> + +	<listitem> +	  <para>The idea of completely transparent video standards was +dropped. Experience showed that applications must be able to work with +video standards beyond presenting the user a menu. Instead of +enumerating supported standards with an ioctl applications can now +refer to standards by &v4l2-std-id; and symbols defined in the +<filename>videodev2.h</filename> header file. For details see <xref +	      linkend="standard" />. The &VIDIOC-G-STD; and +&VIDIOC-S-STD; now take a pointer to this type as argument. +&VIDIOC-QUERYSTD; was added to autodetect the received standard, if +the hardware has this capability. In &v4l2-standard; an +<structfield>index</structfield> field was added for &VIDIOC-ENUMSTD;. +A &v4l2-std-id; field named <structfield>id</structfield> was added as +machine readable identifier, also replacing the +<structfield>transmission</structfield> field. The misleading +<structfield>framerate</structfield> field was renamed +to <structfield>frameperiod</structfield>. The now obsolete +<structfield>colorstandard</structfield> information, originally +needed to distguish between variations of standards, were +removed.</para> + +	  <para>Struct <structname>v4l2_enumstd</structname> ceased to +be. &VIDIOC-ENUMSTD; now takes a pointer to a &v4l2-standard; +directly. The information which standards are supported by a +particular video input or output moved into &v4l2-input; and +&v4l2-output; fields named <structfield>std</structfield>, +respectively.</para> +	</listitem> + +	<listitem> +	  <para>The &v4l2-queryctrl; fields +<structfield>category</structfield> and +<structfield>group</structfield> did not catch on and/or were not +implemented as expected and therefore removed.</para> +	</listitem> + +	<listitem> +	  <para>The &VIDIOC-TRY-FMT; ioctl was added to negotiate data +formats as with &VIDIOC-S-FMT;, but without the overhead of +programming the hardware and regardless of I/O in progress.</para> + +	  <para>In &v4l2-format; the <structfield>fmt</structfield> +union was extended to contain &v4l2-window;. All image format +negotiations are now possible with <constant>VIDIOC_G_FMT</constant>, +<constant>VIDIOC_S_FMT</constant> and +<constant>VIDIOC_TRY_FMT</constant>; ioctl. The +<constant>VIDIOC_G_WIN</constant> and +<constant>VIDIOC_S_WIN</constant> ioctls to prepare for a video +overlay were removed. The <structfield>type</structfield> field +changed to type &v4l2-buf-type; and the buffer type names changed as +follows.<informaltable> +	      <tgroup cols="2"> +		<thead> +		  <row> +		    <entry>Old defines</entry> +		    <entry>&v4l2-buf-type;</entry> +		  </row> +		</thead> +		<tbody valign="top"> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_CAPTURE</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_CODECIN</constant></entry> +		    <entry>Omitted for now</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_CODECOUT</constant></entry> +		    <entry>Omitted for now</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_EFFECTSIN</constant></entry> +		    <entry>Omitted for now</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_EFFECTSIN2</constant></entry> +		    <entry>Omitted for now</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_EFFECTSOUT</constant></entry> +		    <entry>Omitted for now</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_VIDEOOUT</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_VBI_CAPTURE</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant></entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_BUF_TYPE_PRIVATE_BASE</constant></entry> +		    <entry><constant>V4L2_BUF_TYPE_PRIVATE</constant> (but this is deprecated)</entry> +		  </row> +		</tbody> +	      </tgroup> +	    </informaltable></para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-fmtdesc; a &v4l2-buf-type; field named +<structfield>type</structfield> was added as in &v4l2-format;. The +<constant>VIDIOC_ENUM_FBUFFMT</constant> ioctl is no longer needed and +was removed. These calls can be replaced by &VIDIOC-ENUM-FMT; with +type <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-pix-format; the +<structfield>depth</structfield> field was removed, assuming +applications which recognize the format by its four-character-code +already know the color depth, and others do not care about it. The +same rationale lead to the removal of the +<constant>V4L2_FMT_FLAG_COMPRESSED</constant> flag. The +<constant>V4L2_FMT_FLAG_SWCONVECOMPRESSED</constant> flag was removed +because drivers are not supposed to convert images in kernel space. A +user library of conversion functions should be provided instead. The +<constant>V4L2_FMT_FLAG_BYTESPERLINE</constant> flag was redundant. +Applications can set the <structfield>bytesperline</structfield> field +to zero to get a reasonable default. Since the remaining flags were +replaced as well, the <structfield>flags</structfield> field itself +was removed.</para> +	  <para>The interlace flags were replaced by a &v4l2-field; +value in a newly added <structfield>field</structfield> +field.<informaltable> +	      <tgroup cols="2"> +		<thead> +		  <row> +		    <entry>Old flag</entry> +		    <entry>&v4l2-field;</entry> +		  </row> +		</thead> +		<tbody valign="top"> +		  <row> +		    <entry><constant>V4L2_FMT_FLAG_NOT_INTERLACED</constant></entry> +		    <entry>?</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_FMT_FLAG_INTERLACED</constant> += <constant>V4L2_FMT_FLAG_COMBINED</constant></entry> +		    <entry><constant>V4L2_FIELD_INTERLACED</constant></entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_FMT_FLAG_TOPFIELD</constant> += <constant>V4L2_FMT_FLAG_ODDFIELD</constant></entry> +		    <entry><constant>V4L2_FIELD_TOP</constant></entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_FMT_FLAG_BOTFIELD</constant> += <constant>V4L2_FMT_FLAG_EVENFIELD</constant></entry> +		    <entry><constant>V4L2_FIELD_BOTTOM</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_FIELD_SEQ_TB</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_FIELD_SEQ_BT</constant></entry> +		  </row> +		  <row> +		    <entry><constant>-</constant></entry> +		    <entry><constant>V4L2_FIELD_ALTERNATE</constant></entry> +		  </row> +		</tbody> +	      </tgroup> +	    </informaltable></para> + +	  <para>The color space flags were replaced by a +&v4l2-colorspace; value in a newly added +<structfield>colorspace</structfield> field, where one of +<constant>V4L2_COLORSPACE_SMPTE170M</constant>, +<constant>V4L2_COLORSPACE_BT878</constant>, +<constant>V4L2_COLORSPACE_470_SYSTEM_M</constant> or +<constant>V4L2_COLORSPACE_470_SYSTEM_BG</constant> replaces +<constant>V4L2_FMT_CS_601YUV</constant>.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-requestbuffers; the +<structfield>type</structfield> field was properly defined as +&v4l2-buf-type;. Buffer types changed as mentioned above. A new +<structfield>memory</structfield> field of type &v4l2-memory; was +added to distinguish between I/O methods using buffers allocated +by the driver or the application. See <xref linkend="io" /> for +details.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-buffer; the <structfield>type</structfield> +field was properly defined as &v4l2-buf-type;. Buffer types changed as +mentioned above. A <structfield>field</structfield> field of type +&v4l2-field; was added to indicate if a buffer contains a top or +bottom field. The old field flags were removed. Since no unadjusted +system time clock was added to the kernel as planned, the +<structfield>timestamp</structfield> field changed back from type +stamp_t, an unsigned 64 bit integer expressing the sample time in +nanoseconds, to struct <structname>timeval</structname>. With the +addition of a second memory mapping method the +<structfield>offset</structfield> field moved into union +<structfield>m</structfield>, and a new +<structfield>memory</structfield> field of type &v4l2-memory; was +added to distinguish between I/O methods. See <xref linkend="io" /> +for details.</para> + +	  <para>The <constant>V4L2_BUF_REQ_CONTIG</constant> +flag was used by the V4L compatibility layer, after changes to this +code it was no longer needed. The +<constant>V4L2_BUF_ATTR_DEVICEMEM</constant> flag would indicate if +the buffer was indeed allocated in device memory rather than DMA-able +system memory. It was barely useful and so was removed.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-framebuffer; the +<structfield>base[3]</structfield> array anticipating double- and +triple-buffering in off-screen video memory, however without defining +a synchronization mechanism, was replaced by a single pointer. The +<constant>V4L2_FBUF_CAP_SCALEUP</constant> and +<constant>V4L2_FBUF_CAP_SCALEDOWN</constant> flags were removed. +Applications can determine this capability more accurately using the +new cropping and scaling interface. The +<constant>V4L2_FBUF_CAP_CLIPPING</constant> flag was replaced by +<constant>V4L2_FBUF_CAP_LIST_CLIPPING</constant> and +<constant>V4L2_FBUF_CAP_BITMAP_CLIPPING</constant>.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-clip; the <structfield>x</structfield>, +<structfield>y</structfield>, <structfield>width</structfield> and +<structfield>height</structfield> field moved into a +<structfield>c</structfield> substructure of type &v4l2-rect;. The +<structfield>x</structfield> and <structfield>y</structfield> fields +were renamed to <structfield>left</structfield> and +<structfield>top</structfield>, &ie; offsets to a context dependent +origin.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-window; the <structfield>x</structfield>, +<structfield>y</structfield>, <structfield>width</structfield> and +<structfield>height</structfield> field moved into a +<structfield>w</structfield> substructure as above. A +<structfield>field</structfield> field of type %v4l2-field; was added +to distinguish between field and frame (interlaced) overlay.</para> +	</listitem> + +	<listitem> +	  <para>The digital zoom interface, including struct +<structname>v4l2_zoomcap</structname>, struct +<structname>v4l2_zoom</structname>, +<constant>V4L2_ZOOM_NONCAP</constant> and +<constant>V4L2_ZOOM_WHILESTREAMING</constant> was replaced by a new +cropping and scaling interface. The previously unused struct +<structname>v4l2_cropcap</structname> and +<structname>v4l2_crop</structname> where redefined for this purpose. +See <xref linkend="crop" /> for details.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-vbi-format; the +<structfield>SAMPLE_FORMAT</structfield> field now contains a +four-character-code as used to identify video image formats and +<constant>V4L2_PIX_FMT_GREY</constant> replaces the +<constant>V4L2_VBI_SF_UBYTE</constant> define. The +<structfield>reserved</structfield> field was extended.</para> +	</listitem> + +	<listitem> +	  <para>In &v4l2-captureparm; the type of the +<structfield>timeperframe</structfield> field changed from unsigned +long to &v4l2-fract;. This allows the accurate expression of multiples +of the NTSC-M frame rate 30000 / 1001. A new field +<structfield>readbuffers</structfield> was added to control the driver +behaviour in read I/O mode.</para> + +	  <para>Similar changes were made to &v4l2-outputparm;.</para> +	</listitem> + +	<listitem> +	  <para>The struct <structname>v4l2_performance</structname> +and <constant>VIDIOC_G_PERF</constant> ioctl were dropped. Except when +using the <link linkend="rw">read/write I/O method</link>, which is +limited anyway, this information is already available to +applications.</para> +	</listitem> + +	<listitem> +	  <para>The example transformation from RGB to YCbCr color +space in the old V4L2 documentation was inaccurate, this has been +corrected in <xref linkend="pixfmt" />.<!-- 0.5670G should be +0.587, and 127/112 != 255/224 --></para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 2003-06-19</title> + +      <orderedlist> +	<listitem> +	  <para>A new capability flag +<constant>V4L2_CAP_RADIO</constant> was added for radio devices. Prior +to this change radio devices would identify solely by having exactly one +tuner whose type field reads <constant>V4L2_TUNER_RADIO</constant>.</para> +	</listitem> + +	<listitem> +	  <para>An optional driver access priority mechanism was +added, see <xref linkend="app-pri" /> for details.</para> +	</listitem> + +	<listitem> +	  <para>The audio input and output interface was found to be +incomplete.</para> +	  <para>Previously the &VIDIOC-G-AUDIO; +ioctl would enumerate the available audio inputs. An ioctl to +determine the current audio input, if more than one combines with the +current video input, did not exist. So +<constant>VIDIOC_G_AUDIO</constant> was renamed to +<constant>VIDIOC_G_AUDIO_OLD</constant>, this ioctl was removed on +Kernel 2.6.39. The &VIDIOC-ENUMAUDIO; ioctl was added to enumerate +audio inputs, while &VIDIOC-G-AUDIO; now reports the current audio +input.</para> +	  <para>The same changes were made to &VIDIOC-G-AUDOUT; and +&VIDIOC-ENUMAUDOUT;.</para> +	  <para>Until further the "videodev" module will automatically +translate between the old and new ioctls, but drivers and applications +must be updated to successfully compile again.</para> +	</listitem> + +	<listitem> +	  <para>The &VIDIOC-OVERLAY; ioctl was incorrectly defined with +write-read parameter. It was changed to write-only, while the write-read +version was renamed to <constant>VIDIOC_OVERLAY_OLD</constant>. The old +ioctl was removed on Kernel 2.6.39. Until further the "videodev" +kernel module will automatically translate to the new version, so drivers +must be recompiled, but not applications.</para> +	</listitem> + +	<listitem> +	  <para><xref linkend="overlay" /> incorrectly stated that +clipping rectangles define regions where the video can be seen. +Correct is that clipping rectangles define regions where +<emphasis>no</emphasis> video shall be displayed and so the graphics +surface can be seen.</para> +	</listitem> + +	<listitem> +	  <para>The &VIDIOC-S-PARM; and &VIDIOC-S-CTRL; ioctls were +defined with write-only parameter, inconsistent with other ioctls +modifying their argument. They were changed to write-read, while a +<constant>_OLD</constant> suffix was added to the write-only versions. +The old ioctls were removed on Kernel 2.6.39. Drivers and +applications assuming a constant parameter need an update.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 2003-11-05</title> +      <orderedlist> +	<listitem> +	  <para>In <xref linkend="pixfmt-rgb" /> the following pixel +formats were incorrectly transferred from Bill Dirks' V4L2 +specification. Descriptions below refer to bytes in memory, in +ascending address order.<informaltable> +	      <tgroup cols="3"> +		<thead> +		  <row> +		    <entry>Symbol</entry> +		    <entry>In this document prior to revision +0.5</entry> +		    <entry>Corrected</entry> +		  </row> +		</thead> +		<tbody valign="top"> +		  <row> +		    <entry><constant>V4L2_PIX_FMT_RGB24</constant></entry> +		    <entry>B, G, R</entry> +		    <entry>R, G, B</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> +		    <entry>R, G, B</entry> +		    <entry>B, G, R</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_PIX_FMT_RGB32</constant></entry> +		    <entry>B, G, R, X</entry> +		    <entry>R, G, B, X</entry> +		  </row> +		  <row> +		    <entry><constant>V4L2_PIX_FMT_BGR32</constant></entry> +		    <entry>R, G, B, X</entry> +		    <entry>B, G, R, X</entry> +		  </row> +		</tbody> +	      </tgroup> +	    </informaltable> The +<constant>V4L2_PIX_FMT_BGR24</constant> example was always +correct.</para> +	  <para>In <xref linkend="v4l-image-properties" /> the mapping +of the V4L <constant>VIDEO_PALETTE_RGB24</constant> and +<constant>VIDEO_PALETTE_RGB32</constant> formats to V4L2 pixel formats +was accordingly corrected.</para> +	</listitem> + +	<listitem> +	  <para>Unrelated to the fixes above, drivers may still +interpret some V4L2 RGB pixel formats differently. These issues have +yet to be addressed, for details see <xref +	      linkend="pixfmt-rgb" />.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.6, 2004-05-09</title> +      <orderedlist> +	<listitem> +	  <para>The &VIDIOC-CROPCAP; ioctl was incorrectly defined +with read-only parameter. It is now defined as write-read ioctl, while +the read-only version was renamed to +<constant>VIDIOC_CROPCAP_OLD</constant>. The old ioctl was removed +on Kernel 2.6.39.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.8</title> +      <orderedlist> +	<listitem> +	  <para>A new field <structfield>input</structfield> (former +<structfield>reserved[0]</structfield>) was added to the &v4l2-buffer; +structure. Purpose of this field is to alternate between video inputs +(⪚ cameras) in step with the video capturing process. This function +must be enabled with the new <constant>V4L2_BUF_FLAG_INPUT</constant> +flag. The <structfield>flags</structfield> field is no longer +read-only.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 spec erratum 2004-08-01</title> + +      <orderedlist> +	<listitem> +	  <para>The return value of the +<xref linkend="func-open" /> function was incorrectly documented.</para> +	</listitem> + +	<listitem> +	  <para>Audio output ioctls end in -AUDOUT, not -AUDIOOUT.</para> +	</listitem> + +	<listitem> +	  <para>In the Current Audio Input example the +<constant>VIDIOC_G_AUDIO</constant> ioctl took the wrong +argument.</para> +	</listitem> + +	<listitem> +	  <para>The documentation of the &VIDIOC-QBUF; and +&VIDIOC-DQBUF; ioctls did not mention the &v4l2-buffer; +<structfield>memory</structfield> field. It was also missing from +examples. Also on the <constant>VIDIOC_DQBUF</constant> page the &EIO; +was not documented.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.14</title> +      <orderedlist> +	<listitem> +	  <para>A new sliced VBI interface was added. It is documented +in <xref linkend="sliced" /> and replaces the interface first +proposed in V4L2 specification 0.8.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.15</title> +      <orderedlist> +	<listitem> +	  <para>The &VIDIOC-LOG-STATUS; ioctl was added.</para> +	</listitem> + +	<listitem> +	  <para>New video standards +<constant>V4L2_STD_NTSC_443</constant>, +<constant>V4L2_STD_SECAM_LC</constant>, +<constant>V4L2_STD_SECAM_DK</constant> (a set of SECAM D, K and K1), +and <constant>V4L2_STD_ATSC</constant> (a set of +<constant>V4L2_STD_ATSC_8_VSB</constant> and +<constant>V4L2_STD_ATSC_16_VSB</constant>) were defined. Note the +<constant>V4L2_STD_525_60</constant> set now includes +<constant>V4L2_STD_NTSC_443</constant>. See also <xref +	      linkend="v4l2-std-id" />.</para> +	</listitem> + +	<listitem> +	  <para>The <constant>VIDIOC_G_COMP</constant> and +<constant>VIDIOC_S_COMP</constant> ioctl were renamed to +<constant>VIDIOC_G_MPEGCOMP</constant> and +<constant>VIDIOC_S_MPEGCOMP</constant> respectively. Their argument +was replaced by a struct +<structname>v4l2_mpeg_compression</structname> pointer. (The +<constant>VIDIOC_G_MPEGCOMP</constant> and +<constant>VIDIOC_S_MPEGCOMP</constant> ioctls where removed in Linux +2.6.25.)</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 spec erratum 2005-11-27</title> +      <para>The capture example in <xref linkend="capture-example" /> +called the &VIDIOC-S-CROP; ioctl without checking if cropping is +supported. In the video standard selection example in +<xref linkend="standard" /> the &VIDIOC-S-STD; call used the wrong +argument type.</para> +    </section> + +    <section> +      <title>V4L2 spec erratum 2006-01-10</title> +      <orderedlist> +	<listitem> +	  <para>The <constant>V4L2_IN_ST_COLOR_KILL</constant> flag in +&v4l2-input; not only indicates if the color killer is enabled, but +also if it is active. (The color killer disables color decoding when +it detects no color in the video signal to improve the image +quality.)</para> +	</listitem> + +	<listitem> +	  <para>&VIDIOC-S-PARM; is a write-read ioctl, not write-only as +stated on its reference page. The ioctl changed in 2003 as noted above.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 spec erratum 2006-02-03</title> +      <orderedlist> +	<listitem> +	  <para>In &v4l2-captureparm; and &v4l2-outputparm; the +<structfield>timeperframe</structfield> field gives the time in +seconds, not microseconds.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 spec erratum 2006-02-04</title> +      <orderedlist> +	<listitem> +	  <para>The <structfield>clips</structfield> field in +&v4l2-window; must point to an array of &v4l2-clip;, not a linked +list, because drivers ignore the struct +<structname>v4l2_clip</structname>.<structfield>next</structfield> +pointer.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.17</title> +      <orderedlist> +	<listitem> +	  <para>New video standard macros were added: +<constant>V4L2_STD_NTSC_M_KR</constant> (NTSC M South Korea), and the +sets <constant>V4L2_STD_MN</constant>, +<constant>V4L2_STD_B</constant>, <constant>V4L2_STD_GH</constant> and +<constant>V4L2_STD_DK</constant>. The +<constant>V4L2_STD_NTSC</constant> and +<constant>V4L2_STD_SECAM</constant> sets now include +<constant>V4L2_STD_NTSC_M_KR</constant> and +<constant>V4L2_STD_SECAM_LC</constant> respectively.</para> +	</listitem> + +	<listitem> +	  <para>A new <constant>V4L2_TUNER_MODE_LANG1_LANG2</constant> +was defined to record both languages of a bilingual program. The +use of <constant>V4L2_TUNER_MODE_STEREO</constant> for this purpose +is deprecated now. See the &VIDIOC-G-TUNER; section for +details.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 spec erratum 2006-09-23 (Draft 0.15)</title> +      <orderedlist> +	<listitem> +	  <para>In various places +<constant>V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant> and +<constant>V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant> of the sliced VBI +interface were not mentioned along with other buffer types.</para> +	</listitem> + +	<listitem> +	  <para>In <xref linkend="vidioc-g-audio" /> it was clarified +that the &v4l2-audio; <structfield>mode</structfield> field is a flags +field.</para> +	</listitem> + +	<listitem> +	  <para><xref linkend="vidioc-querycap" /> did not mention the +sliced VBI and radio capability flags.</para> +	</listitem> + +	<listitem> +	  <para>In <xref linkend="vidioc-g-frequency" /> it was +clarified that applications must initialize the tuner +<structfield>type</structfield> field of &v4l2-frequency; before +calling &VIDIOC-S-FREQUENCY;.</para> +	</listitem> + +	<listitem> +	  <para>The <structfield>reserved</structfield> array +in &v4l2-requestbuffers; has 2 elements, not 32.</para> +	</listitem> + +	<listitem> +	  <para>In <xref linkend="output" /> and <xref +	      linkend="raw-vbi" /> the device file names +<filename>/dev/vout</filename> which never caught on were replaced +by <filename>/dev/video</filename>.</para> +	</listitem> + +	<listitem> +	  <para>With Linux 2.6.15 the possible range for VBI device minor +numbers was extended from 224-239 to 224-255. Accordingly device file names +<filename>/dev/vbi0</filename> to <filename>/dev/vbi31</filename> are +possible now.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.18</title> +      <orderedlist> +	<listitem> +	  <para>New ioctls &VIDIOC-G-EXT-CTRLS;, &VIDIOC-S-EXT-CTRLS; +and &VIDIOC-TRY-EXT-CTRLS; were added, a flag to skip unsupported +controls with &VIDIOC-QUERYCTRL;, new control types +<constant>V4L2_CTRL_TYPE_INTEGER64</constant> and +<constant>V4L2_CTRL_TYPE_CTRL_CLASS</constant> (<xref +	      linkend="v4l2-ctrl-type" />), and new control flags +<constant>V4L2_CTRL_FLAG_READ_ONLY</constant>, +<constant>V4L2_CTRL_FLAG_UPDATE</constant>, +<constant>V4L2_CTRL_FLAG_INACTIVE</constant> and +<constant>V4L2_CTRL_FLAG_SLIDER</constant> (<xref +	      linkend="control-flags" />). See <xref +	      linkend="extended-controls" /> for details.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.19</title> +      <orderedlist> +	<listitem> +	  <para>In &v4l2-sliced-vbi-cap; a buffer type field was added +replacing a reserved field. Note on architectures where the size of +enum types differs from int types the size of the structure changed. +The &VIDIOC-G-SLICED-VBI-CAP; ioctl was redefined from being read-only +to write-read. Applications must initialize the type field and clear +the reserved fields now. These changes may <emphasis>break the +compatibility</emphasis> with older drivers and applications.</para> +	</listitem> + +	<listitem> +	  <para>The ioctls &VIDIOC-ENUM-FRAMESIZES; and +&VIDIOC-ENUM-FRAMEINTERVALS; were added.</para> +	</listitem> + +	<listitem> +	  <para>A new pixel format <constant>V4L2_PIX_FMT_RGB444</constant> (<xref +linkend="rgb-formats" />) was added.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 spec erratum 2006-10-12 (Draft 0.17)</title> +      <orderedlist> +	<listitem> +	  <para><constant>V4L2_PIX_FMT_HM12</constant> (<xref +linkend="reserved-formats" />) is a YUV 4:2:0, not 4:2:2 format.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.21</title> +      <orderedlist> +	<listitem> +	  <para>The <filename>videodev2.h</filename> header file is +now dual licensed under GNU General Public License version two or +later, and under a 3-clause BSD-style license.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.22</title> +      <orderedlist> +	<listitem> +	  <para>Two new field orders +	  <constant>V4L2_FIELD_INTERLACED_TB</constant> and +	  <constant>V4L2_FIELD_INTERLACED_BT</constant> were +	  added. See <xref linkend="v4l2-field" /> for details.</para> +	</listitem> + +	<listitem> +	  <para>Three new clipping/blending methods with a global or +straight or inverted local alpha value were added to the video overlay +interface. See the description of the &VIDIOC-G-FBUF; and +&VIDIOC-S-FBUF; ioctls for details.</para> +	  <para>A new <structfield>global_alpha</structfield> field +was added to <link +linkend="v4l2-window"><structname>v4l2_window</structname></link>, +extending the structure. This may <emphasis>break +compatibility</emphasis> with applications using a struct +<structname>v4l2_window</structname> directly. However the <link +linkend="vidioc-g-fmt">VIDIOC_G/S/TRY_FMT</link> ioctls, which take a +pointer to a <link linkend="v4l2-format">v4l2_format</link> parent +structure with padding bytes at the end, are not affected.</para> +	</listitem> + +	<listitem> +	  <para>The format of the <structfield>chromakey</structfield> +field in &v4l2-window; changed from "host order RGB32" to a pixel +value in the same format as the framebuffer. This may <emphasis>break +compatibility</emphasis> with existing applications. Drivers +supporting the "host order RGB32" format are not known.</para> +	</listitem> + +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.24</title> +      <orderedlist> +	<listitem> +	  <para>The pixel formats +<constant>V4L2_PIX_FMT_PAL8</constant>, +<constant>V4L2_PIX_FMT_YUV444</constant>, +<constant>V4L2_PIX_FMT_YUV555</constant>, +<constant>V4L2_PIX_FMT_YUV565</constant> and +<constant>V4L2_PIX_FMT_YUV32</constant> were added.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.25</title> +      <orderedlist> +	<listitem> +	  <para>The pixel formats <link linkend="V4L2-PIX-FMT-Y16"> +<constant>V4L2_PIX_FMT_Y16</constant></link> and <link +linkend="V4L2-PIX-FMT-SBGGR16"> +<constant>V4L2_PIX_FMT_SBGGR16</constant></link> were added.</para> +	</listitem> +	<listitem> +	  <para>New <link linkend="control">controls</link> +<constant>V4L2_CID_POWER_LINE_FREQUENCY</constant>, +<constant>V4L2_CID_HUE_AUTO</constant>, +<constant>V4L2_CID_WHITE_BALANCE_TEMPERATURE</constant>, +<constant>V4L2_CID_SHARPNESS</constant> and +<constant>V4L2_CID_BACKLIGHT_COMPENSATION</constant> were added. The +controls <constant>V4L2_CID_BLACK_LEVEL</constant>, +<constant>V4L2_CID_WHITENESS</constant>, +<constant>V4L2_CID_HCENTER</constant> and +<constant>V4L2_CID_VCENTER</constant> were deprecated. +</para> +	</listitem> +	<listitem> +	  <para>A <link linkend="camera-controls">Camera controls +class</link> was added, with the new controls +<constant>V4L2_CID_EXPOSURE_AUTO</constant>, +<constant>V4L2_CID_EXPOSURE_ABSOLUTE</constant>, +<constant>V4L2_CID_EXPOSURE_AUTO_PRIORITY</constant>, +<constant>V4L2_CID_PAN_RELATIVE</constant>, +<constant>V4L2_CID_TILT_RELATIVE</constant>, +<constant>V4L2_CID_PAN_RESET</constant>, +<constant>V4L2_CID_TILT_RESET</constant>, +<constant>V4L2_CID_PAN_ABSOLUTE</constant>, +<constant>V4L2_CID_TILT_ABSOLUTE</constant>, +<constant>V4L2_CID_FOCUS_ABSOLUTE</constant>, +<constant>V4L2_CID_FOCUS_RELATIVE</constant> and +<constant>V4L2_CID_FOCUS_AUTO</constant>.</para> +	</listitem> +	<listitem> +	  <para>The <constant>VIDIOC_G_MPEGCOMP</constant> and +<constant>VIDIOC_S_MPEGCOMP</constant> ioctls, which were superseded +by the <link linkend="extended-controls">extended controls</link> +interface in Linux 2.6.18, where finally removed from the +<filename>videodev2.h</filename> header file.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.26</title> +      <orderedlist> +	<listitem> +	  <para>The pixel formats +<constant>V4L2_PIX_FMT_Y16</constant> and +<constant>V4L2_PIX_FMT_SBGGR16</constant> were added.</para> +	</listitem> +	<listitem> +	  <para>Added user controls +<constant>V4L2_CID_CHROMA_AGC</constant> and +<constant>V4L2_CID_COLOR_KILLER</constant>.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.27</title> +      <orderedlist> +	<listitem> +	  <para>The &VIDIOC-S-HW-FREQ-SEEK; ioctl and the +<constant>V4L2_CAP_HW_FREQ_SEEK</constant> capability were added.</para> +	</listitem> +	<listitem> +	  <para>The pixel formats +<constant>V4L2_PIX_FMT_YVYU</constant>, +<constant>V4L2_PIX_FMT_PCA501</constant>, +<constant>V4L2_PIX_FMT_PCA505</constant>, +<constant>V4L2_PIX_FMT_PCA508</constant>, +<constant>V4L2_PIX_FMT_PCA561</constant>, +<constant>V4L2_PIX_FMT_SGBRG8</constant>, +<constant>V4L2_PIX_FMT_PAC207</constant> and +<constant>V4L2_PIX_FMT_PJPG</constant> were added.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.28</title> +      <orderedlist> +	<listitem> +	  <para>Added <constant>V4L2_MPEG_AUDIO_ENCODING_AAC</constant> and +<constant>V4L2_MPEG_AUDIO_ENCODING_AC3</constant> MPEG audio encodings.</para> +	</listitem> +	<listitem> +	  <para>Added <constant>V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC</constant> MPEG +video encoding.</para> +	</listitem> +	<listitem> +	  <para>The pixel formats +<constant>V4L2_PIX_FMT_SGRBG10</constant> and +<constant>V4L2_PIX_FMT_SGRBG10DPCM8</constant> were added.</para> +	</listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 2.6.29</title> +      <orderedlist> +	<listitem> +	  <para>The <constant>VIDIOC_G_CHIP_IDENT</constant> ioctl was renamed +to <constant>VIDIOC_G_CHIP_IDENT_OLD</constant> and <constant>VIDIOC_DBG_G_CHIP_IDENT</constant> +was introduced in its place. The old struct <structname>v4l2_chip_ident</structname> +was renamed to <structname id="v4l2-chip-ident-old">v4l2_chip_ident_old</structname>.</para> +	</listitem> +	<listitem> +	  <para>The pixel formats +<constant>V4L2_PIX_FMT_VYUY</constant>, +<constant>V4L2_PIX_FMT_NV16</constant> and +<constant>V4L2_PIX_FMT_NV61</constant> were added.</para> +	</listitem> +	<listitem> +	  <para>Added camera controls +<constant>V4L2_CID_ZOOM_ABSOLUTE</constant>, +<constant>V4L2_CID_ZOOM_RELATIVE</constant>, +<constant>V4L2_CID_ZOOM_CONTINUOUS</constant> and +<constant>V4L2_CID_PRIVACY</constant>.</para> +	</listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 2.6.30</title> +      <orderedlist> +	<listitem> +	  <para>New control flag <constant>V4L2_CTRL_FLAG_WRITE_ONLY</constant> was added.</para> +	</listitem> +	<listitem> +	  <para>New control <constant>V4L2_CID_COLORFX</constant> was added.</para> +	</listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 2.6.32</title> +      <orderedlist> +	<listitem> +	  <para>In order to be easier to compare a V4L2 API and a kernel +version, now V4L2 API is numbered using the Linux Kernel version numeration.</para> +	</listitem> +	<listitem> +	  <para>Finalized the RDS capture API. See <xref linkend="rds" /> for +more information.</para> +	</listitem> +	<listitem> +	  <para>Added new capabilities for modulators and RDS encoders.</para> +	</listitem> +	<listitem> +	  <para>Add description for libv4l API.</para> +	</listitem> +	<listitem> +	  <para>Added support for string controls via new type <constant>V4L2_CTRL_TYPE_STRING</constant>.</para> +	</listitem> +	<listitem> +	  <para>Added <constant>V4L2_CID_BAND_STOP_FILTER</constant> documentation.</para> +	</listitem> +	<listitem> +	  <para>Added FM Modulator (FM TX) Extended Control Class: <constant>V4L2_CTRL_CLASS_FM_TX</constant> and their Control IDs.</para> +	</listitem> +<listitem> +	  <para>Added FM Receiver (FM RX) Extended Control Class: <constant>V4L2_CTRL_CLASS_FM_RX</constant> and their Control IDs.</para> +	</listitem> +	<listitem> +	  <para>Added Remote Controller chapter, describing the default Remote Controller mapping for media devices.</para> +	</listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 2.6.33</title> +      <orderedlist> +	<listitem> +	  <para>Added support for Digital Video timings in order to support HDTV receivers and transmitters.</para> +	</listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 2.6.34</title> +      <orderedlist> +	<listitem> +	  <para>Added +<constant>V4L2_CID_IRIS_ABSOLUTE</constant> and +<constant>V4L2_CID_IRIS_RELATIVE</constant> controls to the +	    <link linkend="camera-controls">Camera controls class</link>. +	  </para> +	</listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 2.6.37</title> +      <orderedlist> +	<listitem> +	  <para>Remove the vtx (videotext/teletext) API. This API was no longer +used and no hardware exists to verify the API. Nor were any userspace applications found +that used it. It was originally scheduled for removal in 2.6.35. +	  </para> +	</listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 2.6.39</title> +      <orderedlist> +        <listitem> +          <para>The old VIDIOC_*_OLD symbols and V4L1 support were removed.</para> +        </listitem> +        <listitem> +          <para>Multi-planar API added. Does not affect the compatibility of +          current drivers and applications. See +          <link linkend="planar-apis">multi-planar API</link> +          for details.</para> +        </listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 3.1</title> +      <orderedlist> +        <listitem> +	  <para>VIDIOC_QUERYCAP now returns a per-subsystem version instead of a per-driver one.</para> +	  <para>Standardize an error code for invalid ioctl.</para> +          <para>Added V4L2_CTRL_TYPE_BITMASK.</para> +        </listitem> +      </orderedlist> +    </section> +    <section> +      <title>V4L2 in Linux 3.2</title> +      <orderedlist> +        <listitem> +	  <para>V4L2_CTRL_FLAG_VOLATILE was added to signal volatile controls to userspace.</para> +        </listitem> +        <listitem> +	  <para>Add selection API for extended control over cropping +	  and composing. Does not affect the compatibility of current +	  drivers and applications. See <link +	  linkend="selection-api"> selection API </link> for +	  details.</para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.3</title> +      <orderedlist> +        <listitem> +	  <para>Added <constant>V4L2_CID_ALPHA_COMPONENT</constant> control +	    to the <link linkend="control">User controls class</link>. +	  </para> +        </listitem> +        <listitem> +	  <para>Added the device_caps field to struct v4l2_capabilities and added the new +	  V4L2_CAP_DEVICE_CAPS capability.</para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.4</title> +      <orderedlist> +        <listitem> +	  <para>Added <link linkend="jpeg-controls">JPEG compression control +	  class</link>.</para> +        </listitem> +        <listitem> +	  <para>Extended the DV Timings API: +	  &VIDIOC-ENUM-DV-TIMINGS;, &VIDIOC-QUERY-DV-TIMINGS; and +	  &VIDIOC-DV-TIMINGS-CAP;.</para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.5</title> +      <orderedlist> +        <listitem> +	  <para>Added integer menus, the new type will be +	  V4L2_CTRL_TYPE_INTEGER_MENU.</para> +        </listitem> +        <listitem> +	  <para>Added selection API for V4L2 subdev interface: +	  &VIDIOC-SUBDEV-G-SELECTION; and +	  &VIDIOC-SUBDEV-S-SELECTION;.</para> +        </listitem> +        <listitem> +	  <para> Added <constant>V4L2_COLORFX_ANTIQUE</constant>, +	  <constant>V4L2_COLORFX_ART_FREEZE</constant>, +	  <constant>V4L2_COLORFX_AQUA</constant>, +	  <constant>V4L2_COLORFX_SILHOUETTE</constant>, +	  <constant>V4L2_COLORFX_SOLARIZATION</constant>, +	  <constant>V4L2_COLORFX_VIVID</constant> and +	  <constant>V4L2_COLORFX_ARBITRARY_CBCR</constant> menu items +	  to the <constant>V4L2_CID_COLORFX</constant> control.</para> +        </listitem> +        <listitem> +	  <para> Added <constant>V4L2_CID_COLORFX_CBCR</constant> control.</para> +        </listitem> +        <listitem> +	  <para> Added camera controls <constant>V4L2_CID_AUTO_EXPOSURE_BIAS</constant>, +	  <constant>V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE</constant>, +	  <constant>V4L2_CID_IMAGE_STABILIZATION</constant>, +	  <constant>V4L2_CID_ISO_SENSITIVITY</constant>, +	  <constant>V4L2_CID_ISO_SENSITIVITY_AUTO</constant>, +	  <constant>V4L2_CID_EXPOSURE_METERING</constant>, +	  <constant>V4L2_CID_SCENE_MODE</constant>, +	  <constant>V4L2_CID_3A_LOCK</constant>, +	  <constant>V4L2_CID_AUTO_FOCUS_START</constant>, +	  <constant>V4L2_CID_AUTO_FOCUS_STOP</constant>, +	  <constant>V4L2_CID_AUTO_FOCUS_STATUS</constant> and +	  <constant>V4L2_CID_AUTO_FOCUS_RANGE</constant>. +	  </para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.6</title> +      <orderedlist> +	<listitem> +	  <para>Replaced <structfield>input</structfield> in +	  <structname>v4l2_buffer</structname> by +	  <structfield>reserved2</structfield> and removed +	  <constant>V4L2_BUF_FLAG_INPUT</constant>.</para> +	</listitem> +        <listitem> +	  <para>Added V4L2_CAP_VIDEO_M2M and V4L2_CAP_VIDEO_M2M_MPLANE capabilities.</para> +        </listitem> +        <listitem> +	  <para>Added support for frequency band enumerations: &VIDIOC-ENUM-FREQ-BANDS;.</para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.9</title> +      <orderedlist> +        <listitem> +	  <para>Added timestamp types to +	  <structfield>flags</structfield> field in +	  <structname>v4l2_buffer</structname>. See <xref +	  linkend="buffer-flags" />.</para> +        </listitem> +        <listitem> +	  <para>Added <constant>V4L2_EVENT_CTRL_CH_RANGE</constant> control event +	  changes flag. See <xref linkend="changes-flags"/>.</para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.10</title> +      <orderedlist> +        <listitem> +	  <para>Removed obsolete and unused DV_PRESET ioctls +	  VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and +	  VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output capability +	  flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS. +	  </para> +        </listitem> +        <listitem> +	  <para>Added new debugging ioctl &VIDIOC-DBG-G-CHIP-INFO;. +	  </para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.11</title> +      <orderedlist> +        <listitem> +	  <para>Remove obsolete <constant>VIDIOC_DBG_G_CHIP_IDENT</constant> ioctl. +	  </para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.14</title> +      <orderedlist> +        <listitem> +		<para> In struct <structname>v4l2_rect</structname>, the type +of <structfield>width</structfield> and <structfield>height</structfield> +fields changed from _s32 to _u32. +	  </para> +        </listitem> +      </orderedlist> +    </section> + +    <section> +      <title>V4L2 in Linux 3.15</title> +      <orderedlist> +        <listitem> +	  <para>Added Software Defined Radio (SDR) Interface. +	  </para> +        </listitem> +      </orderedlist> +    </section> + +    <section id="other"> +      <title>Relation of V4L2 to other Linux multimedia APIs</title> + +      <section id="xvideo"> +        <title>X Video Extension</title> + +        <para>The X Video Extension (abbreviated XVideo or just Xv) is +an extension of the X Window system, implemented for example by the +XFree86 project. Its scope is similar to V4L2, an API to video capture +and output devices for X clients. Xv allows applications to display +live video in a window, send window contents to a TV output, and +capture or output still images in XPixmaps<footnote> +	  <para>This is not implemented in XFree86.</para> +	</footnote>. With their implementation XFree86 makes the +extension available across many operating systems and +architectures.</para> + +        <para>Because the driver is embedded into the X server Xv has a +number of advantages over the V4L2 <link linkend="overlay">video +overlay interface</link>. The driver can easily determine the overlay +target, &ie; visible graphics memory or off-screen buffers for a +destructive overlay. It can program the RAMDAC for a non-destructive +overlay, scaling or color-keying, or the clipping functions of the +video capture hardware, always in sync with drawing operations or +windows moving or changing their stacking order.</para> + +        <para>To combine the advantages of Xv and V4L a special Xv +driver exists in XFree86 and XOrg, just programming any overlay capable +Video4Linux device it finds. To enable it +<filename>/etc/X11/XF86Config</filename> must contain these lines:</para> +        <para><screen> +Section "Module" +    Load "v4l" +EndSection</screen></para> + +        <para>As of XFree86 4.2 this driver still supports only V4L +ioctls, however it should work just fine with all V4L2 devices through +the V4L2 backward-compatibility layer. Since V4L2 permits multiple +opens it is possible (if supported by the V4L2 driver) to capture +video while an X client requested video overlay. Restrictions of +simultaneous capturing and overlay are discussed in <xref +	  linkend="overlay" /> apply.</para> + +        <para>Only marginally related to V4L2, XFree86 extended Xv to +support hardware YUV to RGB conversion and scaling for faster video +playback, and added an interface to MPEG-2 decoding hardware. This API +is useful to display images captured with V4L2 devices.</para> +      </section> + +      <section> +        <title>Digital Video</title> + +        <para>V4L2 does not support digital terrestrial, cable or +satellite broadcast. A separate project aiming at digital receivers +exists. You can find its homepage at <ulink +url="http://linuxtv.org">http://linuxtv.org</ulink>. The Linux DVB API +has no connection to the V4L2 API except that drivers for hybrid +hardware may support both.</para> +      </section> + +      <section> +        <title>Audio Interfaces</title> + +        <para>[to do - OSS/ALSA]</para> +      </section> +    </section> + +    <section id="experimental"> +      <title>Experimental API Elements</title> + +      <para>The following V4L2 API elements are currently experimental +and may change in the future.</para> + +      <itemizedlist> +        <listitem> +	  <para>Video Output Overlay (OSD) Interface, <xref +	    linkend="osd" />.</para> +        </listitem> +        <listitem> +	  <para>&VIDIOC-DBG-G-REGISTER; and &VIDIOC-DBG-S-REGISTER; +ioctls.</para> +        </listitem> +        <listitem> +	  <para>&VIDIOC-DBG-G-CHIP-INFO; ioctl.</para> +        </listitem> +        <listitem> +	  <para>&VIDIOC-ENUM-DV-TIMINGS;, &VIDIOC-QUERY-DV-TIMINGS; and +	  &VIDIOC-DV-TIMINGS-CAP; ioctls.</para> +        </listitem> +        <listitem> +	  <para>Flash API. <xref linkend="flash-controls" /></para> +        </listitem> +        <listitem> +	  <para>&VIDIOC-CREATE-BUFS; and &VIDIOC-PREPARE-BUF; ioctls.</para> +        </listitem> +        <listitem> +	  <para>Selection API. <xref linkend="selection-api" /></para> +        </listitem> +        <listitem> +	  <para>Sub-device selection API: &VIDIOC-SUBDEV-G-SELECTION; +	  and &VIDIOC-SUBDEV-S-SELECTION; ioctls.</para> +        </listitem> +        <listitem> +	  <para>Support for frequency band enumeration: &VIDIOC-ENUM-FREQ-BANDS; ioctl.</para> +        </listitem> +        <listitem> +	  <para>Vendor and device specific media bus pixel formats. +	    <xref linkend="v4l2-mbus-vendor-spec-fmts" />.</para> +        </listitem> +        <listitem> +	  <para>Importing DMABUF file descriptors as a new IO method described +	  in <xref linkend="dmabuf" />.</para> +        </listitem> +        <listitem> +	  <para>Exporting DMABUF files using &VIDIOC-EXPBUF; ioctl.</para> +        </listitem> +        <listitem> +	  <para>Software Defined Radio (SDR) Interface, <xref linkend="sdr" />.</para> +        </listitem> +      </itemizedlist> +    </section> + +    <section id="obsolete"> +      <title>Obsolete API Elements</title> + +      <para>The following V4L2 API elements were superseded by new +interfaces and should not be implemented in new drivers.</para> + +      <itemizedlist> +        <listitem> +	  <para><constant>VIDIOC_G_MPEGCOMP</constant> and +<constant>VIDIOC_S_MPEGCOMP</constant> ioctls. Use Extended Controls, +<xref linkend="extended-controls" />.</para> +        </listitem> +        <listitem> +	  <para>VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_ENUM_DV_PRESETS and +	  VIDIOC_QUERY_DV_PRESET ioctls. Use the DV Timings API (<xref linkend="dv-timings" />).</para> +        </listitem> +        <listitem> +	  <para><constant>VIDIOC_SUBDEV_G_CROP</constant> and +	  <constant>VIDIOC_SUBDEV_S_CROP</constant> ioctls. Use +	  <constant>VIDIOC_SUBDEV_G_SELECTION</constant> and +	  <constant>VIDIOC_SUBDEV_S_SELECTION</constant>, <xref +	  linkend="vidioc-subdev-g-selection" />.</para> +        </listitem> +      </itemizedlist> +    </section> +  </section> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml new file mode 100644 index 00000000000..47198eef75a --- /dev/null +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -0,0 +1,5150 @@ +  <section id="control"> +    <title>User Controls</title> + +    <para>Devices typically have a number of user-settable controls +such as brightness, saturation and so on, which would be presented to +the user on a graphical user interface. But, different devices +will have different controls available, and furthermore, the range of +possible values, and the default value will vary from device to +device. The control ioctls provide the information and a mechanism to +create a nice user interface for these controls that will work +correctly with any device.</para> + +    <para>All controls are accessed using an ID value. V4L2 defines +several IDs for specific purposes. Drivers can also implement their +own custom controls using <constant>V4L2_CID_PRIVATE_BASE</constant> +and higher values. The pre-defined control IDs have the prefix +<constant>V4L2_CID_</constant>, and are listed in <xref +linkend="control-id" />. The ID is used when querying the attributes of +a control, and when getting or setting the current value.</para> + +    <para>Generally applications should present controls to the user +without assumptions about their purpose. Each control comes with a +name string the user is supposed to understand. When the purpose is +non-intuitive the driver writer should provide a user manual, a user +interface plug-in or a driver specific panel application. Predefined +IDs were introduced to change a few controls programmatically, for +example to mute a device during a channel switch.</para> + +    <para>Drivers may enumerate different controls after switching +the current video input or output, tuner or modulator, or audio input +or output. Different in the sense of other bounds, another default and +current value, step size or other menu items. A control with a certain +<emphasis>custom</emphasis> ID can also change name and +type.<footnote> +	<para>It will be more convenient for applications if drivers +make use of the <constant>V4L2_CTRL_FLAG_DISABLED</constant> flag, but +that was never required.</para> +      </footnote> Control values are stored globally, they do not +change when switching except to stay within the reported bounds. They +also do not change ⪚ when the device is opened or closed, when the +tuner radio frequency is changed or generally never without +application request. Since V4L2 specifies no event mechanism, panel +applications intended to cooperate with other panel applications (be +they built into a larger application, as a TV viewer) may need to +regularly poll control values to update their user +interface.<footnote> +	<para>Applications could call an ioctl to request events. +After another process called &VIDIOC-S-CTRL; or another ioctl changing +shared properties the &func-select; function would indicate +readability until any ioctl (querying the properties) is +called.</para> +      </footnote></para> + +    <para> +      All controls use machine endianness. +    </para> + +    <table pgwide="1" frame="none" id="control-id"> +      <title>Control IDs</title> +      <tgroup cols="3"> +	&cs-def; +	<thead> +	  <row> +	    <entry>ID</entry> +	    <entry>Type</entry> +	    <entry>Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CID_BASE</constant></entry> +	    <entry></entry> +	    <entry>First predefined ID, equal to +<constant>V4L2_CID_BRIGHTNESS</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_USER_BASE</constant></entry> +	    <entry></entry> +	    <entry>Synonym of <constant>V4L2_CID_BASE</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_BRIGHTNESS</constant></entry> +	    <entry>integer</entry> +	    <entry>Picture brightness, or more precisely, the black +level.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_CONTRAST</constant></entry> +	    <entry>integer</entry> +	    <entry>Picture contrast or luma gain.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_SATURATION</constant></entry> +	    <entry>integer</entry> +	    <entry>Picture color saturation or chroma gain.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_HUE</constant></entry> +	    <entry>integer</entry> +	    <entry>Hue or color balance.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUDIO_VOLUME</constant></entry> +	    <entry>integer</entry> +	    <entry>Overall audio volume. Note some drivers also +provide an OSS or ALSA mixer interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUDIO_BALANCE</constant></entry> +	    <entry>integer</entry> +	    <entry>Audio stereo balance. Minimum corresponds to all +the way left, maximum to right.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUDIO_BASS</constant></entry> +	    <entry>integer</entry> +	    <entry>Audio bass adjustment.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUDIO_TREBLE</constant></entry> +	    <entry>integer</entry> +	    <entry>Audio treble adjustment.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUDIO_MUTE</constant></entry> +	    <entry>boolean</entry> +	    <entry>Mute audio, &ie; set the volume to zero, however +without affecting <constant>V4L2_CID_AUDIO_VOLUME</constant>. Like +ALSA drivers, V4L2 drivers must mute at load time to avoid excessive +noise. Actually the entire device should be reset to a low power +consumption state.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUDIO_LOUDNESS</constant></entry> +	    <entry>boolean</entry> +	    <entry>Loudness mode (bass boost).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_BLACK_LEVEL</constant></entry> +	    <entry>integer</entry> +	    <entry>Another name for brightness (not a synonym of +<constant>V4L2_CID_BRIGHTNESS</constant>). This control is deprecated +and should not be used in new drivers and applications.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUTO_WHITE_BALANCE</constant></entry> +	    <entry>boolean</entry> +	    <entry>Automatic white balance (cameras).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_DO_WHITE_BALANCE</constant></entry> +	    <entry>button</entry> +	    <entry>This is an action control. When set (the value is +ignored), the device will do a white balance and then hold the current +setting. Contrast this with the boolean +<constant>V4L2_CID_AUTO_WHITE_BALANCE</constant>, which, when +activated, keeps adjusting the white balance.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_RED_BALANCE</constant></entry> +	    <entry>integer</entry> +	    <entry>Red chroma balance.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_BLUE_BALANCE</constant></entry> +	    <entry>integer</entry> +	    <entry>Blue chroma balance.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_GAMMA</constant></entry> +	    <entry>integer</entry> +	    <entry>Gamma adjust.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_WHITENESS</constant></entry> +	    <entry>integer</entry> +	    <entry>Whiteness for grey-scale devices. This is a synonym +for <constant>V4L2_CID_GAMMA</constant>. This control is deprecated +and should not be used in new drivers and applications.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_EXPOSURE</constant></entry> +	    <entry>integer</entry> +	    <entry>Exposure (cameras). [Unit?]</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUTOGAIN</constant></entry> +	    <entry>boolean</entry> +	    <entry>Automatic gain/exposure control.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_GAIN</constant></entry> +	    <entry>integer</entry> +	    <entry>Gain control.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_HFLIP</constant></entry> +	    <entry>boolean</entry> +	    <entry>Mirror the picture horizontally.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_VFLIP</constant></entry> +	    <entry>boolean</entry> +	    <entry>Mirror the picture vertically.</entry> +	  </row> +	  <row id="v4l2-power-line-frequency"> +	    <entry><constant>V4L2_CID_POWER_LINE_FREQUENCY</constant></entry> +	    <entry>enum</entry> +	    <entry>Enables a power line frequency filter to avoid +flicker. Possible values for <constant>enum v4l2_power_line_frequency</constant> are: +<constant>V4L2_CID_POWER_LINE_FREQUENCY_DISABLED</constant> (0), +<constant>V4L2_CID_POWER_LINE_FREQUENCY_50HZ</constant> (1), +<constant>V4L2_CID_POWER_LINE_FREQUENCY_60HZ</constant> (2) and +<constant>V4L2_CID_POWER_LINE_FREQUENCY_AUTO</constant> (3).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_HUE_AUTO</constant></entry> +	    <entry>boolean</entry> +	    <entry>Enables automatic hue control by the device. The +effect of setting <constant>V4L2_CID_HUE</constant> while automatic +hue control is enabled is undefined, drivers should ignore such +request.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_WHITE_BALANCE_TEMPERATURE</constant></entry> +	    <entry>integer</entry> +	    <entry>This control specifies the white balance settings +as a color temperature in Kelvin. A driver should have a minimum of +2800 (incandescent) to 6500 (daylight). For more information about +color temperature see <ulink +url="http://en.wikipedia.org/wiki/Color_temperature">Wikipedia</ulink>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_SHARPNESS</constant></entry> +	    <entry>integer</entry> +	    <entry>Adjusts the sharpness filters in a camera. The +minimum value disables the filters, higher values give a sharper +picture.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_BACKLIGHT_COMPENSATION</constant></entry> +	    <entry>integer</entry> +	    <entry>Adjusts the backlight compensation in a camera. The +minimum value disables backlight compensation.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_CHROMA_AGC</constant></entry> +	    <entry>boolean</entry> +	    <entry>Chroma automatic gain control.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_CHROMA_GAIN</constant></entry> +	    <entry>integer</entry> +	    <entry>Adjusts the Chroma gain control (for use when chroma AGC +	    is disabled).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_COLOR_KILLER</constant></entry> +	    <entry>boolean</entry> +	    <entry>Enable the color killer (&ie; force a black & white image in case of a weak video signal).</entry> +	  </row> +	  <row id="v4l2-colorfx"> +	    <entry><constant>V4L2_CID_COLORFX</constant></entry> +	    <entry>enum</entry> +	    <entry>Selects a color effect. The following values are defined: +	    </entry> +	  </row><row> +	  <entry></entry> +	  <entry></entry> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_COLORFX_NONE</constant> </entry> +		  <entry>Color effect is disabled.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_ANTIQUE</constant> </entry> +		  <entry>An aging (old photo) effect.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_ART_FREEZE</constant> </entry> +		  <entry>Frost color effect.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_AQUA</constant> </entry> +		  <entry>Water color, cool tone.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_BW</constant> </entry> +		  <entry>Black and white.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_EMBOSS</constant> </entry> +		  <entry>Emboss, the highlights and shadows replace light/dark boundaries +		  and low contrast areas are set to a gray background.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_GRASS_GREEN</constant> </entry> +		  <entry>Grass green.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_NEGATIVE</constant> </entry> +		  <entry>Negative.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SEPIA</constant> </entry> +		  <entry>Sepia tone.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SKETCH</constant> </entry> +		  <entry>Sketch.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SKIN_WHITEN</constant> </entry> +		  <entry>Skin whiten.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SKY_BLUE</constant> </entry> +		  <entry>Sky blue.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SOLARIZATION</constant> </entry> +		  <entry>Solarization, the image is partially reversed in tone, +		  only color values above or below a certain threshold are inverted. +		  </entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SILHOUETTE</constant> </entry> +		  <entry>Silhouette (outline).</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_VIVID</constant> </entry> +		  <entry>Vivid colors.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_COLORFX_SET_CBCR</constant> </entry> +		  <entry>The Cb and Cr chroma components are replaced by fixed +		  coefficients determined by <constant>V4L2_CID_COLORFX_CBCR</constant> +		  control.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_COLORFX_CBCR</constant></entry> +	    <entry>integer</entry> +	    <entry>Determines the Cb and Cr coefficients for <constant>V4L2_COLORFX_SET_CBCR</constant> +	    color effect. Bits [7:0] of the supplied 32 bit value are interpreted as +	    Cr component, bits [15:8] as Cb component and bits [31:16] must be zero. +	  </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_AUTOBRIGHTNESS</constant></entry> +	    <entry>boolean</entry> +	    <entry>Enable Automatic Brightness.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_ROTATE</constant></entry> +	    <entry>integer</entry> +	    <entry>Rotates the image by specified angle. Common angles are 90, +	    270 and 180. Rotating the image to 90 and 270 will reverse the height +	    and width of the display window. It is necessary to set the new height and +	    width of the picture using the &VIDIOC-S-FMT; ioctl according to +	    the rotation angle selected.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_BG_COLOR</constant></entry> +	    <entry>integer</entry> +	    <entry>Sets the background color on the current output device. +	    Background color needs to be specified in the RGB24 format. The +	    supplied 32 bit value is interpreted as bits 0-7 Red color information, +	    bits 8-15 Green color information, bits 16-23 Blue color +	    information and bits 24-31 must be zero.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_ILLUMINATORS_1</constant> +		<constant>V4L2_CID_ILLUMINATORS_2</constant></entry> +	    <entry>boolean</entry> +	    <entry>Switch on or off the illuminator 1 or 2 of the device +		(usually a microscope).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_MIN_BUFFERS_FOR_CAPTURE</constant></entry> +	    <entry>integer</entry> +	    <entry>This is a read-only control that can be read by the application +and used as a hint to determine the number of CAPTURE buffers to pass to REQBUFS. +The value is the minimum number of CAPTURE buffers that is necessary for hardware +to work.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_MIN_BUFFERS_FOR_OUTPUT</constant></entry> +	    <entry>integer</entry> +	    <entry>This is a read-only control that can be read by the application +and used as a hint to determine the number of OUTPUT buffers to pass to REQBUFS. +The value is the minimum number of OUTPUT buffers that is necessary for hardware +to work.</entry> +	  </row> +	  <row id="v4l2-alpha-component"> +	    <entry><constant>V4L2_CID_ALPHA_COMPONENT</constant></entry> +	    <entry>integer</entry> +	    <entry> Sets the alpha color component on the capture device or on +	    the capture buffer queue of a mem-to-mem device. When a mem-to-mem +	    device produces frame format that includes an alpha component +	    (e.g. <link linkend="rgb-formats">packed RGB image formats</link>) +	    and the alpha value is not defined by the mem-to-mem input data +	    this control lets you select the alpha component value of all +	    pixels. It is applicable to any pixel format that contains an alpha +	    component. +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_LASTP1</constant></entry> +	    <entry></entry> +	    <entry>End of the predefined control IDs (currently +	      <constant>V4L2_CID_ALPHA_COMPONENT</constant> + 1).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CID_PRIVATE_BASE</constant></entry> +	    <entry></entry> +	    <entry>ID of the first custom (driver specific) control. +Applications depending on particular custom controls should check the +driver name and version, see <xref linkend="querycap" />.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <para>Applications can enumerate the available controls with the +&VIDIOC-QUERYCTRL; and &VIDIOC-QUERYMENU; ioctls, get and set a +control value with the &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls. +Drivers must implement <constant>VIDIOC_QUERYCTRL</constant>, +<constant>VIDIOC_G_CTRL</constant> and +<constant>VIDIOC_S_CTRL</constant> when the device has one or more +controls, <constant>VIDIOC_QUERYMENU</constant> when it has one or +more menu type controls.</para> + +    <example> +      <title>Enumerating all controls</title> + +      <programlisting> +&v4l2-queryctrl; queryctrl; +&v4l2-querymenu; querymenu; + +static void +enumerate_menu (void) +{ +	printf ("  Menu items:\n"); + +	memset (&querymenu, 0, sizeof (querymenu)); +	querymenu.id = queryctrl.id; + +	for (querymenu.index = queryctrl.minimum; +	     querymenu.index <= queryctrl.maximum; +	      querymenu.index++) { +		if (0 == ioctl (fd, &VIDIOC-QUERYMENU;, &querymenu)) { +			printf ("  %s\n", querymenu.name); +		} +	} +} + +memset (&queryctrl, 0, sizeof (queryctrl)); + +for (queryctrl.id = V4L2_CID_BASE; +     queryctrl.id < V4L2_CID_LASTP1; +     queryctrl.id++) { +	if (0 == ioctl (fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { +		if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) +			continue; + +		printf ("Control %s\n", queryctrl.name); + +		if (queryctrl.type == V4L2_CTRL_TYPE_MENU) +			enumerate_menu (); +	} else { +		if (errno == EINVAL) +			continue; + +		perror ("VIDIOC_QUERYCTRL"); +		exit (EXIT_FAILURE); +	} +} + +for (queryctrl.id = V4L2_CID_PRIVATE_BASE;; +     queryctrl.id++) { +	if (0 == ioctl (fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { +		if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) +			continue; + +		printf ("Control %s\n", queryctrl.name); + +		if (queryctrl.type == V4L2_CTRL_TYPE_MENU) +			enumerate_menu (); +	} else { +		if (errno == EINVAL) +			break; + +		perror ("VIDIOC_QUERYCTRL"); +		exit (EXIT_FAILURE); +	} +} +</programlisting> +    </example> + +    <example> +      <title>Changing controls</title> + +      <programlisting> +&v4l2-queryctrl; queryctrl; +&v4l2-control; control; + +memset (&queryctrl, 0, sizeof (queryctrl)); +queryctrl.id = V4L2_CID_BRIGHTNESS; + +if (-1 == ioctl (fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { +	if (errno != EINVAL) { +		perror ("VIDIOC_QUERYCTRL"); +		exit (EXIT_FAILURE); +	} else { +		printf ("V4L2_CID_BRIGHTNESS is not supported\n"); +	} +} else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { +	printf ("V4L2_CID_BRIGHTNESS is not supported\n"); +} else { +	memset (&control, 0, sizeof (control)); +	control.id = V4L2_CID_BRIGHTNESS; +	control.value = queryctrl.default_value; + +	if (-1 == ioctl (fd, &VIDIOC-S-CTRL;, &control)) { +		perror ("VIDIOC_S_CTRL"); +		exit (EXIT_FAILURE); +	} +} + +memset (&control, 0, sizeof (control)); +control.id = V4L2_CID_CONTRAST; + +if (0 == ioctl (fd, &VIDIOC-G-CTRL;, &control)) { +	control.value += 1; + +	/* The driver may clamp the value or return ERANGE, ignored here */ + +	if (-1 == ioctl (fd, &VIDIOC-S-CTRL;, &control) +	    && errno != ERANGE) { +		perror ("VIDIOC_S_CTRL"); +		exit (EXIT_FAILURE); +	} +/* Ignore if V4L2_CID_CONTRAST is unsupported */ +} else if (errno != EINVAL) { +	perror ("VIDIOC_G_CTRL"); +	exit (EXIT_FAILURE); +} + +control.id = V4L2_CID_AUDIO_MUTE; +control.value = TRUE; /* silence */ + +/* Errors ignored */ +ioctl (fd, VIDIOC_S_CTRL, &control); +</programlisting> +    </example> +  </section> + +  <section id="extended-controls"> +    <title>Extended Controls</title> + +    <section> +      <title>Introduction</title> + +      <para>The control mechanism as originally designed was meant +to be used for user settings (brightness, saturation, etc). However, +it turned out to be a very useful model for implementing more +complicated driver APIs where each driver implements only a subset of +a larger API.</para> + +      <para>The MPEG encoding API was the driving force behind +designing and implementing this extended control mechanism: the MPEG +standard is quite large and the currently supported hardware MPEG +encoders each only implement a subset of this standard. Further more, +many parameters relating to how the video is encoded into an MPEG +stream are specific to the MPEG encoding chip since the MPEG standard +only defines the format of the resulting MPEG stream, not how the +video is actually encoded into that format.</para> + +      <para>Unfortunately, the original control API lacked some +features needed for these new uses and so it was extended into the +(not terribly originally named) extended control API.</para> + +      <para>Even though the MPEG encoding API was the first effort +to use the Extended Control API, nowadays there are also other classes +of Extended Controls, such as Camera Controls and FM Transmitter Controls. +The Extended Controls API as well as all Extended Controls classes are +described in the following text.</para> +    </section> + +    <section> +      <title>The Extended Control API</title> + +      <para>Three new ioctls are available: &VIDIOC-G-EXT-CTRLS;, +&VIDIOC-S-EXT-CTRLS; and &VIDIOC-TRY-EXT-CTRLS;. These ioctls act on +arrays of controls (as opposed to the &VIDIOC-G-CTRL; and +&VIDIOC-S-CTRL; ioctls that act on a single control). This is needed +since it is often required to atomically change several controls at +once.</para> + +      <para>Each of the new ioctls expects a pointer to a +&v4l2-ext-controls;. This structure contains a pointer to the control +array, a count of the number of controls in that array and a control +class. Control classes are used to group similar controls into a +single class. For example, control class +<constant>V4L2_CTRL_CLASS_USER</constant> contains all user controls +(&ie; all controls that can also be set using the old +<constant>VIDIOC_S_CTRL</constant> ioctl). Control class +<constant>V4L2_CTRL_CLASS_MPEG</constant> contains all controls +relating to MPEG encoding, etc.</para> + +      <para>All controls in the control array must belong to the +specified control class. An error is returned if this is not the +case.</para> + +      <para>It is also possible to use an empty control array (count +== 0) to check whether the specified control class is +supported.</para> + +      <para>The control array is a &v4l2-ext-control; array. The +<structname>v4l2_ext_control</structname> structure is very similar to +&v4l2-control;, except for the fact that it also allows for 64-bit +values and pointers to be passed.</para> + +      <para>It is important to realize that due to the flexibility of +controls it is necessary to check whether the control you want to set +actually is supported in the driver and what the valid range of values +is. So use the &VIDIOC-QUERYCTRL; and &VIDIOC-QUERYMENU; ioctls to +check this. Also note that it is possible that some of the menu +indices in a control of type <constant>V4L2_CTRL_TYPE_MENU</constant> +may not be supported (<constant>VIDIOC_QUERYMENU</constant> will +return an error). A good example is the list of supported MPEG audio +bitrates. Some drivers only support one or two bitrates, others +support a wider range.</para> + +      <para> +	All controls use machine endianness. +      </para> +    </section> + +    <section> +      <title>Enumerating Extended Controls</title> + +      <para>The recommended way to enumerate over the extended +controls is by using &VIDIOC-QUERYCTRL; in combination with the +<constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant> flag:</para> + +      <informalexample> +	<programlisting> +&v4l2-queryctrl; qctrl; + +qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL; +while (0 == ioctl (fd, &VIDIOC-QUERYCTRL;, &qctrl)) { +	/* ... */ +	qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; +} +</programlisting> +      </informalexample> + +      <para>The initial control ID is set to 0 ORed with the +<constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant> flag. The +<constant>VIDIOC_QUERYCTRL</constant> ioctl will return the first +control with a higher ID than the specified one. When no such controls +are found an error is returned.</para> + +      <para>If you want to get all controls within a specific control +class, then you can set the initial +<structfield>qctrl.id</structfield> value to the control class and add +an extra check to break out of the loop when a control of another +control class is found:</para> + +      <informalexample> +	<programlisting> +qctrl.id = V4L2_CTRL_CLASS_MPEG | V4L2_CTRL_FLAG_NEXT_CTRL; +while (0 == ioctl (fd, &VIDIOC-QUERYCTRL;, &qctrl)) { +	if (V4L2_CTRL_ID2CLASS (qctrl.id) != V4L2_CTRL_CLASS_MPEG) +		break; +		/* ... */ +		qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; +	} +</programlisting> +      </informalexample> + +      <para>The 32-bit <structfield>qctrl.id</structfield> value is +subdivided into three bit ranges: the top 4 bits are reserved for +flags (⪚ <constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant>) and are not +actually part of the ID. The remaining 28 bits form the control ID, of +which the most significant 12 bits define the control class and the +least significant 16 bits identify the control within the control +class. It is guaranteed that these last 16 bits are always non-zero +for controls. The range of 0x1000 and up are reserved for +driver-specific controls. The macro +<constant>V4L2_CTRL_ID2CLASS(id)</constant> returns the control class +ID based on a control ID.</para> + +      <para>If the driver does not support extended controls, then +<constant>VIDIOC_QUERYCTRL</constant> will fail when used in +combination with <constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant>. In +that case the old method of enumerating control should be used (see +1.8). But if it is supported, then it is guaranteed to enumerate over +all controls, including driver-private controls.</para> +    </section> + +    <section> +      <title>Creating Control Panels</title> + +      <para>It is possible to create control panels for a graphical +user interface where the user can select the various controls. +Basically you will have to iterate over all controls using the method +described above. Each control class starts with a control of type +<constant>V4L2_CTRL_TYPE_CTRL_CLASS</constant>. +<constant>VIDIOC_QUERYCTRL</constant> will return the name of this +control class which can be used as the title of a tab page within a +control panel.</para> + +      <para>The flags field of &v4l2-queryctrl; also contains hints on +the behavior of the control. See the &VIDIOC-QUERYCTRL; documentation +for more details.</para> +    </section> + +    <section id="mpeg-controls"> +      <title>Codec Control Reference</title> + +      <para>Below all controls within the Codec control class are +described. First the generic controls, then controls specific for +certain hardware.</para> + +      <para>Note: These controls are applicable to all codecs and +not just MPEG. The defines are prefixed with V4L2_CID_MPEG/V4L2_MPEG +as the controls were originally made for MPEG codecs and later +extended to cover all encoding formats.</para> + +      <section> +	<title>Generic Codec Controls</title> + +	<table pgwide="1" frame="none" id="mpeg-control-id"> +	  <title>Codec Control IDs</title> +	  <tgroup cols="4"> +	    <colspec colname="c1" colwidth="1*" /> +	    <colspec colname="c2" colwidth="6*" /> +	    <colspec colname="c3" colwidth="2*" /> +	    <colspec colname="c4" colwidth="6*" /> +	    <spanspec namest="c1" nameend="c2" spanname="id" /> +	    <spanspec namest="c2" nameend="c4" spanname="descr" /> +	    <thead> +	      <row> +		<entry spanname="id" align="left">ID</entry> +		<entry align="left">Type</entry> +	      </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CLASS</constant> </entry> +		<entry>class</entry> +	      </row><row><entry spanname="descr">The Codec class +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a +description of this control class. This description can be used as the +caption of a Tab page in a GUI, for example.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-stream-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_stream_type</entry> +	      </row><row><entry spanname="descr">The MPEG-1, -2 or -4 +output stream type. One cannot assume anything here. Each hardware +MPEG encoder tends to support different subsets of the available MPEG +stream types. This control is specific to multiplexed MPEG streams. +The currently defined stream types are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_TYPE_MPEG2_PS</constant> </entry> +		      <entry>MPEG-2 program stream</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_TYPE_MPEG2_TS</constant> </entry> +		      <entry>MPEG-2 transport stream</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_TYPE_MPEG1_SS</constant> </entry> +		      <entry>MPEG-1 system stream</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_TYPE_MPEG2_DVD</constant> </entry> +		      <entry>MPEG-2 DVD-compatible stream</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_TYPE_MPEG1_VCD</constant> </entry> +		      <entry>MPEG-1 VCD-compatible stream</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD</constant> </entry> +		      <entry>MPEG-2 SVCD-compatible stream</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_PID_PMT</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Program Map Table +Packet ID for the MPEG transport stream (default 16)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_PID_AUDIO</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Audio Packet ID for +the MPEG transport stream (default 256)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_PID_VIDEO</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Video Packet ID for +the MPEG transport stream (default 260)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_PID_PCR</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Packet ID for the +MPEG transport stream carrying PCR fields (default 259)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_PES_ID_AUDIO</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Audio ID for MPEG +PES</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_PES_ID_VIDEO</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Video ID for MPEG +PES</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-stream-vbi-fmt"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_STREAM_VBI_FMT</constant> </entry> +		<entry>enum v4l2_mpeg_stream_vbi_fmt</entry> +	      </row><row><entry spanname="descr">Some cards can embed +VBI data (⪚ Closed Caption, Teletext) into the MPEG stream. This +control selects whether VBI data should be embedded, and if so, what +embedding method should be used. The list of possible VBI formats +depends on the driver. The currently defined VBI format types +are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_VBI_FMT_NONE</constant> </entry> +		      <entry>No VBI in the MPEG stream</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant> </entry> +		      <entry>VBI in private packets, IVTV format (documented +in the kernel sources in the file <filename>Documentation/video4linux/cx2341x/README.vbi</filename>)</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-sampling-freq"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ</constant> </entry> +		<entry>enum v4l2_mpeg_audio_sampling_freq</entry> +	      </row><row><entry spanname="descr">MPEG Audio sampling +frequency. Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100</constant> </entry> +		      <entry>44.1 kHz</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000</constant> </entry> +		      <entry>48 kHz</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000</constant> </entry> +		      <entry>32 kHz</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-encoding"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_ENCODING</constant> </entry> +		<entry>enum v4l2_mpeg_audio_encoding</entry> +	      </row><row><entry spanname="descr">MPEG Audio encoding. +This control is specific to multiplexed MPEG streams. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_ENCODING_LAYER_1</constant> </entry> +		      <entry>MPEG-1/2 Layer I encoding</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_ENCODING_LAYER_2</constant> </entry> +		      <entry>MPEG-1/2 Layer II encoding</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_ENCODING_LAYER_3</constant> </entry> +		      <entry>MPEG-1/2 Layer III encoding</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_ENCODING_AAC</constant> </entry> +		      <entry>MPEG-2/4 AAC (Advanced Audio Coding)</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_ENCODING_AC3</constant> </entry> +		      <entry>AC-3 aka ATSC A/52 encoding</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-l1-bitrate"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_L1_BITRATE</constant> </entry> +		<entry>enum v4l2_mpeg_audio_l1_bitrate</entry> +	      </row><row><entry spanname="descr">MPEG-1/2 Layer I bitrate. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_32K</constant> </entry> +		      <entry>32 kbit/s</entry></row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_64K</constant> </entry> +		      <entry>64 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_96K</constant> </entry> +		      <entry>96 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_128K</constant> </entry> +		      <entry>128 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_160K</constant> </entry> +		      <entry>160 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_192K</constant> </entry> +		      <entry>192 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_224K</constant> </entry> +		      <entry>224 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_256K</constant> </entry> +		      <entry>256 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_288K</constant> </entry> +		      <entry>288 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_320K</constant> </entry> +		      <entry>320 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_352K</constant> </entry> +		      <entry>352 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_384K</constant> </entry> +		      <entry>384 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_416K</constant> </entry> +		      <entry>416 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L1_BITRATE_448K</constant> </entry> +		      <entry>448 kbit/s</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-l2-bitrate"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_L2_BITRATE</constant> </entry> +		<entry>enum v4l2_mpeg_audio_l2_bitrate</entry> +	      </row><row><entry spanname="descr">MPEG-1/2 Layer II bitrate. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_32K</constant> </entry> +		      <entry>32 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_48K</constant> </entry> +		      <entry>48 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_56K</constant> </entry> +		      <entry>56 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_64K</constant> </entry> +		      <entry>64 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_80K</constant> </entry> +		      <entry>80 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_96K</constant> </entry> +		      <entry>96 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_112K</constant> </entry> +		      <entry>112 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_128K</constant> </entry> +		      <entry>128 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_160K</constant> </entry> +		      <entry>160 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_192K</constant> </entry> +		      <entry>192 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_224K</constant> </entry> +		      <entry>224 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_256K</constant> </entry> +		      <entry>256 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_320K</constant> </entry> +		      <entry>320 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L2_BITRATE_384K</constant> </entry> +		      <entry>384 kbit/s</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-l3-bitrate"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_L3_BITRATE</constant> </entry> +		<entry>enum v4l2_mpeg_audio_l3_bitrate</entry> +	      </row><row><entry spanname="descr">MPEG-1/2 Layer III bitrate. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_32K</constant> </entry> +		      <entry>32 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_40K</constant> </entry> +		      <entry>40 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_48K</constant> </entry> +		      <entry>48 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_56K</constant> </entry> +		      <entry>56 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_64K</constant> </entry> +		      <entry>64 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_80K</constant> </entry> +		      <entry>80 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_96K</constant> </entry> +		      <entry>96 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_112K</constant> </entry> +		      <entry>112 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_128K</constant> </entry> +		      <entry>128 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_160K</constant> </entry> +		      <entry>160 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_192K</constant> </entry> +		      <entry>192 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_224K</constant> </entry> +		      <entry>224 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_256K</constant> </entry> +		      <entry>256 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_L3_BITRATE_320K</constant> </entry> +		      <entry>320 kbit/s</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_AAC_BITRATE</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">AAC bitrate in bits per second.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-ac3-bitrate"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_AC3_BITRATE</constant> </entry> +		<entry>enum v4l2_mpeg_audio_ac3_bitrate</entry> +	      </row><row><entry spanname="descr">AC-3 bitrate. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_32K</constant> </entry> +		      <entry>32 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_40K</constant> </entry> +		      <entry>40 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_48K</constant> </entry> +		      <entry>48 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_56K</constant> </entry> +		      <entry>56 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_64K</constant> </entry> +		      <entry>64 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_80K</constant> </entry> +		      <entry>80 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_96K</constant> </entry> +		      <entry>96 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_112K</constant> </entry> +		      <entry>112 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_128K</constant> </entry> +		      <entry>128 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_160K</constant> </entry> +		      <entry>160 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_192K</constant> </entry> +		      <entry>192 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_224K</constant> </entry> +		      <entry>224 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_256K</constant> </entry> +		      <entry>256 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_320K</constant> </entry> +		      <entry>320 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_384K</constant> </entry> +		      <entry>384 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_448K</constant> </entry> +		      <entry>448 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_512K</constant> </entry> +		      <entry>512 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_576K</constant> </entry> +		      <entry>576 kbit/s</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_AC3_BITRATE_640K</constant> </entry> +		      <entry>640 kbit/s</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_audio_mode</entry> +	      </row><row><entry spanname="descr">MPEG Audio mode. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_STEREO</constant> </entry> +		      <entry>Stereo</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_JOINT_STEREO</constant> </entry> +		      <entry>Joint Stereo</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_DUAL</constant> </entry> +		      <entry>Bilingual</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_MONO</constant> </entry> +		      <entry>Mono</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-mode-extension"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_MODE_EXTENSION</constant> </entry> +		<entry>enum v4l2_mpeg_audio_mode_extension</entry> +	      </row><row><entry spanname="descr">Joint Stereo +audio mode extension. In Layer I and II they indicate which subbands +are in intensity stereo. All other subbands are coded in stereo. Layer +III is not (yet) supported. Possible values +are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4</constant> </entry> +		      <entry>Subbands 4-31 in intensity stereo</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8</constant> </entry> +		      <entry>Subbands 8-31 in intensity stereo</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12</constant> </entry> +		      <entry>Subbands 12-31 in intensity stereo</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16</constant> </entry> +		      <entry>Subbands 16-31 in intensity stereo</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-emphasis"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_EMPHASIS</constant> </entry> +		<entry>enum v4l2_mpeg_audio_emphasis</entry> +	      </row><row><entry spanname="descr">Audio Emphasis. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_EMPHASIS_NONE</constant> </entry> +		      <entry>None</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS</constant> </entry> +		      <entry>50/15 microsecond emphasis</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17</constant> </entry> +		      <entry>CCITT J.17</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-crc"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_CRC</constant> </entry> +		<entry>enum v4l2_mpeg_audio_crc</entry> +	      </row><row><entry spanname="descr">CRC method. Possible +values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_CRC_NONE</constant> </entry> +		      <entry>None</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_CRC_CRC16</constant> </entry> +		      <entry>16 bit parity check</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_MUTE</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Mutes the audio when +capturing. This is not done by muting audio hardware, which can still +produce a slight hiss, but in the encoder itself, guaranteeing a fixed +and reproducible audio bitstream. 0 = unmuted, 1 = muted.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-dec-playback"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK</constant> </entry> +		<entry>enum v4l2_mpeg_audio_dec_playback</entry> +	      </row><row><entry spanname="descr">Determines how monolingual audio should be played back. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO</constant> </entry> +		      <entry>Automatically determines the best playback mode.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO</constant> </entry> +		      <entry>Stereo playback.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT</constant> </entry> +		      <entry>Left channel playback.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT</constant> </entry> +		      <entry>Right channel playback.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO</constant> </entry> +		      <entry>Mono playback.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO</constant> </entry> +		      <entry>Stereo playback with swapped left and right channels.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-audio-dec-multilingual-playback"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK</constant> </entry> +		<entry>enum v4l2_mpeg_audio_dec_playback</entry> +	      </row><row><entry spanname="descr">Determines how multilingual audio should be played back.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-encoding"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_ENCODING</constant> </entry> +		<entry>enum v4l2_mpeg_video_encoding</entry> +	      </row><row><entry spanname="descr">MPEG Video encoding +method. This control is specific to multiplexed MPEG streams. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ENCODING_MPEG_1</constant> </entry> +		      <entry>MPEG-1 Video encoding</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ENCODING_MPEG_2</constant> </entry> +		      <entry>MPEG-2 Video encoding</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC</constant> </entry> +		      <entry>MPEG-4 AVC (H.264) Video encoding</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-aspect"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_ASPECT</constant> </entry> +		<entry>enum v4l2_mpeg_video_aspect</entry> +	      </row><row><entry spanname="descr">Video aspect. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ASPECT_1x1</constant> </entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ASPECT_4x3</constant> </entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ASPECT_16x9</constant> </entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_ASPECT_221x100</constant> </entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_B_FRAMES</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Number of B-Frames +(default 2)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_GOP_SIZE</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">GOP size (default +12)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_GOP_CLOSURE</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">GOP closure (default +1)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_PULLDOWN</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Enable 3:2 pulldown +(default 0)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-bitrate-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_BITRATE_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_video_bitrate_mode</entry> +	      </row><row><entry spanname="descr">Video bitrate mode. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_BITRATE_MODE_VBR</constant> </entry> +		      <entry>Variable bitrate</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_BITRATE_MODE_CBR</constant> </entry> +		      <entry>Constant bitrate</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_BITRATE</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Video bitrate in bits +per second.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_BITRATE_PEAK</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Peak video bitrate in +bits per second. Must be larger or equal to the average video bitrate. +It is ignored if the video bitrate mode is set to constant +bitrate.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">For every captured +frame, skip this many subsequent frames (default 0).</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MUTE</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">"Mutes" the video to a +fixed color when capturing. This is useful for testing, to produce a +fixed video bitstream. 0 = unmuted, 1 = muted.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MUTE_YUV</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Sets the "mute" color +of the video. The supplied 32-bit integer is interpreted as follows (bit +0 = least significant bit):</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry>Bit 0:7</entry> +		      <entry>V chrominance information</entry> +		    </row> +		    <row> +		      <entry>Bit 8:15</entry> +		      <entry>U chrominance information</entry> +		    </row> +		    <row> +		      <entry>Bit 16:23</entry> +		      <entry>Y luminance information</entry> +		    </row> +		    <row> +		      <entry>Bit 24:31</entry> +		      <entry>Must be zero.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-dec-pts"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_DEC_PTS</constant> </entry> +		<entry>integer64</entry> +	      </row><row><entry spanname="descr">This read-only control returns the +33-bit video Presentation Time Stamp as defined in ITU T-REC-H.222.0 and ISO/IEC 13818-1 of +the currently displayed frame. This is the same PTS as is used in &VIDIOC-DECODER-CMD;.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-dec-frame"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_DEC_FRAME</constant> </entry> +		<entry>integer64</entry> +	      </row><row><entry spanname="descr">This read-only control returns the +frame counter of the frame that is currently displayed (decoded). This value is reset to 0 whenever +the decoder is started.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">If enabled the decoder expects to receive a single slice per buffer, otherwise +the decoder expects a single frame in per buffer. Applicable to the decoder, all codecs. +</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Enable writing sample aspect ratio in the Video Usability Information. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-vui-sar-idc"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_vui_sar_idc</entry> +	      </row> +	      <row><entry spanname="descr">VUI sample aspect ratio indicator for H.264 encoding. The value +is defined in the table E-1 in the standard. Applicable to the H264 encoder.</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> + +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED</constant> </entry> +			  <entry>Unspecified</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1</constant> </entry> +			  <entry>1x1</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11</constant> </entry> +			  <entry>12x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11</constant> </entry> +			  <entry>10x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11</constant> </entry> +			  <entry>16x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33</constant> </entry> +			  <entry>40x33</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11</constant> </entry> +			  <entry>24x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11</constant> </entry> +			  <entry>20x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11</constant> </entry> +			  <entry>32x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33</constant> </entry> +			  <entry>80x33</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11</constant> </entry> +			  <entry>18x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11</constant> </entry> +			  <entry>15x11</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33</constant> </entry> +			  <entry>64x33</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99</constant> </entry> +			  <entry>160x99</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3</constant> </entry> +			  <entry>4x3</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2</constant> </entry> +			  <entry>3x2</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1</constant> </entry> +			  <entry>2x1</entry> +			</row> +			<row> +			  <entry><constant>V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED</constant> </entry> +			  <entry>Extended SAR</entry> +			</row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Extended sample aspect ratio width for H.264 VUI encoding. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Extended sample aspect ratio height for H.264 VUI encoding. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-level"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_level</entry> +	      </row> +	      <row><entry spanname="descr">The level information for the H264 video elementary stream. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_1_0</constant> </entry> +		      <entry>Level 1.0</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_1B</constant> </entry> +		      <entry>Level 1B</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_1_1</constant> </entry> +		      <entry>Level 1.1</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_1_2</constant> </entry> +		      <entry>Level 1.2</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_1_3</constant> </entry> +		      <entry>Level 1.3</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_2_0</constant> </entry> +		      <entry>Level 2.0</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_2_1</constant> </entry> +		      <entry>Level 2.1</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_2_2</constant> </entry> +		      <entry>Level 2.2</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_3_0</constant> </entry> +		      <entry>Level 3.0</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_3_1</constant> </entry> +		      <entry>Level 3.1</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_3_2</constant> </entry> +		      <entry>Level 3.2</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_4_0</constant> </entry> +		      <entry>Level 4.0</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_4_1</constant> </entry> +		      <entry>Level 4.1</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_4_2</constant> </entry> +		      <entry>Level 4.2</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_5_0</constant> </entry> +		      <entry>Level 5.0</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LEVEL_5_1</constant> </entry> +		      <entry>Level 5.1</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-mpeg4-level"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant> </entry> +		<entry>enum v4l2_mpeg_video_mpeg4_level</entry> +	      </row> +	      <row><entry spanname="descr">The level information for the MPEG4 elementary stream. +Applicable to the MPEG4 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_0</constant> </entry> +		      <entry>Level 0</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_0B</constant> </entry> +		      <entry>Level 0b</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_1</constant> </entry> +		      <entry>Level 1</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_2</constant> </entry> +		      <entry>Level 2</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_3</constant> </entry> +		      <entry>Level 3</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_3B</constant> </entry> +		      <entry>Level 3b</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_4</constant> </entry> +		      <entry>Level 4</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_LEVEL_5</constant> </entry> +		      <entry>Level 5</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-profile"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_PROFILE</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_profile</entry> +	      </row> +	      <row><entry spanname="descr">The profile information for H264. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE</constant> </entry> +		      <entry>Baseline profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE</constant> </entry> +		      <entry>Constrained Baseline profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_MAIN</constant> </entry> +		      <entry>Main profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED</constant> </entry> +		      <entry>Extended profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH</constant> </entry> +		      <entry>High profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10</constant> </entry> +		      <entry>High 10 profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422</constant> </entry> +		      <entry>High 422 profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE</constant> </entry> +		      <entry>High 444 Predictive profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA</constant> </entry> +		      <entry>High 10 Intra profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA</constant> </entry> +		      <entry>High 422 Intra profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA</constant> </entry> +		      <entry>High 444 Intra profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA</constant> </entry> +		      <entry>CAVLC 444 Intra profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE</constant> </entry> +		      <entry>Scalable Baseline profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH</constant> </entry> +		      <entry>Scalable High profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA</constant> </entry> +		      <entry>Scalable High Intra profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH</constant> </entry> +		      <entry>Stereo High profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH</constant> </entry> +		      <entry>Multiview High profile</entry> +		    </row> + +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-mpeg4-profile"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE</constant> </entry> +		<entry>enum v4l2_mpeg_video_mpeg4_profile</entry> +	      </row> +	      <row><entry spanname="descr">The profile information for MPEG4. +Applicable to the MPEG4 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_PROFILE_SIMPLE</constant> </entry> +		      <entry>Simple profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_PROFILE_ADVANCED_SIMPLE</constant> </entry> +		      <entry>Advanced Simple profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_PROFILE_CORE</constant> </entry> +		      <entry>Core profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_PROFILE_SIMPLE_SCALABLE</constant> </entry> +		      <entry>Simple Scalable profile</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_PROFILE_ADVANCED_CODING_EFFICIENCY</constant> </entry> +		      <entry></entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MAX_REF_PIC</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">The maximum number of reference pictures used for encoding. +Applicable to the encoder. +</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-multi-slice-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_video_multi_slice_mode</entry> +	      </row> +	      <row><entry spanname="descr">Determines how the encoder should handle division of frame into slices. +Applicable to the encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE</constant> </entry> +		      <entry>Single slice per frame.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB</constant> </entry> +		      <entry>Multiple slices with set maximum number of macroblocks per slice.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES</constant> </entry> +		      <entry>Multiple slice with set maximum size in bytes per slice.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">The maximum number of macroblocks in a slice. Used when +<constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant> is set to <constant>V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB</constant>. +Applicable to the encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">The maximum size of a slice in bytes. Used when +<constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant> is set to <constant>V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES</constant>. +Applicable to the encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-loop-filter-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_loop_filter_mode</entry> +	      </row> +	      <row><entry spanname="descr">Loop filter mode for H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED</constant> </entry> +		      <entry>Loop filter is enabled.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED</constant> </entry> +		      <entry>Loop filter is disabled.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY</constant> </entry> +		      <entry>Loop filter is disabled at the slice boundary.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Loop filter alpha coefficient, defined in the H264 standard. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Loop filter beta coefficient, defined in the H264 standard. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-entropy-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_entropy_mode</entry> +	      </row> +	      <row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC</constant> </entry> +		      <entry>Use CAVLC entropy coding.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC</constant> </entry> +		      <entry>Use CABAC entropy coding.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Enable 8X8 transform for H264. Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Cyclic intra macroblock refresh. This is the number of continuous macroblocks +refreshed every frame. Each frame a successive set of macroblocks is refreshed until the cycle completes and starts from the +top of the frame. Applicable to H264, H263 and MPEG4 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Frame level rate control enable. +If this control is disabled then the quantization parameter for each frame type is constant and set with appropriate controls +(e.g. <constant>V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP</constant>). +If frame rate control is enabled then quantization parameter is adjusted to meet the chosen bitrate. Minimum and maximum value +for the quantization parameter can be set with appropriate controls (e.g. <constant>V4L2_CID_MPEG_VIDEO_H263_MIN_QP</constant>). +Applicable to encoders.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Macroblock level rate control enable. +Applicable to the MPEG4 and H264 encoders.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_QPEL</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Quarter pixel motion estimation for MPEG4. Applicable to the MPEG4 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an I frame for H263. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H263_MIN_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Minimum quantization parameter for H263. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H263_MAX_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Maximum quantization parameter for H263. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an P frame for H263. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an B frame for H263. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an I frame for H264. Valid range: from 0 to 51.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_MIN_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Minimum quantization parameter for H264. Valid range: from 0 to 51.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_MAX_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Maximum quantization parameter for H264. Valid range: from 0 to 51.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an P frame for H264. Valid range: from 0 to 51.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an B frame for H264. Valid range: from 0 to 51.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an I frame for MPEG4. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Minimum quantization parameter for MPEG4. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Maximum quantization parameter for MPEG4. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an P frame for MPEG4. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an B frame for MPEG4. Valid range: from 1 to 31.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VBV_SIZE</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">The Video Buffer Verifier size in kilobytes, it is used as a limitation of frame skip. +The VBV is defined in the standard as a mean to verify that the produced stream will be successfully decoded. +The standard describes it as "Part of a hypothetical decoder that is conceptually connected to the +output of the encoder. Its purpose is to provide a constraint on the variability of the data rate that an +encoder or editing process may produce.". +Applicable to the MPEG1, MPEG2, MPEG4 encoders.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-vbv-delay"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VBV_DELAY</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Sets the initial delay in milliseconds for +VBV buffer control.</entry> +	      </row> + +		  <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-hor-search-range"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE</constant> </entry> +		<entry>integer</entry> +	      </row> +		<row><entry spanname="descr">Horizontal search range defines maximum horizontal search area in pixels +to search and match for the present Macroblock (MB) in the reference picture. This V4L2 control macro is used to set +horizontal search range for motion estimation module in video encoder.</entry> +	      </row> + +		 <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-vert-search-range"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE</constant> </entry> +		<entry>integer</entry> +	      </row> +		<row><entry spanname="descr">Vertical search range defines maximum vertical search area in pixels +to search and match for the present Macroblock (MB) in the reference picture. This V4L2 control macro is used to set +vertical search range for motion estimation module in video encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">The Coded Picture Buffer size in kilobytes, it is used as a limitation of frame skip. +The CPB is defined in the H264 standard as a mean to verify that the produced stream will be successfully decoded. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_I_PERIOD</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Period between I-frames in the open GOP for H264. In case of an open GOP +this is the period between two I-frames. The period between IDR (Instantaneous Decoding Refresh) frames is taken from the GOP_SIZE control. +An IDR frame, which stands for Instantaneous Decoding Refresh is an I-frame after which no prior frames are +referenced. This means that a stream can be restarted from an IDR frame without the need to store or decode any +previous frames. Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-header-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HEADER_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_video_header_mode</entry> +	      </row> +	      <row><entry spanname="descr">Determines whether the header is returned as the first buffer or is +it returned together with the first frame. Applicable to encoders. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE</constant> </entry> +		      <entry>The stream header is returned separately in the first buffer.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME</constant> </entry> +		      <entry>The stream header is returned together with the first encoded frame.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Repeat the video sequence headers. Repeating these +headers makes random access to the video stream easier. Applicable to the MPEG1, 2 and 4 encoder.</entry> +	      </row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Enabled the deblocking post processing filter for MPEG4 decoder. +Applicable to the MPEG4 decoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_VOP_TIME_RES</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">vop_time_increment_resolution value for MPEG4. Applicable to the MPEG4 encoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_VOP_TIME_INC</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">vop_time_increment value for MPEG4. Applicable to the MPEG4 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Enable generation of frame packing supplemental enhancement information in the encoded bitstream. +The frame packing SEI message contains the arrangement of L and R planes for 3D viewing. Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Sets current frame as frame0 in frame packing SEI. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-sei-fp-arrangement-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_sei_fp_arrangement_type</entry> +	      </row> +	      <row><entry spanname="descr">Frame packing arrangement type for H264 SEI. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHEKERBOARD</constant> </entry> +		      <entry>Pixels are alternatively from L and R.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN</constant> </entry> +		      <entry>L and R are interlaced by column.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW</constant> </entry> +		      <entry>L and R are interlaced by row.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE</constant> </entry> +		      <entry>L is on the left, R on the right.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM</constant> </entry> +		      <entry>L is on top, R on bottom.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL</constant> </entry> +		      <entry>One view per frame.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_FMO</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Enables flexible macroblock ordering in the encoded bitstream. It is a technique +used for restructuring the ordering of macroblocks in pictures. Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-fmo-map-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_fmo_map_type</entry> +	      </row> +	      <row><entry spanname="descr">When using FMO, the map type divides the image in different scan patterns of macroblocks. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES</constant> </entry> +		      <entry>Slices are interleaved one after other with macroblocks in run length order.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES</constant> </entry> +		      <entry>Scatters the macroblocks based on a mathematical function known to both encoder and decoder.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER</constant> </entry> +		      <entry>Macroblocks arranged in rectangular areas or regions of interest.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT</constant> </entry> +		      <entry>Slice groups grow in a cyclic way from centre to outwards.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN</constant> </entry> +		      <entry>Slice groups grow in raster scan pattern from left to right.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN</constant> </entry> +		      <entry>Slice groups grow in wipe scan pattern from top to bottom.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT</constant> </entry> +		      <entry>User defined map type.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Number of slice groups in FMO. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-fmo-change-direction"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_fmo_change_dir</entry> +	      </row> +	      <row><entry spanname="descr">Specifies a direction of the slice group change for raster and wipe maps. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT</constant> </entry> +		      <entry>Raster scan or wipe right.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT</constant> </entry> +		      <entry>Reverse raster scan or wipe left.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Specifies the size of the first slice group for raster and wipe map. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Specifies the number of consecutive macroblocks for the interleaved map. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ASO</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Enables arbitrary slice ordering in encoded bitstream. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Specifies the slice order in ASO. Applicable to the H264 encoder. +The supplied 32-bit integer is interpreted as follows (bit +0 = least significant bit):</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry>Bit 0:15</entry> +		      <entry>Slice ID</entry> +		    </row> +		    <row> +		      <entry>Bit 16:32</entry> +		      <entry>Slice position or order</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Enables H264 hierarchical coding. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-video-h264-hierarchical-coding-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_video_h264_hierarchical_coding_type</entry> +	      </row> +	      <row><entry spanname="descr">Specifies the hierarchical coding type. +Applicable to the H264 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B</constant> </entry> +		      <entry>Hierarchical B coding.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P</constant> </entry> +		      <entry>Hierarchical P coding.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Specifies the number of hierarchical coding layers. +Applicable to the H264 encoder.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Specifies a user defined QP for each layer. Applicable to the H264 encoder. +The supplied 32-bit integer is interpreted as follows (bit +0 = least significant bit):</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry>Bit 0:15</entry> +		      <entry>QP value</entry> +		    </row> +		    <row> +		      <entry>Bit 16:32</entry> +		      <entry>Layer number</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> + +	    </tbody> +	  </tgroup> +	</table> +      </section> + +      <section> +	<title>MFC 5.1 MPEG Controls</title> + +	<para>The following MPEG class controls deal with MPEG +decoding and encoding settings that are specific to the Multi Format Codec 5.1 device present +in the S5P family of SoCs by Samsung. +</para> + +	<table pgwide="1" frame="none" id="mfc51-control-id"> +	  <title>MFC 5.1 Control IDs</title> +	  <tgroup cols="4"> +	    <colspec colname="c1" colwidth="1*" /> +	    <colspec colname="c2" colwidth="6*" /> +	    <colspec colname="c3" colwidth="2*" /> +	    <colspec colname="c4" colwidth="6*" /> +	    <spanspec namest="c1" nameend="c2" spanname="id" /> +	    <spanspec namest="c2" nameend="c4" spanname="descr" /> +	    <thead> +	      <row> +		<entry spanname="id" align="left">ID</entry> +		<entry align="left">Type</entry> +	      </row><row><entry spanname="descr" align="left">Description</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">If the display delay is enabled then the decoder has to return a +CAPTURE buffer after processing a certain number of OUTPUT buffers. If this number is low, then it may result in +buffers not being dequeued in display order. In addition hardware may still use those buffers as reference, thus +application should not write to those buffers. This feature can be used for example for generating thumbnails of videos. +Applicable to the H264 decoder. +	      </entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Display delay value for H264 decoder. +The decoder is forced to return a decoded frame after the set 'display delay' number of frames. If this number is +low it may result in frames returned out of dispaly order, in addition the hardware may still be using the returned buffer +as a reference picture for subsequent frames. +</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">The number of reference pictures used for encoding a P picture. +Applicable to the H264 encoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_PADDING</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Padding enable in the encoder - use a color instead of repeating border pixels. +Applicable to encoders.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Padding color in the encoder. Applicable to encoders. The supplied 32-bit integer is interpreted as follows (bit +0 = least significant bit):</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry>Bit 0:7</entry> +		      <entry>V chrominance information</entry> +		    </row> +		    <row> +		      <entry>Bit 8:15</entry> +		      <entry>U chrominance information</entry> +		    </row> +		    <row> +		      <entry>Bit 16:23</entry> +		      <entry>Y luminance information</entry> +		    </row> +		    <row> +		      <entry>Bit 24:31</entry> +		      <entry>Must be zero.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Reaction coefficient for MFC rate control. Applicable to encoders. +<para>Note 1: Valid only when the frame level RC is enabled.</para> +<para>Note 2: For tight CBR, this field must be small (ex. 2 ~ 10). +For VBR, this field must be large (ex. 100 ~ 1000).</para> +<para>Note 3: It is not recommended to use the greater number than FRAME_RATE * (10^9 / BIT_RATE).</para> +</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Adaptive rate control for dark region. +Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE</constant>). +Applicable to the H264 encoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Adaptive rate control for smooth region. +Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE</constant>). +Applicable to the H264 encoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Adaptive rate control for static region. +Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE</constant>). +Applicable to the H264 encoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY</constant> </entry> +		<entry>boolean</entry> +	      </row><row><entry spanname="descr">Adaptive rate control for activity region. +Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE</constant>). +Applicable to the H264 encoder.</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-mfc51-video-frame-skip-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_mfc51_video_frame_skip_mode</entry> +	      </row> +	      <row><entry spanname="descr"> +Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then +a chosen data limit then the frame will be skipped. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_MFC51_FRAME_SKIP_MODE_DISABLED</constant> </entry> +		      <entry>Frame skip mode is disabled.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_MFC51_FRAME_SKIP_MODE_LEVEL_LIMIT</constant> </entry> +		      <entry>Frame skip mode enabled and buffer limit is set by the chosen level and is defined by the standard.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_MFC51_FRAME_SKIP_MODE_BUF_LIMIT</constant> </entry> +		      <entry>Frame skip mode enabled and buffer limit is set by the VBV (MPEG1/2/4) or CPB (H264) buffer size control.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT</constant> </entry> +		<entry>integer</entry> +	      </row><row><entry spanname="descr">Enable rate-control with fixed target bit. +If this setting is enabled, then the rate control logic of the encoder will calculate the average bitrate +for a GOP and keep it below or equal the set bitrate target. Otherwise the rate control logic calculates the +overall average bitrate for the stream and keeps it below or equal to the set bitrate. In the first case +the average bitrate for the whole stream will be smaller then the set bitrate. This is caused because the +average is calculated for smaller number of frames, on the other hand enabling this setting will ensure that +the stream will meet tight bandwidth contraints. Applicable to encoders. +</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-mfc51-video-force-frame-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_mfc51_video_force_frame_type</entry> +	      </row> +	      <row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_DISABLED</constant> </entry> +		      <entry>Forcing a specific frame type disabled.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_I_FRAME</constant> </entry> +		      <entry>Force an I-frame.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_MFC51_FORCE_FRAME_TYPE_NOT_CODED</constant> </entry> +		      <entry>Force a non-coded frame.</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	    </tbody> +	  </tgroup> +	</table> +      </section> + +      <section> +	<title>CX2341x MPEG Controls</title> + +	<para>The following MPEG class controls deal with MPEG +encoding settings that are specific to the Conexant CX23415 and +CX23416 MPEG encoding chips.</para> + +	<table pgwide="1" frame="none" id="cx2341x-control-id"> +	  <title>CX2341x Control IDs</title> +	  <tgroup cols="4"> +	    <colspec colname="c1" colwidth="1*" /> +	    <colspec colname="c2" colwidth="6*" /> +	    <colspec colname="c3" colwidth="2*" /> +	    <colspec colname="c4" colwidth="6*" /> +	    <spanspec namest="c1" nameend="c2" spanname="id" /> +	    <spanspec namest="c2" nameend="c4" spanname="descr" /> +	    <thead> +	      <row> +		<entry spanname="id" align="left">ID</entry> +		<entry align="left">Type</entry> +	      </row><row><entry spanname="descr" align="left">Description</entry> +	      </row> +	    </thead> +	    <tbody valign="top"> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-cx2341x-video-spatial-filter-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_cx2341x_video_spatial_filter_mode</entry> +	      </row><row><entry spanname="descr">Sets the Spatial +Filter mode (default <constant>MANUAL</constant>). Possible values +are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL</constant> </entry> +		      <entry>Choose the filter manually</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO</constant> </entry> +		      <entry>Choose the filter automatically</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER</constant> </entry> +		<entry>integer (0-15)</entry> +	      </row><row><entry spanname="descr">The setting for the +Spatial Filter. 0 = off, 15 = maximum. (Default is 0.)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="luma-spatial-filter-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type</entry> +	      </row><row><entry spanname="descr">Select the algorithm +to use for the Luma Spatial Filter (default +<constant>1D_HOR</constant>). Possible values:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF</constant> </entry> +		      <entry>No filter</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR</constant> </entry> +		      <entry>One-dimensional horizontal</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT</constant> </entry> +		      <entry>One-dimensional vertical</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE</constant> </entry> +		      <entry>Two-dimensional separable</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE</constant> </entry> +		      <entry>Two-dimensional symmetrical +non-separable</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="chroma-spatial-filter-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type</entry> +	      </row><row><entry spanname="descr">Select the algorithm +for the Chroma Spatial Filter (default <constant>1D_HOR</constant>). +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF</constant> </entry> +		      <entry>No filter</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR</constant> </entry> +		      <entry>One-dimensional horizontal</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-cx2341x-video-temporal-filter-mode"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE</constant> </entry> +		<entry>enum v4l2_mpeg_cx2341x_video_temporal_filter_mode</entry> +	      </row><row><entry spanname="descr">Sets the Temporal +Filter mode (default <constant>MANUAL</constant>). Possible values +are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL</constant> </entry> +		      <entry>Choose the filter manually</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO</constant> </entry> +		      <entry>Choose the filter automatically</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER</constant> </entry> +		<entry>integer (0-31)</entry> +	      </row><row><entry spanname="descr">The setting for the +Temporal Filter. 0 = off, 31 = maximum. (Default is 8 for full-scale +capturing and 0 for scaled capturing.)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row id="v4l2-mpeg-cx2341x-video-median-filter-type"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE</constant> </entry> +		<entry>enum v4l2_mpeg_cx2341x_video_median_filter_type</entry> +	      </row><row><entry spanname="descr">Median Filter Type +(default <constant>OFF</constant>). Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF</constant> </entry> +		      <entry>No filter</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR</constant> </entry> +		      <entry>Horizontal filter</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT</constant> </entry> +		      <entry>Vertical filter</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT</constant> </entry> +		      <entry>Horizontal and vertical filter</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG</constant> </entry> +		      <entry>Diagonal filter</entry> +		    </row> +		  </tbody> +		</entrytbl> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM</constant> </entry> +		<entry>integer (0-255)</entry> +	      </row><row><entry spanname="descr">Threshold above which +the luminance median filter is enabled (default 0)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP</constant> </entry> +		<entry>integer (0-255)</entry> +	      </row><row><entry spanname="descr">Threshold below which +the luminance median filter is enabled (default 255)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM</constant> </entry> +		<entry>integer (0-255)</entry> +	      </row><row><entry spanname="descr">Threshold above which +the chroma median filter is enabled (default 0)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP</constant> </entry> +		<entry>integer (0-255)</entry> +	      </row><row><entry spanname="descr">Threshold below which +the chroma median filter is enabled (default 255)</entry> +	      </row> +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS</constant> </entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">The CX2341X MPEG encoder +can insert one empty MPEG-2 PES packet into the stream between every +four video frames. The packet size is 2048 bytes, including the +packet_start_code_prefix and stream_id fields. The stream_id is 0xBF +(private stream 2). The payload consists of 0x00 bytes, to be filled +in by the application. 0 = do not insert, 1 = insert packets.</entry> +	      </row> +	    </tbody> +	  </tgroup> +	</table> +      </section> + +    <section> +      <title>VPX Control Reference</title> + +      <para>The VPX controls include controls for encoding parameters +      of VPx video codec.</para> + +      <table pgwide="1" frame="none" id="vpx-control-id"> +      <title>VPX Control IDs</title> + +      <tgroup cols="4"> +        <colspec colname="c1" colwidth="1*" /> +        <colspec colname="c2" colwidth="6*" /> +        <colspec colname="c3" colwidth="2*" /> +        <colspec colname="c4" colwidth="6*" /> +        <spanspec namest="c1" nameend="c2" spanname="id" /> +        <spanspec namest="c2" nameend="c4" spanname="descr" /> +        <thead> +          <row> +            <entry spanname="id" align="left">ID</entry> +            <entry align="left">Type</entry> +          </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +          </row> +        </thead> +        <tbody valign="top"> +          <row><entry></entry></row> + +	      <row><entry></entry></row> +	      <row id="v4l2-vpx-num-partitions"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS</constant></entry> +		<entry>enum v4l2_vp8_num_partitions</entry> +	      </row> +	      <row><entry spanname="descr">The number of token partitions to use in VP8 encoder. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION</constant></entry> +		      <entry>1 coefficient partition</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS</constant></entry> +		      <entry>2 coefficient partitions</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS</constant></entry> +		      <entry>4 coefficient partitions</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS</constant></entry> +		      <entry>8 coefficient partitions</entry> +	            </row> +                  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4</constant></entry> +		<entry>boolean</entry> +	      </row> +	      <row><entry spanname="descr">Setting this prevents intra 4x4 mode in the intra mode decision.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-vpx-num-ref-frames"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES</constant></entry> +		<entry>enum v4l2_vp8_num_ref_frames</entry> +	      </row> +	      <row><entry spanname="descr">The number of reference pictures for encoding P frames. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME</constant></entry> +		      <entry>Last encoded frame will be searched</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME</constant></entry> +		      <entry>Two frames will be searched among the last encoded frame, the golden frame +and the alternate reference (altref) frame. The encoder implementation will decide which two are chosen.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME</constant></entry> +		      <entry>The last encoded frame, the golden frame and the altref frame will be searched.</entry> +		    </row> +                  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL</constant></entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Indicates the loop filter level. The adjustment of the loop +filter level is done via a delta value against a baseline loop filter value.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS</constant></entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">This parameter affects the loop filter. Anything above +zero weakens the deblocking effect on the loop filter.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD</constant></entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Sets the refresh period for the golden frame. The period is defined +in number of frames. For a value of 'n', every nth frame starting from the first key frame will be taken as a golden frame. +For eg. for encoding sequence of 0, 1, 2, 3, 4, 5, 6, 7 where the golden frame refresh period is set as 4, the frames +0, 4, 8 etc will be taken as the golden frames as frame 0 is always a key frame.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row id="v4l2-vpx-golden-frame-sel"> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL</constant></entry> +		<entry>enum v4l2_vp8_golden_frame_sel</entry> +	      </row> +	      <row><entry spanname="descr">Selects the golden frame for encoding. +Possible values are:</entry> +	      </row> +	      <row> +		<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV</constant></entry> +		      <entry>Use the (n-2)th frame as a golden frame, current frame index being 'n'.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD</constant></entry> +		      <entry>Use the previous specific frame indicated by +V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD as a golden frame.</entry> +		    </row> +                  </tbody> +		</entrytbl> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_MIN_QP</constant></entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Minimum quantization parameter for VP8.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_MAX_QP</constant></entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Maximum quantization parameter for VP8.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for an I frame for VP8.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Quantization parameter for a P frame for VP8.</entry> +	      </row> + +	      <row><entry></entry></row> +	      <row> +		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_VPX_PROFILE</constant> </entry> +		<entry>integer</entry> +	      </row> +	      <row><entry spanname="descr">Select the desired profile for VPx encoder. +Acceptable values are 0, 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3.</entry> +	      </row> + +          <row><entry></entry></row> +        </tbody> +      </tgroup> +      </table> + +      </section> +    </section> + +    <section id="camera-controls"> +      <title>Camera Control Reference</title> + +      <para>The Camera class includes controls for mechanical (or +equivalent digital) features of a device such as controllable lenses +or sensors.</para> + +    <table pgwide="1" frame="none" id="camera-control-id"> +      <title>Camera Control IDs</title> +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="6*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="6*" /> +	<spanspec namest="c1" nameend="c2" spanname="id" /> +	<spanspec namest="c2" nameend="c4" spanname="descr" /> +	<thead> +	  <row> +	    <entry spanname="id" align="left">ID</entry> +	    <entry align="left">Type</entry> +	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row><entry></entry></row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_CAMERA_CLASS</constant> </entry> +	    <entry>class</entry> +	  </row><row><entry spanname="descr">The Camera class +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a +description of this control class.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-exposure-auto-type"> +	    <entry spanname="id"><constant>V4L2_CID_EXPOSURE_AUTO</constant> </entry> +	    <entry>enum v4l2_exposure_auto_type</entry> +	  </row><row><entry spanname="descr">Enables automatic +adjustments of the exposure time and/or iris aperture. The effect of +manual changes of the exposure time or iris aperture while these +features are enabled is undefined, drivers should ignore such +requests. Possible values are:</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_EXPOSURE_AUTO</constant> </entry> +		      <entry>Automatic exposure time, automatic iris +aperture.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_EXPOSURE_MANUAL</constant> </entry> +		  <entry>Manual exposure time, manual iris.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_EXPOSURE_SHUTTER_PRIORITY</constant> </entry> +		  <entry>Manual exposure time, auto iris.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_EXPOSURE_APERTURE_PRIORITY</constant> </entry> +		  <entry>Auto exposure time, manual iris.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_EXPOSURE_ABSOLUTE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">Determines the exposure +time of the camera sensor. The exposure time is limited by the frame +interval. Drivers should interpret the values as 100 µs units, +where the value 1 stands for 1/10000th of a second, 10000 for 1 second +and 100000 for 10 seconds.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_EXPOSURE_AUTO_PRIORITY</constant> </entry> +	    <entry>boolean</entry> +	  </row><row><entry spanname="descr">When +<constant>V4L2_CID_EXPOSURE_AUTO</constant> is set to +<constant>AUTO</constant> or <constant>APERTURE_PRIORITY</constant>, +this control determines if the device may dynamically vary the frame +rate. By default this feature is disabled (0) and the frame rate must +remain constant.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_EXPOSURE_BIAS</constant> </entry> +	    <entry>integer menu</entry> +	  </row><row><entry spanname="descr"> Determines the automatic +exposure compensation, it is effective only when <constant>V4L2_CID_EXPOSURE_AUTO</constant> +control is set to <constant>AUTO</constant>, <constant>SHUTTER_PRIORITY </constant> +or <constant>APERTURE_PRIORITY</constant>. +It is expressed in terms of EV, drivers should interpret the values as 0.001 EV +units, where the value 1000 stands for +1 EV. +<para>Increasing the exposure compensation value is equivalent to decreasing +the exposure value (EV) and will increase the amount of light at the image +sensor. The camera performs the exposure compensation by adjusting absolute +exposure time and/or aperture.</para></entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-exposure-metering"> +	    <entry spanname="id"><constant>V4L2_CID_EXPOSURE_METERING</constant> </entry> +	    <entry>enum v4l2_exposure_metering</entry> +	  </row><row><entry spanname="descr">Determines how the camera measures +the amount of light available for the frame exposure. Possible values are:</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_EXPOSURE_METERING_AVERAGE</constant> </entry> +		  <entry>Use the light information coming from the entire frame +and average giving no weighting to any particular portion of the metered area. +		  </entry> +		</row> +		<row> +		  <entry><constant>V4L2_EXPOSURE_METERING_CENTER_WEIGHTED</constant> </entry> +		  <entry>Average the light information coming from the entire frame +giving priority to the center of the metered area.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_EXPOSURE_METERING_SPOT</constant> </entry> +		  <entry>Measure only very small area at the center of the frame.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_EXPOSURE_METERING_MATRIX</constant> </entry> +		  <entry>A multi-zone metering. The light intensity is measured +in several points of the frame and the the results are combined. The +algorithm of the zones selection and their significance in calculating the +final value is device dependent.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PAN_RELATIVE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control turns the +camera horizontally by the specified amount. The unit is undefined. A +positive value moves the camera to the right (clockwise when viewed +from above), a negative value to the left. A value of zero does not +cause motion. This is a write-only control.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TILT_RELATIVE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control turns the +camera vertically by the specified amount. The unit is undefined. A +positive value moves the camera up, a negative value down. A value of +zero does not cause motion. This is a write-only control.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PAN_RESET</constant> </entry> +	    <entry>button</entry> +	  </row><row><entry spanname="descr">When this control is set, +the camera moves horizontally to the default position.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TILT_RESET</constant> </entry> +	    <entry>button</entry> +	  </row><row><entry spanname="descr">When this control is set, +the camera moves vertically to the default position.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PAN_ABSOLUTE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control +turns the camera horizontally to the specified position. Positive +values move the camera to the right (clockwise when viewed from above), +negative values to the left. Drivers should interpret the values as arc +seconds, with valid values between -180 * 3600 and +180 * 3600 +inclusive.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TILT_ABSOLUTE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control +turns the camera vertically to the specified position. Positive values +move the camera up, negative values down. Drivers should interpret the +values as arc seconds, with valid values between -180 * 3600 and +180 +* 3600 inclusive.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_FOCUS_ABSOLUTE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control sets the +focal point of the camera to the specified position. The unit is +undefined. Positive values set the focus closer to the camera, +negative values towards infinity.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_FOCUS_RELATIVE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control moves the +focal point of the camera by the specified amount. The unit is +undefined. Positive values move the focus closer to the camera, +negative values towards infinity. This is a write-only control.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_FOCUS_AUTO</constant> </entry> +	    <entry>boolean</entry> +	  </row><row><entry spanname="descr">Enables continuous automatic +focus adjustments. The effect of manual focus adjustments while this feature +is enabled is undefined, drivers should ignore such requests.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUTO_FOCUS_START</constant> </entry> +	    <entry>button</entry> +	  </row><row><entry spanname="descr">Starts single auto focus process. +The effect of setting this control when <constant>V4L2_CID_FOCUS_AUTO</constant> +is set to <constant>TRUE</constant> (1) is undefined, drivers should ignore +such requests.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUTO_FOCUS_STOP</constant> </entry> +	    <entry>button</entry> +	  </row><row><entry spanname="descr">Aborts automatic focusing +started with <constant>V4L2_CID_AUTO_FOCUS_START</constant> control. It is +effective only when the continuous autofocus is disabled, that is when +<constant>V4L2_CID_FOCUS_AUTO</constant> control is set to <constant>FALSE +</constant> (0).</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-auto-focus-status"> +	    <entry spanname="id"> +	      <constant>V4L2_CID_AUTO_FOCUS_STATUS</constant> </entry> +	    <entry>bitmask</entry> +	  </row> +	  <row><entry spanname="descr">The automatic focus status. This is a read-only +	  control.</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_STATUS_IDLE</constant> </entry> +		  <entry>Automatic focus is not active.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_STATUS_BUSY</constant> </entry> +		  <entry>Automatic focusing is in progress.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_STATUS_REACHED</constant> </entry> +		  <entry>Focus has been reached.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_STATUS_FAILED</constant> </entry> +		  <entry>Automatic focus has failed, the driver will not +		  transition from this state until another action is +		  performed by an application.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry spanname="descr"> +Setting <constant>V4L2_LOCK_FOCUS</constant> lock bit of the <constant>V4L2_CID_3A_LOCK +</constant> control may stop updates of the <constant>V4L2_CID_AUTO_FOCUS_STATUS</constant> +control value.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-auto-focus-range"> +	    <entry spanname="id"> +	      <constant>V4L2_CID_AUTO_FOCUS_RANGE</constant> </entry> +	    <entry>enum v4l2_auto_focus_range</entry> +	  </row> +	  <row><entry spanname="descr">Determines auto focus distance range +for which lens may be adjusted. </entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_RANGE_AUTO</constant> </entry> +		  <entry>The camera automatically selects the focus range.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_RANGE_NORMAL</constant> </entry> +		  <entry>Normal distance range, limited for best automatic focus +performance.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_RANGE_MACRO</constant> </entry> +		  <entry>Macro (close-up) auto focus. The camera will +use its minimum possible distance for auto focus.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_AUTO_FOCUS_RANGE_INFINITY</constant> </entry> +		  <entry>The lens is set to focus on an object at infinite distance.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_ZOOM_ABSOLUTE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">Specify the objective lens +focal length as an absolute value. The zoom unit is driver-specific and its +value should be a positive integer.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_ZOOM_RELATIVE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">Specify the objective lens +focal length relatively to the current value. Positive values move the zoom +lens group towards the telephoto direction, negative values towards the +wide-angle direction. The zoom unit is driver-specific. This is a write-only control.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_ZOOM_CONTINUOUS</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">Move the objective lens group +at the specified speed until it reaches physical device limits or until an +explicit request to stop the movement. A positive value moves the zoom lens +group towards the telephoto direction. A value of zero stops the zoom lens +group movement. A negative value moves the zoom lens group towards the +wide-angle direction. The zoom speed unit is driver-specific.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_IRIS_ABSOLUTE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control sets the +camera's aperture to the specified value. The unit is undefined. +Larger values open the iris wider, smaller values close it.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_IRIS_RELATIVE</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">This control modifies the +camera's aperture by the specified amount. The unit is undefined. +Positive values open the iris one step further, negative values close +it one step further. This is a write-only control.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PRIVACY</constant> </entry> +	    <entry>boolean</entry> +	  </row><row><entry spanname="descr">Prevent video from being acquired +by the camera. When this control is set to <constant>TRUE</constant> (1), no +image can be captured by the camera. Common means to enforce privacy are +mechanical obturation of the sensor and firmware image processing, but the +device is not restricted to these methods. Devices that implement the privacy +control must support read access and may support write access.</entry> +	  </row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_BAND_STOP_FILTER</constant> </entry> +	    <entry>integer</entry> +	  </row><row><entry spanname="descr">Switch the band-stop filter of a +camera sensor on or off, or specify its strength. Such band-stop filters can +be used, for example, to filter out the fluorescent light component.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-auto-n-preset-white-balance"> +	    <entry spanname="id"><constant>V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE</constant> </entry> +	    <entry>enum v4l2_auto_n_preset_white_balance</entry> +	  </row><row><entry spanname="descr">Sets white balance to automatic, +manual or a preset. The presets determine color temperature of the light as +a hint to the camera for white balance adjustments resulting in most accurate +color representation. The following white balance presets are listed in order +of increasing color temperature.</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_MANUAL</constant> </entry> +		  <entry>Manual white balance.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_AUTO</constant> </entry> +		  <entry>Automatic white balance adjustments.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_INCANDESCENT</constant> </entry> +		  <entry>White balance setting for incandescent (tungsten) lighting. +It generally cools down the colors and corresponds approximately to 2500...3500 K +color temperature range.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_FLUORESCENT</constant> </entry> +		  <entry>White balance preset for fluorescent lighting. +It corresponds approximately to 4000...5000 K color temperature.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_FLUORESCENT_H</constant> </entry> +		  <entry>With this setting the camera will compensate for +fluorescent H lighting.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_HORIZON</constant> </entry> +		  <entry>White balance setting for horizon daylight. +It corresponds approximately to 5000 K color temperature.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_DAYLIGHT</constant> </entry> +		  <entry>White balance preset for daylight (with clear sky). +It corresponds approximately to 5000...6500 K color temperature.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_FLASH</constant> </entry> +		  <entry>With this setting the camera will compensate for the flash +light. It slightly warms up the colors and corresponds roughly to 5000...5500 K +color temperature.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_CLOUDY</constant> </entry> +		  <entry>White balance preset for moderately overcast sky. +This option corresponds approximately to 6500...8000 K color temperature +range.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_WHITE_BALANCE_SHADE</constant> </entry> +		  <entry>White balance preset for shade or heavily overcast +sky. It corresponds approximately to 9000...10000 K color temperature. +</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-wide-dynamic-range"> +	    <entry spanname="id"><constant>V4L2_CID_WIDE_DYNAMIC_RANGE</constant></entry> +	    <entry>boolean</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Enables or disables the camera's wide dynamic +range feature. This feature allows to obtain clear images in situations where +intensity of the illumination varies significantly throughout the scene, i.e. +there are simultaneously very dark and very bright areas. It is most commonly +realized in cameras by combining two subsequent frames with different exposure +times. <footnote id="ctypeconv"><para> This control may be changed to a menu +control in the future, if more options are required.</para></footnote></entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-image-stabilization"> +	    <entry spanname="id"><constant>V4L2_CID_IMAGE_STABILIZATION</constant></entry> +	    <entry>boolean</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Enables or disables image stabilization. +	      <footnoteref linkend="ctypeconv"/></entry> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_ISO_SENSITIVITY</constant> </entry> +	    <entry>integer menu</entry> +	  </row><row><entry spanname="descr">Determines ISO equivalent of an +image sensor indicating the sensor's sensitivity to light. The numbers are +expressed in arithmetic scale, as per <xref linkend="iso12232" /> standard, +where doubling the sensor sensitivity is represented by doubling the numerical +ISO value. Applications should interpret the values as standard ISO values +multiplied by 1000, e.g. control value 800 stands for ISO 0.8. Drivers will +usually support only a subset of standard ISO values. The effect of setting +this control while the <constant>V4L2_CID_ISO_SENSITIVITY_AUTO</constant> +control is set to a value other than <constant>V4L2_CID_ISO_SENSITIVITY_MANUAL +</constant> is undefined, drivers should ignore such requests.</entry> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-iso-sensitivity-auto-type"> +	    <entry spanname="id"><constant>V4L2_CID_ISO_SENSITIVITY_AUTO</constant> </entry> +	    <entry>enum v4l2_iso_sensitivity_type</entry> +	  </row><row><entry spanname="descr">Enables or disables automatic ISO +sensitivity adjustments.</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_CID_ISO_SENSITIVITY_MANUAL</constant> </entry> +		  <entry>Manual ISO sensitivity.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_CID_ISO_SENSITIVITY_AUTO</constant> </entry> +		  <entry>Automatic ISO sensitivity adjustments.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> + +	  <row id="v4l2-scene-mode"> +	    <entry spanname="id"><constant>V4L2_CID_SCENE_MODE</constant> </entry> +	    <entry>enum v4l2_scene_mode</entry> +	  </row><row><entry spanname="descr">This control allows to select +scene programs as the camera automatic modes optimized for common shooting +scenes. Within these modes the camera determines best exposure, aperture, +focusing, light metering, white balance and equivalent sensitivity. The +controls of those parameters are influenced by the scene mode control. +An exact behavior in each mode is subject to the camera specification. + +<para>When the scene mode feature is not used, this control should be set to +<constant>V4L2_SCENE_MODE_NONE</constant> to make sure the other possibly +related controls are accessible. The following scene programs are defined: +</para> +</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_NONE</constant> </entry> +		  <entry>The scene mode feature is disabled.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_BACKLIGHT</constant> </entry> +		  <entry>Backlight. Compensates for dark shadows when light is +		  coming from behind a subject, also by automatically turning +		  on the flash.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_BEACH_SNOW</constant> </entry> +		  <entry>Beach and snow. This mode compensates for all-white or +bright scenes, which tend to look gray and low contrast, when camera's automatic +exposure is based on an average scene brightness. To compensate, this mode +automatically slightly overexposes the frames. The white balance may also be +adjusted to compensate for the fact that reflected snow looks bluish rather +than white.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_CANDLELIGHT</constant> </entry> +		  <entry>Candle light. The camera generally raises the ISO +sensitivity and lowers the shutter speed. This mode compensates for relatively +close subject in the scene. The flash is disabled in order to preserve the +ambiance of the light.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_DAWN_DUSK</constant> </entry> +		  <entry>Dawn and dusk. Preserves the colors seen in low +natural light before dusk and after down. The camera may turn off the flash, +and automatically focus at infinity. It will usually boost saturation and +lower the shutter speed.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_FALL_COLORS</constant> </entry> +		  <entry>Fall colors. Increases saturation and adjusts white +balance for color enhancement. Pictures of autumn leaves get saturated reds +and yellows.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_FIREWORKS</constant> </entry> +		  <entry>Fireworks. Long exposure times are used to capture +the expanding burst of light from a firework. The camera may invoke image +stabilization.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_LANDSCAPE</constant> </entry> +		  <entry>Landscape. The camera may choose a small aperture to +provide deep depth of field and long exposure duration to help capture detail +in dim light conditions. The focus is fixed at infinity. Suitable for distant +and wide scenery.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_NIGHT</constant> </entry> +		  <entry>Night, also known as Night Landscape. Designed for low +light conditions, it preserves detail in the dark areas without blowing out bright +objects. The camera generally sets itself to a medium-to-high ISO sensitivity, +with a relatively long exposure time, and turns flash off. As such, there will be +increased image noise and the possibility of blurred image.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_PARTY_INDOOR</constant> </entry> +		  <entry>Party and indoor. Designed to capture indoor scenes +that are lit by indoor background lighting as well as the flash. The camera +usually increases ISO sensitivity, and adjusts exposure for the low light +conditions.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_PORTRAIT</constant> </entry> +		  <entry>Portrait. The camera adjusts the aperture so that the +depth of field is reduced, which helps to isolate the subject against a smooth +background. Most cameras recognize the presence of faces in the scene and focus +on them. The color hue is adjusted to enhance skin tones. The intensity of the +flash is often reduced.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_SPORTS</constant> </entry> +		  <entry>Sports. Significantly increases ISO and uses a fast +shutter speed to freeze motion of rapidly-moving subjects. Increased image +noise may be seen in this mode.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_SUNSET</constant> </entry> +		  <entry>Sunset. Preserves deep hues seen in sunsets and +sunrises. It bumps up the saturation.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_SCENE_MODE_TEXT</constant> </entry> +		  <entry>Text. It applies extra contrast and sharpness, it is +typically a black-and-white mode optimized for readability. Automatic focus +may be switched to close-up mode and this setting may also involve some +lens-distortion correction.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> + +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_3A_LOCK</constant></entry> +	    <entry>bitmask</entry> +	  </row> +	  <row> +	    <entry spanname="descr">This control locks or unlocks the automatic +focus, exposure and white balance. The automatic adjustments can be paused +independently by setting the corresponding lock bit to 1. The camera then retains +the settings until the lock bit is cleared. The following lock bits are defined: +</entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_LOCK_EXPOSURE</constant></entry> +		  <entry>Automatic exposure adjustments lock.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_LOCK_WHITE_BALANCE</constant></entry> +		  <entry>Automatic white balance adjustments lock.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_LOCK_FOCUS</constant></entry> +		  <entry>Automatic focus lock.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry spanname="descr"> +When a given algorithm is not enabled, drivers should ignore requests +to lock it and should return no error. An example might be an application +setting bit <constant>V4L2_LOCK_WHITE_BALANCE</constant> when the +<constant>V4L2_CID_AUTO_WHITE_BALANCE</constant> control is set to +<constant>FALSE</constant>. The value of this control may be changed +by exposure, white balance or focus controls.</entry> +	  </row> +	  <row><entry></entry></row> + +	</tbody> +      </tgroup> +    </table> +  </section> + +    <section id="fm-tx-controls"> +      <title>FM Transmitter Control Reference</title> + +      <para>The FM Transmitter (FM_TX) class includes controls for common features of +FM transmissions capable devices. Currently this class includes parameters for audio +compression, pilot tone generation, audio deviation limiter, RDS transmission and +tuning power features.</para> + +      <table pgwide="1" frame="none" id="fm-tx-control-id"> +      <title>FM_TX Control IDs</title> + +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="6*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="6*" /> +	<spanspec namest="c1" nameend="c2" spanname="id" /> +	<spanspec namest="c2" nameend="c4" spanname="descr" /> +	<thead> +	  <row> +	    <entry spanname="id" align="left">ID</entry> +	    <entry align="left">Type</entry> +	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row><entry></entry></row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_FM_TX_CLASS</constant> </entry> +	    <entry>class</entry> +	  </row><row><entry spanname="descr">The FM_TX class +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a +description of this control class.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_RDS_TX_DEVIATION</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Configures RDS signal frequency deviation level in Hz. +The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_RDS_TX_PI</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the RDS Programme Identification field +for transmission.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_RDS_TX_PTY</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the RDS Programme Type field for transmission. +This encodes up to 31 pre-defined programme types.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_RDS_TX_PS_NAME</constant> </entry> +	    <entry>string</entry> +	  </row> +	  <row><entry spanname="descr">Sets the Programme Service name (PS_NAME) for transmission. +It is intended for static display on a receiver. It is the primary aid to listeners in programme service +identification and selection.  In Annex E of <xref linkend="iec62106" />, the RDS specification, +there is a full description of the correct character encoding for Programme Service name strings. +Also from RDS specification, PS is usually a single eight character text. However, it is also possible +to find receivers which can scroll strings sized as 8 x N characters. So, this control must be configured +with steps of 8 characters. The result is it must always contain a string with size multiple of 8.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_RDS_TX_RADIO_TEXT</constant> </entry> +	    <entry>string</entry> +	  </row> +	  <row><entry spanname="descr">Sets the Radio Text info for transmission. It is a textual description of +what is being broadcasted. RDS Radio Text can be applied when broadcaster wishes to transmit longer PS names, +programme-related information or any other text. In these cases, RadioText should be used in addition to +<constant>V4L2_CID_RDS_TX_PS_NAME</constant>. The encoding for Radio Text strings is also fully described +in Annex E of <xref linkend="iec62106" />. The length of Radio Text strings depends on which RDS Block is being +used to transmit it, either 32 (2A block) or 64 (2B block).  However, it is also possible +to find receivers which can scroll strings sized as 32 x N or 64 x N characters. So, this control must be configured +with steps of 32 or 64 characters. The result is it must always contain a string with size multiple of 32 or 64. </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_LIMITER_ENABLED</constant> </entry> +	    <entry>boolean</entry> +	  </row> +	  <row><entry spanname="descr">Enables or disables the audio deviation limiter feature. +The limiter is useful when trying to maximize the audio volume, minimize receiver-generated +distortion and prevent overmodulation. +</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_LIMITER_RELEASE_TIME</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the audio deviation limiter feature release time. +Unit is in useconds. Step and range are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_LIMITER_DEVIATION</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Configures audio frequency deviation level in Hz. +The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_COMPRESSION_ENABLED</constant> </entry> +	    <entry>boolean</entry> +	  </row> +	  <row><entry spanname="descr">Enables or disables the audio compression feature. +This feature amplifies signals below the threshold by a fixed gain and compresses audio +signals above the threshold by the ratio of Threshold/(Gain + Threshold).</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_COMPRESSION_GAIN</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the gain for audio compression feature. It is +a dB value. The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_COMPRESSION_THRESHOLD</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the threshold level for audio compression freature. +It is a dB value. The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the attack time for audio compression feature. +It is a useconds value. The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the release time for audio compression feature. +It is a useconds value. The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PILOT_TONE_ENABLED</constant> </entry> +	    <entry>boolean</entry> +	  </row> +	  <row><entry spanname="descr">Enables or disables the pilot tone generation feature.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PILOT_TONE_DEVIATION</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Configures pilot tone frequency deviation level. Unit is +in Hz. The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PILOT_TONE_FREQUENCY</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Configures pilot tone frequency value. Unit is +in Hz. The range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TUNE_PREEMPHASIS</constant> </entry> +	    <entry>enum v4l2_preemphasis</entry> +	  </row> +	  <row id="v4l2-preemphasis"><entry spanname="descr">Configures the pre-emphasis value for broadcasting. +A pre-emphasis filter is applied to the broadcast to accentuate the high audio frequencies. +Depending on the region, a time constant of either 50 or 75 useconds is used. The enum v4l2_preemphasis +defines possible values for pre-emphasis. Here they are:</entry> +	</row><row> +	<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_PREEMPHASIS_DISABLED</constant> </entry> +		      <entry>No pre-emphasis is applied.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_PREEMPHASIS_50_uS</constant> </entry> +		      <entry>A pre-emphasis of 50 uS is used.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_PREEMPHASIS_75_uS</constant> </entry> +		      <entry>A pre-emphasis of 75 uS is used.</entry> +		    </row> +		  </tbody> +		</entrytbl> + +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TUNE_POWER_LEVEL</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">Sets the output power level for signal transmission. +Unit is in dBuV. Range and step are driver-specific.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TUNE_ANTENNA_CAPACITOR</constant> </entry> +	    <entry>integer</entry> +	  </row> +	  <row><entry spanname="descr">This selects the value of antenna tuning capacitor +manually or automatically if set to zero. Unit, range and step are driver-specific.</entry> +	  </row> +	  <row><entry></entry></row> +	</tbody> +      </tgroup> +      </table> + +<para>For more details about RDS specification, refer to +<xref linkend="iec62106" /> document, from CENELEC.</para> +    </section> + +    <section id="flash-controls"> +      <title>Flash Control Reference</title> + +      <note> +	<title>Experimental</title> + +	<para>This is an <link linkend="experimental">experimental</link> +interface and may change in the future.</para> +      </note> + +      <para> +	The V4L2 flash controls are intended to provide generic access +	to flash controller devices. Flash controller devices are +	typically used in digital cameras. +      </para> + +      <para> +	The interface can support both LED and xenon flash devices. As +	of writing this, there is no xenon flash driver using this +	interface. +      </para> + +      <section id="flash-controls-use-cases"> +	<title>Supported use cases</title> + +	<section> +	  <title>Unsynchronised LED flash (software strobe)</title> + +	  <para> +	    Unsynchronised LED flash is controlled directly by the +	    host as the sensor. The flash must be enabled by the host +	    before the exposure of the image starts and disabled once +	    it ends. The host is fully responsible for the timing of +	    the flash. +	  </para> + +	  <para>Example of such device: Nokia N900.</para> +	</section> + +	<section> +	  <title>Synchronised LED flash (hardware strobe)</title> + +	  <para> +	    The synchronised LED flash is pre-programmed by the host +	    (power and timeout) but controlled by the sensor through a +	    strobe signal from the sensor to the flash. +	  </para> + +	  <para> +	    The sensor controls the flash duration and timing. This +	    information typically must be made available to the +	    sensor. +	  </para> + +	</section> + +	<section> +	  <title>LED flash as torch</title> + +	  <para> +	    LED flash may be used as torch in conjunction with another +	    use case involving camera or individually. +	  </para> + + +          <table pgwide="1" frame="none" id="flash-control-id"> +          <title>Flash Control IDs</title> +     +          <tgroup cols="4"> +    	<colspec colname="c1" colwidth="1*" /> +    	<colspec colname="c2" colwidth="6*" /> +    	<colspec colname="c3" colwidth="2*" /> +    	<colspec colname="c4" colwidth="6*" /> +    	<spanspec namest="c1" nameend="c2" spanname="id" /> +    	<spanspec namest="c2" nameend="c4" spanname="descr" /> +    	<thead> +    	  <row> +    	    <entry spanname="id" align="left">ID</entry> +    	    <entry align="left">Type</entry> +    	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +    	  </row> +    	</thead> +    	<tbody valign="top"> +    	  <row><entry></entry></row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_CLASS</constant></entry> +    	    <entry>class</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">The FLASH class descriptor.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_LED_MODE</constant></entry> +    	    <entry>menu</entry> +    	  </row> +    	  <row id="v4l2-flash-led-mode"> +    	    <entry spanname="descr">Defines the mode of the flash LED, +    	    the high-power white LED attached to the flash controller. +    	    Setting this control may not be possible in presence of +    	    some faults. See V4L2_CID_FLASH_FAULT.</entry> +    	  </row> +    	  <row> +    	    <entrytbl spanname="descr" cols="2"> +    	      <tbody valign="top"> +    		<row> +    		  <entry><constant>V4L2_FLASH_LED_MODE_NONE</constant></entry> +    		  <entry>Off.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_LED_MODE_FLASH</constant></entry> +    		  <entry>Flash mode.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_LED_MODE_TORCH</constant></entry> +    		  <entry>Torch mode. See V4L2_CID_FLASH_TORCH_INTENSITY.</entry> +    		</row> +    	      </tbody> +    	    </entrytbl> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_STROBE_SOURCE</constant></entry> +    	    <entry>menu</entry> +    	  </row> +    	  <row id="v4l2-flash-strobe-source"><entry +    	  spanname="descr">Defines the source of the flash LED +    	  strobe.</entry> +    	  </row> +    	  <row> +    	    <entrytbl spanname="descr" cols="2"> +    	      <tbody valign="top"> +    		<row> +    		  <entry><constant>V4L2_FLASH_STROBE_SOURCE_SOFTWARE</constant></entry> +    		  <entry>The flash strobe is triggered by using +    		  the V4L2_CID_FLASH_STROBE control.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_STROBE_SOURCE_EXTERNAL</constant></entry> +    		  <entry>The flash strobe is triggered by an +    		  external source. Typically this is a sensor, +    		  which makes it possible to synchronises the +    		  flash strobe start to exposure start.</entry> +    		</row> +    	      </tbody> +    	    </entrytbl> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_STROBE</constant></entry> +    	    <entry>button</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Strobe flash. Valid when +    	    V4L2_CID_FLASH_LED_MODE is set to +    	    V4L2_FLASH_LED_MODE_FLASH and V4L2_CID_FLASH_STROBE_SOURCE +    	    is set to V4L2_FLASH_STROBE_SOURCE_SOFTWARE. Setting this +    	    control may not be possible in presence of some faults. +    	    See V4L2_CID_FLASH_FAULT.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_STROBE_STOP</constant></entry> +    	    <entry>button</entry> +    	  </row> +    	  <row><entry spanname="descr">Stop flash strobe immediately.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_STROBE_STATUS</constant></entry> +    	    <entry>boolean</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Strobe status: whether the flash +    	    is strobing at the moment or not. This is a read-only +    	    control.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_TIMEOUT</constant></entry> +    	    <entry>integer</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Hardware timeout for flash. The +    	    flash strobe is stopped after this period of time has +    	    passed from the start of the strobe.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_INTENSITY</constant></entry> +    	    <entry>integer</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Intensity of the flash strobe when +    	    the flash LED is in flash mode +    	    (V4L2_FLASH_LED_MODE_FLASH). The unit should be milliamps +    	    (mA) if possible.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_TORCH_INTENSITY</constant></entry> +    	    <entry>integer</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Intensity of the flash LED in +    	    torch mode (V4L2_FLASH_LED_MODE_TORCH). The unit should be +    	    milliamps (mA) if possible. Setting this control may not +    	    be possible in presence of some faults. See +    	    V4L2_CID_FLASH_FAULT.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_INDICATOR_INTENSITY</constant></entry> +    	    <entry>integer</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Intensity of the indicator LED. +    	    The indicator LED may be fully independent of the flash +    	    LED. The unit should be microamps (uA) if possible.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_FAULT</constant></entry> +    	    <entry>bitmask</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Faults related to the flash. The +    	    faults tell about specific problems in the flash chip +    	    itself or the LEDs attached to it. Faults may prevent +    	    further use of some of the flash controls. In particular, +    	    V4L2_CID_FLASH_LED_MODE is set to V4L2_FLASH_LED_MODE_NONE +    	    if the fault affects the flash LED. Exactly which faults +    	    have such an effect is chip dependent. Reading the faults +    	    resets the control and returns the chip to a usable state +    	    if possible.</entry> +    	  </row> +    	  <row> +    	    <entrytbl spanname="descr" cols="2"> +    	      <tbody valign="top"> +    		<row> +    		  <entry><constant>V4L2_FLASH_FAULT_OVER_VOLTAGE</constant></entry> +    		  <entry>Flash controller voltage to the flash LED +    		  has exceeded the limit specific to the flash +    		  controller.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_FAULT_TIMEOUT</constant></entry> +    		  <entry>The flash strobe was still on when +    		  the timeout set by the user --- +    		  V4L2_CID_FLASH_TIMEOUT control --- has expired. +    		  Not all flash controllers may set this in all +    		  such conditions.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_FAULT_OVER_TEMPERATURE</constant></entry> +    		  <entry>The flash controller has overheated.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_FAULT_SHORT_CIRCUIT</constant></entry> +    		  <entry>The short circuit protection of the flash +    		  controller has been triggered.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_FAULT_OVER_CURRENT</constant></entry> +    		  <entry>Current in the LED power supply has exceeded the limit +    		  specific to the flash controller.</entry> +    		</row> +    		<row> +    		  <entry><constant>V4L2_FLASH_FAULT_INDICATOR</constant></entry> +    		  <entry>The flash controller has detected a short or open +    		  circuit condition on the indicator LED.</entry> +    		</row> +		<row> +		  <entry><constant>V4L2_FLASH_FAULT_UNDER_VOLTAGE</constant></entry> +		  <entry>Flash controller voltage to the flash LED +		  has been below the minimum limit specific to the flash +		  controller.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_FLASH_FAULT_INPUT_VOLTAGE</constant></entry> +		  <entry>The input voltage of the flash controller is below +		  the limit under which strobing the flash at full current +		  will not be possible.The condition persists until this flag +		  is no longer set.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE</constant></entry> +		  <entry>The temperature of the LED has exceeded its +		  allowed upper limit.</entry> +		</row> +    	      </tbody> +    	    </entrytbl> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_CHARGE</constant></entry> +    	    <entry>boolean</entry> +    	  </row> +    	  <row><entry spanname="descr">Enable or disable charging of the xenon +    	  flash capacitor.</entry> +    	  </row> +    	  <row> +    	    <entry spanname="id"><constant>V4L2_CID_FLASH_READY</constant></entry> +    	    <entry>boolean</entry> +    	  </row> +    	  <row> +    	    <entry spanname="descr">Is the flash ready to strobe? +    	    Xenon flashes require their capacitors charged before +    	    strobing. LED flashes often require a cooldown period +    	    after strobe during which another strobe will not be +    	    possible. This is a read-only control.</entry> +    	  </row> +    	  <row><entry></entry></row> +    	</tbody> +          </tgroup> +          </table> +	</section> +      </section> +    </section> + +    <section id="jpeg-controls"> +      <title>JPEG Control Reference</title> +      <para>The JPEG class includes controls for common features of JPEG +      encoders and decoders. Currently it includes features for codecs +      implementing progressive baseline DCT compression process with +      Huffman entrophy coding.</para> +      <table pgwide="1" frame="none" id="jpeg-control-id"> +      <title>JPEG Control IDs</title> + +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="6*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="6*" /> +	<spanspec namest="c1" nameend="c2" spanname="id" /> +	<spanspec namest="c2" nameend="c4" spanname="descr" /> +	<thead> +	  <row> +	    <entry spanname="id" align="left">ID</entry> +	    <entry align="left">Type</entry> +	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row><entry></entry></row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_JPEG_CLASS</constant> </entry> +	    <entry>class</entry> +	  </row><row><entry spanname="descr">The JPEG class descriptor. Calling +	  &VIDIOC-QUERYCTRL; for this control will return a description of this +	  control class. + +	</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_JPEG_CHROMA_SUBSAMPLING</constant></entry> +	    <entry>menu</entry> +	  </row> +	  <row id="v4l2-jpeg-chroma-subsampling"> +	    <entry spanname="descr">The chroma subsampling factors describe how +	    each component of an input image is sampled, in respect to maximum +	    sample rate in each spatial dimension. See <xref linkend="itu-t81"/>, +	    clause A.1.1. for more details. The <constant> +	    V4L2_CID_JPEG_CHROMA_SUBSAMPLING</constant> control determines how +	    Cb and Cr components are downsampled after coverting an input image +	    from RGB to Y'CbCr color space. +	    </entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_444</constant> +		  </entry><entry>No chroma subsampling, each pixel has +		  Y, Cr and Cb values.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_422</constant> +		  </entry><entry>Horizontally subsample Cr, Cb components +		  by a factor of 2.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_420</constant> +		  </entry><entry>Subsample Cr, Cb components horizontally +		  and vertically by 2.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_411</constant> +		  </entry><entry>Horizontally subsample Cr, Cb components +		  by a factor of 4.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_410</constant> +		  </entry><entry>Subsample Cr, Cb components horizontally +		  by 4 and vertically by 2.</entry> +		</row> +		<row> +		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY</constant> +		  </entry><entry>Use only luminance component.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_JPEG_RESTART_INTERVAL</constant> +	    </entry><entry>integer</entry> +	  </row> +	  <row><entry spanname="descr"> +	      The restart interval determines an interval of inserting RSTm +	      markers (m = 0..7). The purpose of these markers is to additionally +	      reinitialize the encoder process, in order to process blocks of +	      an image independently. +	      For the lossy compression processes the restart interval unit is +	      MCU (Minimum Coded Unit) and its value is contained in DRI +	      (Define Restart Interval) marker. If <constant> +	      V4L2_CID_JPEG_RESTART_INTERVAL</constant> control is set to 0, +	      DRI and RSTm markers will not be inserted. +	    </entry> +	  </row> +	  <row id="jpeg-quality-control"> +	    <entry spanname="id"><constant>V4L2_CID_JPEG_COMPRESSION_QUALITY</constant></entry> +	    <entry>integer</entry> +	  </row> +	  <row> +	    <entry spanname="descr"> +	      <constant>V4L2_CID_JPEG_COMPRESSION_QUALITY</constant> control +	      determines trade-off between image quality and size. +	      It provides simpler method for applications to control image quality, +	      without a need for direct reconfiguration of luminance and chrominance +	      quantization tables. + +	      In cases where a driver uses quantization tables configured directly +	      by an application, using interfaces defined elsewhere, <constant> +	      V4L2_CID_JPEG_COMPRESSION_QUALITY</constant> control should be set +	      by driver to 0. + +	      <para>The value range of this control is driver-specific. Only +	      positive, non-zero values are meaningful. The recommended range +	      is 1 - 100, where larger values correspond to better image quality. +	      </para> +	    </entry> +	    </row> +	  <row id="jpeg-active-marker-control"> +	    <entry spanname="id"><constant>V4L2_CID_JPEG_ACTIVE_MARKER</constant></entry> +	    <entry>bitmask</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Specify which JPEG markers are included +	    in compressed stream. This control is valid only for encoders. +	    </entry> +	  </row> +	  <row> +	    <entrytbl spanname="descr" cols="2"> +	      <tbody valign="top"> +		<row> +		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_APP0</constant></entry> +		  <entry>Application data segment APP<subscript>0</subscript>.</entry> +		</row><row> +		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_APP1</constant></entry> +		  <entry>Application data segment APP<subscript>1</subscript>.</entry> +		</row><row> +		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_COM</constant></entry> +		  <entry>Comment segment.</entry> +		</row><row> +		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_DQT</constant></entry> +		  <entry>Quantization tables segment.</entry> +		</row><row> +		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_DHT</constant></entry> +		  <entry>Huffman tables segment.</entry> +		</row> +	      </tbody> +	    </entrytbl> +	  </row> +	  <row><entry></entry></row> +	</tbody> +      </tgroup> +      </table> +      <para>For more details about JPEG specification, refer +      to <xref linkend="itu-t81"/>, <xref linkend="jfif"/>, +      <xref linkend="w3c-jpeg-jfif"/>.</para> +    </section> + +    <section id="image-source-controls"> +      <title>Image Source Control Reference</title> + +      <note> +	<title>Experimental</title> + +	<para>This is an <link +	linkend="experimental">experimental</link> interface and may +	change in the future.</para> +      </note> + +      <para> +	The Image Source control class is intended for low-level +	control of image source devices such as image sensors. The +	devices feature an analogue to digital converter and a bus +	transmitter to transmit the image data out of the device. +      </para> + +      <table pgwide="1" frame="none" id="image-source-control-id"> +      <title>Image Source Control IDs</title> + +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="6*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="6*" /> +	<spanspec namest="c1" nameend="c2" spanname="id" /> +	<spanspec namest="c2" nameend="c4" spanname="descr" /> +	<thead> +	  <row> +	    <entry spanname="id" align="left">ID</entry> +	    <entry align="left">Type</entry> +	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row><entry></entry></row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_IMAGE_SOURCE_CLASS</constant></entry> +	    <entry>class</entry> +	  </row> +	  <row> +	    <entry spanname="descr">The IMAGE_SOURCE class descriptor.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_VBLANK</constant></entry> +	    <entry>integer</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Vertical blanking. The idle period +	    after every frame during which no image data is produced. +	    The unit of vertical blanking is a line. Every line has +	    length of the image width plus horizontal blanking at the +	    pixel rate defined by +	    <constant>V4L2_CID_PIXEL_RATE</constant> control in the +	    same sub-device.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_HBLANK</constant></entry> +	    <entry>integer</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Horizontal blanking. The idle +	    period after every line of image data during which no +	    image data is produced. The unit of horizontal blanking is +	    pixels.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_ANALOGUE_GAIN</constant></entry> +	    <entry>integer</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Analogue gain is gain affecting +	    all colour components in the pixel matrix. The gain +	    operation is performed in the analogue domain before A/D +	    conversion. +	    </entry> +	  </row> +	  <row><entry></entry></row> +	</tbody> +      </tgroup> +      </table> + +    </section> + +    <section id="image-process-controls"> +      <title>Image Process Control Reference</title> + +      <note> +	<title>Experimental</title> + +	<para>This is an <link +	linkend="experimental">experimental</link> interface and may +	change in the future.</para> +      </note> + +      <para> +	The Image Source control class is intended for low-level control of +	image processing functions. Unlike +	<constant>V4L2_CID_IMAGE_SOURCE_CLASS</constant>, the controls in +	this class affect processing the image, and do not control capturing +	of it. +      </para> + +      <table pgwide="1" frame="none" id="image-process-control-id"> +      <title>Image Source Control IDs</title> + +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="6*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="6*" /> +	<spanspec namest="c1" nameend="c2" spanname="id" /> +	<spanspec namest="c2" nameend="c4" spanname="descr" /> +	<thead> +	  <row> +	    <entry spanname="id" align="left">ID</entry> +	    <entry align="left">Type</entry> +	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row><entry></entry></row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_IMAGE_PROC_CLASS</constant></entry> +	    <entry>class</entry> +	  </row> +	  <row> +	    <entry spanname="descr">The IMAGE_PROC class descriptor.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_LINK_FREQ</constant></entry> +	    <entry>integer menu</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Data bus frequency. Together with the +	    media bus pixel code, bus type (clock cycles per sample), the +	    data bus frequency defines the pixel rate +	    (<constant>V4L2_CID_PIXEL_RATE</constant>) in the +	    pixel array (or possibly elsewhere, if the device is not an +	    image sensor). The frame rate can be calculated from the pixel +	    clock, image width and height and horizontal and vertical +	    blanking. While the pixel rate control may be defined elsewhere +	    than in the subdev containing the pixel array, the frame rate +	    cannot be obtained from that information. This is because only +	    on the pixel array it can be assumed that the vertical and +	    horizontal blanking information is exact: no other blanking is +	    allowed in the pixel array. The selection of frame rate is +	    performed by selecting the desired horizontal and vertical +	    blanking. The unit of this control is Hz. </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_PIXEL_RATE</constant></entry> +	    <entry>64-bit integer</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Pixel rate in the source pads of +	    the subdev. This control is read-only and its unit is +	    pixels / second. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_TEST_PATTERN</constant></entry> +	    <entry>menu</entry> +	  </row> +	  <row id="v4l2-test-pattern"> +	    <entry spanname="descr"> Some capture/display/sensor devices have +	    the capability to generate test pattern images. These hardware +	    specific test patterns can be used to test if a device is working +	    properly.</entry> +	  </row> +	  <row><entry></entry></row> +	</tbody> +      </tgroup> +      </table> + +    </section> + +    <section id="dv-controls"> +      <title>Digital Video Control Reference</title> + +      <note> +	<title>Experimental</title> + +	<para>This is an <link +	linkend="experimental">experimental</link> interface and may +	change in the future.</para> +      </note> + +      <para> +	The Digital Video control class is intended to control receivers +	and transmitters for <ulink url="http://en.wikipedia.org/wiki/Vga">VGA</ulink>, +	<ulink url="http://en.wikipedia.org/wiki/Digital_Visual_Interface">DVI</ulink> +	(Digital Visual Interface), HDMI (<xref linkend="hdmi" />) and DisplayPort (<xref linkend="dp" />). +	These controls are generally expected to be private to the receiver or transmitter +	subdevice that implements them, so they are only exposed on the +	<filename>/dev/v4l-subdev*</filename> device node. +      </para> + +      <para>Note that these devices can have multiple input or output pads which are +      hooked up to e.g. HDMI connectors. Even though the subdevice will receive or +      transmit video from/to only one of those pads, the other pads can still be +      active when it comes to EDID (Extended Display Identification Data, +      <xref linkend="vesaedid" />) and HDCP (High-bandwidth Digital Content +      Protection System, <xref linkend="hdcp" />) processing, allowing the device +      to do the fairly slow EDID/HDCP handling in advance. This allows for quick +      switching between connectors.</para> + +      <para>These pads appear in several of the controls in this section as +      bitmasks, one bit for each pad. Bit 0 corresponds to pad 0, bit 1 to pad 1, +      etc. The maximum value of the control is the set of valid pads.</para> + +      <table pgwide="1" frame="none" id="dv-control-id"> +      <title>Digital Video Control IDs</title> + +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="6*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="6*" /> +	<spanspec namest="c1" nameend="c2" spanname="id" /> +	<spanspec namest="c2" nameend="c4" spanname="descr" /> +	<thead> +	  <row> +	    <entry spanname="id" align="left">ID</entry> +	    <entry align="left">Type</entry> +	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row><entry></entry></row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_CLASS</constant></entry> +	    <entry>class</entry> +	  </row> +	  <row> +	    <entry spanname="descr">The Digital Video class descriptor.</entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_TX_HOTPLUG</constant></entry> +	    <entry>bitmask</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Many connectors have a hotplug pin which is high +	    if EDID information is available from the source. This control shows the +	    state of the hotplug pin as seen by the transmitter. +	    Each bit corresponds to an output pad on the transmitter. If an output pad +	    does not have an associated hotplug pin, then the bit for that pad will be 0. +	    This read-only control is applicable to DVI-D, HDMI and DisplayPort connectors. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_TX_RXSENSE</constant></entry> +	    <entry>bitmask</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Rx Sense is the detection of pull-ups on the TMDS +            clock lines. This normally means that the sink has left/entered standby (i.e. +	    the transmitter can sense that the receiver is ready to receive video). +	    Each bit corresponds to an output pad on the transmitter. If an output pad +	    does not have an associated Rx Sense, then the bit for that pad will be 0. +	    This read-only control is applicable to DVI-D and HDMI devices. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_TX_EDID_PRESENT</constant></entry> +	    <entry>bitmask</entry> +	  </row> +	  <row> +	    <entry spanname="descr">When the transmitter sees the hotplug signal from the +	    receiver it will attempt to read the EDID. If set, then the transmitter has read +	    at least the first block (= 128 bytes). +	    Each bit corresponds to an output pad on the transmitter. If an output pad +	    does not support EDIDs, then the bit for that pad will be 0. +	    This read-only control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_TX_MODE</constant></entry> +	    <entry id="v4l2-dv-tx-mode">enum v4l2_dv_tx_mode</entry> +	  </row> +	  <row> +	    <entry spanname="descr">HDMI transmitters can transmit in DVI-D mode (just video) +	    or in HDMI mode (video + audio + auxiliary data). This control selects which mode +	    to use: V4L2_DV_TX_MODE_DVI_D or V4L2_DV_TX_MODE_HDMI. +	    This control is applicable to HDMI connectors. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_TX_RGB_RANGE</constant></entry> +	    <entry id="v4l2-dv-rgb-range">enum v4l2_dv_rgb_range</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Select the quantization range for RGB output. V4L2_DV_RANGE_AUTO +	    follows the RGB quantization range specified in the standard for the video interface +	    (ie. <xref linkend="cea861" /> for HDMI). V4L2_DV_RANGE_LIMITED and V4L2_DV_RANGE_FULL override the standard +	    to be compatible with sinks that have not implemented the standard correctly +	    (unfortunately quite common for HDMI and DVI-D). Full range allows all possible values to be +	    used whereas limited range sets the range to (16 << (N-8)) - (235 << (N-8)) +	    where N is the number of bits per component. +	    This control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_RX_POWER_PRESENT</constant></entry> +	    <entry>bitmask</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Detects whether the receiver receives power from the source +	    (e.g. HDMI carries 5V on one of the pins). This is often used to power an eeprom +	    which contains EDID information, such that the source can read the EDID even if +	    the sink is in standby/power off. +	    Each bit corresponds to an input pad on the transmitter. If an input pad +	    cannot detect whether power is present, then the bit for that pad will be 0. +	    This read-only control is applicable to DVI-D, HDMI and DisplayPort connectors. +	    </entry> +	  </row> +	  <row> +	    <entry spanname="id"><constant>V4L2_CID_DV_RX_RGB_RANGE</constant></entry> +	    <entry>enum v4l2_dv_rgb_range</entry> +	  </row> +	  <row> +	    <entry spanname="descr">Select the quantization range for RGB input. V4L2_DV_RANGE_AUTO +	    follows the RGB quantization range specified in the standard for the video interface +	    (ie. <xref linkend="cea861" /> for HDMI). V4L2_DV_RANGE_LIMITED and V4L2_DV_RANGE_FULL override the standard +	    to be compatible with sources that have not implemented the standard correctly +	    (unfortunately quite common for HDMI and DVI-D). Full range allows all possible values to be +	    used whereas limited range sets the range to (16 << (N-8)) - (235 << (N-8)) +	    where N is the number of bits per component. +	    This control is applicable to VGA, DVI-A/D, HDMI and DisplayPort connectors. +	    </entry> +	  </row> +	  <row><entry></entry></row> +	</tbody> +      </tgroup> +      </table> + +    </section> + +    <section id="fm-rx-controls"> +      <title>FM Receiver Control Reference</title> + +      <para>The FM Receiver (FM_RX) class includes controls for common features of +      FM Reception capable devices.</para> + +      <table pgwide="1" frame="none" id="fm-rx-control-id"> +      <title>FM_RX Control IDs</title> + +      <tgroup cols="4"> +        <colspec colname="c1" colwidth="1*" /> +        <colspec colname="c2" colwidth="6*" /> +        <colspec colname="c3" colwidth="2*" /> +        <colspec colname="c4" colwidth="6*" /> +        <spanspec namest="c1" nameend="c2" spanname="id" /> +        <spanspec namest="c2" nameend="c4" spanname="descr" /> +        <thead> +          <row> +            <entry spanname="id" align="left">ID</entry> +            <entry align="left">Type</entry> +          </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry> +          </row> +        </thead> +        <tbody valign="top"> +          <row><entry></entry></row> +          <row> +            <entry spanname="id"><constant>V4L2_CID_FM_RX_CLASS</constant> </entry> +            <entry>class</entry> +          </row><row><entry spanname="descr">The FM_RX class +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a +description of this control class.</entry> +          </row> +          <row> +            <entry spanname="id"><constant>V4L2_CID_RDS_RECEPTION</constant> </entry> +            <entry>boolean</entry> +          </row><row><entry spanname="descr">Enables/disables RDS +	  reception by the radio tuner</entry> +          </row> +          <row> +	    <entry spanname="id"><constant>V4L2_CID_TUNE_DEEMPHASIS</constant> </entry> +	    <entry>enum v4l2_deemphasis</entry> +	  </row> +	  <row id="v4l2-deemphasis"><entry spanname="descr">Configures the de-emphasis value for reception. +A de-emphasis filter is applied to the broadcast to accentuate the high audio frequencies. +Depending on the region, a time constant of either 50 or 75 useconds is used. The enum v4l2_deemphasis +defines possible values for de-emphasis. Here they are:</entry> +	</row><row> +	<entrytbl spanname="descr" cols="2"> +		  <tbody valign="top"> +		    <row> +		      <entry><constant>V4L2_DEEMPHASIS_DISABLED</constant> </entry> +		      <entry>No de-emphasis is applied.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_DEEMPHASIS_50_uS</constant> </entry> +		      <entry>A de-emphasis of 50 uS is used.</entry> +		    </row> +		    <row> +		      <entry><constant>V4L2_DEEMPHASIS_75_uS</constant> </entry> +		      <entry>A de-emphasis of 75 uS is used.</entry> +		    </row> +		  </tbody> +		</entrytbl> + +	  </row> +          <row><entry></entry></row> +        </tbody> +      </tgroup> +      </table> + +      </section> + +    <section id="rf-tuner-controls"> +      <title>RF Tuner Control Reference</title> + +      <para> +The RF Tuner (RF_TUNER) class includes controls for common features of devices +having RF tuner. +      </para> +      <para> +In this context, RF tuner is radio receiver circuit between antenna and +demodulator. It receives radio frequency (RF) from the antenna and converts that +received signal to lower intermediate frequency (IF) or baseband frequency (BB). +Tuners that could do baseband output are often called Zero-IF tuners. Older +tuners were typically simple PLL tuners inside a metal box, whilst newer ones +are highly integrated chips without a metal box "silicon tuners". These controls +are mostly applicable for new feature rich silicon tuners, just because older +tuners does not have much adjustable features. +      </para> +      <para> +For more information about RF tuners see +<ulink url="http://en.wikipedia.org/wiki/Tuner_%28radio%29">Tuner (radio)</ulink> +and +<ulink url="http://en.wikipedia.org/wiki/RF_front_end">RF front end</ulink> +from Wikipedia. +      </para> + +      <table pgwide="1" frame="none" id="rf-tuner-control-id"> +        <title>RF_TUNER Control IDs</title> + +        <tgroup cols="4"> +          <colspec colname="c1" colwidth="1*" /> +          <colspec colname="c2" colwidth="6*" /> +          <colspec colname="c3" colwidth="2*" /> +          <colspec colname="c4" colwidth="6*" /> +          <spanspec namest="c1" nameend="c2" spanname="id" /> +          <spanspec namest="c2" nameend="c4" spanname="descr" /> +          <thead> +            <row> +              <entry spanname="id" align="left">ID</entry> +              <entry align="left">Type</entry> +            </row> +            <row rowsep="1"> +              <entry spanname="descr" align="left">Description</entry> +            </row> +          </thead> +          <tbody valign="top"> +            <row><entry></entry></row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_CLASS</constant> </entry> +              <entry>class</entry> +            </row><row><entry spanname="descr">The RF_TUNER class +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a +description of this control class.</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_BANDWIDTH_AUTO</constant> </entry> +              <entry>boolean</entry> +            </row> +            <row> +              <entry spanname="descr">Enables/disables tuner radio channel +bandwidth configuration. In automatic mode bandwidth configuration is performed +by the driver.</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_BANDWIDTH</constant> </entry> +              <entry>integer</entry> +            </row> +            <row> +              <entry spanname="descr">Filter(s) on tuner signal path are used to +filter signal according to receiving party needs. Driver configures filters to +fulfill desired bandwidth requirement. Used when V4L2_CID_RF_TUNER_BANDWIDTH_AUTO is not +set. Unit is in Hz. The range and step are driver-specific.</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_LNA_GAIN_AUTO</constant> </entry> +              <entry>boolean</entry> +            </row> +            <row> +              <entry spanname="descr">Enables/disables LNA automatic gain control (AGC)</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO</constant> </entry> +              <entry>boolean</entry> +            </row> +            <row> +              <entry spanname="descr">Enables/disables mixer automatic gain control (AGC)</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_IF_GAIN_AUTO</constant> </entry> +              <entry>boolean</entry> +            </row> +            <row> +              <entry spanname="descr">Enables/disables IF automatic gain control (AGC)</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_LNA_GAIN</constant> </entry> +              <entry>integer</entry> +            </row> +            <row> +              <entry spanname="descr">LNA (low noise amplifier) gain is first +gain stage on the RF tuner signal path. It is located very close to tuner +antenna input. Used when <constant>V4L2_CID_RF_TUNER_LNA_GAIN_AUTO</constant> is not set. +The range and step are driver-specific.</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_MIXER_GAIN</constant> </entry> +              <entry>integer</entry> +            </row> +            <row> +              <entry spanname="descr">Mixer gain is second gain stage on the RF +tuner signal path. It is located inside mixer block, where RF signal is +down-converted by the mixer. Used when <constant>V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO</constant> +is not set. The range and step are driver-specific.</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_IF_GAIN</constant> </entry> +              <entry>integer</entry> +            </row> +            <row> +              <entry spanname="descr">IF gain is last gain stage on the RF tuner +signal path. It is located on output of RF tuner. It controls signal level of +intermediate frequency output or baseband output. Used when +<constant>V4L2_CID_RF_TUNER_IF_GAIN_AUTO</constant> is not set. The range and step are +driver-specific.</entry> +            </row> +            <row> +              <entry spanname="id"><constant>V4L2_CID_RF_TUNER_PLL_LOCK</constant> </entry> +              <entry>boolean</entry> +            </row> +            <row> +              <entry spanname="descr">Is synthesizer PLL locked? RF tuner is +receiving given frequency when that control is set. This is a read-only control. +</entry> +            </row> +          </tbody> +        </tgroup> +      </table> +    </section> +</section> diff --git a/Documentation/DocBook/media/v4l/crop.pdf b/Documentation/DocBook/media/v4l/crop.pdf Binary files differnew file mode 100644 index 00000000000..c9fb81cd32f --- /dev/null +++ b/Documentation/DocBook/media/v4l/crop.pdf diff --git a/Documentation/DocBook/media/v4l/dev-capture.xml b/Documentation/DocBook/media/v4l/dev-capture.xml new file mode 100644 index 00000000000..e1c5f9406d6 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-capture.xml @@ -0,0 +1,110 @@ +  <title>Video Capture Interface</title> + +  <para>Video capture devices sample an analog video signal and store +the digitized images in memory. Today nearly all devices can capture +at full 25 or 30 frames/second. With this interface applications can +control the capture process and move images from the driver into user +space.</para> + +  <para>Conventionally V4L2 video capture devices are accessed through +character device special files named <filename>/dev/video</filename> +and <filename>/dev/video0</filename> to +<filename>/dev/video63</filename> with major number 81 and minor +numbers 0 to 63. <filename>/dev/video</filename> is typically a +symbolic link to the preferred video device. Note the same device +files are used for video output devices.</para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the video capture interface set the +<constant>V4L2_CAP_VIDEO_CAPTURE</constant> or +<constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions +they may also support the <link linkend="overlay">video overlay</link> +(<constant>V4L2_CAP_VIDEO_OVERLAY</constant>) and the <link +linkend="raw-vbi">raw VBI capture</link> +(<constant>V4L2_CAP_VBI_CAPTURE</constant>) interface. At least one of +the read/write or streaming I/O methods must be supported. Tuners and +audio inputs are optional.</para> +  </section> + +  <section> +    <title>Supplemental Functions</title> + +    <para>Video capture devices shall support <link +linkend="audio">audio input</link>, <link +linkend="tuner">tuner</link>, <link linkend="control">controls</link>, +<link linkend="crop">cropping and scaling</link> and <link +linkend="streaming-par">streaming parameter</link> ioctls as needed. +The <link linkend="video">video input</link> and <link +linkend="standard">video standard</link> ioctls must be supported by +all video capture devices.</para> +  </section> + +  <section> +    <title>Image Format Negotiation</title> + +    <para>The result of a capture operation is determined by +cropping and image format parameters. The former select an area of the +video picture to capture, the latter how images are stored in memory, +&ie; in RGB or YUV format, the number of bits per pixel or width and +height. Together they also define how images are scaled in the +process.</para> + +    <para>As usual these parameters are <emphasis>not</emphasis> reset +at &func-open; time to permit Unix tool chains, programming a device +and then reading from it as if it was a plain file. Well written V4L2 +applications ensure they really get what they want, including cropping +and scaling.</para> + +    <para>Cropping initialization at minimum requires to reset the +parameters to defaults. An example is given in <xref +linkend="crop" />.</para> + +    <para>To query the current image format applications set the +<structfield>type</structfield> field of a &v4l2-format; to +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and call the +&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill +the &v4l2-pix-format; <structfield>pix</structfield> or the +&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the +<structfield>fmt</structfield> union.</para> + +    <para>To request different parameters applications set the +<structfield>type</structfield> field of a &v4l2-format; as above and +initialize all fields of the &v4l2-pix-format; +<structfield>vbi</structfield> member of the +<structfield>fmt</structfield> union, or better just modify the +results of <constant>VIDIOC_G_FMT</constant>, and call the +&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may +adjust the parameters and finally return the actual parameters as +<constant>VIDIOC_G_FMT</constant> does.</para> + +    <para>Like <constant>VIDIOC_S_FMT</constant> the +&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations +without disabling I/O or possibly time consuming hardware +preparations.</para> + +    <para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane; +are discussed in <xref linkend="pixfmt" />. See also the specification of the +<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant> +and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video +capture devices must implement both the +<constant>VIDIOC_G_FMT</constant> and +<constant>VIDIOC_S_FMT</constant> ioctl, even if +<constant>VIDIOC_S_FMT</constant> ignores all requests and always +returns default parameters as <constant>VIDIOC_G_FMT</constant> does. +<constant>VIDIOC_TRY_FMT</constant> is optional.</para> +  </section> + +  <section> +    <title>Reading Images</title> + +    <para>A video capture device may support the <link +linkend="rw">read() function</link> and/or streaming (<link +linkend="mmap">memory mapping</link> or <link +linkend="userp">user pointer</link>) I/O. See <xref +linkend="io" /> for details.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-codec.xml b/Documentation/DocBook/media/v4l/dev-codec.xml new file mode 100644 index 00000000000..ff44c16fc08 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-codec.xml @@ -0,0 +1,27 @@ +  <title>Codec Interface</title> + +  <para>A V4L2 codec can compress, decompress, transform, or otherwise +convert video data from one format into another format, in memory. Typically +such devices are memory-to-memory devices (i.e. devices with the +<constant>V4L2_CAP_VIDEO_M2M</constant> or <constant>V4L2_CAP_VIDEO_M2M_MPLANE</constant> +capability set). +</para> + +  <para>A memory-to-memory video node acts just like a normal video node, but it +supports both output (sending frames from memory to the codec hardware) and +capture (receiving the processed frames from the codec hardware into memory) +stream I/O. An application will have to setup the stream +I/O for both sides and finally call &VIDIOC-STREAMON; for both capture and output +to start the codec.</para> + +  <para>Video compression codecs use the MPEG controls to setup their codec parameters +(note that the MPEG controls actually support many more codecs than just MPEG). +See <xref linkend="mpeg-controls"></xref>.</para> + +  <para>Memory-to-memory devices can often be used as a shared resource: you can +open the video node multiple times, each application setting up their own codec properties +that are local to the file handle, and each can use it independently from the others. +The driver will arbitrate access to the codec and reprogram it whenever another file +handler gets access. This is different from the usual video node behavior where the video properties +are global to the device (i.e. changing something through one file handle is visible +through another file handle).</para> diff --git a/Documentation/DocBook/media/v4l/dev-effect.xml b/Documentation/DocBook/media/v4l/dev-effect.xml new file mode 100644 index 00000000000..2350a67c071 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-effect.xml @@ -0,0 +1,17 @@ +  <title>Effect Devices Interface</title> + +  <note> +    <title>Suspended</title> + +    <para>This interface has been be suspended from the V4L2 API +implemented in Linux 2.6 until we have more experience with effect +device interfaces.</para> +  </note> + +  <para>A V4L2 video effect device can do image effects, filtering, or +combine two or more images or image streams. For example video +transitions or wipes. Applications send data to be processed and +receive the result data either with &func-read; and &func-write; +functions, or through the streaming I/O mechanism.</para> + +  <para>[to do]</para> diff --git a/Documentation/DocBook/media/v4l/dev-event.xml b/Documentation/DocBook/media/v4l/dev-event.xml new file mode 100644 index 00000000000..19f4becfae3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-event.xml @@ -0,0 +1,43 @@ +  <title>Event Interface</title> + +  <para>The V4L2 event interface provides a means for a user to get +  immediately notified on certain conditions taking place on a device. +  This might include start of frame or loss of signal events, for +  example. Changes in the value or state of a V4L2 control can also be +  reported through events. +  </para> + +  <para>To receive events, the events the user is interested in first must +  be subscribed using the &VIDIOC-SUBSCRIBE-EVENT; ioctl. Once an event is +  subscribed, the events of subscribed types are dequeueable using the +  &VIDIOC-DQEVENT; ioctl. Events may be unsubscribed using +  VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event type V4L2_EVENT_ALL may +  be used to unsubscribe all the events the driver supports.</para> + +  <para>The event subscriptions and event queues are specific to file +  handles. Subscribing an event on one file handle does not affect +  other file handles.</para> + +  <para>The information on dequeueable events is obtained by using select or +  poll system calls on video devices. The V4L2 events use POLLPRI events on +  poll system call and exceptions on select system call.</para> + +  <para>Starting with kernel 3.1 certain guarantees can be given with +  regards to events:<orderedlist> +	<listitem> +	  <para>Each subscribed event has its own internal dedicated event queue. +This means that flooding of one event type will not interfere with other +event types.</para> +	</listitem> +	<listitem> +	  <para>If the internal event queue for a particular subscribed event +becomes full, then the oldest event in that queue will be dropped.</para> +	</listitem> +	<listitem> +	  <para>Where applicable, certain event types can ensure that the payload +of the oldest event that is about to be dropped will be merged with the payload +of the next oldest event. Thus ensuring that no information is lost, but only an +intermediate step leading up to that information. See the documentation for the +event you want to subscribe to whether this is applicable for that event or not.</para> +	</listitem> +      </orderedlist></para> diff --git a/Documentation/DocBook/media/v4l/dev-osd.xml b/Documentation/DocBook/media/v4l/dev-osd.xml new file mode 100644 index 00000000000..54853329140 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-osd.xml @@ -0,0 +1,149 @@ +  <title>Video Output Overlay Interface</title> +  <subtitle>Also known as On-Screen Display (OSD)</subtitle> + +  <para>Some video output devices can overlay a framebuffer image onto +the outgoing video signal. Applications can set up such an overlay +using this interface, which borrows structures and ioctls of the <link +linkend="overlay">Video Overlay</link> interface.</para> + +  <para>The OSD function is accessible through the same character +special file as the <link linkend="capture">Video Output</link> function. +Note the default function of such a <filename>/dev/video</filename> device +is video capturing or output. The OSD function is only available after +calling the &VIDIOC-S-FMT; ioctl.</para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the <wordasword>Video Output +Overlay</wordasword> interface set the +<constant>V4L2_CAP_VIDEO_OUTPUT_OVERLAY</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl.</para> +  </section> + +  <section> +    <title>Framebuffer</title> + +    <para>Contrary to the <wordasword>Video Overlay</wordasword> +interface the framebuffer is normally implemented on the TV card and +not the graphics card. On Linux it is accessible as a framebuffer +device (<filename>/dev/fbN</filename>). Given a V4L2 device, +applications can find the corresponding framebuffer device by calling +the &VIDIOC-G-FBUF; ioctl. It returns, amongst other information, the +physical address of the framebuffer in the +<structfield>base</structfield> field of &v4l2-framebuffer;. The +framebuffer device ioctl <constant>FBIOGET_FSCREENINFO</constant> +returns the same address in the <structfield>smem_start</structfield> +field of struct <structname>fb_fix_screeninfo</structname>. The +<constant>FBIOGET_FSCREENINFO</constant> ioctl and struct +<structname>fb_fix_screeninfo</structname> are defined in the +<filename>linux/fb.h</filename> header file.</para> + +    <para>The width and height of the framebuffer depends on the +current video standard. A V4L2 driver may reject attempts to change +the video standard (or any other ioctl which would imply a framebuffer +size change) with an &EBUSY; until all applications closed the +framebuffer device.</para> + +    <example> +      <title>Finding a framebuffer device for OSD</title> + +      <programlisting> +#include <linux/fb.h> + +&v4l2-framebuffer; fbuf; +unsigned int i; +int fb_fd; + +if (-1 == ioctl(fd, VIDIOC_G_FBUF, &fbuf)) { +	perror("VIDIOC_G_FBUF"); +	exit(EXIT_FAILURE); +} + +for (i = 0; i < 30; i++) { +	char dev_name[16]; +	struct fb_fix_screeninfo si; + +	snprintf(dev_name, sizeof(dev_name), "/dev/fb%u", i); + +	fb_fd = open(dev_name, O_RDWR); +	if (-1 == fb_fd) { +		switch (errno) { +		case ENOENT: /* no such file */ +		case ENXIO:  /* no driver */ +			continue; + +		default: +			perror("open"); +			exit(EXIT_FAILURE); +		} +	} + +	if (0 == ioctl(fb_fd, FBIOGET_FSCREENINFO, &si)) { +		if (si.smem_start == (unsigned long)fbuf.base) +			break; +	} else { +		/* Apparently not a framebuffer device. */ +	} + +	close(fb_fd); +	fb_fd = -1; +} + +/* fb_fd is the file descriptor of the framebuffer device +   for the video output overlay, or -1 if no device was found. */ +</programlisting> +    </example> +  </section> + +  <section> +    <title>Overlay Window and Scaling</title> + +    <para>The overlay is controlled by source and target rectangles. +The source rectangle selects a subsection of the framebuffer image to +be overlaid, the target rectangle an area in the outgoing video signal +where the image will appear. Drivers may or may not support scaling, +and arbitrary sizes and positions of these rectangles. Further drivers +may support any (or none) of the clipping/blending methods defined for +the <link linkend="overlay">Video Overlay</link> interface.</para> + +    <para>A &v4l2-window; defines the size of the source rectangle, +its position in the framebuffer and the clipping/blending method to be +used for the overlay. To get the current parameters applications set +the <structfield>type</structfield> field of a &v4l2-format; to +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant> and call the +&VIDIOC-G-FMT; ioctl. The driver fills the +<structname>v4l2_window</structname> substructure named +<structfield>win</structfield>. It is not possible to retrieve a +previously programmed clipping list or bitmap.</para> + +    <para>To program the source rectangle applications set the +<structfield>type</structfield> field of a &v4l2-format; to +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant>, initialize +the <structfield>win</structfield> substructure and call the +&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against +hardware limits and returns the actual parameters as +<constant>VIDIOC_G_FMT</constant> does. Like +<constant>VIDIOC_S_FMT</constant>, the &VIDIOC-TRY-FMT; ioctl can be +used to learn about driver capabilities without actually changing +driver state. Unlike <constant>VIDIOC_S_FMT</constant> this also works +after the overlay has been enabled.</para> + +    <para>A &v4l2-crop; defines the size and position of the target +rectangle. The scaling factor of the overlay is implied by the width +and height given in &v4l2-window; and &v4l2-crop;. The cropping API +applies to <wordasword>Video Output</wordasword> and <wordasword>Video +Output Overlay</wordasword> devices in the same way as to +<wordasword>Video Capture</wordasword> and <wordasword>Video +Overlay</wordasword> devices, merely reversing the direction of the +data flow. For more information see <xref linkend="crop" />.</para> +  </section> + +  <section> +    <title>Enabling Overlay</title> + +    <para>There is no V4L2 ioctl to enable or disable the overlay, +however the framebuffer interface of the driver may support the +<constant>FBIOBLANK</constant> ioctl.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-output.xml b/Documentation/DocBook/media/v4l/dev-output.xml new file mode 100644 index 00000000000..9130a3dc788 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-output.xml @@ -0,0 +1,106 @@ +  <title>Video Output Interface</title> + +  <para>Video output devices encode stills or image sequences as +analog video signal. With this interface applications can +control the encoding process and move images from user space to +the driver.</para> + +  <para>Conventionally V4L2 video output devices are accessed through +character device special files named <filename>/dev/video</filename> +and <filename>/dev/video0</filename> to +<filename>/dev/video63</filename> with major number 81 and minor +numbers 0 to 63. <filename>/dev/video</filename> is typically a +symbolic link to the preferred video device. Note the same device +files are used for video capture devices.</para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the video output interface set the +<constant>V4L2_CAP_VIDEO_OUTPUT</constant> or +<constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions +they may also support the <link linkend="raw-vbi">raw VBI +output</link> (<constant>V4L2_CAP_VBI_OUTPUT</constant>) interface. At +least one of the read/write or streaming I/O methods must be +supported. Modulators and audio outputs are optional.</para> +  </section> + +  <section> +    <title>Supplemental Functions</title> + +    <para>Video output devices shall support <link +linkend="audio">audio output</link>, <link +linkend="tuner">modulator</link>, <link linkend="control">controls</link>, +<link linkend="crop">cropping and scaling</link> and <link +linkend="streaming-par">streaming parameter</link> ioctls as needed. +The <link linkend="video">video output</link> and <link +linkend="standard">video standard</link> ioctls must be supported by +all video output devices.</para> +  </section> + +  <section> +    <title>Image Format Negotiation</title> + +    <para>The output is determined by cropping and image format +parameters. The former select an area of the video picture where the +image will appear, the latter how images are stored in memory, &ie; in +RGB or YUV format, the number of bits per pixel or width and height. +Together they also define how images are scaled in the process.</para> + +    <para>As usual these parameters are <emphasis>not</emphasis> reset +at &func-open; time to permit Unix tool chains, programming a device +and then writing to it as if it was a plain file. Well written V4L2 +applications ensure they really get what they want, including cropping +and scaling.</para> + +    <para>Cropping initialization at minimum requires to reset the +parameters to defaults. An example is given in <xref +linkend="crop" />.</para> + +    <para>To query the current image format applications set the +<structfield>type</structfield> field of a &v4l2-format; to +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and call the +&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill +the &v4l2-pix-format; <structfield>pix</structfield> or the +&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the +<structfield>fmt</structfield> union.</para> + +    <para>To request different parameters applications set the +<structfield>type</structfield> field of a &v4l2-format; as above and +initialize all fields of the &v4l2-pix-format; +<structfield>vbi</structfield> member of the +<structfield>fmt</structfield> union, or better just modify the +results of <constant>VIDIOC_G_FMT</constant>, and call the +&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may +adjust the parameters and finally return the actual parameters as +<constant>VIDIOC_G_FMT</constant> does.</para> + +    <para>Like <constant>VIDIOC_S_FMT</constant> the +&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations +without disabling I/O or possibly time consuming hardware +preparations.</para> + +    <para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane; +are discussed in <xref linkend="pixfmt" />. See also the specification of the +<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant> +and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video +output devices must implement both the +<constant>VIDIOC_G_FMT</constant> and +<constant>VIDIOC_S_FMT</constant> ioctl, even if +<constant>VIDIOC_S_FMT</constant> ignores all requests and always +returns default parameters as <constant>VIDIOC_G_FMT</constant> does. +<constant>VIDIOC_TRY_FMT</constant> is optional.</para> +  </section> + +  <section> +    <title>Writing Images</title> + +    <para>A video output device may support the <link +linkend="rw">write() function</link> and/or streaming (<link +linkend="mmap">memory mapping</link> or <link +linkend="userp">user pointer</link>) I/O. See <xref +linkend="io" /> for details.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-overlay.xml b/Documentation/DocBook/media/v4l/dev-overlay.xml new file mode 100644 index 00000000000..cc6e0c5c960 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-overlay.xml @@ -0,0 +1,368 @@ +  <title>Video Overlay Interface</title> +  <subtitle>Also known as Framebuffer Overlay or Previewing</subtitle> + +  <para>Video overlay devices have the ability to genlock (TV-)video +into the (VGA-)video signal of a graphics card, or to store captured +images directly in video memory of a graphics card, typically with +clipping. This can be considerable more efficient than capturing +images and displaying them by other means. In the old days when only +nuclear power plants needed cooling towers this used to be the only +way to put live video into a window.</para> + +  <para>Video overlay devices are accessed through the same character +special files as <link linkend="capture">video capture</link> devices. +Note the default function of a <filename>/dev/video</filename> device +is video capturing. The overlay function is only available after +calling the &VIDIOC-S-FMT; ioctl.</para> + +    <para>The driver may support simultaneous overlay and capturing +using the read/write and streaming I/O methods. If so, operation at +the nominal frame rate of the video standard is not guaranteed. Frames +may be directed away from overlay to capture, or one field may be used +for overlay and the other for capture if the capture parameters permit +this.</para> + +  <para>Applications should use different file descriptors for +capturing and overlay. This must be supported by all drivers capable +of simultaneous capturing and overlay. Optionally these drivers may +also permit capturing and overlay with a single file descriptor for +compatibility with V4L and earlier versions of V4L2.<footnote> +	<para>A common application of two file descriptors is the +XFree86 <link linkend="xvideo">Xv/V4L</link> interface driver and +a V4L2 application. While the X server controls video overlay, the +application can take advantage of memory mapping and DMA.</para> +	<para>In the opinion of the designers of this API, no driver +writer taking the efforts to support simultaneous capturing and +overlay will restrict this ability by requiring a single file +descriptor, as in V4L and earlier versions of V4L2. Making this +optional means applications depending on two file descriptors need +backup routines to be compatible with all drivers, which is +considerable more work than using two fds in applications which do +not. Also two fd's fit the general concept of one file descriptor for +each logical stream. Hence as a complexity trade-off drivers +<emphasis>must</emphasis> support two file descriptors and +<emphasis>may</emphasis> support single fd operation.</para> +      </footnote></para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the video overlay interface set the +<constant>V4L2_CAP_VIDEO_OVERLAY</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. The overlay I/O method specified +below must be supported. Tuners and audio inputs are optional.</para> +  </section> + +  <section> +    <title>Supplemental Functions</title> + +    <para>Video overlay devices shall support <link +linkend="audio">audio input</link>, <link +linkend="tuner">tuner</link>, <link linkend="control">controls</link>, +<link linkend="crop">cropping and scaling</link> and <link +linkend="streaming-par">streaming parameter</link> ioctls as needed. +The <link linkend="video">video input</link> and <link +linkend="standard">video standard</link> ioctls must be supported by +all video overlay devices.</para> +  </section> + +  <section> +    <title>Setup</title> + +    <para>Before overlay can commence applications must program the +driver with frame buffer parameters, namely the address and size of +the frame buffer and the image format, for example RGB 5:6:5. The +&VIDIOC-G-FBUF; and &VIDIOC-S-FBUF; ioctls are available to get +and set these parameters, respectively. The +<constant>VIDIOC_S_FBUF</constant> ioctl is privileged because it +allows to set up DMA into physical memory, bypassing the memory +protection mechanisms of the kernel. Only the superuser can change the +frame buffer address and size. Users are not supposed to run TV +applications as root or with SUID bit set. A small helper application +with suitable privileges should query the graphics system and program +the V4L2 driver at the appropriate time.</para> + +    <para>Some devices add the video overlay to the output signal +of the graphics card. In this case the frame buffer is not modified by +the video device, and the frame buffer address and pixel format are +not needed by the driver. The <constant>VIDIOC_S_FBUF</constant> ioctl +is not privileged. An application can check for this type of device by +calling the <constant>VIDIOC_G_FBUF</constant> ioctl.</para> + +    <para>A driver may support any (or none) of five clipping/blending +methods:<orderedlist> +	<listitem> +	  <para>Chroma-keying displays the overlaid image only where +pixels in the primary graphics surface assume a certain color.</para> +	</listitem> +	<listitem> +	  <para>A bitmap can be specified where each bit corresponds +to a pixel in the overlaid image. When the bit is set, the +corresponding video pixel is displayed, otherwise a pixel of the +graphics surface.</para> +	</listitem> +	<listitem> +	  <para>A list of clipping rectangles can be specified. In +these regions <emphasis>no</emphasis> video is displayed, so the +graphics surface can be seen here.</para> +	</listitem> +	<listitem> +	  <para>The framebuffer has an alpha channel that can be used +to clip or blend the framebuffer with the video.</para> +	</listitem> +	<listitem> +	  <para>A global alpha value can be specified to blend the +framebuffer contents with video images.</para> +	</listitem> +      </orderedlist></para> + +    <para>When simultaneous capturing and overlay is supported and +the hardware prohibits different image and frame buffer formats, the +format requested first takes precedence. The attempt to capture +(&VIDIOC-S-FMT;) or overlay (&VIDIOC-S-FBUF;) may fail with an +&EBUSY; or return accordingly modified parameters..</para> +  </section> + +  <section> +    <title>Overlay Window</title> + +    <para>The overlaid image is determined by cropping and overlay +window parameters. The former select an area of the video picture to +capture, the latter how images are overlaid and clipped. Cropping +initialization at minimum requires to reset the parameters to +defaults. An example is given in <xref linkend="crop" />.</para> + +    <para>The overlay window is described by a &v4l2-window;. It +defines the size of the image, its position over the graphics surface +and the clipping to be applied. To get the current parameters +applications set the <structfield>type</structfield> field of a +&v4l2-format; to <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant> and +call the &VIDIOC-G-FMT; ioctl. The driver fills the +<structname>v4l2_window</structname> substructure named +<structfield>win</structfield>. It is not possible to retrieve a +previously programmed clipping list or bitmap.</para> + +    <para>To program the overlay window applications set the +<structfield>type</structfield> field of a &v4l2-format; to +<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, initialize the +<structfield>win</structfield> substructure and call the +&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against +hardware limits and returns the actual parameters as +<constant>VIDIOC_G_FMT</constant> does. Like +<constant>VIDIOC_S_FMT</constant>, the &VIDIOC-TRY-FMT; ioctl can be +used to learn about driver capabilities without actually changing +driver state. Unlike <constant>VIDIOC_S_FMT</constant> this also works +after the overlay has been enabled.</para> + +    <para>The scaling factor of the overlaid image is implied by the +width and height given in &v4l2-window; and the size of the cropping +rectangle. For more information see <xref linkend="crop" />.</para> + +    <para>When simultaneous capturing and overlay is supported and +the hardware prohibits different image and window sizes, the size +requested first takes precedence. The attempt to capture or overlay as +well (&VIDIOC-S-FMT;) may fail with an &EBUSY; or return accordingly +modified parameters.</para> + +    <table pgwide="1" frame="none" id="v4l2-window"> +      <title>struct <structname>v4l2_window</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>&v4l2-rect;</entry> +	    <entry><structfield>w</structfield></entry> +	    <entry>Size and position of the window relative to the +top, left corner of the frame buffer defined with &VIDIOC-S-FBUF;. The +window can extend the frame buffer width and height, the +<structfield>x</structfield> and <structfield>y</structfield> +coordinates can be negative, and it can lie completely outside the +frame buffer. The driver clips the window accordingly, or if that is +not possible, modifies its size and/or position.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-field;</entry> +	    <entry><structfield>field</structfield></entry> +	    <entry>Applications set this field to determine which +video field shall be overlaid, typically one of +<constant>V4L2_FIELD_ANY</constant> (0), +<constant>V4L2_FIELD_TOP</constant>, +<constant>V4L2_FIELD_BOTTOM</constant> or +<constant>V4L2_FIELD_INTERLACED</constant>. Drivers may have to choose +a different field order and return the actual setting here.</entry> +	    </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>chromakey</structfield></entry> +	    <entry>When chroma-keying has been negotiated with +&VIDIOC-S-FBUF; applications set this field to the desired pixel value +for the chroma key. The format is the same as the pixel format of the +framebuffer (&v4l2-framebuffer; +<structfield>fmt.pixelformat</structfield> field), with bytes in host +order. E. g. for <link +linkend="V4L2-PIX-FMT-BGR32"><constant>V4L2_PIX_FMT_BGR24</constant></link> +the value should be 0xRRGGBB on a little endian, 0xBBGGRR on a big +endian host.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-clip; *</entry> +	    <entry><structfield>clips</structfield></entry> +	    <entry>When chroma-keying has <emphasis>not</emphasis> +been negotiated and &VIDIOC-G-FBUF; indicated this capability, +applications can set this field to point to an array of +clipping rectangles.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>Like the window coordinates +<structfield>w</structfield>, clipping rectangles are defined relative +to the top, left corner of the frame buffer. However clipping +rectangles must not extend the frame buffer width and height, and they +must not overlap. If possible applications should merge adjacent +rectangles. Whether this must create x-y or y-x bands, or the order of +rectangles, is not defined. When clip lists are not supported the +driver ignores this field. Its contents after calling &VIDIOC-S-FMT; +are undefined.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>clipcount</structfield></entry> +	    <entry>When the application set the +<structfield>clips</structfield> field, this field must contain the +number of clipping rectangles in the list. When clip lists are not +supported the driver ignores this field, its contents after calling +<constant>VIDIOC_S_FMT</constant> are undefined. When clip lists are +supported but no clipping is desired this field must be set to +zero.</entry> +	  </row> +	  <row> +	    <entry>void *</entry> +	    <entry><structfield>bitmap</structfield></entry> +	    <entry>When chroma-keying has +<emphasis>not</emphasis> been negotiated and &VIDIOC-G-FBUF; indicated +this capability, applications can set this field to point to a +clipping bit mask.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para>It must be of the same size +as the window, <structfield>w.width</structfield> and +<structfield>w.height</structfield>. Each bit corresponds to a pixel +in the overlaid image, which is displayed only when the bit is +<emphasis>set</emphasis>. Pixel coordinates translate to bits like: +<programlisting> +((__u8 *) <structfield>bitmap</structfield>)[<structfield>w.width</structfield> * y + x / 8] & (1 << (x & 7))</programlisting></para><para>where <structfield>0</structfield> ≤ x < +<structfield>w.width</structfield> and <structfield>0</structfield> ≤ +y <<structfield>w.height</structfield>.<footnote> +		  <para>Should we require +	      <structfield>w.width</structfield> to be a multiple of +	      eight?</para> +		</footnote></para><para>When a clipping +bit mask is not supported the driver ignores this field, its contents +after calling &VIDIOC-S-FMT; are undefined. When a bit mask is supported +but no clipping is desired this field must be set to +<constant>NULL</constant>.</para><para>Applications need not create a +clip list or bit mask. When they pass both, or despite negotiating +chroma-keying, the results are undefined. Regardless of the chosen +method, the clipping abilities of the hardware may be limited in +quantity or quality. The results when these limits are exceeded are +undefined.<footnote> +		  <para>When the image is written into frame buffer +memory it will be undesirable if the driver clips out less pixels +than expected, because the application and graphics system are not +aware these regions need to be refreshed. The driver should clip out +more pixels or not write the image at all.</para> +		</footnote></para></entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>global_alpha</structfield></entry> +	    <entry>The global alpha value used to blend the +framebuffer with video images, if global alpha blending has been +negotiated (<constant>V4L2_FBUF_FLAG_GLOBAL_ALPHA</constant>, see +&VIDIOC-S-FBUF;, <xref linkend="framebuffer-flags" />).</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>Note this field was added in Linux 2.6.23, extending the structure. However +the <link linkend="vidioc-g-fmt">VIDIOC_G/S/TRY_FMT</link> ioctls, +which take a pointer to a <link +linkend="v4l2-format">v4l2_format</link> parent structure with padding +bytes at the end, are not affected.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-clip"> +      <title>struct <structname>v4l2_clip</structname><footnote> +	  <para>The X Window system defines "regions" which are +vectors of struct BoxRec { short x1, y1, x2, y2; } with width = x2 - +x1 and height = y2 - y1, so one cannot pass X11 clip lists +directly.</para> +	</footnote></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>&v4l2-rect;</entry> +	    <entry><structfield>c</structfield></entry> +	    <entry>Coordinates of the clipping rectangle, relative to +the top, left corner of the frame buffer. Only window pixels +<emphasis>outside</emphasis> all clipping rectangles are +displayed.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-clip; *</entry> +	    <entry><structfield>next</structfield></entry> +	    <entry>Pointer to the next clipping rectangle, NULL when +this is the last rectangle. Drivers ignore this field, it cannot be +used to pass a linked list of clipping rectangles.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- NB for easier reading this table is duplicated +    in the vidioc-cropcap chapter.--> + +    <table pgwide="1" frame="none" id="v4l2-rect"> +      <title>struct <structname>v4l2_rect</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>left</structfield></entry> +	    <entry>Horizontal offset of the top, left corner of the +rectangle, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>top</structfield></entry> +	    <entry>Vertical offset of the top, left corner of the +rectangle, in pixels. Offsets increase to the right and down.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry>Width of the rectangle, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry>Height of the rectangle, in pixels.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </section> + +  <section> +    <title>Enabling Overlay</title> + +    <para>To start or stop the frame buffer overlay applications call +the &VIDIOC-OVERLAY; ioctl.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-radio.xml b/Documentation/DocBook/media/v4l/dev-radio.xml new file mode 100644 index 00000000000..3e6ac73b36a --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-radio.xml @@ -0,0 +1,49 @@ +  <title>Radio Interface</title> + +  <para>This interface is intended for AM and FM (analog) radio +receivers and transmitters.</para> + +  <para>Conventionally V4L2 radio devices are accessed through +character device special files named <filename>/dev/radio</filename> +and <filename>/dev/radio0</filename> to +<filename>/dev/radio63</filename> with major number 81 and minor +numbers 64 to 127.</para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the radio interface set the +<constant>V4L2_CAP_RADIO</constant> and +<constant>V4L2_CAP_TUNER</constant> or +<constant>V4L2_CAP_MODULATOR</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. Other combinations of +capability flags are reserved for future extensions.</para> +  </section> + +  <section> +    <title>Supplemental Functions</title> + +    <para>Radio devices can support <link +linkend="control">controls</link>, and must support the <link +linkend="tuner">tuner or modulator</link> ioctls.</para> + +    <para>They do not support the video input or output, audio input +or output, video standard, cropping and scaling, compression and +streaming parameter, or overlay ioctls. All other ioctls and I/O +methods are reserved for future extensions.</para> +  </section> + +  <section> +    <title>Programming</title> + +    <para>Radio devices may have a couple audio controls (as discussed +in <xref linkend="control" />) such as a volume control, possibly custom +controls. Further all radio devices have one tuner or modulator (these are +discussed in <xref linkend="tuner" />) with index number zero to select +the radio frequency and to determine if a monaural or FM stereo +program is received/emitted. Drivers switch automatically between AM and FM +depending on the selected frequency. The &VIDIOC-G-TUNER; or +&VIDIOC-G-MODULATOR; ioctl +reports the supported frequency range.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-raw-vbi.xml b/Documentation/DocBook/media/v4l/dev-raw-vbi.xml new file mode 100644 index 00000000000..b788c72c885 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-raw-vbi.xml @@ -0,0 +1,339 @@ +  <title>Raw VBI Data Interface</title> + +  <para>VBI is an abbreviation of Vertical Blanking Interval, a gap +in the sequence of lines of an analog video signal. During VBI +no picture information is transmitted, allowing some time while the +electron beam of a cathode ray tube TV returns to the top of the +screen. Using an oscilloscope you will find here the vertical +synchronization pulses and short data packages ASK +modulated<footnote><para>ASK: Amplitude-Shift Keying. A high signal +level represents a '1' bit, a low level a '0' bit.</para></footnote> +onto the video signal. These are transmissions of services such as +Teletext or Closed Caption.</para> + +  <para>Subject of this interface type is raw VBI data, as sampled off +a video signal, or to be added to a signal for output. +The data format is similar to uncompressed video images, a number of +lines times a number of samples per line, we call this a VBI image.</para> + +  <para>Conventionally V4L2 VBI devices are accessed through character +device special files named <filename>/dev/vbi</filename> and +<filename>/dev/vbi0</filename> to <filename>/dev/vbi31</filename> with +major number 81 and minor numbers 224 to 255. +<filename>/dev/vbi</filename> is typically a symbolic link to the +preferred VBI device. This convention applies to both input and output +devices.</para> + +  <para>To address the problems of finding related video and VBI +devices VBI capturing and output is also available as device function +under <filename>/dev/video</filename>. To capture or output raw VBI +data with these devices applications must call the &VIDIOC-S-FMT; +ioctl. Accessed as <filename>/dev/vbi</filename>, raw VBI capturing +or output is the default device function.</para> + +    <section> +      <title>Querying Capabilities</title> + +      <para>Devices supporting the raw VBI capturing or output API set +the <constant>V4L2_CAP_VBI_CAPTURE</constant> or +<constant>V4L2_CAP_VBI_OUTPUT</constant> flags, respectively, in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the +read/write, streaming or asynchronous I/O methods must be +supported. VBI devices may or may not have a tuner or modulator.</para> +    </section> + +    <section> +      <title>Supplemental Functions</title> + +      <para>VBI devices shall support <link linkend="video">video +input or output</link>, <link linkend="tuner">tuner or +modulator</link>, and <link linkend="control">controls</link> ioctls +as needed. The <link linkend="standard">video standard</link> ioctls provide +information vital to program a VBI device, therefore must be +supported.</para> +    </section> + +    <section> +      <title>Raw VBI Format Negotiation</title> + +      <para>Raw VBI sampling abilities can vary, in particular the +sampling frequency. To properly interpret the data V4L2 specifies an +ioctl to query the sampling parameters. Moreover, to allow for some +flexibility applications can also suggest different parameters.</para> + +      <para>As usual these parameters are <emphasis>not</emphasis> +reset at &func-open; time to permit Unix tool chains, programming a +device and then reading from it as if it was a plain file. Well +written V4L2 applications should always ensure they really get what +they want, requesting reasonable parameters and then checking if the +actual parameters are suitable.</para> + +      <para>To query the current raw VBI capture parameters +applications set the <structfield>type</structfield> field of a +&v4l2-format; to <constant>V4L2_BUF_TYPE_VBI_CAPTURE</constant> or +<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>, and call the +&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill +the &v4l2-vbi-format; <structfield>vbi</structfield> member of the +<structfield>fmt</structfield> union.</para> + +      <para>To request different parameters applications set the +<structfield>type</structfield> field of a &v4l2-format; as above and +initialize all fields of the &v4l2-vbi-format; +<structfield>vbi</structfield> member of the +<structfield>fmt</structfield> union, or better just modify the +results of <constant>VIDIOC_G_FMT</constant>, and call the +&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers return +an &EINVAL; only when the given parameters are ambiguous, otherwise +they modify the parameters according to the hardware capabilites and +return the actual parameters. When the driver allocates resources at +this point, it may return an &EBUSY; to indicate the returned +parameters are valid but the required resources are currently not +available. That may happen for instance when the video and VBI areas +to capture would overlap, or when the driver supports multiple opens +and another process already requested VBI capturing or output. Anyway, +applications must expect other resource allocation points which may +return <errorcode>EBUSY</errorcode>, at the &VIDIOC-STREAMON; ioctl +and the first read(), write() and select() call.</para> + +      <para>VBI devices must implement both the +<constant>VIDIOC_G_FMT</constant> and +<constant>VIDIOC_S_FMT</constant> ioctl, even if +<constant>VIDIOC_S_FMT</constant> ignores all requests and always +returns default parameters as <constant>VIDIOC_G_FMT</constant> does. +<constant>VIDIOC_TRY_FMT</constant> is optional.</para> + +      <table pgwide="1" frame="none" id="v4l2-vbi-format"> +	<title>struct <structname>v4l2_vbi_format</structname></title> +	<tgroup cols="3"> +	  &cs-str; +	  <tbody valign="top"> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>sampling_rate</structfield></entry> +	      <entry>Samples per second, i. e. unit 1 Hz.</entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>offset</structfield></entry> +	      <entry><para>Horizontal offset of the VBI image, +relative to the leading edge of the line synchronization pulse and +counted in samples: The first sample in the VBI image will be located +<structfield>offset</structfield> / +<structfield>sampling_rate</structfield> seconds following the leading +edge. See also <xref linkend="vbi-hsync" />.</para></entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>samples_per_line</structfield></entry> +	      <entry></entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>sample_format</structfield></entry> +	      <entry><para>Defines the sample format as in <xref +linkend="pixfmt" />, a four-character-code.<footnote> +		    <para>A few devices may be unable to +sample VBI data at all but can extend the video capture window to the +VBI region.</para> +		  </footnote> Usually this is +<constant>V4L2_PIX_FMT_GREY</constant>, i. e. each sample +consists of 8 bits with lower values oriented towards the black level. +Do not assume any other correlation of values with the signal level. +For example, the MSB does not necessarily indicate if the signal is +'high' or 'low' because 128 may not be the mean value of the +signal. Drivers shall not convert the sample format by software.</para></entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>start</structfield>[2]</entry> +	      <entry>This is the scanning system line number +associated with the first line of the VBI image, of the first and the +second field respectively. See <xref linkend="vbi-525" /> and +<xref linkend="vbi-625" /> for valid values. VBI input drivers can +return start values 0 if the hardware cannot reliable identify +scanning lines, VBI acquisition may not require this +information.</entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>count</structfield>[2]</entry> +	      <entry>The number of lines in the first and second +field image, respectively.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para>Drivers should be as +flexibility as possible. For example, it may be possible to extend or +move the VBI capture window down to the picture area, implementing a +'full field mode' to capture data service transmissions embedded in +the picture.</para><para>An application can set the first or second +<structfield>count</structfield> value to zero if no data is required +from the respective field; <structfield>count</structfield>[1] if the +scanning system is progressive, &ie; not interlaced. The +corresponding start value shall be ignored by the application and +driver. Anyway, drivers may not support single field capturing and +return both count values non-zero.</para><para>Both +<structfield>count</structfield> values set to zero, or line numbers +outside the bounds depicted in <xref linkend="vbi-525" /> and <xref +		    linkend="vbi-625" />, or a field image covering +lines of two fields, are invalid and shall not be returned by the +driver.</para><para>To initialize the <structfield>start</structfield> +and <structfield>count</structfield> fields, applications must first +determine the current video standard selection. The &v4l2-std-id; or +the <structfield>framelines</structfield> field of &v4l2-standard; can +be evaluated for this purpose.</para></entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>flags</structfield></entry> +	      <entry>See <xref linkend="vbifmt-flags" /> below. Currently +only drivers set flags, applications must set this field to +zero.</entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>reserved</structfield>[2]</entry> +	      <entry>This array is reserved for future extensions. +Drivers and applications must set it to zero.</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> + +      <table pgwide="1" frame="none" id="vbifmt-flags"> +	<title>Raw VBI Format Flags</title> +	<tgroup cols="3"> +	  &cs-def; +	  <tbody valign="top"> +	    <row> +	      <entry><constant>V4L2_VBI_UNSYNC</constant></entry> +	      <entry>0x0001</entry> +	      <entry><para>This flag indicates hardware which does not +properly distinguish between fields. Normally the VBI image stores the +first field (lower scanning line numbers) first in memory. This may be +a top or bottom field depending on the video standard. When this flag +is set the first or second field may be stored first, however the +fields are still in correct temporal order with the older field first +in memory.<footnote> +		  <para>Most VBI services transmit on both fields, but +some have different semantics depending on the field number. These +cannot be reliable decoded or encoded when +<constant>V4L2_VBI_UNSYNC</constant> is set.</para> +		</footnote></para></entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_VBI_INTERLACED</constant></entry> +	      <entry>0x0002</entry> +	      <entry>By default the two field images will be passed +sequentially; all lines of the first field followed by all lines of +the second field (compare <xref linkend="field-order" /> +<constant>V4L2_FIELD_SEQ_TB</constant> and +<constant>V4L2_FIELD_SEQ_BT</constant>, whether the top or bottom +field is first in memory depends on the video standard). When this +flag is set, the two fields are interlaced (cf. +<constant>V4L2_FIELD_INTERLACED</constant>). The first line of the +first field followed by the first line of the second field, then the +two second lines, and so on. Such a layout may be necessary when the +hardware has been programmed to capture or output interlaced video +images and is unable to separate the fields for VBI capturing at +the same time. For simplicity setting this flag implies that both +<structfield>count</structfield> values are equal and non-zero.</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> + +      <figure id="vbi-hsync"> +	<title>Line synchronization</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="vbi_hsync.pdf" format="PS" /> +	  </imageobject> +	  <imageobject> +	    <imagedata fileref="vbi_hsync.gif" format="GIF" /> +	  </imageobject> +	  <textobject> +	    <phrase>Line synchronization diagram</phrase> +	  </textobject> +	</mediaobject> +      </figure> + +      <figure id="vbi-525"> +	<title>ITU-R 525 line numbering (M/NTSC and M/PAL)</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="vbi_525.pdf" format="PS" /> +	  </imageobject> +	  <imageobject> +	    <imagedata fileref="vbi_525.gif" format="GIF" /> +	  </imageobject> +	  <textobject> +	    <phrase>NTSC field synchronization diagram</phrase> +	  </textobject> +	  <caption> +	    <para>(1) For the purpose of this specification field 2 +starts in line 264 and not 263.5 because half line capturing is not +supported.</para> +	  </caption> +	</mediaobject> +      </figure> + +      <figure id="vbi-625"> +	<title>ITU-R 625 line numbering</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="vbi_625.pdf" format="PS" /> +	  </imageobject> +	  <imageobject> +	    <imagedata fileref="vbi_625.gif" format="GIF" /> +	  </imageobject> +	  <textobject> +	    <phrase>PAL/SECAM field synchronization diagram</phrase> +	  </textobject> +	  <caption> +	    <para>(1) For the purpose of this specification field 2 +starts in line 314 and not 313.5 because half line capturing is not +supported.</para> +	  </caption> +	</mediaobject> +      </figure> + +      <para>Remember the VBI image format depends on the selected +video standard, therefore the application must choose a new standard or +query the current standard first. Attempts to read or write data ahead +of format negotiation, or after switching the video standard which may +invalidate the negotiated VBI parameters, should be refused by the +driver. A format change during active I/O is not permitted.</para> +    </section> + +    <section> +      <title>Reading and writing VBI images</title> + +      <para>To assure synchronization with the field number and easier +implementation, the smallest unit of data passed at a time is one +frame, consisting of two fields of VBI images immediately following in +memory.</para> + +      <para>The total size of a frame computes as follows:</para> + +      <programlisting> +(<structfield>count</structfield>[0] + <structfield>count</structfield>[1]) * +<structfield>samples_per_line</structfield> * sample size in bytes</programlisting> + +      <para>The sample size is most likely always one byte, +applications must check the <structfield>sample_format</structfield> +field though, to function properly with other drivers.</para> + +      <para>A VBI device may support <link +      linkend="rw">read/write</link> and/or streaming (<link +      linkend="mmap">memory mapping</link> or <link +      linkend="userp">user pointer</link>) I/O. The latter bears the +possibility of synchronizing video and +VBI data by using buffer timestamps.</para> + +      <para>Remember the &VIDIOC-STREAMON; ioctl and the first read(), +write() and select() call can be resource allocation points returning +an &EBUSY; if the required hardware resources are temporarily +unavailable, for example the device is already in use by another +process.</para> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-rds.xml b/Documentation/DocBook/media/v4l/dev-rds.xml new file mode 100644 index 00000000000..be2f3373732 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-rds.xml @@ -0,0 +1,196 @@ +     <title>RDS Interface</title> + +      <para>The Radio Data System transmits supplementary +information in binary format, for example the station name or travel +information, on an inaudible audio subcarrier of a radio program. This +interface is aimed at devices capable of receiving and/or transmitting RDS +information.</para> + +      <para>For more information see the core RDS standard <xref linkend="iec62106" /> +and the RBDS standard <xref linkend="nrsc4" />.</para> + +      <para>Note that the RBDS standard as is used in the USA is almost identical +to the RDS standard. Any RDS decoder/encoder can also handle RBDS. Only some of the +fields have slightly different meanings. See the RBDS standard for more +information.</para> + +      <para>The RBDS standard also specifies support for MMBS (Modified Mobile Search). +This is a proprietary format which seems to be discontinued. The RDS interface does not +support this format. Should support for MMBS (or the so-called 'E blocks' in general) +be needed, then please contact the linux-media mailing list: &v4l-ml;.</para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the RDS capturing API set +the <constant>V4L2_CAP_RDS_CAPTURE</constant> flag in +the <structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl.  Any tuner that supports RDS +will set the <constant>V4L2_TUNER_CAP_RDS</constant> flag in +the <structfield>capability</structfield> field of &v4l2-tuner;.  If +the driver only passes RDS blocks without interpreting the data +the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be +set, see <link linkend="reading-rds-data">Reading RDS data</link>. +For future use the +flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> has also been +defined. However, a driver for a radio tuner with this capability does +not yet exist, so if you are planning to write such a driver you +should discuss this on the linux-media mailing list: &v4l-ml;.</para> + +    <para> Whether an RDS signal is present can be detected by looking +at the <structfield>rxsubchans</structfield> field of &v4l2-tuner;: +the <constant>V4L2_TUNER_SUB_RDS</constant> will be set if RDS data +was detected.</para> + +    <para>Devices supporting the RDS output API +set the <constant>V4L2_CAP_RDS_OUTPUT</constant> flag in +the <structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. +Any modulator that supports RDS will set the +<constant>V4L2_TUNER_CAP_RDS</constant> flag in the <structfield>capability</structfield> +field of &v4l2-modulator;. +In order to enable the RDS transmission one must set the <constant>V4L2_TUNER_SUB_RDS</constant> +bit in the <structfield>txsubchans</structfield> field of &v4l2-modulator;. +If the driver only passes RDS blocks without interpreting the data +the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be set. If the +tuner is capable of handling RDS entities like program identification codes and radio +text, the flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> should be set, +see <link linkend="writing-rds-data">Writing RDS data</link> and +<link linkend="fm-tx-controls">FM Transmitter Control Reference</link>.</para> +  </section> + +  <section  id="reading-rds-data"> +    <title>Reading RDS data</title> + +      <para>RDS data can be read from the radio device +with the &func-read; function. The data is packed in groups of three bytes.</para> +  </section> + +  <section  id="writing-rds-data"> +    <title>Writing RDS data</title> + +      <para>RDS data can be written to the radio device +with the &func-write; function. The data is packed in groups of three bytes, +as follows:</para> +  </section> + +  <section> +    <title>RDS datastructures</title> +    <table frame="none" pgwide="1" id="v4l2-rds-data"> +      <title>struct +<structname>v4l2_rds_data</structname></title> +      <tgroup cols="3"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="1*" /> +	<colspec colname="c3" colwidth="5*" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>lsb</structfield></entry> +	    <entry>Least Significant Byte of RDS Block</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>msb</structfield></entry> +	    <entry>Most Significant Byte of RDS Block</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>block</structfield></entry> +	    <entry>Block description</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +    <table frame="none" pgwide="1" id="v4l2-rds-block"> +      <title>Block description</title> +      <tgroup cols="2"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="5*" /> +	<tbody valign="top"> +	  <row> +	    <entry>Bits 0-2</entry> +	    <entry>Block (aka offset) of the received data.</entry> +	  </row> +	  <row> +	    <entry>Bits 3-5</entry> +	    <entry>Deprecated. Currently identical to bits 0-2. Do not use these bits.</entry> +	  </row> +	  <row> +	    <entry>Bit 6</entry> +	    <entry>Corrected bit. Indicates that an error was corrected for this data block.</entry> +	  </row> +	  <row> +	    <entry>Bit 7</entry> +	    <entry>Error bit. Indicates that an uncorrectable error occurred during reception of this block.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-rds-block-codes"> +      <title>Block defines</title> +      <tgroup cols="4"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="1*" /> +	<colspec colname="c3" colwidth="1*" /> +	<colspec colname="c4" colwidth="5*" /> +	<tbody valign="top"> +	  <row> +	    <entry>V4L2_RDS_BLOCK_MSK</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>Mask for bits 0-2 to get the block ID.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_A</entry> +	    <entry> </entry> +	    <entry>0</entry> +	    <entry>Block A.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_B</entry> +	    <entry> </entry> +	    <entry>1</entry> +	    <entry>Block B.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_C</entry> +	    <entry> </entry> +	    <entry>2</entry> +	    <entry>Block C.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_D</entry> +	    <entry> </entry> +	    <entry>3</entry> +	    <entry>Block D.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_C_ALT</entry> +	    <entry> </entry> +	    <entry>4</entry> +	    <entry>Block C'.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_INVALID</entry> +	    <entry>read-only</entry> +	    <entry>7</entry> +	    <entry>An invalid block.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_CORRECTED</entry> +	    <entry>read-only</entry> +	    <entry>0x40</entry> +	    <entry>A bit error was detected but corrected.</entry> +	  </row> +	  <row> +	    <entry>V4L2_RDS_BLOCK_ERROR</entry> +	    <entry>read-only</entry> +	    <entry>0x80</entry> +	    <entry>An uncorrectable error occurred.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-sdr.xml b/Documentation/DocBook/media/v4l/dev-sdr.xml new file mode 100644 index 00000000000..dc14804f543 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-sdr.xml @@ -0,0 +1,110 @@ +  <title>Software Defined Radio Interface (SDR)</title> + +  <note> +    <title>Experimental</title> +    <para>This is an <link linkend="experimental"> experimental </link> +    interface and may change in the future.</para> +  </note> + +  <para> +SDR is an abbreviation of Software Defined Radio, the radio device +which uses application software for modulation or demodulation. This interface +is intended for controlling and data streaming of such devices. +  </para> + +  <para> +SDR devices are accessed through character device special files named +<filename>/dev/swradio0</filename> to <filename>/dev/swradio255</filename> +with major number 81 and dynamically allocated minor numbers 0 to 255. +  </para> + +  <section> +    <title>Querying Capabilities</title> + +    <para> +Devices supporting the SDR receiver interface set the +<constant>V4L2_CAP_SDR_CAPTURE</constant> and +<constant>V4L2_CAP_TUNER</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an +Analog to Digital Converter (ADC), which is a mandatory element for the SDR receiver. +At least one of the read/write, streaming or asynchronous I/O methods must +be supported. +    </para> +  </section> + +  <section> +    <title>Supplemental Functions</title> + +    <para> +SDR devices can support <link linkend="control">controls</link>, and must +support the <link linkend="tuner">tuner</link> ioctls. Tuner ioctls are used +for setting the ADC sampling rate (sampling frequency) and the possible RF tuner +frequency. +    </para> + +    <para> +The <constant>V4L2_TUNER_ADC</constant> tuner type is used for ADC tuners, and +the <constant>V4L2_TUNER_RF</constant> tuner type is used for RF tuners. The +tuner index of the RF tuner (if any) must always follow the ADC tuner index. +Normally the ADC tuner is #0 and the RF tuner is #1. +    </para> + +    <para> +The &VIDIOC-S-HW-FREQ-SEEK; ioctl is not supported. +    </para> +  </section> + +  <section> +    <title>Data Format Negotiation</title> + +    <para> +The SDR capture device uses the <link linkend="format">format</link> ioctls to +select the capture format. Both the sampling resolution and the data streaming +format are bound to that selectable format. In addition to the basic +<link linkend="format">format</link> ioctls, the &VIDIOC-ENUM-FMT; ioctl +must be supported as well. +    </para> + +    <para> +To use the <link linkend="format">format</link> ioctls applications set the +<structfield>type</structfield> field of a &v4l2-format; to +<constant>V4L2_BUF_TYPE_SDR_CAPTURE</constant> and use the &v4l2-sdr-format; +<structfield>sdr</structfield> member of the <structfield>fmt</structfield> +union as needed per the desired operation. +Currently only the <structfield>pixelformat</structfield> field of +&v4l2-sdr-format; is used. The content of that field is the V4L2 fourcc code +of the data format. +    </para> + +    <table pgwide="1" frame="none" id="v4l2-sdr-format"> +      <title>struct <structname>v4l2_sdr_format</structname></title> +      <tgroup cols="3"> +        &cs-str; +        <tbody valign="top"> +          <row> +            <entry>__u32</entry> +            <entry><structfield>pixelformat</structfield></entry> +            <entry> +The data format or type of compression, set by the application. This is a +little endian <link linkend="v4l2-fourcc">four character code</link>. +V4L2 defines SDR formats in <xref linkend="sdr-formats" />. +           </entry> +          </row> +          <row> +            <entry>__u8</entry> +            <entry><structfield>reserved[28]</structfield></entry> +            <entry>This array is reserved for future extensions. +Drivers and applications must set it to zero.</entry> +          </row> +        </tbody> +      </tgroup> +    </table> + +    <para> +An SDR device may support <link linkend="rw">read/write</link> +and/or streaming (<link linkend="mmap">memory mapping</link> +or <link linkend="userp">user pointer</link>) I/O. +    </para> + +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml b/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml new file mode 100644 index 00000000000..548f8ea28de --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml @@ -0,0 +1,699 @@ +  <title>Sliced VBI Data Interface</title> + +  <para>VBI stands for Vertical Blanking Interval, a gap in the +sequence of lines of an analog video signal. During VBI no picture +information is transmitted, allowing some time while the electron beam +of a cathode ray tube TV returns to the top of the screen.</para> + +  <para>Sliced VBI devices use hardware to demodulate data transmitted +in the VBI. V4L2 drivers shall <emphasis>not</emphasis> do this by +software, see also the <link linkend="raw-vbi">raw VBI +interface</link>. The data is passed as short packets of fixed size, +covering one scan line each. The number of packets per video frame is +variable.</para> + +  <para>Sliced VBI capture and output devices are accessed through the +same character special files as raw VBI devices. When a driver +supports both interfaces, the default function of a +<filename>/dev/vbi</filename> device is <emphasis>raw</emphasis> VBI +capturing or output, and the sliced VBI function is only available +after calling the &VIDIOC-S-FMT; ioctl as defined below. Likewise a +<filename>/dev/video</filename> device may support the sliced VBI API, +however the default function here is video capturing or output. +Different file descriptors must be used to pass raw and sliced VBI +data simultaneously, if this is supported by the driver.</para> + +  <section> +    <title>Querying Capabilities</title> + +    <para>Devices supporting the sliced VBI capturing or output API +set the <constant>V4L2_CAP_SLICED_VBI_CAPTURE</constant> or +<constant>V4L2_CAP_SLICED_VBI_OUTPUT</constant> flag respectively, in +the <structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the +read/write, streaming or asynchronous <link linkend="io">I/O +methods</link> must be supported. Sliced VBI devices may have a tuner +or modulator.</para> +  </section> + +  <section> +    <title>Supplemental Functions</title> + +    <para>Sliced VBI devices shall support <link linkend="video">video +input or output</link> and <link linkend="tuner">tuner or +modulator</link> ioctls if they have these capabilities, and they may +support <link linkend="control">control</link> ioctls. The <link +linkend="standard">video standard</link> ioctls provide information +vital to program a sliced VBI device, therefore must be +supported.</para> +  </section> + +  <section id="sliced-vbi-format-negotitation"> +    <title>Sliced VBI Format Negotiation</title> + +    <para>To find out which data services are supported by the +hardware applications can call the &VIDIOC-G-SLICED-VBI-CAP; ioctl. +All drivers implementing the sliced VBI interface must support this +ioctl. The results may differ from those of the &VIDIOC-S-FMT; ioctl +when the number of VBI lines the hardware can capture or output per +frame, or the number of services it can identify on a given line are +limited. For example on PAL line 16 the hardware may be able to look +for a VPS or Teletext signal, but not both at the same time.</para> + +    <para>To determine the currently selected services applications +set the <structfield>type </structfield> field of &v4l2-format; to +<constant> V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant> or <constant> +V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant>, and the &VIDIOC-G-FMT; +ioctl fills the <structfield>fmt.sliced</structfield> member, a +&v4l2-sliced-vbi-format;.</para> + +    <para>Applications can request different parameters by +initializing or modifying the <structfield>fmt.sliced</structfield> +member and calling the &VIDIOC-S-FMT; ioctl with a pointer to the +<structname>v4l2_format</structname> structure.</para> + +    <para>The sliced VBI API is more complicated than the raw VBI API +because the hardware must be told which VBI service to expect on each +scan line. Not all services may be supported by the hardware on all +lines (this is especially true for VBI output where Teletext is often +unsupported and other services can only be inserted in one specific +line). In many cases, however, it is sufficient to just set the +<structfield>service_set</structfield> field to the required services +and let the driver fill the <structfield>service_lines</structfield> +array according to hardware capabilities. Only if more precise control +is needed should the programmer set the +<structfield>service_lines</structfield> array explicitly.</para> + +    <para>The &VIDIOC-S-FMT; ioctl modifies the parameters +according to hardware capabilities. When the driver allocates +resources at this point, it may return an &EBUSY; if the required +resources are temporarily unavailable. Other resource allocation +points which may return <errorcode>EBUSY</errorcode> can be the +&VIDIOC-STREAMON; ioctl and the first &func-read;, &func-write; and +&func-select; call.</para> + +    <table frame="none" pgwide="1" id="v4l2-sliced-vbi-format"> +      <title>struct +<structname>v4l2_sliced_vbi_format</structname></title> +      <tgroup cols="5"> +	<colspec colname="c1" colwidth="3*" /> +	<colspec colname="c2" colwidth="3*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="2*" /> +	<colspec colname="c5" colwidth="2*" /> +	<spanspec namest="c3" nameend="c5" spanname="hspan" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>service_set</structfield></entry> +	    <entry spanname="hspan"><para>If +<structfield>service_set</structfield> is non-zero when passed with +&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT;, the +<structfield>service_lines</structfield> array will be filled by the +driver according to the services specified in this field. For example, +if <structfield>service_set</structfield> is initialized with +<constant>V4L2_SLICED_TELETEXT_B | V4L2_SLICED_WSS_625</constant>, a +driver for the cx25840 video decoder sets lines 7-22 of both +fields<footnote><para>According to <link +linkend="ets300706">ETS 300 706</link> lines 6-22 of the +first field and lines 5-22 of the second field may carry Teletext +data.</para></footnote> to <constant>V4L2_SLICED_TELETEXT_B</constant> +and line 23 of the first field to +<constant>V4L2_SLICED_WSS_625</constant>. If +<structfield>service_set</structfield> is set to zero, then the values +of <structfield>service_lines</structfield> will be used instead. +</para><para>On return the driver sets this field to the union of all +elements of the returned <structfield>service_lines</structfield> +array. It may contain less services than requested, perhaps just one, +if the hardware cannot handle more services simultaneously. It may be +empty (zero) if none of the requested services are supported by the +hardware.</para></entry> +	  </row> +	  <row> +	    <entry>__u16</entry> +	    <entry><structfield>service_lines</structfield>[2][24]</entry> +	    <entry spanname="hspan"><para>Applications initialize this +array with sets of data services the driver shall look for or insert +on the respective scan line. Subject to hardware capabilities drivers +return the requested set, a subset, which may be just a single +service, or an empty set. When the hardware cannot handle multiple +services on the same line the driver shall choose one. No assumptions +can be made on which service the driver chooses.</para><para>Data +services are defined in <xref linkend="vbi-services2" />. Array indices +map to ITU-R line numbers (see also <xref linkend="vbi-525" /> and <xref +		  linkend="vbi-625" />) as follows: <!-- No nested +tables, sigh. --></para></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>Element</entry> +	    <entry>525 line systems</entry> +	    <entry>625 line systems</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[0][1]</entry> +	    <entry align="center">1</entry> +	    <entry align="center">1</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[0][23]</entry> +	    <entry align="center">23</entry> +	    <entry align="center">23</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[1][1]</entry> +	    <entry align="center">264</entry> +	    <entry align="center">314</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[1][23]</entry> +	    <entry align="center">286</entry> +	    <entry align="center">336</entry> +	  </row> +	  <!-- End of line numbers table. --> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry spanname="hspan">Drivers must set +<structfield>service_lines</structfield>[0][0] and +<structfield>service_lines</structfield>[1][0] to zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>io_size</structfield></entry> +	    <entry spanname="hspan">Maximum number of bytes passed by +one &func-read; or &func-write; call, and the buffer size in bytes for +the &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. Drivers set this field to +the size of &v4l2-sliced-vbi-data; times the number of non-zero +elements in the returned <structfield>service_lines</structfield> +array (that is the number of lines potentially carrying data).</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry spanname="hspan">This array is reserved for future +extensions. Applications and drivers must set it to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- See also vidioc-g-sliced-vbi-cap.sgml --> +    <table frame="none" pgwide="1" id="vbi-services2"> +      <title>Sliced VBI services</title> +      <tgroup cols="5"> +	<colspec colname="c1" colwidth="2*" /> +	<colspec colname="c2" colwidth="1*" /> +	<colspec colname="c3" colwidth="1*" /> +	<colspec colname="c4" colwidth="2*" /> +	<colspec colname="c5" colwidth="2*" /> +	<spanspec namest="c3" nameend="c5" spanname="rlp" /> +	<thead> +	  <row> +	    <entry>Symbol</entry> +	    <entry>Value</entry> +	    <entry>Reference</entry> +	    <entry>Lines, usually</entry> +	    <entry>Payload</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_SLICED_TELETEXT_B</constant> +(Teletext System B)</entry> +	    <entry>0x0001</entry> +	    <entry><xref linkend="ets300706" />, <xref linkend="itu653" /></entry> +	    <entry>PAL/SECAM line 7-22, 320-335 (second field 7-22)</entry> +	    <entry>Last 42 of the 45 byte Teletext packet, that is +without clock run-in and framing code, lsb first transmitted.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_VPS</constant></entry> +	    <entry>0x0400</entry> +	    <entry><xref linkend="ets300231" /></entry> +	    <entry>PAL line 16</entry> +	    <entry>Byte number 3 to 15 according to Figure 9 of +ETS 300 231, lsb first transmitted.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_CAPTION_525</constant></entry> +	    <entry>0x1000</entry> +	    <entry><xref linkend="eia608" /></entry> +	    <entry>NTSC line 21, 284 (second field 21)</entry> +	    <entry>Two bytes in transmission order, including parity +bit, lsb first transmitted.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_WSS_625</constant></entry> +	    <entry>0x4000</entry> +	    <entry><xref linkend="itu1119" />, <xref linkend="en300294" /></entry> +	    <entry>PAL/SECAM line 23</entry> +	    <entry><screen> +Byte         0                 1 +      msb         lsb  msb           lsb + Bit  7 6 5 4 3 2 1 0  x x 13 12 11 10 9 +</screen></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_VBI_525</constant></entry> +	    <entry>0x1000</entry> +	    <entry spanname="rlp">Set of services applicable to 525 +line systems.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_VBI_625</constant></entry> +	    <entry>0x4401</entry> +	    <entry spanname="rlp">Set of services applicable to 625 +line systems.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <para>Drivers may return an &EINVAL; when applications attempt to +read or write data without prior format negotiation, after switching +the video standard (which may invalidate the negotiated VBI +parameters) and after switching the video input (which may change the +video standard as a side effect). The &VIDIOC-S-FMT; ioctl may return +an &EBUSY; when applications attempt to change the format while i/o is +in progress (between a &VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; call, +and after the first &func-read; or &func-write; call).</para> +  </section> + +  <section> +    <title>Reading and writing sliced VBI data</title> + +    <para>A single &func-read; or &func-write; call must pass all data +belonging to one video frame. That is an array of +<structname>v4l2_sliced_vbi_data</structname> structures with one or +more elements and a total size not exceeding +<structfield>io_size</structfield> bytes. Likewise in streaming I/O +mode one buffer of <structfield>io_size</structfield> bytes must +contain data of one video frame. The <structfield>id</structfield> of +unused <structname>v4l2_sliced_vbi_data</structname> elements must be +zero.</para> + +    <table frame="none" pgwide="1" id="v4l2-sliced-vbi-data"> +      <title>struct +<structname>v4l2_sliced_vbi_data</structname></title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>A flag from <xref linkend="vbi-services" /> +identifying the type of data in this packet. Only a single bit must be +set. When the <structfield>id</structfield> of a captured packet is +zero, the packet is empty and the contents of other fields are +undefined. Applications shall ignore empty packets. When the +<structfield>id</structfield> of a packet for output is zero the +contents of the <structfield>data</structfield> field are undefined +and the driver must no longer insert data on the requested +<structfield>field</structfield> and +<structfield>line</structfield>.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>field</structfield></entry> +	    <entry>The video field number this data has been captured +from, or shall be inserted at. <constant>0</constant> for the first +field, <constant>1</constant> for the second field.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>line</structfield></entry> +	    <entry>The field (as opposed to frame) line number this +data has been captured from, or shall be inserted at. See <xref +	    linkend="vbi-525" /> and <xref linkend="vbi-625" /> for valid +values. Sliced VBI capture devices can set the line number of all +packets to <constant>0</constant> if the hardware cannot reliably +identify scan lines. The field number must always be valid.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield></entry> +	    <entry>This field is reserved for future extensions. +Applications and drivers must set it to zero.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>data</structfield>[48]</entry> +	    <entry>The packet payload. See <xref +	    linkend="vbi-services" /> for the contents and number of +bytes passed for each data type. The contents of padding bytes at the +end of this array are undefined, drivers and applications shall ignore +them.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <para>Packets are always passed in ascending line number order, +without duplicate line numbers. The &func-write; function and the +&VIDIOC-QBUF; ioctl must return an &EINVAL; when applications violate +this rule. They must also return an &EINVAL; when applications pass an +incorrect field or line number, or a combination of +<structfield>field</structfield>, <structfield>line</structfield> and +<structfield>id</structfield> which has not been negotiated with the +&VIDIOC-G-FMT; or &VIDIOC-S-FMT; ioctl. When the line numbers are +unknown the driver must pass the packets in transmitted order. The +driver can insert empty packets with <structfield>id</structfield> set +to zero anywhere in the packet array.</para> + +    <para>To assure synchronization and to distinguish from frame +dropping, when a captured frame does not carry any of the requested +data services drivers must pass one or more empty packets. When an +application fails to pass VBI data in time for output, the driver +must output the last VPS and WSS packet again, and disable the output +of Closed Caption and Teletext data, or output data which is ignored +by Closed Caption and Teletext decoders.</para> + +    <para>A sliced VBI device may support <link +linkend="rw">read/write</link> and/or streaming (<link +linkend="mmap">memory mapping</link> and/or <link linkend="userp">user +pointer</link>) I/O. The latter bears the possibility of synchronizing +video and VBI data by using buffer timestamps.</para> + +  </section> + +  <section> +    <title>Sliced VBI Data in MPEG Streams</title> + +    <para>If a device can produce an MPEG output stream, it may be +capable of providing <link +linkend="sliced-vbi-format-negotitation">negotiated sliced VBI +services</link> as data embedded in the MPEG stream.  Users or +applications control this sliced VBI data insertion with the <link +linkend="v4l2-mpeg-stream-vbi-fmt">V4L2_CID_MPEG_STREAM_VBI_FMT</link> +control.</para> + +    <para>If the driver does not provide the <link +linkend="v4l2-mpeg-stream-vbi-fmt">V4L2_CID_MPEG_STREAM_VBI_FMT</link> +control, or only allows that control to be set to <link +linkend="v4l2-mpeg-stream-vbi-fmt"><constant> +V4L2_MPEG_STREAM_VBI_FMT_NONE</constant></link>, then the device +cannot embed sliced VBI data in the MPEG stream.</para> + +    <para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"> +V4L2_CID_MPEG_STREAM_VBI_FMT</link> control does not implicitly set +the device driver to capture nor cease capturing sliced VBI data.  The +control only indicates to embed sliced VBI data in the MPEG stream, if +an application has negotiated sliced VBI service be captured.</para> + +    <para>It may also be the case that a device can embed sliced VBI +data in only certain types of MPEG streams: for example in an MPEG-2 +PS but not an MPEG-2 TS.  In this situation, if sliced VBI data +insertion is requested, the sliced VBI data will be embedded in MPEG +stream types when supported, and silently omitted from MPEG stream +types where sliced VBI data insertion is not supported by the device. +</para> + +    <para>The following subsections specify the format of the +embedded sliced VBI data.</para> + +  <section> +    <title>MPEG Stream Embedded, Sliced VBI Data Format: NONE</title> +    <para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"><constant> +V4L2_MPEG_STREAM_VBI_FMT_NONE</constant></link> embedded sliced VBI +format shall be interpreted by drivers as a control to cease +embedding sliced VBI data in MPEG streams.  Neither the device nor +driver shall insert "empty" embedded sliced VBI data packets in the +MPEG stream when this format is set.  No MPEG stream data structures +are specified for this format.</para> +  </section> + +  <section> +    <title>MPEG Stream Embedded, Sliced VBI Data Format: IVTV</title> +    <para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"><constant> +V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant></link> embedded sliced VBI +format, when supported, indicates to the driver to embed up to 36 +lines of sliced VBI data per frame in an MPEG-2 <emphasis>Private +Stream 1 PES</emphasis> packet encapsulated in an MPEG-2 <emphasis> +Program Pack</emphasis> in the MPEG stream.</para> + +    <para><emphasis>Historical context</emphasis>: This format +specification originates from a custom, embedded, sliced VBI data +format used by the <filename>ivtv</filename> driver.  This format +has already been informally specified in the kernel sources in the +file <filename>Documentation/video4linux/cx2341x/README.vbi</filename> +.  The maximum size of the payload and other aspects of this format +are driven by the CX23415 MPEG decoder's capabilities and limitations +with respect to extracting, decoding, and displaying sliced VBI data +embedded within an MPEG stream.</para> + +    <para>This format's use is <emphasis>not</emphasis> exclusive to +the <filename>ivtv</filename> driver <emphasis>nor</emphasis> +exclusive to CX2341x devices, as the sliced VBI data packet insertion +into the MPEG stream is implemented in driver software.  At least the +<filename>cx18</filename> driver provides sliced VBI data insertion +into an MPEG-2 PS in this format as well.</para> + +    <para>The following definitions specify the payload of the +MPEG-2 <emphasis>Private Stream 1 PES</emphasis> packets that contain +sliced VBI data when <link linkend="v4l2-mpeg-stream-vbi-fmt"> +<constant>V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant></link> is set. +(The MPEG-2 <emphasis>Private Stream 1 PES</emphasis> packet header +and encapsulating MPEG-2 <emphasis>Program Pack</emphasis> header are +not detailed here.  Please refer to the MPEG-2 specifications for +details on those packet headers.)</para> + +    <para>The payload of the MPEG-2 <emphasis>Private Stream 1 PES +</emphasis> packets that contain sliced VBI data is specified by +&v4l2-mpeg-vbi-fmt-ivtv;.  The payload is variable +length, depending on the actual number of lines of sliced VBI data +present in a video frame.  The payload may be padded at the end with +unspecified fill bytes to align the end of the payload to a 4-byte +boundary.  The payload shall never exceed 1552 bytes (2 fields with +18 lines/field with 43 bytes of data/line and a 4 byte magic number). +</para> + +    <table frame="none" pgwide="1" id="v4l2-mpeg-vbi-fmt-ivtv"> +      <title>struct <structname>v4l2_mpeg_vbi_fmt_ivtv</structname> +      </title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>magic</structfield>[4]</entry> +	    <entry></entry> +	    <entry>A "magic" constant from <xref +	    linkend="v4l2-mpeg-vbi-fmt-ivtv-magic" /> that indicates +this is a valid sliced VBI data payload and also indicates which +member of the anonymous union, <structfield>itv0</structfield> or +<structfield>ITV0</structfield>, to use for the payload data.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry>(anonymous)</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct <link linkend="v4l2-mpeg-vbi-itv0"> +	      <structname>v4l2_mpeg_vbi_itv0</structname></link> +	    </entry> +	    <entry><structfield>itv0</structfield></entry> +	    <entry>The primary form of the sliced VBI data payload +that contains anywhere from 1 to 35 lines of sliced VBI data. +Line masks are provided in this form of the payload indicating +which VBI lines are provided.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct <link linkend="v4l2-mpeg-vbi-itv0-1"> +	      <structname>v4l2_mpeg_vbi_ITV0</structname></link> +	    </entry> +	    <entry><structfield>ITV0</structfield></entry> +	    <entry>An alternate form of the sliced VBI data payload +used when 36 lines of sliced VBI data are present.  No line masks are +provided in this form of the payload; all valid line mask bits are +implcitly set.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-mpeg-vbi-fmt-ivtv-magic"> +      <title>Magic Constants for &v4l2-mpeg-vbi-fmt-ivtv; +	<structfield>magic</structfield> field</title> +      <tgroup cols="3"> +	&cs-def; +	<thead> +	  <row> +	    <entry align="left">Defined Symbol</entry> +	    <entry align="left">Value</entry> +	    <entry align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_MPEG_VBI_IVTV_MAGIC0</constant> +	    </entry> +	    <entry>"itv0"</entry> +	    <entry>Indicates the <structfield>itv0</structfield> +member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MPEG_VBI_IVTV_MAGIC1</constant> +	    </entry> +	    <entry>"ITV0"</entry> +	    <entry>Indicates the <structfield>ITV0</structfield> +member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid and +that 36 lines of sliced VBI data are present.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0"> +      <title>struct <structname>v4l2_mpeg_vbi_itv0</structname> +      </title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__le32</entry> +	    <entry><structfield>linemask</structfield>[2]</entry> +	    <entry><para>Bitmasks indicating the VBI service lines +present.  These <structfield>linemask</structfield> values are stored +in little endian byte order in the MPEG stream.  Some reference +<structfield>linemask</structfield> bit positions with their +corresponding VBI line number and video field are given below. +b<subscript>0</subscript> indicates the least significant bit of a +<structfield>linemask</structfield> value:<screen> +<structfield>linemask</structfield>[0] b<subscript>0</subscript>:		line  6		first field +<structfield>linemask</structfield>[0] b<subscript>17</subscript>:		line 23		first field +<structfield>linemask</structfield>[0] b<subscript>18</subscript>:		line  6		second field +<structfield>linemask</structfield>[0] b<subscript>31</subscript>:		line 19		second field +<structfield>linemask</structfield>[1] b<subscript>0</subscript>:		line 20		second field +<structfield>linemask</structfield>[1] b<subscript>3</subscript>:		line 23		second field +<structfield>linemask</structfield>[1] b<subscript>4</subscript>-b<subscript>31</subscript>:	unused and set to 0</screen></para></entry> +	  </row> +	  <row> +	    <entry>struct <link linkend="v4l2-mpeg-vbi-itv0-line"> +	      <structname>v4l2_mpeg_vbi_itv0_line</structname></link> +	    </entry> +	    <entry><structfield>line</structfield>[35]</entry> +	    <entry>This is a variable length array that holds from 1 +to 35 lines of sliced VBI data.  The sliced VBI data lines present +correspond to the bits set in the <structfield>linemask</structfield> +array, starting from b<subscript>0</subscript> of <structfield> +linemask</structfield>[0] up through b<subscript>31</subscript> of +<structfield>linemask</structfield>[0], and from b<subscript>0 +</subscript> of <structfield>linemask</structfield>[1] up through b +<subscript>3</subscript> of <structfield>linemask</structfield>[1]. +<structfield>line</structfield>[0] corresponds to the first bit +found set in the <structfield>linemask</structfield> array, +<structfield>line</structfield>[1] corresponds to the second bit +found set in the <structfield>linemask</structfield> array, etc. +If no <structfield>linemask</structfield> array bits are set, then +<structfield>line</structfield>[0] may contain one line of +unspecified data that should be ignored by applications.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0-1"> +      <title>struct <structname>v4l2_mpeg_vbi_ITV0</structname> +      </title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>struct <link linkend="v4l2-mpeg-vbi-itv0-line"> +	      <structname>v4l2_mpeg_vbi_itv0_line</structname></link> +	    </entry> +	    <entry><structfield>line</structfield>[36]</entry> +	    <entry>A fixed length array of 36 lines of sliced VBI +data.  <structfield>line</structfield>[0] through <structfield>line +</structfield>[17] correspond to lines 6 through 23 of the +first field.  <structfield>line</structfield>[18] through +<structfield>line</structfield>[35] corresponds to lines 6 +through 23 of the second field.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0-line"> +      <title>struct <structname>v4l2_mpeg_vbi_itv0_line</structname> +      </title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>A line identifier value from +<xref linkend="ITV0-Line-Identifier-Constants" /> that indicates +the type of sliced VBI data stored on this line.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>data</structfield>[42]</entry> +	    <entry>The sliced VBI data for the line.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="ITV0-Line-Identifier-Constants"> +      <title>Line Identifiers for struct <link +      linkend="v4l2-mpeg-vbi-itv0-line"><structname> +v4l2_mpeg_vbi_itv0_line</structname></link> <structfield>id +</structfield> field</title> +      <tgroup cols="3"> +	&cs-def; +	<thead> +	  <row> +	    <entry align="left">Defined Symbol</entry> +	    <entry align="left">Value</entry> +	    <entry align="left">Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_MPEG_VBI_IVTV_TELETEXT_B</constant> +	    </entry> +	    <entry>1</entry> +	    <entry>Refer to <link linkend="vbi-services2"> +Sliced VBI services</link> for a description of the line payload.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MPEG_VBI_IVTV_CAPTION_525</constant> +	    </entry> +	    <entry>4</entry> +	    <entry>Refer to <link linkend="vbi-services2"> +Sliced VBI services</link> for a description of the line payload.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MPEG_VBI_IVTV_WSS_625</constant> +	    </entry> +	    <entry>5</entry> +	    <entry>Refer to <link linkend="vbi-services2"> +Sliced VBI services</link> for a description of the line payload.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MPEG_VBI_IVTV_VPS</constant> +	    </entry> +	    <entry>7</entry> +	    <entry>Refer to <link linkend="vbi-services2"> +Sliced VBI services</link> for a description of the line payload.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </section> +  </section> diff --git a/Documentation/DocBook/media/v4l/dev-subdev.xml b/Documentation/DocBook/media/v4l/dev-subdev.xml new file mode 100644 index 00000000000..d15aaf83f56 --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-subdev.xml @@ -0,0 +1,467 @@ +  <title>Sub-device Interface</title> + +  <note> +    <title>Experimental</title> +    <para>This is an <link linkend="experimental">experimental</link> +    interface and may change in the future.</para> +  </note> + +  <para>The complex nature of V4L2 devices, where hardware is often made of +  several integrated circuits that need to interact with each other in a +  controlled way, leads to complex V4L2 drivers. The drivers usually reflect +  the hardware model in software, and model the different hardware components +  as software blocks called sub-devices.</para> + +  <para>V4L2 sub-devices are usually kernel-only objects. If the V4L2 driver +  implements the media device API, they will automatically inherit from media +  entities. Applications will be able to enumerate the sub-devices and discover +  the hardware topology using the media entities, pads and links enumeration +  API.</para> + +  <para>In addition to make sub-devices discoverable, drivers can also choose +  to make them directly configurable by applications. When both the sub-device +  driver and the V4L2 device driver support this, sub-devices will feature a +  character device node on which ioctls can be called to +  <itemizedlist> +    <listitem><para>query, read and write sub-devices controls</para></listitem> +    <listitem><para>subscribe and unsubscribe to events and retrieve them</para></listitem> +    <listitem><para>negotiate image formats on individual pads</para></listitem> +  </itemizedlist> +  </para> + +  <para>Sub-device character device nodes, conventionally named +  <filename>/dev/v4l-subdev*</filename>, use major number 81.</para> + +  <section> +    <title>Controls</title> +    <para>Most V4L2 controls are implemented by sub-device hardware. Drivers +    usually merge all controls and expose them through video device nodes. +    Applications can control all sub-devices through a single interface.</para> + +    <para>Complex devices sometimes implement the same control in different +    pieces of hardware. This situation is common in embedded platforms, where +    both sensors and image processing hardware implement identical functions, +    such as contrast adjustment, white balance or faulty pixels correction. As +    the V4L2 controls API doesn't support several identical controls in a single +    device, all but one of the identical controls are hidden.</para> + +    <para>Applications can access those hidden controls through the sub-device +    node with the V4L2 control API described in <xref linkend="control" />. The +    ioctls behave identically as when issued on V4L2 device nodes, with the +    exception that they deal only with controls implemented in the sub-device. +    </para> + +    <para>Depending on the driver, those controls might also be exposed through +    one (or several) V4L2 device nodes.</para> +  </section> + +  <section> +    <title>Events</title> +    <para>V4L2 sub-devices can notify applications of events as described in +    <xref linkend="event" />. The API behaves identically as when used on V4L2 +    device nodes, with the exception that it only deals with events generated by +    the sub-device. Depending on the driver, those events might also be reported +    on one (or several) V4L2 device nodes.</para> +  </section> + +  <section id="pad-level-formats"> +    <title>Pad-level Formats</title> + +    <warning><para>Pad-level formats are only applicable to very complex device that +    need to expose low-level format configuration to user space. Generic V4L2 +    applications do <emphasis>not</emphasis> need to use the API described in +    this section.</para></warning> + +    <note><para>For the purpose of this section, the term +    <wordasword>format</wordasword> means the combination of media bus data +    format, frame width and frame height.</para></note> + +    <para>Image formats are typically negotiated on video capture and +    output devices using the format and <link +    linkend="vidioc-subdev-g-selection">selection</link> ioctls. The +    driver is responsible for configuring every block in the video +    pipeline according to the requested format at the pipeline input +    and/or output.</para> + +    <para>For complex devices, such as often found in embedded systems, +    identical image sizes at the output of a pipeline can be achieved using +    different hardware configurations. One such example is shown on +    <xref linkend="pipeline-scaling" />, where +    image scaling can be performed on both the video sensor and the host image +    processing hardware.</para> + +    <figure id="pipeline-scaling"> +      <title>Image Format Negotiation on Pipelines</title> +      <mediaobject> +	<imageobject> +	  <imagedata fileref="pipeline.pdf" format="PS" /> +	</imageobject> +	<imageobject> +	  <imagedata fileref="pipeline.png" format="PNG" /> +	</imageobject> +	<textobject> +	  <phrase>High quality and high speed pipeline configuration</phrase> +	</textobject> +      </mediaobject> +    </figure> + +    <para>The sensor scaler is usually of less quality than the host scaler, but +    scaling on the sensor is required to achieve higher frame rates. Depending +    on the use case (quality vs. speed), the pipeline must be configured +    differently. Applications need to configure the formats at every point in +    the pipeline explicitly.</para> + +    <para>Drivers that implement the <link linkend="media-controller-intro">media +    API</link> can expose pad-level image format configuration to applications. +    When they do, applications can use the &VIDIOC-SUBDEV-G-FMT; and +    &VIDIOC-SUBDEV-S-FMT; ioctls. to negotiate formats on a per-pad basis.</para> + +    <para>Applications are responsible for configuring coherent parameters on +    the whole pipeline and making sure that connected pads have compatible +    formats. The pipeline is checked for formats mismatch at &VIDIOC-STREAMON; +    time, and an &EPIPE; is then returned if the configuration is +    invalid.</para> + +    <para>Pad-level image format configuration support can be tested by calling +    the &VIDIOC-SUBDEV-G-FMT; ioctl on pad 0. If the driver returns an &EINVAL; +    pad-level format configuration is not supported by the sub-device.</para> + +    <section> +      <title>Format Negotiation</title> + +      <para>Acceptable formats on pads can (and usually do) depend on a number +      of external parameters, such as formats on other pads, active links, or +      even controls. Finding a combination of formats on all pads in a video +      pipeline, acceptable to both application and driver, can't rely on formats +      enumeration only. A format negotiation mechanism is required.</para> + +      <para>Central to the format negotiation mechanism are the get/set format +      operations. When called with the <structfield>which</structfield> argument +      set to <constant>V4L2_SUBDEV_FORMAT_TRY</constant>, the +      &VIDIOC-SUBDEV-G-FMT; and &VIDIOC-SUBDEV-S-FMT; ioctls operate on a set of +      formats parameters that are not connected to the hardware configuration. +      Modifying those 'try' formats leaves the device state untouched (this +      applies to both the software state stored in the driver and the hardware +      state stored in the device itself).</para> + +      <para>While not kept as part of the device state, try formats are stored +      in the sub-device file handles. A &VIDIOC-SUBDEV-G-FMT; call will return +      the last try format set <emphasis>on the same sub-device file +      handle</emphasis>. Several applications querying the same sub-device at +      the same time will thus not interact with each other.</para> + +      <para>To find out whether a particular format is supported by the device, +      applications use the &VIDIOC-SUBDEV-S-FMT; ioctl. Drivers verify and, if +      needed, change the requested <structfield>format</structfield> based on +      device requirements and return the possibly modified value. Applications +      can then choose to try a different format or accept the returned value and +      continue.</para> + +      <para>Formats returned by the driver during a negotiation iteration are +      guaranteed to be supported by the device. In particular, drivers guarantee +      that a returned format will not be further changed if passed to an +      &VIDIOC-SUBDEV-S-FMT; call as-is (as long as external parameters, such as +      formats on other pads or links' configuration are not changed).</para> + +      <para>Drivers automatically propagate formats inside sub-devices. When a +      try or active format is set on a pad, corresponding formats on other pads +      of the same sub-device can be modified by the driver. Drivers are free to +      modify formats as required by the device. However, they should comply with +      the following rules when possible: +      <itemizedlist> +        <listitem><para>Formats should be propagated from sink pads to source pads. +	Modifying a format on a source pad should not modify the format on any +	sink pad.</para></listitem> +        <listitem><para>Sub-devices that scale frames using variable scaling factors +	should reset the scale factors to default values when sink pads formats +	are modified. If the 1:1 scaling ratio is supported, this means that +	source pads formats should be reset to the sink pads formats.</para></listitem> +      </itemizedlist> +      </para> + +      <para>Formats are not propagated across links, as that would involve +      propagating them from one sub-device file handle to another. Applications +      must then take care to configure both ends of every link explicitly with +      compatible formats. Identical formats on the two ends of a link are +      guaranteed to be compatible. Drivers are free to accept different formats +      matching device requirements as being compatible.</para> + +      <para><xref linkend="sample-pipeline-config" /> +      shows a sample configuration sequence for the pipeline described in +      <xref linkend="pipeline-scaling" /> (table +      columns list entity names and pad numbers).</para> + +      <table pgwide="0" frame="none" id="sample-pipeline-config"> +	<title>Sample Pipeline Configuration</title> +	<tgroup cols="3"> +	  <colspec colname="what"/> +	  <colspec colname="sensor-0" /> +	  <colspec colname="frontend-0" /> +	  <colspec colname="frontend-1" /> +	  <colspec colname="scaler-0" /> +	  <colspec colname="scaler-1" /> +	  <thead> +	    <row> +	      <entry></entry> +	      <entry>Sensor/0</entry> +	      <entry>Frontend/0</entry> +	      <entry>Frontend/1</entry> +	      <entry>Scaler/0</entry> +	      <entry>Scaler/1</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row> +	      <entry>Initial state</entry> +	      <entry>2048x1536</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	    </row> +	    <row> +	      <entry>Configure frontend input</entry> +	      <entry>2048x1536</entry> +	      <entry><emphasis>2048x1536</emphasis></entry> +	      <entry><emphasis>2046x1534</emphasis></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	    </row> +	    <row> +	      <entry>Configure scaler input</entry> +	      <entry>2048x1536</entry> +	      <entry>2048x1536</entry> +	      <entry>2046x1534</entry> +	      <entry><emphasis>2046x1534</emphasis></entry> +	      <entry><emphasis>2046x1534</emphasis></entry> +	    </row> +	    <row> +	      <entry>Configure scaler output</entry> +	      <entry>2048x1536</entry> +	      <entry>2048x1536</entry> +	      <entry>2046x1534</entry> +	      <entry>2046x1534</entry> +	      <entry><emphasis>1280x960</emphasis></entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> + +      <para> +      <orderedlist> +	<listitem><para>Initial state. The sensor output is set to its native 3MP +	resolution. Resolutions on the host frontend and scaler input and output +	pads are undefined.</para></listitem> +	<listitem><para>The application configures the frontend input pad resolution to +	2048x1536. The driver propagates the format to the frontend output pad. +	Note that the propagated output format can be different, as in this case, +	than the input format, as the hardware might need to crop pixels (for +	instance when converting a Bayer filter pattern to RGB or YUV).</para></listitem> +	<listitem><para>The application configures the scaler input pad resolution to +	2046x1534 to match the frontend output resolution. The driver propagates +	the format to the scaler output pad.</para></listitem> +	<listitem><para>The application configures the scaler output pad resolution to +	1280x960.</para></listitem> +      </orderedlist> +      </para> + +      <para>When satisfied with the try results, applications can set the active +      formats by setting the <structfield>which</structfield> argument to +      <constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. Active formats are changed +      exactly as try formats by drivers. To avoid modifying the hardware state +      during format negotiation, applications should negotiate try formats first +      and then modify the active settings using the try formats returned during +      the last negotiation iteration. This guarantees that the active format +      will be applied as-is by the driver without being modified. +      </para> +    </section> + +    <section id="v4l2-subdev-selections"> +      <title>Selections: cropping, scaling and composition</title> + +      <para>Many sub-devices support cropping frames on their input or output +      pads (or possible even on both). Cropping is used to select the area of +      interest in an image, typically on an image sensor or a video decoder. It can +      also be used as part of digital zoom implementations to select the area of +      the image that will be scaled up.</para> + +      <para>Crop settings are defined by a crop rectangle and represented in a +      &v4l2-rect; by the coordinates of the top left corner and the rectangle +      size. Both the coordinates and sizes are expressed in pixels.</para> + +      <para>As for pad formats, drivers store try and active +      rectangles for the selection targets <xref +      linkend="v4l2-selections-common" />.</para> + +      <para>On sink pads, cropping is applied relative to the +      current pad format. The pad format represents the image size as +      received by the sub-device from the previous block in the +      pipeline, and the crop rectangle represents the sub-image that +      will be transmitted further inside the sub-device for +      processing.</para> + +      <para>The scaling operation changes the size of the image by +      scaling it to new dimensions. The scaling ratio isn't specified +      explicitly, but is implied from the original and scaled image +      sizes. Both sizes are represented by &v4l2-rect;.</para> + +      <para>Scaling support is optional. When supported by a subdev, +      the crop rectangle on the subdev's sink pad is scaled to the +      size configured using the &VIDIOC-SUBDEV-S-SELECTION; IOCTL +      using <constant>V4L2_SEL_TGT_COMPOSE</constant> +      selection target on the same pad. If the subdev supports scaling +      but not composing, the top and left values are not used and must +      always be set to zero.</para> + +      <para>On source pads, cropping is similar to sink pads, with the +      exception that the source size from which the cropping is +      performed, is the COMPOSE rectangle on the sink pad. In both +      sink and source pads, the crop rectangle must be entirely +      contained inside the source image size for the crop +      operation.</para> + +      <para>The drivers should always use the closest possible +      rectangle the user requests on all selection targets, unless +      specifically told otherwise. +      <constant>V4L2_SEL_FLAG_GE</constant> and +      <constant>V4L2_SEL_FLAG_LE</constant> flags may be +      used to round the image size either up or down. <xref +      linkend="v4l2-selection-flags" /></para> +    </section> + +    <section> +      <title>Types of selection targets</title> + +      <section> +	<title>Actual targets</title> + +	<para>Actual targets (without a postfix) reflect the actual +	hardware configuration at any point of time. There is a BOUNDS +	target corresponding to every actual target.</para> +      </section> + +      <section> +	<title>BOUNDS targets</title> + +	<para>BOUNDS targets is the smallest rectangle that contains all +	valid actual rectangles. It may not be possible to set the actual +	rectangle as large as the BOUNDS rectangle, however. This may be +	because e.g. a sensor's pixel array is not rectangular but +	cross-shaped or round. The maximum size may also be smaller than the +	BOUNDS rectangle.</para> +      </section> + +    </section> + +    <section> +      <title>Order of configuration and format propagation</title> + +      <para>Inside subdevs, the order of image processing steps will +      always be from the sink pad towards the source pad. This is also +      reflected in the order in which the configuration must be +      performed by the user: the changes made will be propagated to +      any subsequent stages. If this behaviour is not desired, the +      user must set +      <constant>V4L2_SEL_FLAG_KEEP_CONFIG</constant> flag. This +      flag causes no propagation of the changes are allowed in any +      circumstances. This may also cause the accessed rectangle to be +      adjusted by the driver, depending on the properties of the +      underlying hardware.</para> + +      <para>The coordinates to a step always refer to the actual size +      of the previous step. The exception to this rule is the source +      compose rectangle, which refers to the sink compose bounds +      rectangle --- if it is supported by the hardware.</para> + +      <orderedlist> +	<listitem><para>Sink pad format. The user configures the sink pad +	format. This format defines the parameters of the image the +	entity receives through the pad for further processing.</para></listitem> + +	<listitem><para>Sink pad actual crop selection. The sink pad crop +	defines the crop performed to the sink pad format.</para></listitem> + +	<listitem><para>Sink pad actual compose selection. The size of the +	sink pad compose rectangle defines the scaling ratio compared +	to the size of the sink pad crop rectangle. The location of +	the compose rectangle specifies the location of the actual +	sink compose rectangle in the sink compose bounds +	rectangle.</para></listitem> + +	<listitem><para>Source pad actual crop selection. Crop on the source +	pad defines crop performed to the image in the sink compose +	bounds rectangle.</para></listitem> + +	<listitem><para>Source pad format. The source pad format defines the +	output pixel format of the subdev, as well as the other +	parameters with the exception of the image width and height. +	Width and height are defined by the size of the source pad +	actual crop selection.</para></listitem> +      </orderedlist> + +      <para>Accessing any of the above rectangles not supported by the +      subdev will return <constant>EINVAL</constant>. Any rectangle +      referring to a previous unsupported rectangle coordinates will +      instead refer to the previous supported rectangle. For example, +      if sink crop is not supported, the compose selection will refer +      to the sink pad format dimensions instead.</para> + +      <figure id="subdev-image-processing-crop"> +	<title>Image processing in subdevs: simple crop example</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="subdev-image-processing-crop.svg" +	    format="SVG" scale="200" /> +	  </imageobject> +	</mediaobject> +      </figure> + +      <para>In the above example, the subdev supports cropping on its +      sink pad. To configure it, the user sets the media bus format on +      the subdev's sink pad. Now the actual crop rectangle can be set +      on the sink pad --- the location and size of this rectangle +      reflect the location and size of a rectangle to be cropped from +      the sink format. The size of the sink crop rectangle will also +      be the size of the format of the subdev's source pad.</para> + +      <figure id="subdev-image-processing-scaling-multi-source"> +	<title>Image processing in subdevs: scaling with multiple sources</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="subdev-image-processing-scaling-multi-source.svg" +	    format="SVG" scale="200" /> +	  </imageobject> +	</mediaobject> +      </figure> + +      <para>In this example, the subdev is capable of first cropping, +      then scaling and finally cropping for two source pads +      individually from the resulting scaled image. The location of +      the scaled image in the cropped image is ignored in sink compose +      target. Both of the locations of the source crop rectangles +      refer to the sink scaling rectangle, independently cropping an +      area at location specified by the source crop rectangle from +      it.</para> + +      <figure id="subdev-image-processing-full"> +	<title>Image processing in subdevs: scaling and composition +	with multiple sinks and sources</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="subdev-image-processing-full.svg" +	    format="SVG" scale="200" /> +	  </imageobject> +	</mediaobject> +      </figure> + +      <para>The subdev driver supports two sink pads and two source +      pads. The images from both of the sink pads are individually +      cropped, then scaled and further composed on the composition +      bounds rectangle. From that, two independent streams are cropped +      and sent out of the subdev from the source pads.</para> + +    </section> + +  </section> + +  &sub-subdev-formats; diff --git a/Documentation/DocBook/media/v4l/dev-teletext.xml b/Documentation/DocBook/media/v4l/dev-teletext.xml new file mode 100644 index 00000000000..bd21c64d70f --- /dev/null +++ b/Documentation/DocBook/media/v4l/dev-teletext.xml @@ -0,0 +1,29 @@ +  <title>Teletext Interface</title> + +  <para>This interface was aimed at devices receiving and demodulating +Teletext data [<xref linkend="ets300706" />, <xref linkend="itu653" />], evaluating the +Teletext packages and storing formatted pages in cache memory. Such +devices are usually implemented as microcontrollers with serial +interface (I<superscript>2</superscript>C) and could be found on old +TV cards, dedicated Teletext decoding cards and home-brew devices +connected to the PC parallel port.</para> + +  <para>The Teletext API was designed by Martin Buck. It was defined in +the kernel header file <filename>linux/videotext.h</filename>, the +specification is available from <ulink url="ftp://ftp.gwdg.de/pub/linux/misc/videotext/"> +ftp://ftp.gwdg.de/pub/linux/misc/videotext/</ulink>. (Videotext is the name of +the German public television Teletext service.)</para> + +  <para>Eventually the Teletext API was integrated into the V4L API +with character device file names <filename>/dev/vtx0</filename> to +<filename>/dev/vtx31</filename>, device major number 81, minor numbers +192 to 223.</para> + +  <para>However, teletext decoders were quickly replaced by more +generic VBI demodulators and those dedicated teletext decoders no longer exist. +For many years the vtx devices were still around, even though nobody used +them. So the decision was made to finally remove support for the Teletext API in +kernel 2.6.37.</para> + +  <para>Modern devices all use the <link linkend="raw-vbi">raw</link> or +<link linkend="sliced">sliced</link> VBI API.</para> diff --git a/Documentation/DocBook/media/v4l/driver.xml b/Documentation/DocBook/media/v4l/driver.xml new file mode 100644 index 00000000000..7c6638baced --- /dev/null +++ b/Documentation/DocBook/media/v4l/driver.xml @@ -0,0 +1,200 @@ +  <title>V4L2 Driver Programming</title> + +  <!-- This part defines the interface between the "videodev" +    module and individual drivers. --> + +  <para>to do</para> +<!-- +  <para>V4L2 is a two-layer driver system. The top layer is the "videodev" +kernel module. When videodev initializes it registers as character device +with major number 81, and it registers a set of file operations. All V4L2 +drivers are really clients of videodev, which calls V4L2 drivers through +driver method functions. V4L2 drivers are also written as kernel modules. +After probing the hardware they register one or more devices with +videodev.</para> + +  <section id="driver-modules"> +    <title>Driver Modules</title> + +    <para>V4L2 driver modules must have an initialization function which is +called after the module was loaded into kernel, an exit function whis is +called before the module is removed.  When the driver is compiled into the +kernel these functions called at system boot and shutdown time.</para> + +    <informalexample> +      <programlisting> +#include <linux/module.h> + +/* Export information about this module. For details and other useful +   macros see <filename>linux/module.h</filename>. */ +MODULE_DESCRIPTION("my - driver for my hardware"); +MODULE_AUTHOR("Your name here"); +MODULE_LICENSE("GPL"); + +static void +my_module_exit (void) +{ +	/* Free all resources allocated by my_module_init(). */ +} + +static int +my_module_init (void) +{ +	/* Bind the driver to the supported hardware, see +	   <link linkend="driver-pci"> and +	   <link linkend="driver-usb"> for examples. */ + +	return 0; /* a negative value on error, 0 on success. */ +} + +/* Export module functions. */ +module_init (my_module_init); +module_exit (my_module_exit); +</programlisting> +    </informalexample> + +    <para>Users can add parameters when kernel modules are inserted:</para> + +    <informalexample> +      <programlisting> +include <linux/moduleparam.h> + +static int my_option = 123; +static int my_option_array[47]; + +/* Export the symbol, an int, with access permissions 0664. +   See <filename>linux/moduleparam.h</filename> for other types. */ +module_param (my_option, int, 0644); +module_param_array (my_option_array, int, NULL, 0644); + +MODULE_PARM_DESC (my_option, "Does magic things, default 123"); +</programlisting> +    </informalexample> + +    <para>One parameter should be supported by all V4L2 drivers, the minor +number of the device it will register. Purpose is to predictably link V4L2 +drivers to device nodes if more than one video device is installed. Use the +name of the device node followed by a "_nr" suffix, for example "video_nr" +for <filename>/dev/video</filename>.</para> + +    <informalexample> +      <programlisting> +/* Minor number of the device, -1 to allocate the first unused. */ +static int video_nr = -1; + +module_param (video_nr, int, 0444); +</programlisting> +    </informalexample> +  </section> + +  <section id="driver-pci"> +    <title>PCI Devices</title> + +    <para>PCI devices are initialized like this:</para> + +    <informalexample> +      <programlisting> +typedef struct { +	/* State of one physical device. */ +} my_device; + +static int +my_resume               (struct pci_dev *               pci_dev) +{ +	/* Restore the suspended device to working state. */ +} + +static int +my_suspend              (struct pci_dev *               pci_dev, +			 pm_message_t                   state) +{ +	/* This function is called before the system goes to sleep. +	   Stop all DMAs and disable interrupts, then put the device +	   into a low power state. For details see the kernel +	   sources under <filename>Documentation/power</filename>. */ + +	return 0; /* a negative value on error, 0 on success. */ +} + +static void +my_remove               (struct pci_dev *               pci_dev) +{ +	my_device *my = pci_get_drvdata (pci_dev); + +	/* Describe me. */ +} + +static int +my_probe                (struct pci_dev *               pci_dev, +			 const struct pci_device_id *   pci_id) +{ +	my_device *my; + +	/* Describe me. */ + +	/* You can allocate per-device data here and store a pointer +	   to it in the pci_dev structure. */ +	my = ...; +	pci_set_drvdata (pci_dev, my); + +	return 0; /* a negative value on error, 0 on success. */ +} + +/* A list of supported PCI devices. */ +static struct pci_device_id +my_pci_device_ids [] = { +	{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR, +	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, +	{ 0 } /* end of list */ +}; + +/* Load our module if supported PCI devices are installed. */ +MODULE_DEVICE_TABLE (pci, my_pci_device_ids); + +static struct pci_driver +my_pci_driver = { +	.name     = "my", +	.id_table = my_pci_device_ids, + +	.probe    = my_probe, +	.remove   = my_remove, + +	/* Power management functions. */ +	.suspend  = my_suspend, +	.resume   = my_resume, +}; + +static void +my_module_exit          (void) +{ +	pci_unregister_driver (&my_pci_driver); +} + +static int +my_module_init          (void) +{ +	return pci_register_driver (&my_pci_driver); +} +</programlisting> +    </informalexample> +  </section> + +  <section id="driver-usb"> +    <title>USB Devices</title> +    <para>to do</para> +  </section> +  <section id="driver-registering"> +    <title>Registering V4L2 Drivers</title> + +    <para>After a V4L2 driver probed the hardware it registers one or more +devices with the videodev module.</para> +  </section> +  <section id="driver-file-ops"> +    <title>File Operations</title> +    <para>to do</para> +  </section> +  <section id="driver-internal-api"> +    <title>Internal API</title> +    <para>to do</para> +  </section> +--> diff --git a/Documentation/DocBook/media/v4l/fdl-appendix.xml b/Documentation/DocBook/media/v4l/fdl-appendix.xml new file mode 100644 index 00000000000..ae22394ba99 --- /dev/null +++ b/Documentation/DocBook/media/v4l/fdl-appendix.xml @@ -0,0 +1,671 @@ +<!-- +     The GNU Free Documentation License 1.1 in DocBook +     Markup by Eric Baudais <baudais@okstate.edu> +     Maintained by the GNOME Documentation Project +     http://live.gnome.org/DocumentationProject +     Version: 1.0.1 +     Last Modified: Nov 16, 2000 +--> + +<appendix id="fdl"> +  <appendixinfo> +    <releaseinfo> +      Version 1.1, March 2000 +    </releaseinfo> +    <copyright> +      <year>2000</year><holder>Free Software Foundation, Inc.</holder> +    </copyright> +    <legalnotice id="fdl-legalnotice"> +      <para> +	<address>Free Software Foundation, Inc. <street>59 Temple Place, +	Suite 330</street>, <city>Boston</city>, <state>MA</state> +	<postcode>02111-1307</postcode>  <country>USA</country></address> +	Everyone is permitted to copy and distribute verbatim copies of this +	license document, but changing it is not allowed. +      </para> +    </legalnotice> +  </appendixinfo> +  <title>GNU Free Documentation License</title> + +  <sect1 id="fdl-preamble"> +    <title>0. PREAMBLE</title> +    <para> +      The purpose of this License is to make a manual, textbook, or +      other written document <quote>free</quote> in the sense of +      freedom: to assure everyone the effective freedom to copy and +      redistribute it, with or without modifying it, either +      commercially or noncommercially. Secondarily, this License +      preserves for the author and publisher a way to get credit for +      their work, while not being considered responsible for +      modifications made by others. +    </para> + +    <para> +      This License is a kind of <quote>copyleft</quote>, which means +      that derivative works of the document must themselves be free in +      the same sense. It complements the GNU General Public License, +      which is a copyleft license designed for free software. +    </para> + +    <para> +      We have designed this License in order to use it for manuals for +      free software, because free software needs free documentation: a +      free program should come with manuals providing the same +      freedoms that the software does. But this License is not limited +      to software manuals; it can be used for any textual work, +      regardless of subject matter or whether it is published as a +      printed book. We recommend this License principally for works +      whose purpose is instruction or reference. +    </para> +  </sect1> +  <sect1 id="fdl-section1"> +    <title>1. APPLICABILITY AND DEFINITIONS</title> +    <para id="fdl-document"> +      This License applies to any manual or other work that contains a +      notice placed by the copyright holder saying it can be +      distributed under the terms of this License. The +      <quote>Document</quote>, below, refers to any such manual or +      work. Any member of the public is a licensee, and is addressed +      as <quote>you</quote>. +    </para> + +    <para id="fdl-modified"> +      A <quote>Modified Version</quote> of the Document means any work +      containing the Document or a portion of it, either copied +      verbatim, or with modifications and/or translated into another +      language. +    </para> + +    <para id="fdl-secondary"> +      A <quote>Secondary Section</quote> is a named appendix or a +      front-matter section of the <link +      linkend="fdl-document">Document</link> that deals exclusively +      with the relationship of the publishers or authors of the +      Document to the Document's overall subject (or to related +      matters) and contains nothing that could fall directly within +      that overall subject. (For example, if the Document is in part a +      textbook of mathematics, a Secondary Section may not explain any +      mathematics.)  The relationship could be a matter of historical +      connection with the subject or with related matters, or of +      legal, commercial, philosophical, ethical or political position +      regarding them. +    </para> + +    <para id="fdl-invariant"> +      The <quote>Invariant Sections</quote> are certain <link +      linkend="fdl-secondary"> Secondary Sections</link> whose titles +      are designated, as being those of Invariant Sections, in the +      notice that says that the <link +      linkend="fdl-document">Document</link> is released under this +      License. +    </para> + +    <para id="fdl-cover-texts"> +      The <quote>Cover Texts</quote> are certain short passages of +      text that are listed, as Front-Cover Texts or Back-Cover Texts, +      in the notice that says that the <link +      linkend="fdl-document">Document</link> is released under this +      License. +    </para> + +    <para id="fdl-transparent"> +      A <quote>Transparent</quote> copy of the <link +      linkend="fdl-document"> Document</link> means a machine-readable +      copy, represented in a format whose specification is available +      to the general public, whose contents can be viewed and edited +      directly and straightforwardly with generic text editors or (for +      images composed of pixels) generic paint programs or (for +      drawings) some widely available drawing editor, and that is +      suitable for input to text formatters or for automatic +      translation to a variety of formats suitable for input to text +      formatters. A copy made in an otherwise Transparent file format +      whose markup has been designed to thwart or discourage +      subsequent modification by readers is not Transparent.  A copy +      that is not <quote>Transparent</quote> is called +      <quote>Opaque</quote>. +    </para> + +    <para> +      Examples of suitable formats for Transparent copies include +      plain ASCII without markup, Texinfo input format, LaTeX input +      format, SGML or XML using a publicly available DTD, and +      standard-conforming simple HTML designed for human +      modification. Opaque formats include PostScript, PDF, +      proprietary formats that can be read and edited only by +      proprietary word processors, SGML or XML for which the DTD +      and/or processing tools are not generally available, and the +      machine-generated HTML produced by some word processors for +      output purposes only. +    </para> + +    <para id="fdl-title-page"> +      The <quote>Title Page</quote> means, for a printed book, the +      title page itself, plus such following pages as are needed to +      hold, legibly, the material this License requires to appear in +      the title page. For works in formats which do not have any title +      page as such, <quote>Title Page</quote> means the text near the +      most prominent appearance of the work's title, preceding the +      beginning of the body of the text. +    </para> +  </sect1> + +  <sect1 id="fdl-section2"> +    <title>2. VERBATIM COPYING</title> +    <para> +      You may copy and distribute the <link +      linkend="fdl-document">Document</link> in any medium, either +      commercially or noncommercially, provided that this License, the +      copyright notices, and the license notice saying this License +      applies to the Document are reproduced in all copies, and that +      you add no other conditions whatsoever to those of this +      License. You may not use technical measures to obstruct or +      control the reading or further copying of the copies you make or +      distribute. However, you may accept compensation in exchange for +      copies. If you distribute a large enough number of copies you +      must also follow the conditions in <link +      linkend="fdl-section3">section 3</link>. +    </para> + +    <para> +      You may also lend copies, under the same conditions stated +      above, and you may publicly display copies. +    </para> +    </sect1> + +  <sect1 id="fdl-section3"> +    <title>3. COPYING IN QUANTITY</title> +    <para> +      If you publish printed copies of the <link +      linkend="fdl-document">Document</link> numbering more than 100, +      and the Document's license notice requires <link +      linkend="fdl-cover-texts">Cover Texts</link>, you must enclose +      the copies in covers that carry, clearly and legibly, all these +      Cover Texts: Front-Cover Texts on the front cover, and +      Back-Cover Texts on the back cover. Both covers must also +      clearly and legibly identify you as the publisher of these +      copies. The front cover must present the full title with all +      words of the title equally prominent and visible. You may add +      other material on the covers in addition. Copying with changes +      limited to the covers, as long as they preserve the title of the +      <link linkend="fdl-document">Document</link> and satisfy these +      conditions, can be treated as verbatim copying in other +      respects. +    </para> + +    <para> +      If the required texts for either cover are too voluminous to fit +      legibly, you should put the first ones listed (as many as fit +      reasonably) on the actual cover, and continue the rest onto +      adjacent pages. +    </para> + +    <para> +      If you publish or distribute <link +      linkend="fdl-transparent">Opaque</link> copies of the <link +      linkend="fdl-document">Document</link> numbering more than 100, +      you must either include a machine-readable <link +      linkend="fdl-transparent">Transparent</link> copy along with +      each Opaque copy, or state in or with each Opaque copy a +      publicly-accessible computer-network location containing a +      complete Transparent copy of the Document, free of added +      material, which the general network-using public has access to +      download anonymously at no charge using public-standard network +      protocols. If you use the latter option, you must take +      reasonably prudent steps, when you begin distribution of Opaque +      copies in quantity, to ensure that this Transparent copy will +      remain thus accessible at the stated location until at least one +      year after the last time you distribute an Opaque copy (directly +      or through your agents or retailers) of that edition to the +      public. +    </para> + +    <para> +      It is requested, but not required, that you contact the authors +      of the <link linkend="fdl-document">Document</link> well before +      redistributing any large number of copies, to give them a chance +      to provide you with an updated version of the Document. +    </para> +    </sect1> + +  <sect1 id="fdl-section4"> +    <title>4. MODIFICATIONS</title> +    <para> +      You may copy and distribute a <link +      linkend="fdl-modified">Modified Version</link> of the <link +      linkend="fdl-document">Document</link> under the conditions of +      sections <link linkend="fdl-section2">2</link> and <link +      linkend="fdl-section3">3</link> above, provided that you release +      the Modified Version under precisely this License, with the +      Modified Version filling the role of the Document, thus +      licensing distribution and modification of the Modified Version +      to whoever possesses a copy of it. In addition, you must do +      these things in the Modified Version: +    </para> + +    <itemizedlist mark="opencircle"> +      <listitem> +	<formalpara> +	  <title>A</title> +	  <para> +	    Use in the <link linkend="fdl-title-page">Title +	    Page</link> (and on the covers, if any) a title distinct +	    from that of the <link +	    linkend="fdl-document">Document</link>, and from those of +	    previous versions (which should, if there were any, be +	    listed in the History section of the Document). You may +	    use the same title as a previous version if the original +	    publisher of that version gives permission. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>B</title> +	  <para> +	    List on the <link linkend="fdl-title-page">Title +	    Page</link>, as authors, one or more persons or entities +	    responsible for authorship of the modifications in the +	    <link linkend="fdl-modified">Modified Version</link>, +	    together with at least five of the principal authors of +	    the <link linkend="fdl-document">Document</link> (all of +	    its principal authors, if it has less than five). +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>C</title> +	  <para> +	    State on the <link linkend="fdl-title-page">Title +	    Page</link> the name of the publisher of the <link +	    linkend="fdl-modified">Modified Version</link>, as the +	    publisher. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>D</title> +	  <para> +	    Preserve all the copyright notices of the <link +	    linkend="fdl-document">Document</link>. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>E</title> +	  <para> +	    Add an appropriate copyright notice for your modifications +	    adjacent to the other copyright notices. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>F</title> +	  <para> +	    Include, immediately after the copyright notices, a +	    license notice giving the public permission to use the +	    <link linkend="fdl-modified">Modified Version</link> under +	    the terms of this License, in the form shown in the +	    Addendum below. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>G</title> +	  <para> +	    Preserve in that license notice the full lists of <link +	    linkend="fdl-invariant"> Invariant Sections</link> and +	    required <link linkend="fdl-cover-texts">Cover +	    Texts</link> given in the <link +	    linkend="fdl-document">Document's</link> license notice. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>H</title> +	  <para> +	    Include an unaltered copy of this License. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>I</title> +	  <para> +	    Preserve the section entitled <quote>History</quote>, and +	    its title, and add to it an item stating at least the +	    title, year, new authors, and publisher of the <link +	    linkend="fdl-modified">Modified Version </link>as given on +	    the <link linkend="fdl-title-page">Title Page</link>.  If +	    there is no section entitled <quote>History</quote> in the +	    <link linkend="fdl-document">Document</link>, create one +	    stating the title, year, authors, and publisher of the +	    Document as given on its Title Page, then add an item +	    describing the Modified Version as stated in the previous +	    sentence. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>J</title> +	  <para> +	    Preserve the network location, if any, given in the <link +	    linkend="fdl-document">Document</link> for public access +	    to a <link linkend="fdl-transparent">Transparent</link> +	    copy of the Document, and likewise the network locations +	    given in the Document for previous versions it was based +	    on. These may be placed in the <quote>History</quote> +	    section.  You may omit a network location for a work that +	    was published at least four years before the Document +	    itself, or if the original publisher of the version it +	    refers to gives permission. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>K</title> +	  <para> +	    In any section entitled <quote>Acknowledgements</quote> or +	    <quote>Dedications</quote>, preserve the section's title, +	    and preserve in the section all the substance and tone of +	    each of the contributor acknowledgements and/or +	    dedications given therein. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>L</title> +	  <para> +	    Preserve all the <link linkend="fdl-invariant">Invariant +	    Sections</link> of the <link +	    linkend="fdl-document">Document</link>, unaltered in their +	    text and in their titles.  Section numbers or the +	    equivalent are not considered part of the section titles. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>M</title> +	  <para> +	    Delete any section entitled +	    <quote>Endorsements</quote>. Such a section may not be +	    included in the <link linkend="fdl-modified">Modified +	    Version</link>. +	  </para> +	</formalpara> +      </listitem> + +      <listitem> +	<formalpara> +	  <title>N</title> +	  <para> +	    Do not retitle any existing section as +	    <quote>Endorsements</quote> or to conflict in title with +	    any <link linkend="fdl-invariant">Invariant +	    Section</link>. +	  </para> +	</formalpara> +      </listitem> +    </itemizedlist> + +    <para> +      If the <link linkend="fdl-modified">Modified Version</link> +      includes new front-matter sections or appendices that qualify as +      <link linkend="fdl-secondary">Secondary Sections</link> and +      contain no material copied from the Document, you may at your +      option designate some or all of these sections as invariant. To +      do this, add their titles to the list of <link +      linkend="fdl-invariant">Invariant Sections</link> in the +      Modified Version's license notice.  These titles must be +      distinct from any other section titles. +    </para> + +    <para> +      You may add a section entitled <quote>Endorsements</quote>, +      provided it contains nothing but endorsements of your <link +      linkend="fdl-modified">Modified Version</link> by various +      parties--for example, statements of peer review or that the text +      has been approved by an organization as the authoritative +      definition of a standard. +    </para> + +    <para> +      You may add a passage of up to five words as a <link +      linkend="fdl-cover-texts">Front-Cover Text</link>, and a passage +      of up to 25 words as a <link +      linkend="fdl-cover-texts">Back-Cover Text</link>, to the end of +      the list of <link linkend="fdl-cover-texts">Cover Texts</link> +      in the <link linkend="fdl-modified">Modified Version</link>. +      Only one passage of Front-Cover Text and one of Back-Cover Text +      may be added by (or through arrangements made by) any one +      entity. If the <link linkend="fdl-document">Document</link> +      already includes a cover text for the same cover, previously +      added by you or by arrangement made by the same entity you are +      acting on behalf of, you may not add another; but you may +      replace the old one, on explicit permission from the previous +      publisher that added the old one. +    </para> + +    <para> +      The author(s) and publisher(s) of the <link +      linkend="fdl-document">Document</link> do not by this License +      give permission to use their names for publicity for or to +      assert or imply endorsement of any <link +      linkend="fdl-modified">Modified Version </link>. +    </para> +  </sect1> + +  <sect1 id="fdl-section5"> +    <title>5. COMBINING DOCUMENTS</title> +    <para> +      You may combine the <link linkend="fdl-document">Document</link> +      with other documents released under this License, under the +      terms defined in <link linkend="fdl-section4">section 4</link> +      above for modified versions, provided that you include in the +      combination all of the <link linkend="fdl-invariant">Invariant +      Sections</link> of all of the original documents, unmodified, +      and list them all as Invariant Sections of your combined work in +      its license notice. +    </para> + +    <para> +      The combined work need only contain one copy of this License, +      and multiple identical <link linkend="fdl-invariant">Invariant +      Sections</link> may be replaced with a single copy. If there are +      multiple Invariant Sections with the same name but different +      contents, make the title of each such section unique by adding +      at the end of it, in parentheses, the name of the original +      author or publisher of that section if known, or else a unique +      number. Make the same adjustment to the section titles in the +      list of Invariant Sections in the license notice of the combined +      work. +    </para> + +    <para> +      In the combination, you must combine any sections entitled +      <quote>History</quote> in the various original documents, +      forming one section entitled <quote>History</quote>; likewise +      combine any sections entitled <quote>Acknowledgements</quote>, +      and any sections entitled <quote>Dedications</quote>.  You must +      delete all sections entitled <quote>Endorsements.</quote> +    </para> +    </sect1> + +  <sect1 id="fdl-section6"> +    <title>6. COLLECTIONS OF DOCUMENTS</title> +    <para> +      You may make a collection consisting of the <link +      linkend="fdl-document">Document</link> and other documents +      released under this License, and replace the individual copies +      of this License in the various documents with a single copy that +      is included in the collection, provided that you follow the +      rules of this License for verbatim copying of each of the +      documents in all other respects. +    </para> + +    <para> +      You may extract a single document from such a collection, and +      dispbibute it individually under this License, provided you +      insert a copy of this License into the extracted document, and +      follow this License in all other respects regarding verbatim +      copying of that document. +    </para> +    </sect1> + +  <sect1 id="fdl-section7"> +    <title>7. AGGREGATION WITH INDEPENDENT WORKS</title> +    <para> +      A compilation of the <link +      linkend="fdl-document">Document</link> or its derivatives with +      other separate and independent documents or works, in or on a +      volume of a storage or distribution medium, does not as a whole +      count as a <link linkend="fdl-modified">Modified Version</link> +      of the Document, provided no compilation copyright is claimed +      for the compilation.  Such a compilation is called an +      <quote>aggregate</quote>, and this License does not apply to the +      other self-contained works thus compiled with the Document , on +      account of their being thus compiled, if they are not themselves +      derivative works of the Document.  If the <link +      linkend="fdl-cover-texts">Cover Text</link> requirement of <link +      linkend="fdl-section3">section 3</link> is applicable to these +      copies of the Document, then if the Document is less than one +      quarter of the entire aggregate, the Document's Cover Texts may +      be placed on covers that surround only the Document within the +      aggregate. Otherwise they must appear on covers around the whole +      aggregate. +    </para> +    </sect1> + +  <sect1 id="fdl-section8"> +    <title>8. TRANSLATION</title> +    <para> +      Translation is considered a kind of modification, so you may +      distribute translations of the <link +      linkend="fdl-document">Document</link> under the terms of <link +      linkend="fdl-section4">section 4</link>. Replacing <link +      linkend="fdl-invariant"> Invariant Sections</link> with +      translations requires special permission from their copyright +      holders, but you may include translations of some or all +      Invariant Sections in addition to the original versions of these +      Invariant Sections. You may include a translation of this +      License provided that you also include the original English +      version of this License. In case of a disagreement between the +      translation and the original English version of this License, +      the original English version will prevail. +    </para> +    </sect1> + +  <sect1 id="fdl-section9"> +    <title>9. TERMINATION</title> +    <para> +      You may not copy, modify, sublicense, or distribute the <link +      linkend="fdl-document">Document</link> except as expressly +      provided for under this License. Any other attempt to copy, +      modify, sublicense or distribute the Document is void, and will +      automatically terminate your rights under this License. However, +      parties who have received copies, or rights, from you under this +      License will not have their licenses terminated so long as such +      parties remain in full compliance. +    </para> +    </sect1> + +  <sect1 id="fdl-section10"> +    <title>10. FUTURE REVISIONS OF THIS LICENSE</title> +    <para> +      The <ulink type="http" +      url="http://www.gnu.org/fsf/fsf.html">Free Software +      Foundation</ulink> may publish new, revised versions of the GNU +      Free Documentation License from time to time. Such new versions +      will be similar in spirit to the present version, but may differ +      in detail to address new problems or concerns. See <ulink +      type="http" +      url="http://www.gnu.org/copyleft">http://www.gnu.org/copyleft/</ulink>. +    </para> + +    <para> +      Each version of the License is given a distinguishing version +      number. If the <link linkend="fdl-document">Document</link> +      specifies that a particular numbered version of this License +      <quote>or any later version</quote> applies to it, you have the +      option of following the terms and conditions either of that +      specified version or of any later version that has been +      published (not as a draft) by the Free Software Foundation. If +      the Document does not specify a version number of this License, +      you may choose any version ever published (not as a draft) by +      the Free Software Foundation. +    </para> +  </sect1> + +  <sect1 id="fdl-using"> +    <title>Addendum</title> +    <para> +      To use this License in a document you have written, include a copy of +      the License in the document and put the following copyright and +      license notices just after the title page: +    </para> + +    <blockquote> +      <para> +	Copyright © YEAR YOUR NAME. +      </para> +      <para> +	Permission is granted to copy, distribute and/or modify this +	document under the terms of the GNU Free Documentation +	License, Version 1.1 or any later version published by the +	Free Software Foundation; with the <link +	linkend="fdl-invariant">Invariant Sections</link> being LIST +	THEIR TITLES, with the <link +	linkend="fdl-cover-texts">Front-Cover Texts</link> being LIST, +	and with the <link linkend="fdl-cover-texts">Back-Cover +	Texts</link> being LIST.  A copy of the license is included in +	the section entitled <quote>GNU Free Documentation +	License</quote>. +      </para> +    </blockquote> + +    <para> +      If you have no <link linkend="fdl-invariant">Invariant +      Sections</link>, write <quote>with no Invariant Sections</quote> +      instead of saying which ones are invariant.  If you have no +      <link linkend="fdl-cover-texts">Front-Cover Texts</link>, write +      <quote>no Front-Cover Texts</quote> instead of +      <quote>Front-Cover Texts being LIST</quote>; likewise for <link +      linkend="fdl-cover-texts">Back-Cover Texts</link>. +    </para> + +    <para> +      If your document contains nontrivial examples of program code, +      we recommend releasing these examples in parallel under your +      choice of free software license, such as the <ulink type="http" +      url="http://www.gnu.org/copyleft/gpl.html"> GNU General Public +      License</ulink>, to permit their use in free software. +    </para> +  </sect1> +</appendix> + + + + + + diff --git a/Documentation/DocBook/media/v4l/fieldseq_bt.pdf b/Documentation/DocBook/media/v4l/fieldseq_bt.pdf Binary files differnew file mode 100644 index 00000000000..26598b23f80 --- /dev/null +++ b/Documentation/DocBook/media/v4l/fieldseq_bt.pdf diff --git a/Documentation/DocBook/media/v4l/fieldseq_tb.pdf b/Documentation/DocBook/media/v4l/fieldseq_tb.pdf Binary files differnew file mode 100644 index 00000000000..4965b22ddb3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/fieldseq_tb.pdf diff --git a/Documentation/DocBook/media/v4l/func-close.xml b/Documentation/DocBook/media/v4l/func-close.xml new file mode 100644 index 00000000000..232920d2f3c --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-close.xml @@ -0,0 +1,62 @@ +<refentry id="func-close"> +  <refmeta> +    <refentrytitle>V4L2 close()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-close</refname> +    <refpurpose>Close a V4L2 device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>close</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Closes the device. Any I/O in progress is terminated and +resources associated with the file descriptor are freed. However data +format parameters, current input or output, control values or other +properties remain unchanged.</para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>The function returns <returnvalue>0</returnvalue> on +success, <returnvalue>-1</returnvalue> on failure and the +<varname>errno</varname> is set appropriately. Possible error +codes:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para><parameter>fd</parameter> is not a valid open file +descriptor.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-ioctl.xml b/Documentation/DocBook/media/v4l/func-ioctl.xml new file mode 100644 index 00000000000..4394184a1a6 --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-ioctl.xml @@ -0,0 +1,71 @@ +<refentry id="func-ioctl"> +  <refmeta> +    <refentrytitle>V4L2 ioctl()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-ioctl</refname> +    <refpurpose>Program a V4L2 device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>void *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>V4L2 ioctl request code as defined in the <filename>videodev2.h</filename> header file, for example +VIDIOC_QUERYCAP.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para>Pointer to a function parameter, usually a structure.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>The <function>ioctl()</function> function is used to program +V4L2 devices. The argument <parameter>fd</parameter> must be an open +file descriptor. An ioctl <parameter>request</parameter> has encoded +in it whether the argument is an input, output or read/write +parameter, and the size of the argument <parameter>argp</parameter> in +bytes. Macros and defines specifying V4L2 ioctl requests are located +in the <filename>videodev2.h</filename> header file. +Applications should use their own copy, not include the version in the +kernel sources on the system they compile on. All V4L2 ioctl requests, +their respective function and parameters are specified in <xref +	linkend="user-func" />.</para> +  </refsect1> + +  <refsect1> +    &return-value; +    <para>When an ioctl that takes an output or read/write parameter fails, +    the parameter remains unmodified.</para> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-mmap.xml b/Documentation/DocBook/media/v4l/func-mmap.xml new file mode 100644 index 00000000000..f31ad71bf30 --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-mmap.xml @@ -0,0 +1,183 @@ +<refentry id="func-mmap"> +  <refmeta> +    <refentrytitle>V4L2 mmap()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-mmap</refname> +    <refpurpose>Map device memory into application address space</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo> +#include <unistd.h> +#include <sys/mman.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>void *<function>mmap</function></funcdef> +	<paramdef>void *<parameter>start</parameter></paramdef> +	<paramdef>size_t <parameter>length</parameter></paramdef> +	<paramdef>int <parameter>prot</parameter></paramdef> +	<paramdef>int <parameter>flags</parameter></paramdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>off_t <parameter>offset</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> +    <variablelist> +      <varlistentry> +	<term><parameter>start</parameter></term> +	<listitem> +	  <para>Map the buffer to this address in the +application's address space. When the <constant>MAP_FIXED</constant> +flag is specified, <parameter>start</parameter> must be a multiple of the +pagesize and mmap will fail when the specified address +cannot be used. Use of this option is discouraged; applications should +just specify a <constant>NULL</constant> pointer here.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>length</parameter></term> +	<listitem> +	  <para>Length of the memory area to map. This must be the +same value as returned by the driver in the &v4l2-buffer; +<structfield>length</structfield> field for the +single-planar API, and the same value as returned by the driver +in the &v4l2-plane; <structfield>length</structfield> field for the +multi-planar API.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>prot</parameter></term> +	<listitem> +	  <para>The <parameter>prot</parameter> argument describes the +desired memory protection. Regardless of the device type and the +direction of data exchange it should be set to +<constant>PROT_READ</constant> | <constant>PROT_WRITE</constant>, +permitting read and write access to image buffers. Drivers should +support at least this combination of flags. Note the Linux +<filename>video-buf</filename> kernel module, which is used by the +bttv, saa7134, saa7146, cx88 and vivi driver supports only +<constant>PROT_READ</constant> | <constant>PROT_WRITE</constant>. When +the driver does not support the desired protection the +<function>mmap()</function> function fails.</para> +	  <para>Note device memory accesses (⪚ the memory on a +graphics card with video capturing hardware) may incur a performance +penalty compared to main memory accesses, or reads may be +significantly slower than writes or vice versa. Other I/O methods may +be more efficient in this case.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>flags</parameter></term> +	<listitem> +	  <para>The <parameter>flags</parameter> parameter +specifies the type of the mapped object, mapping options and whether +modifications made to the mapped copy of the page are private to the +process or are to be shared with other references.</para> +	  <para><constant>MAP_FIXED</constant> requests that the +driver selects no other address than the one specified. If the +specified address cannot be used, <function>mmap()</function> will fail. If +<constant>MAP_FIXED</constant> is specified, +<parameter>start</parameter> must be a multiple of the pagesize. Use +of this option is discouraged.</para> +	  <para>One of the <constant>MAP_SHARED</constant> or +<constant>MAP_PRIVATE</constant> flags must be set. +<constant>MAP_SHARED</constant> allows applications to share the +mapped memory with other (⪚ child-) processes. Note the Linux +<filename>video-buf</filename> module which is used by the bttv, +saa7134, saa7146, cx88 and vivi driver supports only +<constant>MAP_SHARED</constant>. <constant>MAP_PRIVATE</constant> +requests copy-on-write semantics. V4L2 applications should not set the +<constant>MAP_PRIVATE</constant>, <constant>MAP_DENYWRITE</constant>, +<constant>MAP_EXECUTABLE</constant> or <constant>MAP_ANON</constant> +flag.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>offset</parameter></term> +	<listitem> +	  <para>Offset of the buffer in device memory. This must be the +same value as returned by the driver in the &v4l2-buffer; +<structfield>m</structfield> union <structfield>offset</structfield> field for +the single-planar API, and the same value as returned by the driver +in the &v4l2-plane; <structfield>m</structfield> union +<structfield>mem_offset</structfield> field for the multi-planar API.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>The <function>mmap()</function> function asks to map +<parameter>length</parameter> bytes starting at +<parameter>offset</parameter> in the memory of the device specified by +<parameter>fd</parameter> into the application address space, +preferably at address <parameter>start</parameter>. This latter +address is a hint only, and is usually specified as 0.</para> + +    <para>Suitable length and offset parameters are queried with the +&VIDIOC-QUERYBUF; ioctl. Buffers must be allocated with the +&VIDIOC-REQBUFS; ioctl before they can be queried.</para> + +    <para>To unmap buffers the &func-munmap; function is used.</para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>On success <function>mmap()</function> returns a pointer to +the mapped buffer. On error <constant>MAP_FAILED</constant> (-1) is +returned, and the <varname>errno</varname> variable is set +appropriately. Possible error codes are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para><parameter>fd</parameter> is not a valid file +descriptor.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EACCES</errorcode></term> +	<listitem> +	  <para><parameter>fd</parameter> is +not open for reading and writing.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <parameter>start</parameter> or +<parameter>length</parameter> or <parameter>offset</parameter> are not +suitable. (E. g. they are too large, or not aligned on a +<constant>PAGESIZE</constant> boundary.)</para> +	  <para>The <parameter>flags</parameter> or +<parameter>prot</parameter> value is not supported.</para> +	  <para>No buffers have been allocated with the +&VIDIOC-REQBUFS; ioctl.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENOMEM</errorcode></term> +	<listitem> +	  <para>Not enough physical or virtual memory was available to +complete the request.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-munmap.xml b/Documentation/DocBook/media/v4l/func-munmap.xml new file mode 100644 index 00000000000..860d49ca54a --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-munmap.xml @@ -0,0 +1,76 @@ +<refentry id="func-munmap"> +  <refmeta> +    <refentrytitle>V4L2 munmap()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-munmap</refname> +    <refpurpose>Unmap device memory</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo> +#include <unistd.h> +#include <sys/mman.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>munmap</function></funcdef> +	<paramdef>void *<parameter>start</parameter></paramdef> +	<paramdef>size_t <parameter>length</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> +  <refsect1> +    <title>Arguments</title> +    <variablelist> +      <varlistentry> +	<term><parameter>start</parameter></term> +	<listitem> +	  <para>Address of the mapped buffer as returned by the +&func-mmap; function.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>length</parameter></term> +	<listitem> +	  <para>Length of the mapped buffer. This must be the same +value as given to <function>mmap()</function> and returned by the +driver in the &v4l2-buffer; <structfield>length</structfield> +field for the single-planar API and in the &v4l2-plane; +<structfield>length</structfield> field for the multi-planar API.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Unmaps a previously with the &func-mmap; function mapped +buffer and frees it, if possible. <!-- ? This function (not freeing) +has no impact on I/O in progress, specifically it does not imply +&VIDIOC-STREAMOFF; to terminate I/O. Unmapped buffers can still be +enqueued, dequeued or queried, they are just not accessible by the +application.--></para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>On success <function>munmap()</function> returns 0, on +failure -1 and the <varname>errno</varname> variable is set +appropriately:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <parameter>start</parameter> or +<parameter>length</parameter> is incorrect, or no buffers have been +mapped yet.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-open.xml b/Documentation/DocBook/media/v4l/func-open.xml new file mode 100644 index 00000000000..cf64e207c3e --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-open.xml @@ -0,0 +1,113 @@ +<refentry id="func-open"> +  <refmeta> +    <refentrytitle>V4L2 open()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-open</refname> +    <refpurpose>Open a V4L2 device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>open</function></funcdef> +	<paramdef>const char *<parameter>device_name</parameter></paramdef> +	<paramdef>int <parameter>flags</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>device_name</parameter></term> +	<listitem> +	  <para>Device to be opened.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>flags</parameter></term> +	<listitem> +	  <para>Open flags. Access mode must be +<constant>O_RDWR</constant>. This is just a technicality, input devices +still support only reading and output devices only writing.</para> +	  <para>When the <constant>O_NONBLOCK</constant> flag is +given, the read() function and the &VIDIOC-DQBUF; ioctl will return +the &EAGAIN; when no data is available or no buffer is in the driver +outgoing queue, otherwise these functions block until data becomes +available. All V4L2 drivers exchanging data with applications must +support the <constant>O_NONBLOCK</constant> flag.</para> +	  <para>Other flags have no effect.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +  <refsect1> +    <title>Description</title> + +    <para>To open a V4L2 device applications call +<function>open()</function> with the desired device name. This +function has no side effects; all data format parameters, current +input or output, control values or other properties remain unchanged. +At the first <function>open()</function> call after loading the driver +they will be reset to default values, drivers are never in an +undefined state.</para> +  </refsect1> +  <refsect1> +    <title>Return Value</title> + +    <para>On success <function>open</function> returns the new file +descriptor. On error -1 is returned, and the <varname>errno</varname> +variable is set appropriately. Possible error codes are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EACCES</errorcode></term> +	<listitem> +	  <para>The caller has no permission to access the +device.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The driver does not support multiple opens and the +device is already in use.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENXIO</errorcode></term> +	<listitem> +	  <para>No device corresponding to this device special file +exists.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENOMEM</errorcode></term> +	<listitem> +	  <para>Not enough kernel memory was available to complete the +request.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EMFILE</errorcode></term> +	<listitem> +	  <para>The  process  already  has  the  maximum number of +files open.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENFILE</errorcode></term> +	<listitem> +	  <para>The limit on the total number of files open on the +system has been reached.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-poll.xml b/Documentation/DocBook/media/v4l/func-poll.xml new file mode 100644 index 00000000000..85cad8bff5b --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-poll.xml @@ -0,0 +1,119 @@ +<refentry id="func-poll"> +  <refmeta> +    <refentrytitle>V4L2 poll()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-poll</refname> +    <refpurpose>Wait for some event on a file descriptor</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <sys/poll.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>poll</function></funcdef> +	<paramdef>struct pollfd *<parameter>ufds</parameter></paramdef> +	<paramdef>unsigned int <parameter>nfds</parameter></paramdef> +	<paramdef>int <parameter>timeout</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Description</title> + +    <para>With the <function>poll()</function> function applications +can suspend execution until the driver has captured data or is ready +to accept data for output.</para> + +    <para>When streaming I/O has been negotiated this function waits +until a buffer has been filled or displayed and can be dequeued with +the &VIDIOC-DQBUF; ioctl. When buffers are already in the outgoing +queue of the driver the function returns immediately.</para> + +    <para>On success <function>poll()</function> returns the number of +file descriptors that have been selected (that is, file descriptors +for which the <structfield>revents</structfield> field of the +respective <structname>pollfd</structname> structure is non-zero). +Capture devices set the <constant>POLLIN</constant> and +<constant>POLLRDNORM</constant> flags in the +<structfield>revents</structfield> field, output devices the +<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant> +flags. When the function timed out it returns a value of zero, on +failure it returns <returnvalue>-1</returnvalue> and the +<varname>errno</varname> variable is set appropriately. When the +application did not call &VIDIOC-QBUF; or &VIDIOC-STREAMON; yet the +<function>poll()</function> function succeeds, but sets the +<constant>POLLERR</constant> flag in the +<structfield>revents</structfield> field.</para> + +    <para>When use of the <function>read()</function> function has +been negotiated and the driver does not capture yet, the +<function>poll</function> function starts capturing. When that fails +it returns a <constant>POLLERR</constant> as above. Otherwise it waits +until data has been captured and can be read. When the driver captures +continuously (as opposed to, for example, still images) the function +may return immediately.</para> + +    <para>When use of the <function>write()</function> function has +been negotiated the <function>poll</function> function just waits +until the driver is ready for a non-blocking +<function>write()</function> call.</para> + +    <para>All drivers implementing the <function>read()</function> or +<function>write()</function> function or streaming I/O must also +support the <function>poll()</function> function.</para> + +    <para>For more details see the +<function>poll()</function> manual page.</para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>On success, <function>poll()</function> returns the number +structures which have non-zero <structfield>revents</structfield> +fields, or zero if the call timed out. On error +<returnvalue>-1</returnvalue> is returned, and the +<varname>errno</varname> variable is set appropriately:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para>One or more of the <parameter>ufds</parameter> members +specify an invalid file descriptor.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The driver does not support multiple read or write +streams and the device is already in use.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EFAULT</errorcode></term> +	<listitem> +	  <para><parameter>ufds</parameter> references an inaccessible +memory area.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINTR</errorcode></term> +	<listitem> +	  <para>The call was interrupted by a signal.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <parameter>nfds</parameter> argument is greater +than <constant>OPEN_MAX</constant>.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-read.xml b/Documentation/DocBook/media/v4l/func-read.xml new file mode 100644 index 00000000000..e218bbfbd36 --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-read.xml @@ -0,0 +1,181 @@ +<refentry id="func-read"> +  <refmeta> +    <refentrytitle>V4L2 read()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-read</refname> +    <refpurpose>Read from a V4L2 device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>ssize_t <function>read</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>void *<parameter>buf</parameter></paramdef> +	<paramdef>size_t <parameter>count</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>buf</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>count</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para><function>read()</function> attempts to read up to +<parameter>count</parameter> bytes from file descriptor +<parameter>fd</parameter> into the buffer starting at +<parameter>buf</parameter>. The layout of the data in the buffer is +discussed in the respective device interface section, see ##. If <parameter>count</parameter> is zero, +<function>read()</function> returns zero and has no other results. If +<parameter>count</parameter> is greater than +<constant>SSIZE_MAX</constant>, the result is unspecified. Regardless +of the <parameter>count</parameter> value each +<function>read()</function> call will provide at most one frame (two +fields) worth of data.</para> + +    <para>By default <function>read()</function> blocks until data +becomes available. When the <constant>O_NONBLOCK</constant> flag was +given to the &func-open; function it +returns immediately with an &EAGAIN; when no data is available. The +&func-select; or &func-poll; functions +can always be used to suspend execution until data becomes available. All +drivers supporting the <function>read()</function> function must also +support <function>select()</function> and +<function>poll()</function>.</para> + +    <para>Drivers can implement read functionality in different +ways, using a single or multiple buffers and discarding the oldest or +newest frames once the internal buffers are filled.</para> + +    <para><function>read()</function> never returns a "snapshot" of a +buffer being filled. Using a single buffer the driver will stop +capturing when the application starts reading the buffer until the +read is finished. Thus only the period of the vertical blanking +interval is available for reading, or the capture rate must fall below +the nominal frame rate of the video standard.</para> + +<para>The behavior of +<function>read()</function> when called during the active picture +period or the vertical blanking separating the top and bottom field +depends on the discarding policy. A driver discarding the oldest +frames keeps capturing into an internal buffer, continuously +overwriting the previously, not read frame, and returns the frame +being received at the time of the <function>read()</function> call as +soon as it is complete.</para> + +    <para>A driver discarding the newest frames stops capturing until +the next <function>read()</function> call. The frame being received at +<function>read()</function> time is discarded, returning the following +frame instead. Again this implies a reduction of the capture rate to +one half or less of the nominal frame rate. An example of this model +is the video read mode of the bttv driver, initiating a DMA to user +memory when <function>read()</function> is called and returning when +the DMA finished.</para> + +    <para>In the multiple buffer model drivers maintain a ring of +internal buffers, automatically advancing to the next free buffer. +This allows continuous capturing when the application can empty the +buffers fast enough. Again, the behavior when the driver runs out of +free buffers depends on the discarding policy.</para> + +    <para>Applications can get and set the number of buffers used +internally by the driver with the &VIDIOC-G-PARM; and &VIDIOC-S-PARM; +ioctls. They are optional, however. The discarding policy is not +reported and cannot be changed. For minimum requirements see <xref +	linkend="devices" />.</para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>On success, the number of bytes read is returned. It is not +an error if this number is smaller than the number of bytes requested, +or the amount of data required for one frame. This may happen for +example because <function>read()</function> was interrupted by a +signal. On error, -1 is returned, and the <varname>errno</varname> +variable is set appropriately. In this case the next read will start +at the beginning of a new frame. Possible error codes are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EAGAIN</errorcode></term> +	<listitem> +	  <para>Non-blocking I/O has been selected using +O_NONBLOCK and no data was immediately available for reading.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para><parameter>fd</parameter> is not a valid file +descriptor or is not open for reading, or the process already has the +maximum number of files open.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The driver does not support multiple read streams and the +device is already in use.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EFAULT</errorcode></term> +	<listitem> +	  <para><parameter>buf</parameter> references an inaccessible +memory area.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINTR</errorcode></term> +	<listitem> +	  <para>The call was interrupted by a signal before any +data was read.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EIO</errorcode></term> +	<listitem> +	  <para>I/O error. This indicates some hardware problem or a +failure to communicate with a remote device (USB camera etc.).</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <function>read()</function> function is not +supported by this driver, not on this device, or generally not on this +type of device.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-select.xml b/Documentation/DocBook/media/v4l/func-select.xml new file mode 100644 index 00000000000..e12a60d9bd8 --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-select.xml @@ -0,0 +1,130 @@ +<refentry id="func-select"> +  <refmeta> +    <refentrytitle>V4L2 select()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-select</refname> +    <refpurpose>Synchronous I/O multiplexing</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo> +#include <sys/time.h> +#include <sys/types.h> +#include <unistd.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>select</function></funcdef> +	<paramdef>int <parameter>nfds</parameter></paramdef> +	<paramdef>fd_set *<parameter>readfds</parameter></paramdef> +	<paramdef>fd_set *<parameter>writefds</parameter></paramdef> +	<paramdef>fd_set *<parameter>exceptfds</parameter></paramdef> +	<paramdef>struct timeval *<parameter>timeout</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Description</title> + +    <para>With the <function>select()</function> function applications +can suspend execution until the driver has captured data or is ready +to accept data for output.</para> + +    <para>When streaming I/O has been negotiated this function waits +until a buffer has been filled or displayed and can be dequeued with +the &VIDIOC-DQBUF; ioctl. When buffers are already in the outgoing +queue of the driver the function returns immediately.</para> + +    <para>On success <function>select()</function> returns the total +number of bits set in the <structname>fd_set</structname>s. When the +function timed out it returns a value of zero. On failure it returns +<returnvalue>-1</returnvalue> and the <varname>errno</varname> +variable is set appropriately. When the application did not call +&VIDIOC-QBUF; or &VIDIOC-STREAMON; yet the +<function>select()</function> function succeeds, setting the bit of +the file descriptor in <parameter>readfds</parameter> or +<parameter>writefds</parameter>, but subsequent &VIDIOC-DQBUF; calls +will fail.<footnote><para>The Linux kernel implements +<function>select()</function> like the &func-poll; function, but +<function>select()</function> cannot return a +<constant>POLLERR</constant>.</para> +      </footnote></para> + +    <para>When use of the <function>read()</function> function has +been negotiated and the driver does not capture yet, the +<function>select()</function> function starts capturing. When that +fails, <function>select()</function> returns successful and a +subsequent <function>read()</function> call, which also attempts to +start capturing, will return an appropriate error code. When the +driver captures continuously (as opposed to, for example, still +images) and data is already available the +<function>select()</function> function returns immediately.</para> + +    <para>When use of the <function>write()</function> function has +been negotiated the <function>select()</function> function just waits +until the driver is ready for a non-blocking +<function>write()</function> call.</para> + +    <para>All drivers implementing the <function>read()</function> or +<function>write()</function> function or streaming I/O must also +support the <function>select()</function> function.</para> + +    <para>For more details see the <function>select()</function> +manual page.</para> + +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>On success, <function>select()</function> returns the number +of descriptors contained in the three returned descriptor sets, which +will be zero if the timeout expired. On error +<returnvalue>-1</returnvalue> is returned, and the +<varname>errno</varname> variable is set appropriately; the sets and +<parameter>timeout</parameter> are undefined. Possible error codes +are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para>One or more of the file descriptor sets specified a +file descriptor that is not open.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The driver does not support multiple read or write +streams and the device is already in use.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EFAULT</errorcode></term> +	<listitem> +	  <para>The <parameter>readfds</parameter>, +<parameter>writefds</parameter>, <parameter>exceptfds</parameter> or +<parameter>timeout</parameter> pointer references an inaccessible memory +area.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINTR</errorcode></term> +	<listitem> +	  <para>The call was interrupted by a signal.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <parameter>nfds</parameter> argument is less than +zero or greater than <constant>FD_SETSIZE</constant>.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/func-write.xml b/Documentation/DocBook/media/v4l/func-write.xml new file mode 100644 index 00000000000..57520788572 --- /dev/null +++ b/Documentation/DocBook/media/v4l/func-write.xml @@ -0,0 +1,128 @@ +<refentry id="func-write"> +  <refmeta> +    <refentrytitle>V4L2 write()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>v4l2-write</refname> +    <refpurpose>Write to a V4L2 device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>ssize_t <function>write</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>void *<parameter>buf</parameter></paramdef> +	<paramdef>size_t <parameter>count</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>buf</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>count</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para><function>write()</function> writes up to +<parameter>count</parameter> bytes to the device referenced by the +file descriptor <parameter>fd</parameter> from the buffer starting at +<parameter>buf</parameter>. When the hardware outputs are not active +yet, this function enables them. When <parameter>count</parameter> is +zero, <function>write()</function> returns +<returnvalue>0</returnvalue> without any other effect.</para> + +    <para>When the application does not provide more data in time, the +previous video frame, raw VBI image, sliced VPS or WSS data is +displayed again. Sliced Teletext or Closed Caption data is not +repeated, the driver inserts a blank line instead.</para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para>On success, the number of bytes written are returned. Zero +indicates nothing was written. On error, <returnvalue>-1</returnvalue> +is returned, and the <varname>errno</varname> variable is set +appropriately. In this case the next write will start at the beginning +of a new frame. Possible error codes are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EAGAIN</errorcode></term> +	<listitem> +	  <para>Non-blocking I/O has been selected using the <link +linkend="func-open"><constant>O_NONBLOCK</constant></link> flag and no +buffer space was available to write the data immediately.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para><parameter>fd</parameter> is not a valid file +descriptor or is not open for writing.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The driver does not support multiple write streams and the +device is already in use.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EFAULT</errorcode></term> +	<listitem> +	  <para><parameter>buf</parameter> references an inaccessible +memory area.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINTR</errorcode></term> +	<listitem> +	  <para>The call was interrupted by a signal before any +data was written.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EIO</errorcode></term> +	<listitem> +	  <para>I/O error. This indicates some hardware problem.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <function>write()</function> function is not +supported by this driver, not on this device, or generally not on this +type of device.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/gen-errors.xml b/Documentation/DocBook/media/v4l/gen-errors.xml new file mode 100644 index 00000000000..7e29a4e1f69 --- /dev/null +++ b/Documentation/DocBook/media/v4l/gen-errors.xml @@ -0,0 +1,77 @@ +<title>Generic Error Codes</title> + +<table frame="none" pgwide="1" id="gen-errors"> +  <title>Generic error codes</title> +  <tgroup cols="2"> +    &cs-str; +    <tbody valign="top"> +	<!-- Keep it ordered alphabetically --> +      <row> +	<entry>EAGAIN (aka EWOULDBLOCK)</entry> +	<entry>The ioctl can't be handled because the device is in state where +	       it can't perform it. This could happen for example in case where +	       device is sleeping and ioctl is performed to query statistics. +	       It is also returned when the ioctl would need to wait +	       for an event, but the device was opened in non-blocking mode. +	</entry> +      </row> +      <row> +	<entry>EBADF</entry> +	<entry>The file descriptor is not a valid.</entry> +      </row> +      <row> +	<entry>EBUSY</entry> +	<entry>The ioctl can't be handled because the device is busy. This is +	       typically return while device is streaming, and an ioctl tried to +	       change something that would affect the stream, or would require the +	       usage of a hardware resource that was already allocated. The ioctl +	       must not be retried without performing another action to fix the +	       problem first (typically: stop the stream before retrying).</entry> +      </row> +      <row> +	<entry>EFAULT</entry> +	<entry>There was a failure while copying data from/to userspace, +	       probably caused by an invalid pointer reference.</entry> +      </row> +      <row> +	<entry>EINVAL</entry> +	<entry>One or more of the ioctl parameters are invalid or out of the +	       allowed range. This is a widely used error code. See the individual +	       ioctl requests for specific causes.</entry> +      </row> +      <row> +        <entry>ENODEV</entry> +	<entry>Device not found or was removed.</entry> +      </row> +      <row> +	<entry>ENOMEM</entry> +	<entry>There's not enough memory to handle the desired operation.</entry> +      </row> +      <row> +	<entry>ENOTTY</entry> +	<entry>The ioctl is not supported by the driver, actually meaning that +	       the required functionality is not available, or the file +	       descriptor is not for a media device.</entry> +      </row> +      <row> +	<entry>ENOSPC</entry> +	<entry>On USB devices, the stream ioctl's can return this error, meaning +	       that this request would overcommit the usb bandwidth reserved +	       for periodic transfers (up to 80% of the USB bandwidth).</entry> +      </row> +      <row> +	<entry>EPERM</entry> +	<entry>Permission denied. Can be returned if the device needs write +		permission, or some special capabilities is needed +		(e. g. root)</entry> +      </row> +    </tbody> +  </tgroup> +</table> + +<para>Note 1: ioctls may return other error codes. Since errors may have side +effects such as a driver reset, applications should abort on unexpected errors. +</para> + +<para>Note 2: Request-specific error codes are listed in the individual +requests descriptions.</para> diff --git a/Documentation/DocBook/media/v4l/io.xml b/Documentation/DocBook/media/v4l/io.xml new file mode 100644 index 00000000000..a086a5db7a1 --- /dev/null +++ b/Documentation/DocBook/media/v4l/io.xml @@ -0,0 +1,1525 @@ +  <title>Input/Output</title> + +  <para>The V4L2 API defines several different methods to read from or +write to a device. All drivers exchanging data with applications must +support at least one of them.</para> + +  <para>The classic I/O method using the <function>read()</function> +and <function>write()</function> function is automatically selected +after opening a V4L2 device. When the driver does not support this +method attempts to read or write will fail at any time.</para> + +  <para>Other methods must be negotiated. To select the streaming I/O +method with memory mapped or user buffers applications call the +&VIDIOC-REQBUFS; ioctl. The asynchronous I/O method is not defined +yet.</para> + +  <para>Video overlay can be considered another I/O method, although +the application does not directly receive the image data. It is +selected by initiating video overlay with the &VIDIOC-S-FMT; ioctl. +For more information see <xref linkend="overlay" />.</para> + +  <para>Generally exactly one I/O method, including overlay, is +associated with each file descriptor. The only exceptions are +applications not exchanging data with a driver ("panel applications", +see <xref linkend="open" />) and drivers permitting simultaneous video capturing +and overlay using the same file descriptor, for compatibility with V4L +and earlier versions of V4L2.</para> + +  <para><constant>VIDIOC_S_FMT</constant> and +<constant>VIDIOC_REQBUFS</constant> would permit this to some degree, +but for simplicity drivers need not support switching the I/O method +(after first switching away from read/write) other than by closing +and reopening the device.</para> + +  <para>The following sections describe the various I/O methods in +more detail.</para> + +  <section id="rw"> +    <title>Read/Write</title> + +    <para>Input and output devices support the +<function>read()</function> and <function>write()</function> function, +respectively, when the <constant>V4L2_CAP_READWRITE</constant> flag in +the <structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl is set.</para> + +    <para>Drivers may need the CPU to copy the data, but they may also +support DMA to or from user memory, so this I/O method is not +necessarily less efficient than other methods merely exchanging buffer +pointers. It is considered inferior though because no meta-information +like frame counters or timestamps are passed. This information is +necessary to recognize frame dropping and to synchronize with other +data streams. However this is also the simplest I/O method, requiring +little or no setup to exchange data. It permits command line stunts +like this (the <application>vidctrl</application> tool is +fictitious):</para> + +    <informalexample> +      <screen> +> vidctrl /dev/video --input=0 --format=YUYV --size=352x288 +> dd if=/dev/video of=myimage.422 bs=202752 count=1 +</screen> +    </informalexample> + +    <para>To read from the device applications use the +&func-read; function, to write the &func-write; function. +Drivers must implement one I/O method if they +exchange data with applications, but it need not be this.<footnote> +	<para>It would be desirable if applications could depend on +drivers supporting all I/O interfaces, but as much as the complex +memory mapping I/O can be inadequate for some devices we have no +reason to require this interface, which is most useful for simple +applications capturing still images.</para> +      </footnote> When reading or writing is supported, the driver +must also support the &func-select; and &func-poll; +function.<footnote> +	<para>At the driver level <function>select()</function> and +<function>poll()</function> are the same, and +<function>select()</function> is too important to be optional.</para> +      </footnote></para> +  </section> + +  <section id="mmap"> +    <title>Streaming I/O (Memory Mapping)</title> + +    <para>Input and output devices support this I/O method when the +<constant>V4L2_CAP_STREAMING</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl is set. There are two +streaming methods, to determine if the memory mapping flavor is +supported applications must call the &VIDIOC-REQBUFS; ioctl.</para> + +    <para>Streaming is an I/O method where only pointers to buffers +are exchanged between application and driver, the data itself is not +copied. Memory mapping is primarily intended to map buffers in device +memory into the application's address space. Device memory can be for +example the video memory on a graphics card with a video capture +add-on. However, being the most efficient I/O method available for a +long time, many other drivers support streaming as well, allocating +buffers in DMA-able main memory.</para> + +    <para>A driver can support many sets of buffers. Each set is +identified by a unique buffer type value. The sets are independent and +each set can hold a different type of data. To access different sets +at the same time different file descriptors must be used.<footnote> +	<para>One could use one file descriptor and set the buffer +type field accordingly when calling &VIDIOC-QBUF; etc., but it makes +the <function>select()</function> function ambiguous. We also like the +clean approach of one file descriptor per logical stream. Video +overlay for example is also a logical stream, although the CPU is not +needed for continuous operation.</para> +      </footnote></para> + +    <para>To allocate device buffers applications call the +&VIDIOC-REQBUFS; ioctl with the desired number of buffers and buffer +type, for example <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>. +This ioctl can also be used to change the number of buffers or to free +the allocated memory, provided none of the buffers are still +mapped.</para> + +    <para>Before applications can access the buffers they must map +them into their address space with the &func-mmap; function. The +location of the buffers in device memory can be determined with the +&VIDIOC-QUERYBUF; ioctl. In the single-planar API case, the +<structfield>m.offset</structfield> and <structfield>length</structfield> +returned in a &v4l2-buffer; are passed as sixth and second parameter to the +<function>mmap()</function> function. When using the multi-planar API, +&v4l2-buffer; contains an array of &v4l2-plane; structures, each +containing its own <structfield>m.offset</structfield> and +<structfield>length</structfield>. When using the multi-planar API, every +plane of every buffer has to be mapped separately, so the number of +calls to &func-mmap; should be equal to number of buffers times number of +planes in each buffer. The offset and length values must not be modified. +Remember, the buffers are allocated in physical memory, as opposed to virtual +memory, which can be swapped out to disk. Applications should free the buffers +as soon as possible with the &func-munmap; function.</para> + +    <example> +      <title>Mapping buffers in the single-planar API</title> +      <programlisting> +&v4l2-requestbuffers; reqbuf; +struct { +	void *start; +	size_t length; +} *buffers; +unsigned int i; + +memset(&reqbuf, 0, sizeof(reqbuf)); +reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +reqbuf.memory = V4L2_MEMORY_MMAP; +reqbuf.count = 20; + +if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) { +	if (errno == EINVAL) +		printf("Video capturing or mmap-streaming is not supported\n"); +	else +		perror("VIDIOC_REQBUFS"); + +	exit(EXIT_FAILURE); +} + +/* We want at least five buffers. */ + +if (reqbuf.count < 5) { +	/* You may need to free the buffers here. */ +	printf("Not enough buffer memory\n"); +	exit(EXIT_FAILURE); +} + +buffers = calloc(reqbuf.count, sizeof(*buffers)); +assert(buffers != NULL); + +for (i = 0; i < reqbuf.count; i++) { +	&v4l2-buffer; buffer; + +	memset(&buffer, 0, sizeof(buffer)); +	buffer.type = reqbuf.type; +	buffer.memory = V4L2_MEMORY_MMAP; +	buffer.index = i; + +	if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) { +		perror("VIDIOC_QUERYBUF"); +		exit(EXIT_FAILURE); +	} + +	buffers[i].length = buffer.length; /* remember for munmap() */ + +	buffers[i].start = mmap(NULL, buffer.length, +				PROT_READ | PROT_WRITE, /* recommended */ +				MAP_SHARED,             /* recommended */ +				fd, buffer.m.offset); + +	if (MAP_FAILED == buffers[i].start) { +		/* If you do not exit here you should unmap() and free() +		   the buffers mapped so far. */ +		perror("mmap"); +		exit(EXIT_FAILURE); +	} +} + +/* Cleanup. */ + +for (i = 0; i < reqbuf.count; i++) +	munmap(buffers[i].start, buffers[i].length); +      </programlisting> +    </example> + +    <example> +      <title>Mapping buffers in the multi-planar API</title> +      <programlisting> +&v4l2-requestbuffers; reqbuf; +/* Our current format uses 3 planes per buffer */ +#define FMT_NUM_PLANES = 3 + +struct { +	void *start[FMT_NUM_PLANES]; +	size_t length[FMT_NUM_PLANES]; +} *buffers; +unsigned int i, j; + +memset(&reqbuf, 0, sizeof(reqbuf)); +reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; +reqbuf.memory = V4L2_MEMORY_MMAP; +reqbuf.count = 20; + +if (ioctl(fd, &VIDIOC-REQBUFS;, &reqbuf) < 0) { +	if (errno == EINVAL) +		printf("Video capturing or mmap-streaming is not supported\n"); +	else +		perror("VIDIOC_REQBUFS"); + +	exit(EXIT_FAILURE); +} + +/* We want at least five buffers. */ + +if (reqbuf.count < 5) { +	/* You may need to free the buffers here. */ +	printf("Not enough buffer memory\n"); +	exit(EXIT_FAILURE); +} + +buffers = calloc(reqbuf.count, sizeof(*buffers)); +assert(buffers != NULL); + +for (i = 0; i < reqbuf.count; i++) { +	&v4l2-buffer; buffer; +	&v4l2-plane; planes[FMT_NUM_PLANES]; + +	memset(&buffer, 0, sizeof(buffer)); +	buffer.type = reqbuf.type; +	buffer.memory = V4L2_MEMORY_MMAP; +	buffer.index = i; +	/* length in struct v4l2_buffer in multi-planar API stores the size +	 * of planes array. */ +	buffer.length = FMT_NUM_PLANES; +	buffer.m.planes = planes; + +	if (ioctl(fd, &VIDIOC-QUERYBUF;, &buffer) < 0) { +		perror("VIDIOC_QUERYBUF"); +		exit(EXIT_FAILURE); +	} + +	/* Every plane has to be mapped separately */ +	for (j = 0; j < FMT_NUM_PLANES; j++) { +		buffers[i].length[j] = buffer.m.planes[j].length; /* remember for munmap() */ + +		buffers[i].start[j] = mmap(NULL, buffer.m.planes[j].length, +				 PROT_READ | PROT_WRITE, /* recommended */ +				 MAP_SHARED,             /* recommended */ +				 fd, buffer.m.planes[j].m.offset); + +		if (MAP_FAILED == buffers[i].start[j]) { +			/* If you do not exit here you should unmap() and free() +			   the buffers and planes mapped so far. */ +			perror("mmap"); +			exit(EXIT_FAILURE); +		} +	} +} + +/* Cleanup. */ + +for (i = 0; i < reqbuf.count; i++) +	for (j = 0; j < FMT_NUM_PLANES; j++) +		munmap(buffers[i].start[j], buffers[i].length[j]); +      </programlisting> +    </example> + +    <para>Conceptually streaming drivers maintain two buffer queues, an incoming +and an outgoing queue. They separate the synchronous capture or output +operation locked to a video clock from the application which is +subject to random disk or network delays and preemption by +other processes, thereby reducing the probability of data loss. +The queues are organized as FIFOs, buffers will be +output in the order enqueued in the incoming FIFO, and were +captured in the order dequeued from the outgoing FIFO.</para> + +    <para>The driver may require a minimum number of buffers enqueued +at all times to function, apart of this no limit exists on the number +of buffers applications can enqueue in advance, or dequeue and +process. They can also enqueue in a different order than buffers have +been dequeued, and the driver can <emphasis>fill</emphasis> enqueued +<emphasis>empty</emphasis> buffers in any order. <footnote> +	<para>Random enqueue order permits applications processing +images out of order (such as video codecs) to return buffers earlier, +reducing the probability of data loss. Random fill order allows +drivers to reuse buffers on a LIFO-basis, taking advantage of caches +holding scatter-gather lists and the like.</para> +      </footnote> The index number of a buffer (&v4l2-buffer; +<structfield>index</structfield>) plays no role here, it only +identifies the buffer.</para> + +    <para>Initially all mapped buffers are in dequeued state, +inaccessible by the driver. For capturing applications it is customary +to first enqueue all mapped buffers, then to start capturing and enter +the read loop. Here the application waits until a filled buffer can be +dequeued, and re-enqueues the buffer when the data is no longer +needed. Output applications fill and enqueue buffers, when enough +buffers are stacked up the output is started with +<constant>VIDIOC_STREAMON</constant>. In the write loop, when +the application runs out of free buffers, it must wait until an empty +buffer can be dequeued and reused.</para> + +    <para>To enqueue and dequeue a buffer applications use the +&VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. The status of a buffer being +mapped, enqueued, full or empty can be determined at any time using the +&VIDIOC-QUERYBUF; ioctl. Two methods exist to suspend execution of the +application until one or more buffers can be dequeued. By default +<constant>VIDIOC_DQBUF</constant> blocks when no buffer is in the +outgoing queue. When the <constant>O_NONBLOCK</constant> flag was +given to the &func-open; function, <constant>VIDIOC_DQBUF</constant> +returns immediately with an &EAGAIN; when no buffer is available. The +&func-select; or &func-poll; functions are always available.</para> + +    <para>To start and stop capturing or output applications call the +&VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; ioctl. Note +<constant>VIDIOC_STREAMOFF</constant> removes all buffers from both +queues as a side effect. Since there is no notion of doing anything +"now" on a multitasking system, if an application needs to synchronize +with another event it should examine the &v4l2-buffer; +<structfield>timestamp</structfield> of captured or outputted buffers. +</para> + +    <para>Drivers implementing memory mapping I/O must +support the <constant>VIDIOC_REQBUFS</constant>, +<constant>VIDIOC_QUERYBUF</constant>, +<constant>VIDIOC_QBUF</constant>, <constant>VIDIOC_DQBUF</constant>, +<constant>VIDIOC_STREAMON</constant> and +<constant>VIDIOC_STREAMOFF</constant> ioctl, the +<function>mmap()</function>, <function>munmap()</function>, +<function>select()</function> and <function>poll()</function> +function.<footnote> +	<para>At the driver level <function>select()</function> and +<function>poll()</function> are the same, and +<function>select()</function> is too important to be optional. The +rest should be evident.</para> +      </footnote></para> + +    <para>[capture example]</para> + +  </section> + +  <section id="userp"> +    <title>Streaming I/O (User Pointers)</title> + +    <para>Input and output devices support this I/O method when the +<constant>V4L2_CAP_STREAMING</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; +returned by the &VIDIOC-QUERYCAP; ioctl is set. If the particular user +pointer method (not only memory mapping) is supported must be +determined by calling the &VIDIOC-REQBUFS; ioctl.</para> + +    <para>This I/O method combines advantages of the read/write and +memory mapping methods. Buffers (planes) are allocated by the application +itself, and can reside for example in virtual or shared memory. Only +pointers to data are exchanged, these pointers and meta-information +are passed in &v4l2-buffer; (or in &v4l2-plane; in the multi-planar API case). +The driver must be switched into user pointer I/O mode by calling the +&VIDIOC-REQBUFS; with the desired buffer type. No buffers (planes) are allocated +beforehand, consequently they are not indexed and cannot be queried like mapped +buffers with the <constant>VIDIOC_QUERYBUF</constant> ioctl.</para> + +    <example> +      <title>Initiating streaming I/O with user pointers</title> + +      <programlisting> +&v4l2-requestbuffers; reqbuf; + +memset (&reqbuf, 0, sizeof (reqbuf)); +reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +reqbuf.memory = V4L2_MEMORY_USERPTR; + +if (ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) { +	if (errno == EINVAL) +		printf ("Video capturing or user pointer streaming is not supported\n"); +	else +		perror ("VIDIOC_REQBUFS"); + +	exit (EXIT_FAILURE); +} +      </programlisting> +    </example> + +    <para>Buffer (plane) addresses and sizes are passed on the fly with the +&VIDIOC-QBUF; ioctl. Although buffers are commonly cycled, +applications can pass different addresses and sizes at each +<constant>VIDIOC_QBUF</constant> call. If required by the hardware the +driver swaps memory pages within physical memory to create a +continuous area of memory. This happens transparently to the +application in the virtual memory subsystem of the kernel. When buffer +pages have been swapped out to disk they are brought back and finally +locked in physical memory for DMA.<footnote> +	<para>We expect that frequently used buffers are typically not +swapped out. Anyway, the process of swapping, locking or generating +scatter-gather lists may be time consuming. The delay can be masked by +the depth of the incoming buffer queue, and perhaps by maintaining +caches assuming a buffer will be soon enqueued again. On the other +hand, to optimize memory usage drivers can limit the number of buffers +locked in advance and recycle the most recently used buffers first. Of +course, the pages of empty buffers in the incoming queue need not be +saved to disk. Output buffers must be saved on the incoming and +outgoing queue because an application may share them with other +processes.</para> +      </footnote></para> + +    <para>Filled or displayed buffers are dequeued with the +&VIDIOC-DQBUF; ioctl. The driver can unlock the memory pages at any +time between the completion of the DMA and this ioctl. The memory is +also unlocked when &VIDIOC-STREAMOFF; is called, &VIDIOC-REQBUFS;, or +when the device is closed. Applications must take care not to free +buffers without dequeuing. For once, the buffers remain locked until +further, wasting physical memory. Second the driver will not be +notified when the memory is returned to the application's free list +and subsequently reused for other purposes, possibly completing the +requested DMA and overwriting valuable data.</para> + +    <para>For capturing applications it is customary to enqueue a +number of empty buffers, to start capturing and enter the read loop. +Here the application waits until a filled buffer can be dequeued, and +re-enqueues the buffer when the data is no longer needed. Output +applications fill and enqueue buffers, when enough buffers are stacked +up output is started. In the write loop, when the application +runs out of free buffers it must wait until an empty buffer can be +dequeued and reused. Two methods exist to suspend execution of the +application until one or more buffers can be dequeued. By default +<constant>VIDIOC_DQBUF</constant> blocks when no buffer is in the +outgoing queue. When the <constant>O_NONBLOCK</constant> flag was +given to the &func-open; function, <constant>VIDIOC_DQBUF</constant> +returns immediately with an &EAGAIN; when no buffer is available. The +&func-select; or &func-poll; function are always available.</para> + +    <para>To start and stop capturing or output applications call the +&VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; ioctl. Note +<constant>VIDIOC_STREAMOFF</constant> removes all buffers from both +queues and unlocks all buffers as a side effect. Since there is no +notion of doing anything "now" on a multitasking system, if an +application needs to synchronize with another event it should examine +the &v4l2-buffer; <structfield>timestamp</structfield> of captured +or outputted buffers.</para> + +    <para>Drivers implementing user pointer I/O must +support the <constant>VIDIOC_REQBUFS</constant>, +<constant>VIDIOC_QBUF</constant>, <constant>VIDIOC_DQBUF</constant>, +<constant>VIDIOC_STREAMON</constant> and +<constant>VIDIOC_STREAMOFF</constant> ioctl, the +<function>select()</function> and <function>poll()</function> function.<footnote> +	<para>At the driver level <function>select()</function> and +<function>poll()</function> are the same, and +<function>select()</function> is too important to be optional. The +rest should be evident.</para> +      </footnote></para> +  </section> + +  <section id="dmabuf"> +    <title>Streaming I/O (DMA buffer importing)</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +<para>The DMABUF framework provides a generic method for sharing buffers +between multiple devices. Device drivers that support DMABUF can export a DMA +buffer to userspace as a file descriptor (known as the exporter role), import a +DMA buffer from userspace using a file descriptor previously exported for a +different or the same device (known as the importer role), or both. This +section describes the DMABUF importer role API in V4L2.</para> + +    <para>Refer to <link linkend="vidioc-expbuf">DMABUF exporting</link> for +details about exporting V4L2 buffers as DMABUF file descriptors.</para> + +<para>Input and output devices support the streaming I/O method when the +<constant>V4L2_CAP_STREAMING</constant> flag in the +<structfield>capabilities</structfield> field of &v4l2-capability; returned by +the &VIDIOC-QUERYCAP; ioctl is set. Whether importing DMA buffers through +DMABUF file descriptors is supported is determined by calling the +&VIDIOC-REQBUFS; ioctl with the memory type set to +<constant>V4L2_MEMORY_DMABUF</constant>.</para> + +    <para>This I/O method is dedicated to sharing DMA buffers between different +devices, which may be V4L devices or other video-related devices (e.g. DRM). +Buffers (planes) are allocated by a driver on behalf of an application. Next, +these buffers are exported to the application as file descriptors using an API +which is specific for an allocator driver.  Only such file descriptor are +exchanged. The descriptors and meta-information are passed in &v4l2-buffer; (or +in &v4l2-plane; in the multi-planar API case).  The driver must be switched +into DMABUF I/O mode by calling the &VIDIOC-REQBUFS; with the desired buffer +type.</para> + +    <example> +      <title>Initiating streaming I/O with DMABUF file descriptors</title> + +      <programlisting> +&v4l2-requestbuffers; reqbuf; + +memset(&reqbuf, 0, sizeof (reqbuf)); +reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +reqbuf.memory = V4L2_MEMORY_DMABUF; +reqbuf.count = 1; + +if (ioctl(fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) { +	if (errno == EINVAL) +		printf("Video capturing or DMABUF streaming is not supported\n"); +	else +		perror("VIDIOC_REQBUFS"); + +	exit(EXIT_FAILURE); +} +      </programlisting> +    </example> + +    <para>The buffer (plane) file descriptor is passed on the fly with the +&VIDIOC-QBUF; ioctl. In case of multiplanar buffers, every plane can be +associated with a different DMABUF descriptor. Although buffers are commonly +cycled, applications can pass a different DMABUF descriptor at each +<constant>VIDIOC_QBUF</constant> call.</para> + +    <example> +      <title>Queueing DMABUF using single plane API</title> + +      <programlisting> +int buffer_queue(int v4lfd, int index, int dmafd) +{ +	&v4l2-buffer; buf; + +	memset(&buf, 0, sizeof buf); +	buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +	buf.memory = V4L2_MEMORY_DMABUF; +	buf.index = index; +	buf.m.fd = dmafd; + +	if (ioctl(v4lfd, &VIDIOC-QBUF;, &buf) == -1) { +		perror("VIDIOC_QBUF"); +		return -1; +	} + +	return 0; +} +      </programlisting> +    </example> + +    <example> +      <title>Queueing DMABUF using multi plane API</title> + +      <programlisting> +int buffer_queue_mp(int v4lfd, int index, int dmafd[], int n_planes) +{ +	&v4l2-buffer; buf; +	&v4l2-plane; planes[VIDEO_MAX_PLANES]; +	int i; + +	memset(&buf, 0, sizeof buf); +	buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; +	buf.memory = V4L2_MEMORY_DMABUF; +	buf.index = index; +	buf.m.planes = planes; +	buf.length = n_planes; + +	memset(&planes, 0, sizeof planes); + +	for (i = 0; i < n_planes; ++i) +		buf.m.planes[i].m.fd = dmafd[i]; + +	if (ioctl(v4lfd, &VIDIOC-QBUF;, &buf) == -1) { +		perror("VIDIOC_QBUF"); +		return -1; +	} + +	return 0; +} +      </programlisting> +    </example> + +    <para>Captured or displayed buffers are dequeued with the +&VIDIOC-DQBUF; ioctl. The driver can unlock the buffer at any +time between the completion of the DMA and this ioctl. The memory is +also unlocked when &VIDIOC-STREAMOFF; is called, &VIDIOC-REQBUFS;, or +when the device is closed.</para> + +    <para>For capturing applications it is customary to enqueue a +number of empty buffers, to start capturing and enter the read loop. +Here the application waits until a filled buffer can be dequeued, and +re-enqueues the buffer when the data is no longer needed. Output +applications fill and enqueue buffers, when enough buffers are stacked +up output is started. In the write loop, when the application +runs out of free buffers it must wait until an empty buffer can be +dequeued and reused. Two methods exist to suspend execution of the +application until one or more buffers can be dequeued. By default +<constant>VIDIOC_DQBUF</constant> blocks when no buffer is in the +outgoing queue. When the <constant>O_NONBLOCK</constant> flag was +given to the &func-open; function, <constant>VIDIOC_DQBUF</constant> +returns immediately with an &EAGAIN; when no buffer is available. The +&func-select; and &func-poll; functions are always available.</para> + +    <para>To start and stop capturing or displaying applications call the +&VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; ioctls. Note that +<constant>VIDIOC_STREAMOFF</constant> removes all buffers from both queues and +unlocks all buffers as a side effect. Since there is no notion of doing +anything "now" on a multitasking system, if an application needs to synchronize +with another event it should examine the &v4l2-buffer; +<structfield>timestamp</structfield> of captured or outputted buffers.</para> + +    <para>Drivers implementing DMABUF importing I/O must support the +<constant>VIDIOC_REQBUFS</constant>, <constant>VIDIOC_QBUF</constant>, +<constant>VIDIOC_DQBUF</constant>, <constant>VIDIOC_STREAMON</constant> and +<constant>VIDIOC_STREAMOFF</constant> ioctls, and the +<function>select()</function> and <function>poll()</function> functions.</para> + +  </section> + +  <section id="async"> +    <title>Asynchronous I/O</title> + +    <para>This method is not defined yet.</para> +  </section> + +  <section id="buffer"> +    <title>Buffers</title> + +    <para>A buffer contains data exchanged by application and +driver using one of the Streaming I/O methods. In the multi-planar API, the +data is held in planes, while the buffer structure acts as a container +for the planes. Only pointers to buffers (planes) are exchanged, the data +itself is not copied. These pointers, together with meta-information like +timestamps or field parity, are stored in a struct +<structname>v4l2_buffer</structname>, argument to +the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. +In the multi-planar API, some plane-specific members of struct +<structname>v4l2_buffer</structname>, such as pointers and sizes for each +plane, are stored in struct <structname>v4l2_plane</structname> instead. +In that case, struct <structname>v4l2_buffer</structname> contains an array of +plane structures.</para> + +    <para>Dequeued video buffers come with timestamps. The driver +    decides at which part of the frame and with which clock the +    timestamp is taken. Please see flags in the masks +    <constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant> and +    <constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant> in <xref +    linkend="buffer-flags" />. These flags are always valid and constant +    across all buffers during the whole video stream. Changes in these +    flags may take place as a side effect of &VIDIOC-S-INPUT; or +    &VIDIOC-S-OUTPUT; however. The +    <constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant> timestamp type +    which is used by e.g. on mem-to-mem devices is an exception to the +    rule: the timestamp source flags are copied from the OUTPUT video +    buffer to the CAPTURE video buffer.</para> + +    <table frame="none" pgwide="1" id="v4l2-buffer"> +      <title>struct <structname>v4l2_buffer</structname></title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry></entry> +	    <entry>Number of the buffer, set by the application except +when calling &VIDIOC-DQBUF;, then it is set by the driver. +This field can range from zero to the number of buffers allocated +with the &VIDIOC-REQBUFS; ioctl (&v4l2-requestbuffers; <structfield>count</structfield>), +plus any buffers allocated with &VIDIOC-CREATE-BUFS; minus one.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>Type of the buffer, same as &v4l2-format; +<structfield>type</structfield> or &v4l2-requestbuffers; +<structfield>type</structfield>, set by the application. See <xref +linkend="v4l2-buf-type" /></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>bytesused</structfield></entry> +	    <entry></entry> +	    <entry>The number of bytes occupied by the data in the +buffer. It depends on the negotiated data format and may change with +each buffer for compressed variable size data like JPEG images. +Drivers must set this field when <structfield>type</structfield> +refers to an input stream, applications when it refers to an output stream. +If the application sets this to 0 for an output stream, then +<structfield>bytesused</structfield> will be set to the size of the +buffer (see the <structfield>length</structfield> field of this struct) by +the driver. For multiplanar formats this field is ignored and the +<structfield>planes</structfield> pointer is used instead.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry></entry> +	    <entry>Flags set by the application or driver, see <xref +linkend="buffer-flags" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>field</structfield></entry> +	    <entry></entry> +	    <entry>Indicates the field order of the image in the +buffer, see <xref linkend="v4l2-field" />. This field is not used when +the buffer contains VBI data. Drivers must set it when +<structfield>type</structfield> refers to an input stream, +applications when it refers to an output stream.</entry> +	  </row> +	  <row> +	    <entry>struct timeval</entry> +	    <entry><structfield>timestamp</structfield></entry> +	    <entry></entry> +	    <entry><para>For input streams this is time when the first data +	    byte was captured, as returned by the +	    <function>clock_gettime()</function> function for the relevant +	    clock id; see <constant>V4L2_BUF_FLAG_TIMESTAMP_*</constant> in +	    <xref linkend="buffer-flags" />. For output streams the driver +	    stores the time at which the last data byte was actually sent out +	    in the  <structfield>timestamp</structfield> field. This permits +	    applications to monitor the drift between the video and system +	    clock. For output streams that use <constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant> +	    the application has to fill in the timestamp which will be copied +	    by the driver to the capture stream.</para></entry> +	  </row> +	  <row> +	    <entry>&v4l2-timecode;</entry> +	    <entry><structfield>timecode</structfield></entry> +	    <entry></entry> +	    <entry>When <structfield>type</structfield> is +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> and the +<constant>V4L2_BUF_FLAG_TIMECODE</constant> flag is set in +<structfield>flags</structfield>, this structure contains a frame +timecode. In <link linkend="v4l2-field">V4L2_FIELD_ALTERNATE</link> +mode the top and bottom field contain the same timecode. +Timecodes are intended to help video editing and are typically recorded on +video tapes, but also embedded in compressed formats like MPEG. This +field is independent of the <structfield>timestamp</structfield> and +<structfield>sequence</structfield> fields.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>sequence</structfield></entry> +	    <entry></entry> +	    <entry>Set by the driver, counting the frames (not fields!) in +sequence. This field is set for both input and output devices.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para>In <link +linkend="v4l2-field">V4L2_FIELD_ALTERNATE</link> mode the top and +bottom field have the same sequence number. The count starts at zero +and includes dropped or repeated frames. A dropped frame was received +by an input device but could not be stored due to lack of free buffer +space. A repeated frame was displayed again by an output device +because the application did not pass new data in +time.</para><para>Note this may count the frames received +e.g. over USB, without taking into account the frames dropped by the +remote hardware due to limited compression throughput or bus +bandwidth. These devices identify by not enumerating any video +standards, see <xref linkend="standard" />.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>memory</structfield></entry> +	    <entry></entry> +	    <entry>This field must be set by applications and/or drivers +in accordance with the selected I/O method. See <xref linkend="v4l2-memory" +	    /></entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield>m</structfield></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>offset</structfield></entry> +	    <entry>For the single-planar API and when +<structfield>memory</structfield> is <constant>V4L2_MEMORY_MMAP</constant> this +is the offset of the buffer from the start of the device memory. The value is +returned by the driver and apart of serving as parameter to the &func-mmap; +function not useful for applications. See <xref linkend="mmap" /> for details +	  </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>unsigned long</entry> +	    <entry><structfield>userptr</structfield></entry> +	    <entry>For the single-planar API and when +<structfield>memory</structfield> is <constant>V4L2_MEMORY_USERPTR</constant> +this is a pointer to the buffer (casted to unsigned long type) in virtual +memory, set by the application. See <xref linkend="userp" /> for details. +	    </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct v4l2_plane</entry> +	    <entry><structfield>*planes</structfield></entry> +	    <entry>When using the multi-planar API, contains a userspace pointer +	    to an array of &v4l2-plane;. The size of the array should be put +	    in the <structfield>length</structfield> field of this +	    <structname>v4l2_buffer</structname> structure.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>int</entry> +	    <entry><structfield>fd</structfield></entry> +	    <entry>For the single-plane API and when +<structfield>memory</structfield> is <constant>V4L2_MEMORY_DMABUF</constant> this +is the file descriptor associated with a DMABUF buffer.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>length</structfield></entry> +	    <entry></entry> +	    <entry>Size of the buffer (not the payload) in bytes for the +	    single-planar API. This is set by the driver based on the calls to +	    &VIDIOC-REQBUFS; and/or &VIDIOC-CREATE-BUFS;. For the multi-planar API the application sets +	    this to the number of elements in the <structfield>planes</structfield> +	    array. The driver will fill in the actual number of valid elements in +	    that array. +	    </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved2</structfield></entry> +	    <entry></entry> +	    <entry>A place holder for future extensions. Applications +should set this to 0.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield></entry> +	    <entry></entry> +	    <entry>A place holder for future extensions. Applications +should set this to 0.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-plane"> +      <title>struct <structname>v4l2_plane</structname></title> +      <tgroup cols="4"> +        &cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>bytesused</structfield></entry> +	    <entry></entry> +	    <entry>The number of bytes occupied by data in the plane +	      (its payload). Drivers must set this field when <structfield>type</structfield> +	      refers to an input stream, applications when it refers to an output stream. +	      If the application sets this to 0 for an output stream, then +	      <structfield>bytesused</structfield> will be set to the size of the +	      plane (see the <structfield>length</structfield> field of this struct) +	      by the driver.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>length</structfield></entry> +	    <entry></entry> +	    <entry>Size in bytes of the plane (not its payload). This is set by the driver +	    based on the calls to &VIDIOC-REQBUFS; and/or &VIDIOC-CREATE-BUFS;.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield>m</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>mem_offset</structfield></entry> +	    <entry>When the memory type in the containing &v4l2-buffer; is +	      <constant>V4L2_MEMORY_MMAP</constant>, this is the value that +	      should be passed to &func-mmap;, similar to the +	      <structfield>offset</structfield> field in &v4l2-buffer;.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>unsigned long</entry> +	    <entry><structfield>userptr</structfield></entry> +	    <entry>When the memory type in the containing &v4l2-buffer; is +	      <constant>V4L2_MEMORY_USERPTR</constant>, this is a userspace +	      pointer to the memory allocated for this plane by an application. +	      </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>int</entry> +	    <entry><structfield>fd</structfield></entry> +	    <entry>When the memory type in the containing &v4l2-buffer; is +		<constant>V4L2_MEMORY_DMABUF</constant>, this is a file +		descriptor associated with a DMABUF buffer, similar to the +		<structfield>fd</structfield> field in &v4l2-buffer;.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>data_offset</structfield></entry> +	    <entry></entry> +	    <entry>Offset in bytes to video data in the plane. +	      Drivers must set this field when <structfield>type</structfield> +	      refers to an input stream, applications when it refers to an output stream. +	    </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved[11]</structfield></entry> +	    <entry></entry> +	    <entry>Reserved for future use. Should be zeroed by an +	    application.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-buf-type"> +      <title>enum v4l2_buf_type</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry> +	    <entry>1</entry> +	    <entry>Buffer of a single-planar video capture stream, see <xref +		linkend="capture" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> +	    </entry> +	    <entry>9</entry> +	    <entry>Buffer of a multi-planar video capture stream, see <xref +		linkend="capture" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry> +	    <entry>2</entry> +	    <entry>Buffer of a single-planar video output stream, see <xref +		linkend="output" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> +	    </entry> +	    <entry>10</entry> +	    <entry>Buffer of a multi-planar video output stream, see <xref +		linkend="output" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant></entry> +	    <entry>3</entry> +	    <entry>Buffer for video overlay, see <xref linkend="overlay" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VBI_CAPTURE</constant></entry> +	    <entry>4</entry> +	    <entry>Buffer of a raw VBI capture stream, see <xref +		linkend="raw-vbi" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant></entry> +	    <entry>5</entry> +	    <entry>Buffer of a raw VBI output stream, see <xref +		linkend="raw-vbi" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant></entry> +	    <entry>6</entry> +	    <entry>Buffer of a sliced VBI capture stream, see <xref +		linkend="sliced" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant></entry> +	    <entry>7</entry> +	    <entry>Buffer of a sliced VBI output stream, see <xref +		linkend="sliced" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant></entry> +	    <entry>8</entry> +	    <entry>Buffer for video output overlay (OSD), see <xref +		linkend="osd" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_TYPE_SDR_CAPTURE</constant></entry> +	    <entry>11</entry> +	    <entry>Buffer for Software Defined Radio (SDR), see <xref +		linkend="sdr" />.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="buffer-flags"> +      <title>Buffer Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_MAPPED</constant></entry> +	    <entry>0x00000001</entry> +	    <entry>The buffer resides in device memory and has been mapped +into the application's address space, see <xref linkend="mmap" /> for details. +Drivers set or clear this flag when the +<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link>, <link +	  linkend="vidioc-qbuf">VIDIOC_QBUF</link> or <link +	  linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl is called. Set by the driver.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_QUEUED</constant></entry> +	    <entry>0x00000002</entry> +	  <entry>Internally drivers maintain two buffer queues, an +incoming and outgoing queue. When this flag is set, the buffer is +currently on the incoming queue. It automatically moves to the +outgoing queue after the buffer has been filled (capture devices) or +displayed (output devices). Drivers set or clear this flag when the +<constant>VIDIOC_QUERYBUF</constant> ioctl is called. After +(successful) calling the <constant>VIDIOC_QBUF </constant>ioctl it is +always set and after <constant>VIDIOC_DQBUF</constant> always +cleared.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_DONE</constant></entry> +	    <entry>0x00000004</entry> +	    <entry>When this flag is set, the buffer is currently on +the outgoing queue, ready to be dequeued from the driver. Drivers set +or clear this flag when the <constant>VIDIOC_QUERYBUF</constant> ioctl +is called. After calling the <constant>VIDIOC_QBUF</constant> or +<constant>VIDIOC_DQBUF</constant> it is always cleared. Of course a +buffer cannot be on both queues at the same time, the +<constant>V4L2_BUF_FLAG_QUEUED</constant> and +<constant>V4L2_BUF_FLAG_DONE</constant> flag are mutually exclusive. +They can be both cleared however, then the buffer is in "dequeued" +state, in the application domain so to say.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_ERROR</constant></entry> +	    <entry>0x00000040</entry> +	    <entry>When this flag is set, the buffer has been dequeued +	    successfully, although the data might have been corrupted. +	    This is recoverable, streaming may continue as normal and +	    the buffer may be reused normally. +	    Drivers set this flag when the <constant>VIDIOC_DQBUF</constant> +	    ioctl is called.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_KEYFRAME</constant></entry> +	    <entry>0x00000008</entry> +	  <entry>Drivers set or clear this flag when calling the +<constant>VIDIOC_DQBUF</constant> ioctl. It may be set by video +capture devices when the buffer contains a compressed image which is a +key frame (or field), &ie; can be decompressed on its own. Also know as +an I-frame.  Applications can set this bit when <structfield>type</structfield> +refers to an output stream.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_PFRAME</constant></entry> +	    <entry>0x00000010</entry> +	    <entry>Similar to <constant>V4L2_BUF_FLAG_KEYFRAME</constant> +this flags predicted frames or fields which contain only differences to a +previous key frame. Applications can set this bit when <structfield>type</structfield> +refers to an output stream.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_BFRAME</constant></entry> +	    <entry>0x00000020</entry> +	    <entry>Similar to <constant>V4L2_BUF_FLAG_KEYFRAME</constant> +this flags a bi-directional predicted frame or field which contains only +the differences between the current frame and both the preceding and following +key frames to specify its content. Applications can set this bit when +<structfield>type</structfield> refers to an output stream.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TIMECODE</constant></entry> +	    <entry>0x00000100</entry> +	    <entry>The <structfield>timecode</structfield> field is valid. +Drivers set or clear this flag when the <constant>VIDIOC_DQBUF</constant> +ioctl is called.  Applications can set this bit and the corresponding +<structfield>timecode</structfield> structure when <structfield>type</structfield> +refers to an output stream.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_PREPARED</constant></entry> +	    <entry>0x00000400</entry> +	    <entry>The buffer has been prepared for I/O and can be queued by the +application. Drivers set or clear this flag when the +<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link>, <link +	  linkend="vidioc-qbuf">VIDIOC_PREPARE_BUF</link>, <link +	  linkend="vidioc-qbuf">VIDIOC_QBUF</link> or <link +	  linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl is called.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant></entry> +	    <entry>0x00000800</entry> +	    <entry>Caches do not have to be invalidated for this buffer. +Typically applications shall use this flag if the data captured in the buffer +is not going to be touched by the CPU, instead the buffer will, probably, be +passed on to a DMA-capable hardware unit for further processing or output. +</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant></entry> +	    <entry>0x00001000</entry> +	    <entry>Caches do not have to be cleaned for this buffer. +Typically applications shall use this flag for output buffers if the data +in this buffer has not been created by the CPU but by some DMA-capable unit, +in which case caches have not been used.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MASK</constant></entry> +	    <entry>0x0000e000</entry> +	    <entry>Mask for timestamp types below. To test the +	    timestamp type, mask out bits not belonging to timestamp +	    type by performing a logical and operation with buffer +	    flags and timestamp mask.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN</constant></entry> +	    <entry>0x00000000</entry> +	    <entry>Unknown timestamp type. This type is used by +	    drivers before Linux 3.9 and may be either monotonic (see +	    below) or realtime (wall clock). Monotonic clock has been +	    favoured in embedded systems whereas most of the drivers +	    use the realtime clock. Either kinds of timestamps are +	    available in user space via +	    <function>clock_gettime(2)</function> using clock IDs +	    <constant>CLOCK_MONOTONIC</constant> and +	    <constant>CLOCK_REALTIME</constant>, respectively.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC</constant></entry> +	    <entry>0x00002000</entry> +	    <entry>The buffer timestamp has been taken from the +	    <constant>CLOCK_MONOTONIC</constant> clock. To access the +	    same clock outside V4L2, use +	    <function>clock_gettime(2)</function> .</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant></entry> +	    <entry>0x00004000</entry> +	    <entry>The CAPTURE buffer timestamp has been taken from the +	    corresponding OUTPUT buffer. This flag applies only to mem2mem devices.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant></entry> +	    <entry>0x00070000</entry> +	    <entry>Mask for timestamp sources below. The timestamp source +	    defines the point of time the timestamp is taken in relation to +	    the frame. Logical 'and' operation between the +	    <structfield>flags</structfield> field and +	    <constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant> produces the +	    value of the timestamp source. Applications must set the timestamp +	    source when <structfield>type</structfield> refers to an output stream +	    and <constant>V4L2_BUF_FLAG_TIMESTAMP_COPY</constant> is set.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_EOF</constant></entry> +	    <entry>0x00000000</entry> +	    <entry>End Of Frame. The buffer timestamp has been taken +	    when the last pixel of the frame has been received or the +	    last pixel of the frame has been transmitted. In practice, +	    software generated timestamps will typically be read from +	    the clock a small amount of time after the last pixel has +	    been received or transmitten, depending on the system and +	    other activity in it.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_SOE</constant></entry> +	    <entry>0x00010000</entry> +	    <entry>Start Of Exposure. The buffer timestamp has been +	    taken when the exposure of the frame has begun. This is +	    only valid for the +	    <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> buffer +	    type.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-memory"> +      <title>enum v4l2_memory</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_MEMORY_MMAP</constant></entry> +	    <entry>1</entry> +	    <entry>The buffer is used for <link linkend="mmap">memory +mapping</link> I/O.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MEMORY_USERPTR</constant></entry> +	    <entry>2</entry> +	    <entry>The buffer is used for <link linkend="userp">user +pointer</link> I/O.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MEMORY_OVERLAY</constant></entry> +	    <entry>3</entry> +	    <entry>[to do]</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_MEMORY_DMABUF</constant></entry> +	    <entry>4</entry> +	    <entry>The buffer is used for <link linkend="dmabuf">DMA shared +buffer</link> I/O.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <section> +      <title>Timecodes</title> + +      <para>The <structname>v4l2_timecode</structname> structure is +designed to hold a <xref linkend="smpte12m" /> or similar timecode. +(struct <structname>timeval</structname> timestamps are stored in +&v4l2-buffer; field <structfield>timestamp</structfield>.)</para> + +      <table frame="none" pgwide="1" id="v4l2-timecode"> +	<title>struct <structname>v4l2_timecode</structname></title> +	<tgroup cols="3"> +	  &cs-str; +	  <tbody valign="top"> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>type</structfield></entry> +	      <entry>Frame rate the timecodes are based on, see <xref +		  linkend="timecode-type" />.</entry> +	    </row> +	    <row> +	      <entry>__u32</entry> +	      <entry><structfield>flags</structfield></entry> +	      <entry>Timecode flags, see <xref linkend="timecode-flags" />.</entry> +	    </row> +	    <row> +	      <entry>__u8</entry> +	      <entry><structfield>frames</structfield></entry> +	      <entry>Frame count, 0 ... 23/24/29/49/59, depending on the +	    type of timecode.</entry> +	    </row> +	    <row> +	      <entry>__u8</entry> +	      <entry><structfield>seconds</structfield></entry> +	      <entry>Seconds count, 0 ... 59. This is a binary, not BCD number.</entry> +	    </row> +	    <row> +	      <entry>__u8</entry> +	      <entry><structfield>minutes</structfield></entry> +	      <entry>Minutes count, 0 ... 59. This is a binary, not BCD number.</entry> +	    </row> +	    <row> +	      <entry>__u8</entry> +	      <entry><structfield>hours</structfield></entry> +	      <entry>Hours count, 0 ... 29. This is a binary, not BCD number.</entry> +	    </row> +	    <row> +	      <entry>__u8</entry> +	      <entry><structfield>userbits</structfield>[4]</entry> +	      <entry>The "user group" bits from the timecode.</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> + +      <table frame="none" pgwide="1" id="timecode-type"> +	<title>Timecode Types</title> +	<tgroup cols="3"> +	&cs-def; +	  <tbody valign="top"> +	    <row> +	      <entry><constant>V4L2_TC_TYPE_24FPS</constant></entry> +	      <entry>1</entry> +	      <entry>24 frames per second, i. e. film.</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_TYPE_25FPS</constant></entry> +	      <entry>2</entry> +	      <entry>25 frames per second, &ie; PAL or SECAM video.</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_TYPE_30FPS</constant></entry> +	      <entry>3</entry> +	      <entry>30 frames per second, &ie; NTSC video.</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_TYPE_50FPS</constant></entry> +	      <entry>4</entry> +	      <entry></entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_TYPE_60FPS</constant></entry> +	      <entry>5</entry> +	      <entry></entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> + +      <table frame="none" pgwide="1" id="timecode-flags"> +	<title>Timecode Flags</title> +	<tgroup cols="3"> +	&cs-def; +	  <tbody valign="top"> +	    <row> +	      <entry><constant>V4L2_TC_FLAG_DROPFRAME</constant></entry> +	      <entry>0x0001</entry> +	      <entry>Indicates "drop frame" semantics for counting frames +in 29.97 fps material. When set, frame numbers 0 and 1 at the start of +each minute, except minutes 0, 10, 20, 30, 40, 50 are omitted from the +count.</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_FLAG_COLORFRAME</constant></entry> +	      <entry>0x0002</entry> +	      <entry>The "color frame" flag.</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_USERBITS_field</constant></entry> +	      <entry>0x000C</entry> +	      <entry>Field mask for the "binary group flags".</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_USERBITS_USERDEFINED</constant></entry> +	      <entry>0x0000</entry> +	      <entry>Unspecified format.</entry> +	    </row> +	    <row> +	      <entry><constant>V4L2_TC_USERBITS_8BITCHARS</constant></entry> +	      <entry>0x0008</entry> +	      <entry>8-bit ISO characters.</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> +  </section> + +  <section id="field-order"> +    <title>Field Order</title> + +    <para>We have to distinguish between progressive and interlaced +video. Progressive video transmits all lines of a video image +sequentially. Interlaced video divides an image into two fields, +containing only the odd and even lines of the image, respectively. +Alternating the so called odd and even field are transmitted, and due +to a small delay between fields a cathode ray TV displays the lines +interleaved, yielding the original frame. This curious technique was +invented because at refresh rates similar to film the image would +fade out too quickly. Transmitting fields reduces the flicker without +the necessity of doubling the frame rate and with it the bandwidth +required for each channel.</para> + +    <para>It is important to understand a video camera does not expose +one frame at a time, merely transmitting the frames separated into +fields. The fields are in fact captured at two different instances in +time. An object on screen may well move between one field and the +next. For applications analysing motion it is of paramount importance +to recognize which field of a frame is older, the <emphasis>temporal +order</emphasis>.</para> + +    <para>When the driver provides or accepts images field by field +rather than interleaved, it is also important applications understand +how the fields combine to frames. We distinguish between top (aka odd) and +bottom (aka even) fields, the <emphasis>spatial order</emphasis>: The first line +of the top field is the first line of an interlaced frame, the first +line of the bottom field is the second line of that frame.</para> + +    <para>However because fields were captured one after the other, +arguing whether a frame commences with the top or bottom field is +pointless. Any two successive top and bottom, or bottom and top fields +yield a valid frame. Only when the source was progressive to begin +with, ⪚ when transferring film to video, two fields may come from +the same frame, creating a natural order.</para> + +    <para>Counter to intuition the top field is not necessarily the +older field. Whether the older field contains the top or bottom lines +is a convention determined by the video standard. Hence the +distinction between temporal and spatial order of fields. The diagrams +below should make this clearer.</para> + +    <para>All video capture and output devices must report the current +field order. Some drivers may permit the selection of a different +order, to this end applications initialize the +<structfield>field</structfield> field of &v4l2-pix-format; before +calling the &VIDIOC-S-FMT; ioctl. If this is not desired it should +have the value <constant>V4L2_FIELD_ANY</constant> (0).</para> + +    <table frame="none" pgwide="1" id="v4l2-field"> +      <title>enum v4l2_field</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_FIELD_ANY</constant></entry> +	    <entry>0</entry> +	    <entry>Applications request this field order when any +one of the <constant>V4L2_FIELD_NONE</constant>, +<constant>V4L2_FIELD_TOP</constant>, +<constant>V4L2_FIELD_BOTTOM</constant>, or +<constant>V4L2_FIELD_INTERLACED</constant> formats is acceptable. +Drivers choose depending on hardware capabilities or e. g. the +requested image size, and return the actual field order. &v4l2-buffer; +<structfield>field</structfield> can never be +<constant>V4L2_FIELD_ANY</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_NONE</constant></entry> +	    <entry>1</entry> +	    <entry>Images are in progressive format, not interlaced. +The driver may also indicate this order when it cannot distinguish +between <constant>V4L2_FIELD_TOP</constant> and +<constant>V4L2_FIELD_BOTTOM</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_TOP</constant></entry> +	    <entry>2</entry> +	    <entry>Images consist of the top (aka odd) field only.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_BOTTOM</constant></entry> +	    <entry>3</entry> +	    <entry>Images consist of the bottom (aka even) field only. +Applications may wish to prevent a device from capturing interlaced +images because they will have "comb" or "feathering" artefacts around +moving objects.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_INTERLACED</constant></entry> +	    <entry>4</entry> +	    <entry>Images contain both fields, interleaved line by +line. The temporal order of the fields (whether the top or bottom +field is first transmitted) depends on the current video standard. +M/NTSC transmits the bottom field first, all other standards the top +field first.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_SEQ_TB</constant></entry> +	    <entry>5</entry> +	    <entry>Images contain both fields, the top field lines +are stored first in memory, immediately followed by the bottom field +lines. Fields are always stored in temporal order, the older one first +in memory. Image sizes refer to the frame, not fields.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_SEQ_BT</constant></entry> +	    <entry>6</entry> +	    <entry>Images contain both fields, the bottom field +lines are stored first in memory, immediately followed by the top +field lines. Fields are always stored in temporal order, the older one +first in memory. Image sizes refer to the frame, not fields.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_ALTERNATE</constant></entry> +	    <entry>7</entry> +	    <entry>The two fields of a frame are passed in separate +buffers, in temporal order, &ie; the older one first. To indicate the field +parity (whether the current field is a top or bottom field) the driver +or application, depending on data direction, must set &v4l2-buffer; +<structfield>field</structfield> to +<constant>V4L2_FIELD_TOP</constant> or +<constant>V4L2_FIELD_BOTTOM</constant>. Any two successive fields pair +to build a frame. If fields are successive, without any dropped fields +between them (fields can drop individually), can be determined from +the &v4l2-buffer; <structfield>sequence</structfield> field. This format +cannot be selected when using the read/write I/O method since there +is no way to communicate if a field was a top or bottom field.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_INTERLACED_TB</constant></entry> +	    <entry>8</entry> +	    <entry>Images contain both fields, interleaved line by +line, top field first. The top field is transmitted first.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FIELD_INTERLACED_BT</constant></entry> +	    <entry>9</entry> +	    <entry>Images contain both fields, interleaved line by +line, top field first. The bottom field is transmitted first.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <figure id="fieldseq-tb"> +	<title>Field Order, Top Field First Transmitted</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="fieldseq_tb.pdf" format="PS" /> +	  </imageobject> +	  <imageobject> +	    <imagedata fileref="fieldseq_tb.gif" format="GIF" /> +	  </imageobject> +	</mediaobject> +    </figure> + +    <figure id="fieldseq-bt"> +	<title>Field Order, Bottom Field First Transmitted</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="fieldseq_bt.pdf" format="PS" /> +	  </imageobject> +	  <imageobject> +	    <imagedata fileref="fieldseq_bt.gif" format="GIF" /> +	  </imageobject> +	</mediaobject> +    </figure> +  </section> diff --git a/Documentation/DocBook/media/v4l/keytable.c.xml b/Documentation/DocBook/media/v4l/keytable.c.xml new file mode 100644 index 00000000000..d53254a3be1 --- /dev/null +++ b/Documentation/DocBook/media/v4l/keytable.c.xml @@ -0,0 +1,172 @@ +<programlisting> +/* keytable.c - This program allows checking/replacing keys at IR + +   Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@infradead.org> + +   This program is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, version 2 of the License. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + */ + +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <linux/input.h> +#include <sys/ioctl.h> + +#include "parse.h" + +void prtcode (int *codes) +{ +        struct parse_key *p; + +        for (p=keynames;p->name!=NULL;p++) { +                if (p->value == (unsigned)codes[1]) { +                        printf("scancode 0x%04x = %s (0x%02x)\n", codes[0], p->name, codes[1]); +                        return; +                } +        } + +        if (isprint (codes[1])) +                printf("scancode %d = '%c' (0x%02x)\n", codes[0], codes[1], codes[1]); +        else +                printf("scancode %d = 0x%02x\n", codes[0], codes[1]); +} + +int parse_code(char *string) +{ +        struct parse_key *p; + +        for (p=keynames;p->name!=NULL;p++) { +                if (!strcasecmp(p->name, string)) { +                        return p->value; +                } +        } +        return -1; +} + +int main (int argc, char *argv[]) +{ +        int fd; +        unsigned int i, j; +        int codes[2]; + +        if (argc<2 || argc>4) { +                printf ("usage: %s <device> to get table; or\n" +                        "       %s <device> <scancode> <keycode>\n" +                        "       %s <device> <keycode_file>\n",*argv,*argv,*argv); +                return -1; +        } + +        if ((fd = open(argv[1], O_RDONLY)) < 0) { +                perror("Couldn't open input device"); +                return(-1); +        } + +        if (argc==4) { +                int value; + +                value=parse_code(argv[3]); + +                if (value==-1) { +                        value = strtol(argv[3], NULL, 0); +                        if (errno) +                                perror("value"); +                } + +                codes [0] = (unsigned) strtol(argv[2], NULL, 0); +                codes [1] = (unsigned) value; + +                if(ioctl(fd, EVIOCSKEYCODE, codes)) +                        perror ("EVIOCSKEYCODE"); + +                if(ioctl(fd, EVIOCGKEYCODE, codes)==0) +                        prtcode(codes); +                return 0; +        } + +        if (argc==3) { +                FILE *fin; +                int value; +                char *scancode, *keycode, s[2048]; + +                fin=fopen(argv[2],"r"); +                if (fin==NULL) { +                        perror ("opening keycode file"); +                        return -1; +                } + +                /* Clears old table */ +                for (j = 0; j < 256; j++) { +                        for (i = 0; i < 256; i++) { +                                codes[0] = (j << 8) | i; +                                codes[1] = KEY_RESERVED; +                                ioctl(fd, EVIOCSKEYCODE, codes); +                        } +                } + +                while (fgets(s,sizeof(s),fin)) { +                        scancode=strtok(s,"\n\t =:"); +                        if (!scancode) { +                                perror ("parsing input file scancode"); +                                return -1; +                        } +                        if (!strcasecmp(scancode, "scancode")) { +                                scancode = strtok(NULL,"\n\t =:"); +                                if (!scancode) { +                                        perror ("parsing input file scancode"); +                                        return -1; +                                } +                        } + +                        keycode=strtok(NULL,"\n\t =:("); +                        if (!keycode) { +                                perror ("parsing input file keycode"); +                                return -1; +                        } + +                        // printf ("parsing %s=%s:", scancode, keycode); +                        value=parse_code(keycode); +                        // printf ("\tvalue=%d\n",value); + +                        if (value==-1) { +                                value = strtol(keycode, NULL, 0); +                                if (errno) +                                        perror("value"); +                        } + +                        codes [0] = (unsigned) strtol(scancode, NULL, 0); +                        codes [1] = (unsigned) value; + +                        // printf("\t%04x=%04x\n",codes[0], codes[1]); +                        if(ioctl(fd, EVIOCSKEYCODE, codes)) { +                                fprintf(stderr, "Setting scancode 0x%04x with 0x%04x via ",codes[0], codes[1]); +                                perror ("EVIOCSKEYCODE"); +                        } + +                        if(ioctl(fd, EVIOCGKEYCODE, codes)==0) +                                prtcode(codes); +                } +                return 0; +        } + +        /* Get scancode table */ +        for (j = 0; j < 256; j++) { +                for (i = 0; i < 256; i++) { +                        codes[0] = (j << 8) | i; +                        if (!ioctl(fd, EVIOCGKEYCODE, codes) && codes[1] != KEY_RESERVED) +                                prtcode(codes); +                } +        } +        return 0; +} + +</programlisting> diff --git a/Documentation/DocBook/media/v4l/libv4l.xml b/Documentation/DocBook/media/v4l/libv4l.xml new file mode 100644 index 00000000000..d3b71e20003 --- /dev/null +++ b/Documentation/DocBook/media/v4l/libv4l.xml @@ -0,0 +1,160 @@ +<title>Libv4l Userspace Library</title> +<section id="libv4l-introduction"> +	<title>Introduction</title> + +	<para>libv4l is a collection of libraries which adds a thin abstraction +layer on top of video4linux2 devices. The purpose of this (thin) layer +is to make it easy for application writers to support a wide variety of +devices without having to write separate code for different devices in the +same class.</para> +<para>An example of using libv4l is provided by +<link linkend='v4l2grab-example'>v4l2grab</link>. +</para> + +	<para>libv4l consists of 3 different libraries:</para> +	<section> +		<title>libv4lconvert</title> + +		<para>libv4lconvert is a library that converts several +different pixelformats found in V4L2 drivers into a few common RGB and +YUY formats.</para> +		<para>It currently accepts the following V4L2 driver formats: +<link linkend="V4L2-PIX-FMT-BGR24"><constant>V4L2_PIX_FMT_BGR24</constant></link>, +<link linkend="V4L2-PIX-FMT-HM12"><constant>V4L2_PIX_FMT_HM12</constant></link>, +<link linkend="V4L2-PIX-FMT-JPEG"><constant>V4L2_PIX_FMT_JPEG</constant></link>, +<link linkend="V4L2-PIX-FMT-MJPEG"><constant>V4L2_PIX_FMT_MJPEG</constant></link>, +<link linkend="V4L2-PIX-FMT-MR97310A"><constant>V4L2_PIX_FMT_MR97310A</constant></link>, +<link linkend="V4L2-PIX-FMT-OV511"><constant>V4L2_PIX_FMT_OV511</constant></link>, +<link linkend="V4L2-PIX-FMT-OV518"><constant>V4L2_PIX_FMT_OV518</constant></link>, +<link linkend="V4L2-PIX-FMT-PAC207"><constant>V4L2_PIX_FMT_PAC207</constant></link>, +<link linkend="V4L2-PIX-FMT-PJPG"><constant>V4L2_PIX_FMT_PJPG</constant></link>, +<link linkend="V4L2-PIX-FMT-RGB24"><constant>V4L2_PIX_FMT_RGB24</constant></link>, +<link linkend="V4L2-PIX-FMT-SBGGR8"><constant>V4L2_PIX_FMT_SBGGR8</constant></link>, +<link linkend="V4L2-PIX-FMT-SGBRG8"><constant>V4L2_PIX_FMT_SGBRG8</constant></link>, +<link linkend="V4L2-PIX-FMT-SGRBG8"><constant>V4L2_PIX_FMT_SGRBG8</constant></link>, +<link linkend="V4L2-PIX-FMT-SN9C10X"><constant>V4L2_PIX_FMT_SN9C10X</constant></link>, +<link linkend="V4L2-PIX-FMT-SN9C20X-I420"><constant>V4L2_PIX_FMT_SN9C20X_I420</constant></link>, +<link linkend="V4L2-PIX-FMT-SPCA501"><constant>V4L2_PIX_FMT_SPCA501</constant></link>, +<link linkend="V4L2-PIX-FMT-SPCA505"><constant>V4L2_PIX_FMT_SPCA505</constant></link>, +<link linkend="V4L2-PIX-FMT-SPCA508"><constant>V4L2_PIX_FMT_SPCA508</constant></link>, +<link linkend="V4L2-PIX-FMT-SPCA561"><constant>V4L2_PIX_FMT_SPCA561</constant></link>, +<link linkend="V4L2-PIX-FMT-SQ905C"><constant>V4L2_PIX_FMT_SQ905C</constant></link>, +<constant>V4L2_PIX_FMT_SRGGB8</constant>, +<link linkend="V4L2-PIX-FMT-UYVY"><constant>V4L2_PIX_FMT_UYVY</constant></link>, +<link linkend="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></link>, +<link linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link>, +<link linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link>, +and <link linkend="V4L2-PIX-FMT-YVYU"><constant>V4L2_PIX_FMT_YVYU</constant></link>. +</para> +		<para>Later on libv4lconvert was expanded to also be able to do +various	video processing functions to improve webcam video quality. +The video processing is split in to 2 parts: libv4lconvert/control and +libv4lconvert/processing.</para> + +		<para>The control part is used to offer video controls which can +be used	to control the video processing functions made available by +	libv4lconvert/processing. These controls are stored application wide +(until reboot) by using a persistent shared memory object.</para> + +		<para>libv4lconvert/processing offers the actual video +processing functionality.</para> +	</section> +	<section> +		<title>libv4l1</title> +		<para>This library offers functions that can be used to quickly +make v4l1 applications work with v4l2 devices. These functions work exactly +like the normal open/close/etc, except that libv4l1 does full emulation of +the v4l1 api on top of v4l2 drivers, in case of v4l1 drivers it +will just pass calls through.</para> +		<para>Since those functions are emulations of the old V4L1 API, +it shouldn't be used for new applications.</para> +	</section> +	<section> +		<title>libv4l2</title> +		<para>This library should be used for all modern V4L2 +applications.</para> +		<para>It provides handles to call V4L2 open/ioctl/close/poll +methods. Instead of just providing the raw output of the device, it enhances +the calls in the sense that it will use libv4lconvert to provide more video +formats and to enhance the image quality.</para> +		<para>In most cases, libv4l2 just passes the calls directly +through to the v4l2 driver, intercepting the calls to +<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>, +<link linkend='vidioc-g-fmt'><constant>VIDIOC_G_FMT</constant></link> +<link linkend='vidioc-g-fmt'><constant>VIDIOC_S_FMT</constant></link> +<link linkend='vidioc-enum-framesizes'><constant>VIDIOC_ENUM_FRAMESIZES</constant></link> +and <link linkend='vidioc-enum-frameintervals'><constant>VIDIOC_ENUM_FRAMEINTERVALS</constant></link> +in order to emulate the formats +<link linkend="V4L2-PIX-FMT-BGR24"><constant>V4L2_PIX_FMT_BGR24</constant></link>, +<link linkend="V4L2-PIX-FMT-RGB24"><constant>V4L2_PIX_FMT_RGB24</constant></link>, +<link linkend="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></link>, +and <link linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link>, +if they aren't available in the driver. +<link linkend='vidioc-enum-fmt'><constant>VIDIOC_ENUM_FMT</constant></link> +keeps enumerating the hardware supported formats, plus the emulated formats +offered by libv4l at the end. +</para> +		<section id="libv4l-ops"> +			<title>Libv4l device control functions</title> +			<para>The common file operation methods are provided by +libv4l.</para> +			<para>Those functions operate just like glibc +open/close/dup/ioctl/read/mmap/munmap:</para> +<itemizedlist><listitem> +			<para>int v4l2_open(const char *file, int oflag, +...) - +operates like the standard <link linkend='func-open'>open()</link> function. +</para></listitem><listitem> +			<para>int v4l2_close(int fd) - +operates like the standard <link linkend='func-close'>close()</link> function. +</para></listitem><listitem> +			<para>int v4l2_dup(int fd) - +operates like the standard dup() function, duplicating a file handler. +</para></listitem><listitem> +			<para>int v4l2_ioctl (int fd, unsigned long int request, ...) - +operates like the standard <link linkend='func-ioctl'>ioctl()</link> function. +</para></listitem><listitem> +			<para>int v4l2_read (int fd, void* buffer, size_t n) - +operates like the standard <link linkend='func-read'>read()</link> function. +</para></listitem><listitem> +			<para>void v4l2_mmap(void *start, size_t length, int prot, int flags, int fd, int64_t offset); - +operates like the standard <link linkend='func-mmap'>mmap()</link> function. +</para></listitem><listitem> +			<para>int v4l2_munmap(void *_start, size_t length); - +operates like the standard <link linkend='func-munmap'>munmap()</link> function. +</para></listitem> +</itemizedlist> +			<para>Those functions provide additional control:</para> +<itemizedlist><listitem> +			<para>int v4l2_fd_open(int fd, int v4l2_flags) - +opens an already opened fd for further use through v4l2lib and possibly +modify libv4l2's default behavior through the v4l2_flags argument. +Currently, v4l2_flags can be <constant>V4L2_DISABLE_CONVERSION</constant>, +to disable format conversion. +</para></listitem><listitem> +			<para>int v4l2_set_control(int fd, int cid, int value) - +This function takes a value of 0 - 65535, and then scales that range to +the actual range of the given v4l control id, and then if the cid exists +and is not locked sets the cid to the scaled value. +</para></listitem><listitem> +			<para>int v4l2_get_control(int fd, int cid) - +This function returns a value of 0 - 65535, scaled to from the actual range +of the given v4l control id. when the cid does not exist, could not be +accessed for some reason, or some error occurred 0 is returned. +</para></listitem> +</itemizedlist> +		</section> +	</section> +	<section> + +		<title>v4l1compat.so wrapper library</title> + +		<para>This library intercepts calls to +open/close/ioctl/mmap/mmunmap operations and redirects them to the libv4l +counterparts, by using LD_PRELOAD=/usr/lib/v4l1compat.so. It also +emulates V4L1 calls via V4L2 API.</para> +		<para>It allows usage of binary legacy applications that +still don't use libv4l.</para> +	</section> + +</section> diff --git a/Documentation/DocBook/media/v4l/lirc_device_interface.xml b/Documentation/DocBook/media/v4l/lirc_device_interface.xml new file mode 100644 index 00000000000..34cada2ca71 --- /dev/null +++ b/Documentation/DocBook/media/v4l/lirc_device_interface.xml @@ -0,0 +1,255 @@ +<section id="lirc_dev"> +<title>LIRC Device Interface</title> + + +<section id="lirc_dev_intro"> +<title>Introduction</title> + +<para>The LIRC device interface is a bi-directional interface for +transporting raw IR data between userspace and kernelspace. Fundamentally, +it is just a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number +of standard struct file_operations defined on it. With respect to +transporting raw IR data to and fro, the essential fops are read, write +and ioctl.</para> + +<para>Example dmesg output upon a driver registering w/LIRC:</para> +  <blockquote> +    <para>$ dmesg |grep lirc_dev</para> +    <para>lirc_dev: IR Remote Control driver registered, major 248</para> +    <para>rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0</para> +  </blockquote> + +<para>What you should see for a chardev:</para> +  <blockquote> +    <para>$ ls -l /dev/lirc*</para> +    <para>crw-rw---- 1 root root 248, 0 Jul  2 22:20 /dev/lirc0</para> +  </blockquote> +</section> + +<section id="lirc_read"> +<title>LIRC read fop</title> + +<para>The lircd userspace daemon reads raw IR data from the LIRC chardev. The +exact format of the data depends on what modes a driver supports, and what +mode has been selected. lircd obtains supported modes and sets the active mode +via the ioctl interface, detailed at <xref linkend="lirc_ioctl"/>. The generally +preferred mode is LIRC_MODE_MODE2, in which packets containing an int value +describing an IR signal are read from the chardev.</para> + +<para>See also <ulink url="http://www.lirc.org/html/technical.html">http://www.lirc.org/html/technical.html</ulink> for more info.</para> +</section> + +<section id="lirc_write"> +<title>LIRC write fop</title> + +<para>The data written to the chardev is a pulse/space sequence of integer +values. Pulses and spaces are only marked implicitly by their position. The +data must start and end with a pulse, therefore, the data must always include +an uneven number of samples. The write function must block until the data has +been transmitted by the hardware. If more data is provided than the hardware +can send, the driver returns EINVAL.</para> + +</section> + +<section id="lirc_ioctl"> +<title>LIRC ioctl fop</title> + +<para>The LIRC device's ioctl definition is bound by the ioctl function +definition of struct file_operations, leaving us with an unsigned int +for the ioctl command and an unsigned long for the arg. For the purposes +of ioctl portability across 32-bit and 64-bit, these values are capped +to their 32-bit sizes.</para> + +<para>The following ioctls can be used to change specific hardware settings. +In general each driver should have a default set of settings. The driver +implementation is expected to re-apply the default settings when the device +is closed by user-space, so that every application opening the device can rely +on working with the default settings initially.</para> + +<variablelist> +  <varlistentry> +    <term>LIRC_GET_FEATURES</term> +    <listitem> +      <para>Obviously, get the underlying hardware device's features. If a driver +      does not announce support of certain features, calling of the corresponding +      ioctls is undefined.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_SEND_MODE</term> +    <listitem> +      <para>Get supported transmit mode. Only LIRC_MODE_PULSE is supported by lircd.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_REC_MODE</term> +    <listitem> +      <para>Get supported receive modes. Only LIRC_MODE_MODE2 and LIRC_MODE_LIRCCODE +      are supported by lircd.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_SEND_CARRIER</term> +    <listitem> +      <para>Get carrier frequency (in Hz) currently used for transmit.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_REC_CARRIER</term> +    <listitem> +      <para>Get carrier frequency (in Hz) currently used for IR reception.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_{G,S}ET_{SEND,REC}_DUTY_CYCLE</term> +    <listitem> +      <para>Get/set the duty cycle (from 0 to 100) of the carrier signal. Currently, +      no special meaning is defined for 0 or 100, but this could be used to switch +      off carrier generation in the future, so these values should be reserved.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_REC_RESOLUTION</term> +    <listitem> +      <para>Some receiver have maximum resolution which is defined by internal +      sample rate or data format limitations. E.g. it's common that signals can +      only be reported in 50 microsecond steps. This integer value is used by +      lircd to automatically adjust the aeps tolerance value in the lircd +      config file.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_M{IN,AX}_TIMEOUT</term> +    <listitem> +      <para>Some devices have internal timers that can be used to detect when +      there's no IR activity for a long time. This can help lircd in detecting +      that a IR signal is finished and can speed up the decoding process. +      Returns an integer value with the minimum/maximum timeout that can be +      set. Some devices have a fixed timeout, in that case both ioctls will +      return the same value even though the timeout cannot be changed.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_M{IN,AX}_FILTER_{PULSE,SPACE}</term> +    <listitem> +      <para>Some devices are able to filter out spikes in the incoming signal +      using given filter rules. These ioctls return the hardware capabilities +      that describe the bounds of the possible filters. Filter settings depend +      on the IR protocols that are expected. lircd derives the settings from +      all protocols definitions found in its config file.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_GET_LENGTH</term> +    <listitem> +      <para>Retrieves the code length in bits (only for LIRC_MODE_LIRCCODE). +      Reads on the device must be done in blocks matching the bit count. +      The bit could should be rounded up so that it matches full bytes.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_{SEND,REC}_MODE</term> +    <listitem> +      <para>Set send/receive mode. Largely obsolete for send, as only +      LIRC_MODE_PULSE is supported.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_{SEND,REC}_CARRIER</term> +    <listitem> +      <para>Set send/receive carrier (in Hz).</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_TRANSMITTER_MASK</term> +    <listitem> +      <para>This enables the given set of transmitters. The first transmitter +      is encoded by the least significant bit, etc. When an invalid bit mask +      is given, i.e. a bit is set, even though the device does not have so many +      transitters, then this ioctl returns the number of available transitters +      and does nothing otherwise.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_REC_TIMEOUT</term> +    <listitem> +      <para>Sets the integer value for IR inactivity timeout (cf. +      LIRC_GET_MIN_TIMEOUT and LIRC_GET_MAX_TIMEOUT). A value of 0 (if +      supported by the hardware) disables all hardware timeouts and data should +      be reported as soon as possible. If the exact value cannot be set, then +      the next possible value _greater_ than the given value should be set.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_REC_TIMEOUT_REPORTS</term> +    <listitem> +      <para>Enable (1) or disable (0) timeout reports in LIRC_MODE_MODE2. By +      default, timeout reports should be turned off.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_REC_FILTER_{,PULSE,SPACE}</term> +    <listitem> +      <para>Pulses/spaces shorter than this are filtered out by hardware. If +      filters cannot be set independently for pulse/space, the corresponding +      ioctls must return an error and LIRC_SET_REC_FILTER shall be used instead.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_MEASURE_CARRIER_MODE</term> +    <listitem> +      <para>Enable (1)/disable (0) measure mode. If enabled, from the next key +      press on, the driver will send LIRC_MODE2_FREQUENCY packets. By default +      this should be turned off.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_REC_{DUTY_CYCLE,CARRIER}_RANGE</term> +    <listitem> +      <para>To set a range use LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE +      with the lower bound first and later LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER +      with the upper bound.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_NOTIFY_DECODE</term> +    <listitem> +      <para>This ioctl is called by lircd whenever a successful decoding of an +      incoming IR signal could be done. This can be used by supporting hardware +      to give visual feedback to the user e.g. by flashing a LED.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SETUP_{START,END}</term> +    <listitem> +      <para>Setting of several driver parameters can be optimized by encapsulating +      the according ioctl calls with LIRC_SETUP_START/LIRC_SETUP_END. When a +      driver receives a LIRC_SETUP_START ioctl it can choose to not commit +      further setting changes to the hardware until a LIRC_SETUP_END is received. +      But this is open to the driver implementation and every driver must also +      handle parameter changes which are not encapsulated by LIRC_SETUP_START +      and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para> +    </listitem> +  </varlistentry> +  <varlistentry> +    <term>LIRC_SET_WIDEBAND_RECEIVER</term> +    <listitem> +      <para>Some receivers are equipped with special wide band receiver which is intended +      to be used to learn output of existing remote. +      Calling that ioctl with (1) will enable it, and with (0) disable it. +      This might be useful of receivers that have otherwise narrow band receiver +      that prevents them to be used with some remotes. +      Wide band receiver might also be more precise +      On the other hand its disadvantage it usually reduced range of reception. +      Note: wide band receiver might be implictly enabled if you enable +      carrier reports. In that case it will be disabled as soon as you disable +      carrier reports. Trying to disable wide band receiver while carrier +      reports are active will do nothing.</para> +    </listitem> +  </varlistentry> +</variablelist> +<section id="lirc_dev_errors"> +  &return-value; +</section> +</section> +</section> diff --git a/Documentation/DocBook/media/v4l/media-controller.xml b/Documentation/DocBook/media/v4l/media-controller.xml new file mode 100644 index 00000000000..873ac3a621f --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-controller.xml @@ -0,0 +1,89 @@ +<partinfo> +  <authorgroup> +    <author> +      <firstname>Laurent</firstname> +      <surname>Pinchart</surname> +      <affiliation><address><email>laurent.pinchart@ideasonboard.com</email></address></affiliation> +      <contrib>Initial version.</contrib> +    </author> +  </authorgroup> +  <copyright> +    <year>2010</year> +    <holder>Laurent Pinchart</holder> +  </copyright> + +  <revhistory> +    <!-- Put document revisions here, newest first. --> +    <revision> +      <revnumber>1.0.0</revnumber> +      <date>2010-11-10</date> +      <authorinitials>lp</authorinitials> +      <revremark>Initial revision</revremark> +    </revision> +  </revhistory> +</partinfo> + +<title>Media Controller API</title> + +<chapter id="media_controller"> +  <title>Media Controller</title> + +  <section id="media-controller-intro"> +    <title>Introduction</title> +    <para>Media devices increasingly handle multiple related functions. Many USB +    cameras include microphones, video capture hardware can also output video, +    or SoC camera interfaces also perform memory-to-memory operations similar to +    video codecs.</para> +    <para>Independent functions, even when implemented in the same hardware, can +    be modelled as separate devices. A USB camera with a microphone will be +    presented to userspace applications as V4L2 and ALSA capture devices. The +    devices' relationships (when using a webcam, end-users shouldn't have to +    manually select the associated USB microphone), while not made available +    directly to applications by the drivers, can usually be retrieved from +    sysfs.</para> +    <para>With more and more advanced SoC devices being introduced, the current +    approach will not scale. Device topologies are getting increasingly complex +    and can't always be represented by a tree structure. Hardware blocks are +    shared between different functions, creating dependencies between seemingly +    unrelated devices.</para> +    <para>Kernel abstraction APIs such as V4L2 and ALSA provide means for +    applications to access hardware parameters. As newer hardware expose an +    increasingly high number of those parameters, drivers need to guess what +    applications really require based on limited information, thereby +    implementing policies that belong to userspace.</para> +    <para>The media controller API aims at solving those problems.</para> +  </section> + +  <section id="media-controller-model"> +    <title>Media device model</title> +    <para>Discovering a device internal topology, and configuring it at runtime, +    is one of the goals of the media controller API. To achieve this, hardware +    devices are modelled as an oriented graph of building blocks called entities +    connected through pads.</para> +    <para>An entity is a basic media hardware or software building block. It can +    correspond to a large variety of logical blocks such as physical hardware +    devices (CMOS sensor for instance), logical hardware devices (a building +    block in a System-on-Chip image processing pipeline), DMA channels or +    physical connectors.</para> +    <para>A pad is a connection endpoint through which an entity can interact +    with other entities. Data (not restricted to video) produced by an entity +    flows from the entity's output to one or more entity inputs. Pads should not +    be confused with physical pins at chip boundaries.</para> +    <para>A link is a point-to-point oriented connection between two pads, +    either on the same entity or on different entities. Data flows from a source +    pad to a sink pad.</para> +  </section> +</chapter> + +<appendix id="media-user-func"> +  <title>Function Reference</title> +  <!-- Keep this alphabetically sorted. --> +  &sub-media-func-open; +  &sub-media-func-close; +  &sub-media-func-ioctl; +  <!-- All ioctls go here. --> +  &sub-media-ioc-device-info; +  &sub-media-ioc-enum-entities; +  &sub-media-ioc-enum-links; +  &sub-media-ioc-setup-link; +</appendix> diff --git a/Documentation/DocBook/media/v4l/media-func-close.xml b/Documentation/DocBook/media/v4l/media-func-close.xml new file mode 100644 index 00000000000..be149c802ae --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-func-close.xml @@ -0,0 +1,59 @@ +<refentry id="media-func-close"> +  <refmeta> +    <refentrytitle>media close()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>media-close</refname> +    <refpurpose>Close a media device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>close</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Closes the media device. Resources associated with the file descriptor +    are freed. The device configuration remain unchanged.</para> +  </refsect1> + +  <refsect1> +    <title>Return Value</title> + +    <para><function>close</function> returns 0 on success. On error, -1 is +    returned, and <varname>errno</varname> is set appropriately. Possible error +    codes are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBADF</errorcode></term> +	<listitem> +	  <para><parameter>fd</parameter> is not a valid open file descriptor. +	  </para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/media-func-ioctl.xml b/Documentation/DocBook/media/v4l/media-func-ioctl.xml new file mode 100644 index 00000000000..39478d0fbca --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-func-ioctl.xml @@ -0,0 +1,73 @@ +<refentry id="media-func-ioctl"> +  <refmeta> +    <refentrytitle>media ioctl()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>media-ioctl</refname> +    <refpurpose>Control a media device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>void *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>Media ioctl request code as defined in the media.h header file, +	  for example MEDIA_IOC_SETUP_LINK.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para>Pointer to a request-specific structure.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> +    <para>The <function>ioctl()</function> function manipulates media device +    parameters. The argument <parameter>fd</parameter> must be an open file +    descriptor.</para> +    <para>The ioctl <parameter>request</parameter> code specifies the media +    function to be called. It has encoded in it whether the argument is an +    input, output or read/write parameter, and the size of the argument +    <parameter>argp</parameter> in bytes.</para> +    <para>Macros and structures definitions specifying media ioctl requests and +    their parameters are located in the media.h header file. All media ioctl +    requests, their respective function and parameters are specified in +    <xref linkend="media-user-func" />.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <para>Request-specific error codes are listed in the +    individual requests descriptions.</para> +    <para>When an ioctl that takes an output or read/write parameter fails, +    the parameter remains unmodified.</para> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/media-func-open.xml b/Documentation/DocBook/media/v4l/media-func-open.xml new file mode 100644 index 00000000000..f7df034dc9e --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-func-open.xml @@ -0,0 +1,94 @@ +<refentry id="media-func-open"> +  <refmeta> +    <refentrytitle>media open()</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>media-open</refname> +    <refpurpose>Open a media device</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo> +      <funcprototype> +	<funcdef>int <function>open</function></funcdef> +	<paramdef>const char *<parameter>device_name</parameter></paramdef> +	<paramdef>int <parameter>flags</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>device_name</parameter></term> +	<listitem> +	  <para>Device to be opened.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>flags</parameter></term> +	<listitem> +	  <para>Open flags. Access mode must be either <constant>O_RDONLY</constant> +	  or <constant>O_RDWR</constant>. Other flags have no effect.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +  <refsect1> +    <title>Description</title> +    <para>To open a media device applications call <function>open()</function> +    with the desired device name. The function has no side effects; the device +    configuration remain unchanged.</para> +    <para>When the device is opened in read-only mode, attemps to modify its +    configuration will result in an error, and <varname>errno</varname> will be +    set to <errorcode>EBADF</errorcode>.</para> +  </refsect1> +  <refsect1> +    <title>Return Value</title> + +    <para><function>open</function> returns the new file descriptor on success. +    On error, -1 is returned, and <varname>errno</varname> is set appropriately. +    Possible error codes are:</para> + +    <variablelist> +      <varlistentry> +	<term><errorcode>EACCES</errorcode></term> +	<listitem> +	  <para>The requested access to the file is not allowed.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EMFILE</errorcode></term> +	<listitem> +	  <para>The  process  already  has  the  maximum number of files open. +	  </para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENFILE</errorcode></term> +	<listitem> +	  <para>The system limit on the total number of open files has been +	  reached.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENOMEM</errorcode></term> +	<listitem> +	  <para>Insufficient kernel memory was available.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENXIO</errorcode></term> +	<listitem> +	  <para>No device corresponding to this device special file exists. +	  </para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/media-ioc-device-info.xml b/Documentation/DocBook/media/v4l/media-ioc-device-info.xml new file mode 100644 index 00000000000..2ce521419e6 --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-ioc-device-info.xml @@ -0,0 +1,132 @@ +<refentry id="media-ioc-device-info"> +  <refmeta> +    <refentrytitle>ioctl MEDIA_IOC_DEVICE_INFO</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>MEDIA_IOC_DEVICE_INFO</refname> +    <refpurpose>Query device information</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct media_device_info *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>File descriptor returned by +	  <link linkend='media-func-open'><function>open()</function></link>.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>MEDIA_IOC_DEVICE_INFO</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>All media devices must support the <constant>MEDIA_IOC_DEVICE_INFO</constant> +    ioctl. To query device information, applications call the ioctl with a +    pointer to a &media-device-info;. The driver fills the structure and returns +    the information to the application. +    The ioctl never fails.</para> + +    <table pgwide="1" frame="none" id="media-device-info"> +      <title>struct <structname>media_device_info</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>driver</structfield>[16]</entry> +	    <entry><para>Name of the driver implementing the media API as a +	    NUL-terminated ASCII string. The driver version is stored in the +	    <structfield>driver_version</structfield> field.</para> +	    <para>Driver specific applications can use this information to +	    verify the driver identity. It is also useful to work around +	    known bugs, or to identify drivers in error reports.</para></entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>model</structfield>[32]</entry> +	    <entry>Device model name as a NUL-terminated UTF-8 string. The +	    device version is stored in the <structfield>device_version</structfield> +	    field and is not be appended to the model name.</entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>serial</structfield>[40]</entry> +	    <entry>Serial number as a NUL-terminated ASCII string.</entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>bus_info</structfield>[32]</entry> +	    <entry>Location of the device in the system as a NUL-terminated +	    ASCII string. This includes the bus type name (PCI, USB, ...) and a +	    bus-specific identifier.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>media_version</structfield></entry> +	    <entry>Media API version, formatted with the +	    <constant>KERNEL_VERSION()</constant> macro.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>hw_revision</structfield></entry> +	    <entry>Hardware device revision in a driver-specific format.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>media_version</structfield></entry> +	    <entry>Media device driver version, formatted with the +	    <constant>KERNEL_VERSION()</constant> macro. Together with the +	    <structfield>driver</structfield> field this identifies a particular +	    driver.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[31]</entry> +	    <entry>Reserved for future extensions. Drivers and applications must +	    set this array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +    <para>The <structfield>serial</structfield> and <structfield>bus_info</structfield> +    fields can be used to distinguish between multiple instances of otherwise +    identical hardware. The serial number takes precedence when provided and can +    be assumed to be unique. If the serial number is an empty string, the +    <structfield>bus_info</structfield> field can be used instead. The +    <structfield>bus_info</structfield> field is guaranteed to be unique, but +    can vary across reboots or device unplug/replug.</para> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml b/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml new file mode 100644 index 00000000000..116c301656e --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml @@ -0,0 +1,318 @@ +<refentry id="media-ioc-enum-entities"> +  <refmeta> +    <refentrytitle>ioctl MEDIA_IOC_ENUM_ENTITIES</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>MEDIA_IOC_ENUM_ENTITIES</refname> +    <refpurpose>Enumerate entities and their properties</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct media_entity_desc *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>File descriptor returned by +	  <link linkend='media-func-open'><function>open()</function></link>.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>MEDIA_IOC_ENUM_ENTITIES</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> +    <para>To query the attributes of an entity, applications set the id field +    of a &media-entity-desc; structure and call the MEDIA_IOC_ENUM_ENTITIES +    ioctl with a pointer to this structure. The driver fills the rest of the +    structure or returns an &EINVAL; when the id is invalid.</para> +    <para>Entities can be enumerated by or'ing the id with the +    <constant>MEDIA_ENT_ID_FLAG_NEXT</constant> flag. The driver will return +    information about the entity with the smallest id strictly larger than the +    requested one ('next entity'), or the &EINVAL; if there is none.</para> +    <para>Entity IDs can be non-contiguous. Applications must +    <emphasis>not</emphasis> try to enumerate entities by calling +    MEDIA_IOC_ENUM_ENTITIES with increasing id's until they get an error.</para> +    <para>Two or more entities that share a common non-zero +    <structfield>group_id</structfield> value are considered as logically +    grouped. Groups are used to report +    <itemizedlist> +      <listitem><para>ALSA, VBI and video nodes that carry the same media +      stream</para></listitem> +      <listitem><para>lens and flash controllers associated with a sensor</para></listitem> +    </itemizedlist> +    </para> + +    <table pgwide="1" frame="none" id="media-entity-desc"> +      <title>struct <structname>media_entity_desc</structname></title> +      <tgroup cols="5"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<colspec colname="c5" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Entity id, set by the application. When the id is or'ed with +	    <constant>MEDIA_ENT_ID_FLAG_NEXT</constant>, the driver clears the +	    flag and returns the first entity with a larger id.</entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Entity name as an UTF-8 NULL-terminated string.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Entity type, see <xref linkend="media-entity-type" /> for details.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>revision</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Entity revision in a driver/hardware specific format.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Entity flags, see <xref linkend="media-entity-flag" /> for details.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>group_id</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Entity group ID</entry> +	  </row> +	  <row> +	    <entry>__u16</entry> +	    <entry><structfield>pads</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Number of pads</entry> +	  </row> +	  <row> +	    <entry>__u16</entry> +	    <entry><structfield>links</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Total number of outbound links. Inbound links are not counted +	    in this field.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct</entry> +	    <entry><structfield>v4l</structfield></entry> +	    <entry></entry> +	    <entry>Valid for V4L sub-devices and nodes only.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>major</structfield></entry> +	    <entry>V4L device node major number. For V4L sub-devices with no +	    device node, set by the driver to 0.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>minor</structfield></entry> +	    <entry>V4L device node minor number. For V4L sub-devices with no +	    device node, set by the driver to 0.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct</entry> +	    <entry><structfield>fb</structfield></entry> +	    <entry></entry> +	    <entry>Valid for frame buffer nodes only.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>major</structfield></entry> +	    <entry>Frame buffer device node major number.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>minor</structfield></entry> +	    <entry>Frame buffer device node minor number.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct</entry> +	    <entry><structfield>alsa</structfield></entry> +	    <entry></entry> +	    <entry>Valid for ALSA devices only.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>card</structfield></entry> +	    <entry>ALSA card number</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>device</structfield></entry> +	    <entry>ALSA device number</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>subdevice</structfield></entry> +	    <entry>ALSA sub-device number</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>int</entry> +	    <entry><structfield>dvb</structfield></entry> +	    <entry></entry> +	    <entry>DVB card number</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u8</entry> +	    <entry><structfield>raw</structfield>[180]</entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="media-entity-type"> +      <title>Media entity types</title> +      <tgroup cols="2"> +        <colspec colname="c1"/> +        <colspec colname="c2"/> +	<tbody valign="top"> +	  <row> +	    <entry><constant>MEDIA_ENT_T_DEVNODE</constant></entry> +	    <entry>Unknown device node</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_DEVNODE_V4L</constant></entry> +	    <entry>V4L video, radio or vbi device node</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_DEVNODE_FB</constant></entry> +	    <entry>Frame buffer device node</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_DEVNODE_ALSA</constant></entry> +	    <entry>ALSA card</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_DEVNODE_DVB</constant></entry> +	    <entry>DVB card</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV</constant></entry> +	    <entry>Unknown V4L sub-device</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_SENSOR</constant></entry> +	    <entry>Video sensor</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_FLASH</constant></entry> +	    <entry>Flash controller</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_LENS</constant></entry> +	    <entry>Lens controller</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_DECODER</constant></entry> +	    <entry>Video decoder, the basic function of the video decoder is to +	    accept analogue video from a wide variety of sources such as +	    broadcast, DVD players, cameras and video cassette recorders, in +	    either NTSC, PAL or HD format and still occasionally SECAM, separate +	    it into its component parts, luminance and chrominance, and output +	    it in some digital video standard, with appropriate embedded timing +	    signals.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="media-entity-flag"> +      <title>Media entity flags</title> +      <tgroup cols="2"> +        <colspec colname="c1"/> +        <colspec colname="c2"/> +	<tbody valign="top"> +	  <row> +	    <entry><constant>MEDIA_ENT_FL_DEFAULT</constant></entry> +	    <entry>Default entity for its type. Used to discover the default +	    audio, VBI and video devices, the default camera sensor, ...</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &media-entity-desc; <structfield>id</structfield> references +	  a non-existing entity.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml b/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml new file mode 100644 index 00000000000..74fb394ec66 --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml @@ -0,0 +1,216 @@ +<refentry id="media-ioc-enum-links"> +  <refmeta> +    <refentrytitle>ioctl MEDIA_IOC_ENUM_LINKS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>MEDIA_IOC_ENUM_LINKS</refname> +    <refpurpose>Enumerate all pads and links for a given entity</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct media_links_enum *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>File descriptor returned by +	  <link linkend='media-func-open'><function>open()</function></link>.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>MEDIA_IOC_ENUM_LINKS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To enumerate pads and/or links for a given entity, applications set +    the entity field of a &media-links-enum; structure and initialize the +    &media-pad-desc; and &media-link-desc; structure arrays pointed by the +    <structfield>pads</structfield> and <structfield>links</structfield> fields. +    They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this +    structure.</para> +    <para>If the <structfield>pads</structfield> field is not NULL, the driver +    fills the <structfield>pads</structfield> array with information about the +    entity's pads. The array must have enough room to store all the entity's +    pads. The number of pads can be retrieved with the &MEDIA-IOC-ENUM-ENTITIES; +    ioctl.</para> +    <para>If the <structfield>links</structfield> field is not NULL, the driver +    fills the <structfield>links</structfield> array with information about the +    entity's outbound links. The array must have enough room to store all the +    entity's outbound links. The number of outbound links can be retrieved with +    the &MEDIA-IOC-ENUM-ENTITIES; ioctl.</para> +    <para>Only forward links that originate at one of the entity's source pads +    are returned during the enumeration process.</para> + +    <table pgwide="1" frame="none" id="media-links-enum"> +      <title>struct <structname>media_links_enum</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>entity</structfield></entry> +	    <entry>Entity id, set by the application.</entry> +	  </row> +	  <row> +	    <entry>&media-pad-desc;</entry> +	    <entry>*<structfield>pads</structfield></entry> +	    <entry>Pointer to a pads array allocated by the application. Ignored +	    if NULL.</entry> +	  </row> +	  <row> +	    <entry>&media-link-desc;</entry> +	    <entry>*<structfield>links</structfield></entry> +	    <entry>Pointer to a links array allocated by the application. Ignored +	    if NULL.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="media-pad-desc"> +      <title>struct <structname>media_pad_desc</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>entity</structfield></entry> +	    <entry>ID of the entity this pad belongs to.</entry> +	  </row> +	  <row> +	    <entry>__u16</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>0-based pad index.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="media-pad-flag"> +      <title>Media pad flags</title> +      <tgroup cols="2"> +        <colspec colname="c1"/> +        <colspec colname="c2"/> +	<tbody valign="top"> +	  <row> +	    <entry><constant>MEDIA_PAD_FL_SINK</constant></entry> +	    <entry>Input pad, relative to the entity. Input pads sink data and +	    are targets of links.</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_PAD_FL_SOURCE</constant></entry> +	    <entry>Output pad, relative to the entity. Output pads source data +	    and are origins of links.</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_PAD_FL_MUST_CONNECT</constant></entry> +	    <entry>If this flag is set and the pad is linked to any other +	    pad, then at least one of those links must be enabled for the +	    entity to be able to stream. There could be temporary reasons +	    (e.g. device configuration dependent) for the pad to need +	    enabled links even when this flag isn't set; the absence of the +	    flag doesn't imply there is none.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="media-link-desc"> +      <title>struct <structname>media_link_desc</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>&media-pad-desc;</entry> +	    <entry><structfield>source</structfield></entry> +	    <entry>Pad at the origin of this link.</entry> +	  </row> +	  <row> +	    <entry>&media-pad-desc;</entry> +	    <entry><structfield>sink</structfield></entry> +	    <entry>Pad at the target of this link.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Link flags, see <xref linkend="media-link-flag" /> for more details.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="media-link-flag"> +      <title>Media link flags</title> +      <tgroup cols="2"> +        <colspec colname="c1"/> +        <colspec colname="c2"/> +	<tbody valign="top"> +	  <row> +	    <entry><constant>MEDIA_LNK_FL_ENABLED</constant></entry> +	    <entry>The link is enabled and can be used to transfer media data. +	    When two or more links target a sink pad, only one of them can be +	    enabled at a time.</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_LNK_FL_IMMUTABLE</constant></entry> +	    <entry>The link enabled state can't be modified at runtime. An +	    immutable link is always enabled.</entry> +	  </row> +	  <row> +	    <entry><constant>MEDIA_LNK_FL_DYNAMIC</constant></entry> +	    <entry>The link enabled state can be modified during streaming. This +	    flag is set by drivers and is read-only for applications.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +    <para>One and only one of <constant>MEDIA_PAD_FL_SINK</constant> and +    <constant>MEDIA_PAD_FL_SOURCE</constant> must be set for every pad.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &media-links-enum; <structfield>id</structfield> references +	  a non-existing entity.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml b/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml new file mode 100644 index 00000000000..fc2e522ee65 --- /dev/null +++ b/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml @@ -0,0 +1,84 @@ +<refentry id="media-ioc-setup-link"> +  <refmeta> +    <refentrytitle>ioctl MEDIA_IOC_SETUP_LINK</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>MEDIA_IOC_SETUP_LINK</refname> +    <refpurpose>Modify the properties of a link</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct media_link_desc *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>File descriptor returned by +	  <link linkend='media-func-open'><function>open()</function></link>.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>MEDIA_IOC_SETUP_LINK</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To change link properties applications fill a &media-link-desc; with +    link identification information (source and sink pad) and the new requested +    link flags. They then call the MEDIA_IOC_SETUP_LINK ioctl with a pointer to +    that structure.</para> +    <para>The only configurable property is the <constant>ENABLED</constant> +    link flag to enable/disable a link. Links marked with the +    <constant>IMMUTABLE</constant> link flag can not be enabled or disabled. +    </para> +    <para>Link configuration has no side effect on other links. If an enabled +    link at the sink pad prevents the link from being enabled, the driver +    returns with an &EBUSY;.</para> +    <para>Only links marked with the <constant>DYNAMIC</constant> link flag can +    be enabled/disabled while streaming media data. Attempting to enable or +    disable a streaming non-dynamic link will return an &EBUSY;.</para> +    <para>If the specified link can't be found the driver returns with an +    &EINVAL;.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &media-link-desc; references a non-existing link, or the +	  link is immutable and an attempt to modify its configuration was made. +	  </para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pipeline.pdf b/Documentation/DocBook/media/v4l/pipeline.pdf Binary files differnew file mode 100644 index 00000000000..ee3e37f04b6 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pipeline.pdf diff --git a/Documentation/DocBook/media/v4l/pixfmt-grey.xml b/Documentation/DocBook/media/v4l/pixfmt-grey.xml new file mode 100644 index 00000000000..bee970d3f76 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-grey.xml @@ -0,0 +1,62 @@ +    <refentry id="V4L2-PIX-FMT-GREY"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_GREY ('GREY')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_GREY</constant></refname> +	<refpurpose>Grey-scale image</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is a grey-scale image. It is really a degenerate +Y'CbCr format which simply contains no Cb or Cr data.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_GREY</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-m420.xml b/Documentation/DocBook/media/v4l/pixfmt-m420.xml new file mode 100644 index 00000000000..aadae92c5d0 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-m420.xml @@ -0,0 +1,139 @@ +    <refentry id="V4L2-PIX-FMT-M420"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_M420 ('M420')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_M420</constant></refname> +	<refpurpose>Format with ½ horizontal and vertical chroma +	resolution, also known as YUV 4:2:0. Hybrid plane line-interleaved +	layout.</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>M420 is a YUV format with ½ horizontal and vertical chroma +	subsampling (YUV 4:2:0). Pixels are organized as interleaved luma and +	chroma planes. Two lines of luma data are followed by one line of chroma +	data.</para> +	<para>The luma plane has one byte per pixel. The chroma plane contains +	interleaved CbCr pixels subsampled by ½ in the horizontal and +	vertical directions. Each CbCr pair belongs to four pixels. For example, +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>, +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.</para> + +	<para>All line lengths are identical: if the Y lines include pad bytes +	so do the CbCr lines.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_M420</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 20:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv12.xml b/Documentation/DocBook/media/v4l/pixfmt-nv12.xml new file mode 100644 index 00000000000..84dd4fd7cb8 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-nv12.xml @@ -0,0 +1,143 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-NV12"><constant>V4L2_PIX_FMT_NV12</constant></refname> +	<refname id="V4L2-PIX-FMT-NV21"><constant>V4L2_PIX_FMT_NV21</constant></refname> +	<refpurpose>Formats with ½ horizontal and vertical +chroma resolution, also known as YUV 4:2:0. One luminance and one +chrominance plane with alternating chroma samples as opposed to +<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>These are two-plane versions of the YUV 4:2:0 format. +The three components are separated into two sub-images or planes. The +Y plane is first. The Y plane has one byte per pixel. For +<constant>V4L2_PIX_FMT_NV12</constant>, a combined CbCr plane +immediately follows the Y plane in memory.  The CbCr plane is the same +width, in bytes, as the Y plane (and of the image), but is half as +tall in pixels. Each CbCr pair belongs to four pixels. For example, +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>, +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>. +<constant>V4L2_PIX_FMT_NV21</constant> is the same except the Cb and +Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para> + +	<para>If the Y plane has pad bytes after each row, then the +CbCr plane has as many pad bytes after its rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_NV12</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 20:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml b/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml new file mode 100644 index 00000000000..f3a3d459fcd --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml @@ -0,0 +1,153 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-NV12M"><constant>V4L2_PIX_FMT_NV12M</constant></refname> +	<refname id="V4L2-PIX-FMT-NV21M"><constant>V4L2_PIX_FMT_NV21M</constant></refname> +	<refname id="V4L2-PIX-FMT-NV12MT-16X16"><constant>V4L2_PIX_FMT_NV12MT_16X16</constant></refname> +	<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV12</constant> and <constant>V4L2_PIX_FMT_NV21</constant> with planes +	  non contiguous in memory. </refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is a multi-planar, two-plane version of the YUV 4:2:0 format. +The three components are separated into two sub-images or planes. +<constant>V4L2_PIX_FMT_NV12M</constant> differs from <constant>V4L2_PIX_FMT_NV12 +</constant> in that the two planes are non-contiguous in memory, i.e. the chroma +plane do not necessarily immediately follows the luma plane. +The luminance data occupies the first plane. The Y plane has one byte per pixel. +In the second plane there is a chrominance data with alternating chroma samples. +The CbCr plane is the same width, in bytes, as the Y plane (and of the image), +but is half as tall in pixels. Each CbCr pair belongs to four pixels. For example, +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>, +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>. +<constant>V4L2_PIX_FMT_NV12MT_16X16</constant> is the tiled version of +<constant>V4L2_PIX_FMT_NV12M</constant> with 16x16 macroblock tiles. Here pixels +are arranged in 16x16 2D tiles and tiles are arranged in linear order in memory. +<constant>V4L2_PIX_FMT_NV21M</constant> is the same as <constant>V4L2_PIX_FMT_NV12M</constant> +except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para> + +	<para><constant>V4L2_PIX_FMT_NV12M</constant> is intended to be +used only in drivers and applications that support the multi-planar API, +described in <xref linkend="planar-apis"/>. </para> + +	<para>If the Y plane has pad bytes after each row, then the +CbCr plane has as many pad bytes after its rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_NV12M</constant> 4 × 4 pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start0 + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>start1 + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start1 + 4:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml b/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml new file mode 100644 index 00000000000..8a70a1707b7 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml @@ -0,0 +1,66 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_NV12MT ('TM12')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-NV12MT"><constant>V4L2_PIX_FMT_NV12MT +</constant></refname> +	<refpurpose>Formats with ½ horizontal and vertical +chroma resolution. This format has two planes - one for luminance and one for +chrominance. Chroma samples are interleaved. The difference to +<constant>V4L2_PIX_FMT_NV12</constant> is the memory layout. Pixels are +grouped in macroblocks of 64x32 size. The order of macroblocks in memory is +also not standard. +	</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is the two-plane versions of the YUV 4:2:0 format where data +is grouped into 64x32 macroblocks. The three components are separated into two +sub-images or planes. The Y plane has one byte per pixel and pixels are grouped +into 64x32 macroblocks. The CbCr plane has the same width, in bytes, as the Y +plane (and the image), but is half as tall in pixels. The chroma plane is also +grouped into 64x32 macroblocks.</para> +	<para>Width of the buffer has to be aligned to the multiple of 128, and +height alignment is 32. Every four adjacent buffers - two horizontally and two +vertically are grouped together and are located in memory in Z or flipped Z +order. </para> +	<para>Layout of macroblocks in memory is presented in the following +figure.</para> +	<para><figure id="nv12mt"> +	    <title><constant>V4L2_PIX_FMT_NV12MT</constant> macroblock Z shape +memory layout</title> +	    <mediaobject> +	      <imageobject> +		<imagedata fileref="nv12mt.gif" format="GIF" /> +	      </imageobject> +	    </mediaobject> +	</figure> +	The requirement that width is multiple of 128 is implemented because, +the Z shape cannot be cut in half horizontally. In case the vertical resolution +of macroblocks is odd then the last row of macroblocks is arranged in a linear +order.  </para> +	<para>In case of chroma the layout is identical. Cb and Cr samples are +interleaved. Height of the buffer is aligned to 32. +	</para> +	<example> +	  <title>Memory layout of macroblocks in <constant>V4L2_PIX_FMT_NV12 +</constant> format pixel image - extreme case</title> +	<para> +	<figure id="nv12mt_ex"> +	    <title>Example <constant>V4L2_PIX_FMT_NV12MT</constant> memory +layout of macroblocks</title> +	    <mediaobject> +	      <imageobject> +		<imagedata fileref="nv12mt_example.gif" format="GIF" /> +	      </imageobject> +	    </mediaobject> +	</figure> +	Memory layout of macroblocks of <constant>V4L2_PIX_FMT_NV12MT +</constant> format in most extreme case. +	</para> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16.xml b/Documentation/DocBook/media/v4l/pixfmt-nv16.xml new file mode 100644 index 00000000000..8ae1f8a810d --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-nv16.xml @@ -0,0 +1,166 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_NV16 ('NV16'), V4L2_PIX_FMT_NV61 ('NV61')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-NV16"><constant>V4L2_PIX_FMT_NV16</constant></refname> +	<refname id="V4L2-PIX-FMT-NV61"><constant>V4L2_PIX_FMT_NV61</constant></refname> +	<refpurpose>Formats with ½ horizontal +chroma resolution, also known as YUV 4:2:2. One luminance and one +chrominance plane with alternating chroma samples as opposed to +<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>These are two-plane versions of the YUV 4:2:2 format. +The three components are separated into two sub-images or planes. The +Y plane is first. The Y plane has one byte per pixel. For +<constant>V4L2_PIX_FMT_NV16</constant>, a combined CbCr plane +immediately follows the Y plane in memory.  The CbCr plane is the same +width and height, in bytes, as the Y plane (and of the image). +Each CbCr pair belongs to two pixels. For example, +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>. +<constant>V4L2_PIX_FMT_NV61</constant> is the same except the Cb and +Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para> + +	<para>If the Y plane has pad bytes after each row, then the +CbCr plane has as many pad bytes after its rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_NV16</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 20:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 28:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml new file mode 100644 index 00000000000..fb2b5e35d66 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml @@ -0,0 +1,170 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-NV16M"><constant>V4L2_PIX_FMT_NV16M</constant></refname> +	<refname id="V4L2-PIX-FMT-NV61M"><constant>V4L2_PIX_FMT_NV61M</constant></refname> +	<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV16</constant> and <constant>V4L2_PIX_FMT_NV61</constant> with planes +	  non contiguous in memory. </refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is a multi-planar, two-plane version of the YUV 4:2:2 format. +The three components are separated into two sub-images or planes. +<constant>V4L2_PIX_FMT_NV16M</constant> differs from <constant>V4L2_PIX_FMT_NV16 +</constant> in that the two planes are non-contiguous in memory, i.e. the chroma +plane does not necessarily immediately follow the luma plane. +The luminance data occupies the first plane. The Y plane has one byte per pixel. +In the second plane there is chrominance data with alternating chroma samples. +The CbCr plane is the same width and height, in bytes, as the Y plane. +Each CbCr pair belongs to two pixels. For example, +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>. +<constant>V4L2_PIX_FMT_NV61M</constant> is the same as <constant>V4L2_PIX_FMT_NV16M</constant> +except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para> + +	<para><constant>V4L2_PIX_FMT_NV16M</constant> and +<constant>V4L2_PIX_FMT_NV61M</constant> are intended to be used only in drivers +and applications that support the multi-planar API, described in +<xref linkend="planar-apis"/>. </para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_NV16M</constant> 4 × 4 pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start0 + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>start1 + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>02</subscript></entry> +		      <entry>Cr<subscript>02</subscript></entry> +		    </row> +		    <row> +		      <entry>start1 + 4:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>12</subscript></entry> +		      <entry>Cr<subscript>12</subscript></entry> +		    </row> +		    <row> +		      <entry>start1 + 8:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Cb<subscript>22</subscript></entry> +		      <entry>Cr<subscript>22</subscript></entry> +		    </row> +		    <row> +		      <entry>start1 + 12:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Cb<subscript>32</subscript></entry> +		      <entry>Cr<subscript>32</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml new file mode 100644 index 00000000000..fb255f2ca9d --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml @@ -0,0 +1,121 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-NV24"><constant>V4L2_PIX_FMT_NV24</constant></refname> +	<refname id="V4L2-PIX-FMT-NV42"><constant>V4L2_PIX_FMT_NV42</constant></refname> +	<refpurpose>Formats with full horizontal and vertical +chroma resolutions, also known as YUV 4:4:4. One luminance and one +chrominance plane with alternating chroma samples as opposed to +<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>These are two-plane versions of the YUV 4:4:4 format. The three +	components are separated into two sub-images or planes. The Y plane is +	first, with each Y sample stored in one byte per pixel. For +	<constant>V4L2_PIX_FMT_NV24</constant>, a combined CbCr plane +	immediately follows the Y plane in memory. The CbCr plane has the same +	width and height, in pixels, as the Y plane (and the image). Each line +	contains one CbCr pair per pixel, with each Cb and Cr sample stored in +	one byte. <constant>V4L2_PIX_FMT_NV42</constant> is the same except that +	the Cb and Cr samples are swapped, the CrCb plane starts with a Cr +	sample.</para> + +	<para>If the Y plane has pad bytes after each row, then the CbCr plane +	has twice as many pad bytes after its rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_NV24</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="9" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		      <entry>Cb<subscript>02</subscript></entry> +		      <entry>Cr<subscript>02</subscript></entry> +		      <entry>Cb<subscript>03</subscript></entry> +		      <entry>Cr<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		      <entry>Cb<subscript>12</subscript></entry> +		      <entry>Cr<subscript>12</subscript></entry> +		      <entry>Cb<subscript>13</subscript></entry> +		      <entry>Cr<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 32:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		      <entry>Cb<subscript>22</subscript></entry> +		      <entry>Cr<subscript>22</subscript></entry> +		      <entry>Cb<subscript>23</subscript></entry> +		      <entry>Cr<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 40:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		      <entry>Cb<subscript>32</subscript></entry> +		      <entry>Cr<subscript>32</subscript></entry> +		      <entry>Cb<subscript>33</subscript></entry> +		      <entry>Cr<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml new file mode 100644 index 00000000000..e1c4f8b4c0b --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml @@ -0,0 +1,520 @@ +<refentry id="packed-rgb"> +  <refmeta> +    <refentrytitle>Packed RGB formats</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname>Packed RGB formats</refname> +    <refpurpose>Packed RGB formats</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>These formats are designed to match the pixel formats of +typical PC graphics frame buffers. They occupy 8, 16, 24 or 32 bits +per pixel. These are all packed-pixel formats, meaning all the data +for a pixel lie next to each other in memory.</para> + +    <para>When one of these formats is used, drivers shall report the +colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para> + +    <table pgwide="1" frame="none" id="rgb-formats"> +      <title>Packed RGB Image Formats</title> +      <tgroup cols="37" align="center"> +	<colspec colname="id" align="left" /> +	<colspec colname="fourcc" /> +	<colspec colname="bit" /> + +	<colspec colnum="4" colname="b07" align="center" /> +	<colspec colnum="5" colname="b06" align="center" /> +	<colspec colnum="6" colname="b05" align="center" /> +	<colspec colnum="7" colname="b04" align="center" /> +	<colspec colnum="8" colname="b03" align="center" /> +	<colspec colnum="9" colname="b02" align="center" /> +	<colspec colnum="10" colname="b01" align="center" /> +	<colspec colnum="11" colname="b00" align="center" /> + +	<colspec colnum="13" colname="b17" align="center" /> +	<colspec colnum="14" colname="b16" align="center" /> +	<colspec colnum="15" colname="b15" align="center" /> +	<colspec colnum="16" colname="b14" align="center" /> +	<colspec colnum="17" colname="b13" align="center" /> +	<colspec colnum="18" colname="b12" align="center" /> +	<colspec colnum="19" colname="b11" align="center" /> +	<colspec colnum="20" colname="b10" align="center" /> + +	<colspec colnum="22" colname="b27" align="center" /> +	<colspec colnum="23" colname="b26" align="center" /> +	<colspec colnum="24" colname="b25" align="center" /> +	<colspec colnum="25" colname="b24" align="center" /> +	<colspec colnum="26" colname="b23" align="center" /> +	<colspec colnum="27" colname="b22" align="center" /> +	<colspec colnum="28" colname="b21" align="center" /> +	<colspec colnum="29" colname="b20" align="center" /> + +	<colspec colnum="31" colname="b37" align="center" /> +	<colspec colnum="32" colname="b36" align="center" /> +	<colspec colnum="33" colname="b35" align="center" /> +	<colspec colnum="34" colname="b34" align="center" /> +	<colspec colnum="35" colname="b33" align="center" /> +	<colspec colnum="36" colname="b32" align="center" /> +	<colspec colnum="37" colname="b31" align="center" /> +	<colspec colnum="38" colname="b30" align="center" /> + +	<spanspec namest="b07" nameend="b00" spanname="b0" /> +	<spanspec namest="b17" nameend="b10" spanname="b1" /> +	<spanspec namest="b27" nameend="b20" spanname="b2" /> +	<spanspec namest="b37" nameend="b30" spanname="b3" /> +	<thead> +	  <row> +	    <entry>Identifier</entry> +	    <entry>Code</entry> +	    <entry> </entry> +	    <entry spanname="b0">Byte 0 in memory</entry> +	    <entry spanname="b1">Byte 1</entry> +	    <entry spanname="b2">Byte 2</entry> +	    <entry spanname="b3">Byte 3</entry> +	  </row> +	  <row> +	    <entry> </entry> +	    <entry> </entry> +	    <entry>Bit</entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row id="V4L2-PIX-FMT-RGB332"> +	    <entry><constant>V4L2_PIX_FMT_RGB332</constant></entry> +	    <entry>'RGB1'</entry> +	    <entry></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB444"> +	    <entry><constant>V4L2_PIX_FMT_RGB444</constant></entry> +	    <entry>'R444'</entry> +	    <entry></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>a<subscript>3</subscript></entry> +	    <entry>a<subscript>2</subscript></entry> +	    <entry>a<subscript>1</subscript></entry> +	    <entry>a<subscript>0</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB555"> +	    <entry><constant>V4L2_PIX_FMT_RGB555</constant></entry> +	    <entry>'RGBO'</entry> +	    <entry></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>a</entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB565"> +	    <entry><constant>V4L2_PIX_FMT_RGB565</constant></entry> +	    <entry>'RGBP'</entry> +	    <entry></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB555X"> +	    <entry><constant>V4L2_PIX_FMT_RGB555X</constant></entry> +	    <entry>'RGBQ'</entry> +	    <entry></entry> +	    <entry>a</entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB565X"> +	    <entry><constant>V4L2_PIX_FMT_RGB565X</constant></entry> +	    <entry>'RGBR'</entry> +	    <entry></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-BGR666"> +	    <entry><constant>V4L2_PIX_FMT_BGR666</constant></entry> +	    <entry>'BGRH'</entry> +	    <entry></entry> +	    <entry>b<subscript>5</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry>r<subscript>5</subscript></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-BGR24"> +	    <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> +	    <entry>'BGR3'</entry> +	    <entry></entry> +	    <entry>b<subscript>7</subscript></entry> +	    <entry>b<subscript>6</subscript></entry> +	    <entry>b<subscript>5</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>7</subscript></entry> +	    <entry>g<subscript>6</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>r<subscript>7</subscript></entry> +	    <entry>r<subscript>6</subscript></entry> +	    <entry>r<subscript>5</subscript></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB24"> +	    <entry><constant>V4L2_PIX_FMT_RGB24</constant></entry> +	    <entry>'RGB3'</entry> +	    <entry></entry> +	    <entry>r<subscript>7</subscript></entry> +	    <entry>r<subscript>6</subscript></entry> +	    <entry>r<subscript>5</subscript></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>7</subscript></entry> +	    <entry>g<subscript>6</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>b<subscript>7</subscript></entry> +	    <entry>b<subscript>6</subscript></entry> +	    <entry>b<subscript>5</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-BGR32"> +	    <entry><constant>V4L2_PIX_FMT_BGR32</constant></entry> +	    <entry>'BGR4'</entry> +	    <entry></entry> +	    <entry>b<subscript>7</subscript></entry> +	    <entry>b<subscript>6</subscript></entry> +	    <entry>b<subscript>5</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>7</subscript></entry> +	    <entry>g<subscript>6</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>r<subscript>7</subscript></entry> +	    <entry>r<subscript>6</subscript></entry> +	    <entry>r<subscript>5</subscript></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>a<subscript>7</subscript></entry> +	    <entry>a<subscript>6</subscript></entry> +	    <entry>a<subscript>5</subscript></entry> +	    <entry>a<subscript>4</subscript></entry> +	    <entry>a<subscript>3</subscript></entry> +	    <entry>a<subscript>2</subscript></entry> +	    <entry>a<subscript>1</subscript></entry> +	    <entry>a<subscript>0</subscript></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-RGB32"> +	    <entry><constant>V4L2_PIX_FMT_RGB32</constant></entry> +	    <entry>'RGB4'</entry> +	    <entry></entry> +	    <entry>a<subscript>7</subscript></entry> +	    <entry>a<subscript>6</subscript></entry> +	    <entry>a<subscript>5</subscript></entry> +	    <entry>a<subscript>4</subscript></entry> +	    <entry>a<subscript>3</subscript></entry> +	    <entry>a<subscript>2</subscript></entry> +	    <entry>a<subscript>1</subscript></entry> +	    <entry>a<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>r<subscript>7</subscript></entry> +	    <entry>r<subscript>6</subscript></entry> +	    <entry>r<subscript>5</subscript></entry> +	    <entry>r<subscript>4</subscript></entry> +	    <entry>r<subscript>3</subscript></entry> +	    <entry>r<subscript>2</subscript></entry> +	    <entry>r<subscript>1</subscript></entry> +	    <entry>r<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>g<subscript>7</subscript></entry> +	    <entry>g<subscript>6</subscript></entry> +	    <entry>g<subscript>5</subscript></entry> +	    <entry>g<subscript>4</subscript></entry> +	    <entry>g<subscript>3</subscript></entry> +	    <entry>g<subscript>2</subscript></entry> +	    <entry>g<subscript>1</subscript></entry> +	    <entry>g<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>b<subscript>7</subscript></entry> +	    <entry>b<subscript>6</subscript></entry> +	    <entry>b<subscript>5</subscript></entry> +	    <entry>b<subscript>4</subscript></entry> +	    <entry>b<subscript>3</subscript></entry> +	    <entry>b<subscript>2</subscript></entry> +	    <entry>b<subscript>1</subscript></entry> +	    <entry>b<subscript>0</subscript></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <para>Bit 7 is the most significant bit. The value of the a = alpha +bits is undefined when reading from the driver, ignored when writing +to the driver, except when alpha blending has been negotiated for a +<link linkend="overlay">Video Overlay</link> or <link linkend="osd"> +Video Output Overlay</link> or when the alpha component has been configured +for a <link linkend="capture">Video Capture</link> by means of <link +linkend="v4l2-alpha-component"> <constant>V4L2_CID_ALPHA_COMPONENT +</constant> </link> control.</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_BGR24</constant> 4 × 4 pixel +image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte. +	      <informaltable frame="none"> +	    <tgroup cols="13" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>B<subscript>00</subscript></entry> +		  <entry>G<subscript>00</subscript></entry> +		  <entry>R<subscript>00</subscript></entry> +		  <entry>B<subscript>01</subscript></entry> +		  <entry>G<subscript>01</subscript></entry> +		  <entry>R<subscript>01</subscript></entry> +		  <entry>B<subscript>02</subscript></entry> +		  <entry>G<subscript>02</subscript></entry> +		  <entry>R<subscript>02</subscript></entry> +		  <entry>B<subscript>03</subscript></entry> +		  <entry>G<subscript>03</subscript></entry> +		  <entry>R<subscript>03</subscript></entry> +		</row> +		<row> +		  <entry>start + 12:</entry> +		  <entry>B<subscript>10</subscript></entry> +		  <entry>G<subscript>10</subscript></entry> +		  <entry>R<subscript>10</subscript></entry> +		  <entry>B<subscript>11</subscript></entry> +		  <entry>G<subscript>11</subscript></entry> +		  <entry>R<subscript>11</subscript></entry> +		  <entry>B<subscript>12</subscript></entry> +		  <entry>G<subscript>12</subscript></entry> +		  <entry>R<subscript>12</subscript></entry> +		  <entry>B<subscript>13</subscript></entry> +		  <entry>G<subscript>13</subscript></entry> +		  <entry>R<subscript>13</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>B<subscript>20</subscript></entry> +		  <entry>G<subscript>20</subscript></entry> +		  <entry>R<subscript>20</subscript></entry> +		  <entry>B<subscript>21</subscript></entry> +		  <entry>G<subscript>21</subscript></entry> +		  <entry>R<subscript>21</subscript></entry> +		  <entry>B<subscript>22</subscript></entry> +		  <entry>G<subscript>22</subscript></entry> +		  <entry>R<subscript>22</subscript></entry> +		  <entry>B<subscript>23</subscript></entry> +		  <entry>G<subscript>23</subscript></entry> +		  <entry>R<subscript>23</subscript></entry> +		</row> +		<row> +		  <entry>start + 36:</entry> +		  <entry>B<subscript>30</subscript></entry> +		  <entry>G<subscript>30</subscript></entry> +		  <entry>R<subscript>30</subscript></entry> +		  <entry>B<subscript>31</subscript></entry> +		  <entry>G<subscript>31</subscript></entry> +		  <entry>R<subscript>31</subscript></entry> +		  <entry>B<subscript>32</subscript></entry> +		  <entry>G<subscript>32</subscript></entry> +		  <entry>R<subscript>32</subscript></entry> +		  <entry>B<subscript>33</subscript></entry> +		  <entry>G<subscript>33</subscript></entry> +		  <entry>R<subscript>33</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	      </informaltable> +	    </para> +      </formalpara> +    </example> + +    <para>A test utility to determine which RGB formats a driver +actually supports is available from the LinuxTV v4l-dvb repository. +See &v4l-dvb; for access instructions.</para> + +  </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml new file mode 100644 index 00000000000..33fa5a47a86 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml @@ -0,0 +1,236 @@ +<refentry id="packed-yuv"> +  <refmeta> +    <refentrytitle>Packed YUV formats</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname>Packed YUV formats</refname> +    <refpurpose>Packed YUV formats</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>Similar to the packed RGB formats these formats store +the Y, Cb and Cr component of each pixel in one 16 or 32 bit +word.</para> + +    <table pgwide="1" frame="none"> +      <title>Packed YUV Image Formats</title> +      <tgroup cols="37" align="center"> +	<colspec colname="id" align="left" /> +	<colspec colname="fourcc" /> +	<colspec colname="bit" /> + +	<colspec colnum="4" colname="b07" align="center" /> +	<colspec colnum="5" colname="b06" align="center" /> +	<colspec colnum="6" colname="b05" align="center" /> +	<colspec colnum="7" colname="b04" align="center" /> +	<colspec colnum="8" colname="b03" align="center" /> +	<colspec colnum="9" colname="b02" align="center" /> +	<colspec colnum="10" colname="b01" align="center" /> +	<colspec colnum="11" colname="b00" align="center" /> + +	<colspec colnum="13" colname="b17" align="center" /> +	<colspec colnum="14" colname="b16" align="center" /> +	<colspec colnum="15" colname="b15" align="center" /> +	<colspec colnum="16" colname="b14" align="center" /> +	<colspec colnum="17" colname="b13" align="center" /> +	<colspec colnum="18" colname="b12" align="center" /> +	<colspec colnum="19" colname="b11" align="center" /> +	<colspec colnum="20" colname="b10" align="center" /> + +	<colspec colnum="22" colname="b27" align="center" /> +	<colspec colnum="23" colname="b26" align="center" /> +	<colspec colnum="24" colname="b25" align="center" /> +	<colspec colnum="25" colname="b24" align="center" /> +	<colspec colnum="26" colname="b23" align="center" /> +	<colspec colnum="27" colname="b22" align="center" /> +	<colspec colnum="28" colname="b21" align="center" /> +	<colspec colnum="29" colname="b20" align="center" /> + +	<colspec colnum="31" colname="b37" align="center" /> +	<colspec colnum="32" colname="b36" align="center" /> +	<colspec colnum="33" colname="b35" align="center" /> +	<colspec colnum="34" colname="b34" align="center" /> +	<colspec colnum="35" colname="b33" align="center" /> +	<colspec colnum="36" colname="b32" align="center" /> +	<colspec colnum="37" colname="b31" align="center" /> +	<colspec colnum="38" colname="b30" align="center" /> + +	<spanspec namest="b07" nameend="b00" spanname="b0" /> +	<spanspec namest="b17" nameend="b10" spanname="b1" /> +	<spanspec namest="b27" nameend="b20" spanname="b2" /> +	<spanspec namest="b37" nameend="b30" spanname="b3" /> +	<thead> +	  <row> +	    <entry>Identifier</entry> +	    <entry>Code</entry> +	    <entry> </entry> +	    <entry spanname="b0">Byte 0 in memory</entry> +	    <entry spanname="b1">Byte 1</entry> +	    <entry spanname="b2">Byte 2</entry> +	    <entry spanname="b3">Byte 3</entry> +	  </row> +	  <row> +	    <entry> </entry> +	    <entry> </entry> +	    <entry>Bit</entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	    <entry> </entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row id="V4L2-PIX-FMT-YUV444"> +	    <entry><constant>V4L2_PIX_FMT_YUV444</constant></entry> +	    <entry>'Y444'</entry> +	    <entry></entry> +	    <entry>Cb<subscript>3</subscript></entry> +	    <entry>Cb<subscript>2</subscript></entry> +	    <entry>Cb<subscript>1</subscript></entry> +	    <entry>Cb<subscript>0</subscript></entry> +	    <entry>Cr<subscript>3</subscript></entry> +	    <entry>Cr<subscript>2</subscript></entry> +	    <entry>Cr<subscript>1</subscript></entry> +	    <entry>Cr<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>a<subscript>3</subscript></entry> +	    <entry>a<subscript>2</subscript></entry> +	    <entry>a<subscript>1</subscript></entry> +	    <entry>a<subscript>0</subscript></entry> +	    <entry>Y'<subscript>3</subscript></entry> +	    <entry>Y'<subscript>2</subscript></entry> +	    <entry>Y'<subscript>1</subscript></entry> +	    <entry>Y'<subscript>0</subscript></entry> +	  </row> + +	  <row id="V4L2-PIX-FMT-YUV555"> +	    <entry><constant>V4L2_PIX_FMT_YUV555</constant></entry> +	    <entry>'YUVO'</entry> +	    <entry></entry> +	    <entry>Cb<subscript>2</subscript></entry> +	    <entry>Cb<subscript>1</subscript></entry> +	    <entry>Cb<subscript>0</subscript></entry> +	    <entry>Cr<subscript>4</subscript></entry> +	    <entry>Cr<subscript>3</subscript></entry> +	    <entry>Cr<subscript>2</subscript></entry> +	    <entry>Cr<subscript>1</subscript></entry> +	    <entry>Cr<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>a</entry> +	    <entry>Y'<subscript>4</subscript></entry> +	    <entry>Y'<subscript>3</subscript></entry> +	    <entry>Y'<subscript>2</subscript></entry> +	    <entry>Y'<subscript>1</subscript></entry> +	    <entry>Y'<subscript>0</subscript></entry> +	    <entry>Cb<subscript>4</subscript></entry> +	    <entry>Cb<subscript>3</subscript></entry> +	  </row> + +	  <row id="V4L2-PIX-FMT-YUV565"> +	    <entry><constant>V4L2_PIX_FMT_YUV565</constant></entry> +	    <entry>'YUVP'</entry> +	    <entry></entry> +	    <entry>Cb<subscript>2</subscript></entry> +	    <entry>Cb<subscript>1</subscript></entry> +	    <entry>Cb<subscript>0</subscript></entry> +	    <entry>Cr<subscript>4</subscript></entry> +	    <entry>Cr<subscript>3</subscript></entry> +	    <entry>Cr<subscript>2</subscript></entry> +	    <entry>Cr<subscript>1</subscript></entry> +	    <entry>Cr<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>Y'<subscript>4</subscript></entry> +	    <entry>Y'<subscript>3</subscript></entry> +	    <entry>Y'<subscript>2</subscript></entry> +	    <entry>Y'<subscript>1</subscript></entry> +	    <entry>Y'<subscript>0</subscript></entry> +	    <entry>Cb<subscript>5</subscript></entry> +	    <entry>Cb<subscript>4</subscript></entry> +	    <entry>Cb<subscript>3</subscript></entry> +	  </row> + +	  <row id="V4L2-PIX-FMT-YUV32"> +	    <entry><constant>V4L2_PIX_FMT_YUV32</constant></entry> +	    <entry>'YUV4'</entry> +	    <entry></entry> +	    <entry>a<subscript>7</subscript></entry> +	    <entry>a<subscript>6</subscript></entry> +	    <entry>a<subscript>5</subscript></entry> +	    <entry>a<subscript>4</subscript></entry> +	    <entry>a<subscript>3</subscript></entry> +	    <entry>a<subscript>2</subscript></entry> +	    <entry>a<subscript>1</subscript></entry> +	    <entry>a<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>Y'<subscript>7</subscript></entry> +	    <entry>Y'<subscript>6</subscript></entry> +	    <entry>Y'<subscript>5</subscript></entry> +	    <entry>Y'<subscript>4</subscript></entry> +	    <entry>Y'<subscript>3</subscript></entry> +	    <entry>Y'<subscript>2</subscript></entry> +	    <entry>Y'<subscript>1</subscript></entry> +	    <entry>Y'<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>Cb<subscript>7</subscript></entry> +	    <entry>Cb<subscript>6</subscript></entry> +	    <entry>Cb<subscript>5</subscript></entry> +	    <entry>Cb<subscript>4</subscript></entry> +	    <entry>Cb<subscript>3</subscript></entry> +	    <entry>Cb<subscript>2</subscript></entry> +	    <entry>Cb<subscript>1</subscript></entry> +	    <entry>Cb<subscript>0</subscript></entry> +	    <entry></entry> +	    <entry>Cr<subscript>7</subscript></entry> +	    <entry>Cr<subscript>6</subscript></entry> +	    <entry>Cr<subscript>5</subscript></entry> +	    <entry>Cr<subscript>4</subscript></entry> +	    <entry>Cr<subscript>3</subscript></entry> +	    <entry>Cr<subscript>2</subscript></entry> +	    <entry>Cr<subscript>1</subscript></entry> +	    <entry>Cr<subscript>0</subscript></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <para>Bit 7 is the most significant bit. The value of a = alpha +bits is undefined when reading from the driver, ignored when writing +to the driver, except when alpha blending has been negotiated for a +<link linkend="overlay">Video Overlay</link> or <link +linkend="osd">Video Output Overlay</link>.</para> + +  </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml b/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml new file mode 100644 index 00000000000..6494b05d84a --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml @@ -0,0 +1,83 @@ +<refentry id="V4L2-PIX-FMT-SBGGR16"> +  <refmeta> +    <refentrytitle>V4L2_PIX_FMT_SBGGR16 ('BYR2')</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname><constant>V4L2_PIX_FMT_SBGGR16</constant></refname> +    <refpurpose>Bayer RGB format</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>This format is similar to <link +linkend="V4L2-PIX-FMT-SBGGR8"> +<constant>V4L2_PIX_FMT_SBGGR8</constant></link>, except each pixel has +a depth of 16 bits. The least significant byte is stored at lower +memory addresses (little-endian). Note the actual sampling precision +may be lower than 16 bits, for example 10 bits per pixel with values +in range 0 to 1023.</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_SBGGR16</constant> 4 × 4 +pixel image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte. +	  <informaltable frame="none"> +	    <tgroup cols="5" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>B<subscript>00low</subscript></entry> +		  <entry>B<subscript>00high</subscript></entry> +		  <entry>G<subscript>01low</subscript></entry> +		  <entry>G<subscript>01high</subscript></entry> +		  <entry>B<subscript>02low</subscript></entry> +		  <entry>B<subscript>02high</subscript></entry> +		  <entry>G<subscript>03low</subscript></entry> +		  <entry>G<subscript>03high</subscript></entry> +		</row> +		<row> +		  <entry>start + 8:</entry> +		  <entry>G<subscript>10low</subscript></entry> +		  <entry>G<subscript>10high</subscript></entry> +		  <entry>R<subscript>11low</subscript></entry> +		  <entry>R<subscript>11high</subscript></entry> +		  <entry>G<subscript>12low</subscript></entry> +		  <entry>G<subscript>12high</subscript></entry> +		  <entry>R<subscript>13low</subscript></entry> +		  <entry>R<subscript>13high</subscript></entry> +		</row> +		<row> +		  <entry>start + 16:</entry> +		  <entry>B<subscript>20low</subscript></entry> +		  <entry>B<subscript>20high</subscript></entry> +		  <entry>G<subscript>21low</subscript></entry> +		  <entry>G<subscript>21high</subscript></entry> +		  <entry>B<subscript>22low</subscript></entry> +		  <entry>B<subscript>22high</subscript></entry> +		  <entry>G<subscript>23low</subscript></entry> +		  <entry>G<subscript>23high</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>G<subscript>30low</subscript></entry> +		  <entry>G<subscript>30high</subscript></entry> +		  <entry>R<subscript>31low</subscript></entry> +		  <entry>R<subscript>31high</subscript></entry> +		  <entry>G<subscript>32low</subscript></entry> +		  <entry>G<subscript>32high</subscript></entry> +		  <entry>R<subscript>33low</subscript></entry> +		  <entry>R<subscript>33high</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml b/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml new file mode 100644 index 00000000000..5eaf2b42d3f --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml @@ -0,0 +1,67 @@ +    <refentry id="V4L2-PIX-FMT-SBGGR8"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_SBGGR8 ('BA81')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_SBGGR8</constant></refname> +	<refpurpose>Bayer RGB format</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is commonly the native format of digital cameras, +reflecting the arrangement of sensors on the CCD device. Only one red, +green or blue value is given for each pixel. Missing components must +be interpolated from neighbouring pixels. From left to right the first +row consists of a blue and green value, the second row of a green and +red value. This scheme repeats to the right and down for every two +columns and rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_SBGGR8</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +	      <informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>B<subscript>00</subscript></entry> +		      <entry>G<subscript>01</subscript></entry> +		      <entry>B<subscript>02</subscript></entry> +		      <entry>G<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>G<subscript>10</subscript></entry> +		      <entry>R<subscript>11</subscript></entry> +		      <entry>G<subscript>12</subscript></entry> +		      <entry>R<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>B<subscript>20</subscript></entry> +		      <entry>G<subscript>21</subscript></entry> +		      <entry>B<subscript>22</subscript></entry> +		      <entry>G<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>G<subscript>30</subscript></entry> +		      <entry>R<subscript>31</subscript></entry> +		      <entry>G<subscript>32</subscript></entry> +		      <entry>R<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +	      </informaltable> +	    </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml new file mode 100644 index 00000000000..2d80104c178 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml @@ -0,0 +1,44 @@ +<refentry id="V4L2-SDR-FMT-CU08"> +  <refmeta> +    <refentrytitle>V4L2_SDR_FMT_CU8 ('CU08')</refentrytitle> +    &manvol; +  </refmeta> +    <refnamediv> +      <refname> +        <constant>V4L2_SDR_FMT_CU8</constant> +      </refname> +      <refpurpose>Complex unsigned 8-bit IQ sample</refpurpose> +    </refnamediv> +    <refsect1> +      <title>Description</title> +      <para> +This format contains sequence of complex number samples. Each complex number +consist two parts, called In-phase and Quadrature (IQ). Both I and Q are +represented as a 8 bit unsigned number. I value comes first and Q value after +that. +      </para> +    <example> +      <title><constant>V4L2_SDR_FMT_CU8</constant> 1 sample</title> +      <formalpara> +        <title>Byte Order.</title> +        <para>Each cell is one byte. +          <informaltable frame="none"> +            <tgroup cols="2" align="center"> +              <colspec align="left" colwidth="2*" /> +              <tbody valign="top"> +                <row> +                  <entry>start + 0:</entry> +                  <entry>I'<subscript>0</subscript></entry> +                </row> +                <row> +                  <entry>start + 1:</entry> +                  <entry>Q'<subscript>0</subscript></entry> +                </row> +              </tbody> +            </tgroup> +          </informaltable> +        </para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml new file mode 100644 index 00000000000..26288ffa907 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml @@ -0,0 +1,46 @@ +<refentry id="V4L2-SDR-FMT-CU16LE"> +  <refmeta> +    <refentrytitle>V4L2_SDR_FMT_CU16LE ('CU16')</refentrytitle> +    &manvol; +  </refmeta> +    <refnamediv> +      <refname> +        <constant>V4L2_SDR_FMT_CU16LE</constant> +      </refname> +      <refpurpose>Complex unsigned 16-bit little endian IQ sample</refpurpose> +    </refnamediv> +    <refsect1> +      <title>Description</title> +      <para> +This format contains sequence of complex number samples. Each complex number +consist two parts, called In-phase and Quadrature (IQ). Both I and Q are +represented as a 16 bit unsigned little endian number. I value comes first +and Q value after that. +      </para> +    <example> +      <title><constant>V4L2_SDR_FMT_CU16LE</constant> 1 sample</title> +      <formalpara> +        <title>Byte Order.</title> +        <para>Each cell is one byte. +          <informaltable frame="none"> +            <tgroup cols="3" align="center"> +              <colspec align="left" colwidth="2*" /> +              <tbody valign="top"> +                <row> +                  <entry>start + 0:</entry> +                  <entry>I'<subscript>0[7:0]</subscript></entry> +                  <entry>I'<subscript>0[15:8]</subscript></entry> +                </row> +                <row> +                  <entry>start + 2:</entry> +                  <entry>Q'<subscript>0[7:0]</subscript></entry> +                  <entry>Q'<subscript>0[15:8]</subscript></entry> +                </row> +              </tbody> +            </tgroup> +          </informaltable> +        </para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml b/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml new file mode 100644 index 00000000000..fee65dca79c --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml @@ -0,0 +1,67 @@ +    <refentry id="V4L2-PIX-FMT-SGBRG8"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_SGBRG8 ('GBRG')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_SGBRG8</constant></refname> +	<refpurpose>Bayer RGB format</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is commonly the native format of digital cameras, +reflecting the arrangement of sensors on the CCD device. Only one red, +green or blue value is given for each pixel. Missing components must +be interpolated from neighbouring pixels. From left to right the first +row consists of a green and blue value, the second row of a red and +green value. This scheme repeats to the right and down for every two +columns and rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_SGBRG8</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +	      <informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>G<subscript>00</subscript></entry> +		      <entry>B<subscript>01</subscript></entry> +		      <entry>G<subscript>02</subscript></entry> +		      <entry>B<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>R<subscript>10</subscript></entry> +		      <entry>G<subscript>11</subscript></entry> +		      <entry>R<subscript>12</subscript></entry> +		      <entry>G<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>G<subscript>20</subscript></entry> +		      <entry>B<subscript>21</subscript></entry> +		      <entry>G<subscript>22</subscript></entry> +		      <entry>B<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>R<subscript>30</subscript></entry> +		      <entry>G<subscript>31</subscript></entry> +		      <entry>R<subscript>32</subscript></entry> +		      <entry>G<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +	      </informaltable> +	    </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml b/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml new file mode 100644 index 00000000000..19727ab4c75 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml @@ -0,0 +1,67 @@ +    <refentry id="V4L2-PIX-FMT-SGRBG8"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_SGRBG8 ('GRBG')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_SGRBG8</constant></refname> +	<refpurpose>Bayer RGB format</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is commonly the native format of digital cameras, +reflecting the arrangement of sensors on the CCD device. Only one red, +green or blue value is given for each pixel. Missing components must +be interpolated from neighbouring pixels. From left to right the first +row consists of a green and blue value, the second row of a red and +green value. This scheme repeats to the right and down for every two +columns and rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_SGRBG8</constant> 4 × +4 pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +	      <informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>G<subscript>00</subscript></entry> +		      <entry>R<subscript>01</subscript></entry> +		      <entry>G<subscript>02</subscript></entry> +		      <entry>R<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>R<subscript>10</subscript></entry> +		      <entry>B<subscript>11</subscript></entry> +		      <entry>R<subscript>12</subscript></entry> +		      <entry>B<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>G<subscript>20</subscript></entry> +		      <entry>R<subscript>21</subscript></entry> +		      <entry>G<subscript>22</subscript></entry> +		      <entry>R<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>R<subscript>30</subscript></entry> +		      <entry>B<subscript>31</subscript></entry> +		      <entry>R<subscript>32</subscript></entry> +		      <entry>B<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +	      </informaltable> +	    </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml new file mode 100644 index 00000000000..c1c62a9acc2 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml @@ -0,0 +1,90 @@ +    <refentry id="pixfmt-srggb10"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_SRGGB10 ('RG10'), +	 V4L2_PIX_FMT_SGRBG10 ('BA10'), +	 V4L2_PIX_FMT_SGBRG10 ('GB10'), +	 V4L2_PIX_FMT_SBGGR10 ('BG10'), +	 </refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-SRGGB10"><constant>V4L2_PIX_FMT_SRGGB10</constant></refname> +	<refname id="V4L2-PIX-FMT-SGRBG10"><constant>V4L2_PIX_FMT_SGRBG10</constant></refname> +	<refname id="V4L2-PIX-FMT-SGBRG10"><constant>V4L2_PIX_FMT_SGBRG10</constant></refname> +	<refname id="V4L2-PIX-FMT-SBGGR10"><constant>V4L2_PIX_FMT_SBGGR10</constant></refname> +	<refpurpose>10-bit Bayer formats expanded to 16 bits</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>The following four pixel formats are raw sRGB / Bayer formats with +10 bits per colour. Each colour component is stored in a 16-bit word, with 6 +unused high bits filled with zeros. Each n-pixel row contains n/2 green samples +and n/2 blue or red samples, with alternating red and blue rows. Bytes are +stored in memory in little endian order. They are conventionally described +as GRGR... BGBG..., RGRG... GBGB..., etc. Below is an example of one of these +formats</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_SBGGR10</constant> 4 × 4 +pixel image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte, high 6 bits in high bytes are 0. +	  <informaltable frame="none"> +	    <tgroup cols="5" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>B<subscript>00low</subscript></entry> +		  <entry>B<subscript>00high</subscript></entry> +		  <entry>G<subscript>01low</subscript></entry> +		  <entry>G<subscript>01high</subscript></entry> +		  <entry>B<subscript>02low</subscript></entry> +		  <entry>B<subscript>02high</subscript></entry> +		  <entry>G<subscript>03low</subscript></entry> +		  <entry>G<subscript>03high</subscript></entry> +		</row> +		<row> +		  <entry>start + 8:</entry> +		  <entry>G<subscript>10low</subscript></entry> +		  <entry>G<subscript>10high</subscript></entry> +		  <entry>R<subscript>11low</subscript></entry> +		  <entry>R<subscript>11high</subscript></entry> +		  <entry>G<subscript>12low</subscript></entry> +		  <entry>G<subscript>12high</subscript></entry> +		  <entry>R<subscript>13low</subscript></entry> +		  <entry>R<subscript>13high</subscript></entry> +		</row> +		<row> +		  <entry>start + 16:</entry> +		  <entry>B<subscript>20low</subscript></entry> +		  <entry>B<subscript>20high</subscript></entry> +		  <entry>G<subscript>21low</subscript></entry> +		  <entry>G<subscript>21high</subscript></entry> +		  <entry>B<subscript>22low</subscript></entry> +		  <entry>B<subscript>22high</subscript></entry> +		  <entry>G<subscript>23low</subscript></entry> +		  <entry>G<subscript>23high</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>G<subscript>30low</subscript></entry> +		  <entry>G<subscript>30high</subscript></entry> +		  <entry>R<subscript>31low</subscript></entry> +		  <entry>R<subscript>31high</subscript></entry> +		  <entry>G<subscript>32low</subscript></entry> +		  <entry>G<subscript>32high</subscript></entry> +		  <entry>R<subscript>33low</subscript></entry> +		  <entry>R<subscript>33high</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml new file mode 100644 index 00000000000..29acc2098cc --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml @@ -0,0 +1,34 @@ +	<refentry> +	  <refmeta> +	    <refentrytitle> +	      V4L2_PIX_FMT_SBGGR10ALAW8 ('aBA8'), +	      V4L2_PIX_FMT_SGBRG10ALAW8 ('aGA8'), +	      V4L2_PIX_FMT_SGRBG10ALAW8 ('agA8'), +	      V4L2_PIX_FMT_SRGGB10ALAW8 ('aRA8'), +	    </refentrytitle> +	    &manvol; +	  </refmeta> +	  <refnamediv> +	    <refname id="V4L2-PIX-FMT-SBGGR10ALAW8"> +	      <constant>V4L2_PIX_FMT_SBGGR10ALAW8</constant> +	    </refname> +	    <refname id="V4L2-PIX-FMT-SGBRG10ALAW8"> +	      <constant>V4L2_PIX_FMT_SGBRG10ALAW8</constant> +	    </refname> +	    <refname id="V4L2-PIX-FMT-SGRBG10ALAW8"> +	      <constant>V4L2_PIX_FMT_SGRBG10ALAW8</constant> +	    </refname> +	    <refname id="V4L2-PIX-FMT-SRGGB10ALAW8"> +	      <constant>V4L2_PIX_FMT_SRGGB10ALAW8</constant> +	    </refname> +	    <refpurpose>10-bit Bayer formats compressed to 8 bits</refpurpose> +	  </refnamediv> +	  <refsect1> +	    <title>Description</title> +	    <para>The following four pixel formats are raw sRGB / Bayer +	    formats with 10 bits per color compressed to 8 bits each, +	    using the A-LAW algorithm. Each color component consumes 8 +	    bits of memory. In other respects this format is similar to +	    <xref linkend="V4L2-PIX-FMT-SRGGB8"></xref>.</para> +	  </refsect1> +	</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml new file mode 100644 index 00000000000..2d3f0b1aefe --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml @@ -0,0 +1,28 @@ +    <refentry id="pixfmt-srggb10dpcm8"> +      <refmeta> +	<refentrytitle> +	 V4L2_PIX_FMT_SBGGR10DPCM8 ('bBA8'), +	 V4L2_PIX_FMT_SGBRG10DPCM8 ('bGA8'), +	 V4L2_PIX_FMT_SGRBG10DPCM8 ('BD10'), +	 V4L2_PIX_FMT_SRGGB10DPCM8 ('bRA8'), +	 </refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-SBGGR10DPCM8"><constant>V4L2_PIX_FMT_SBGGR10DPCM8</constant></refname> +	<refname id="V4L2-PIX-FMT-SGBRG10DPCM8"><constant>V4L2_PIX_FMT_SGBRG10DPCM8</constant></refname> +	<refname id="V4L2-PIX-FMT-SGRBG10DPCM8"><constant>V4L2_PIX_FMT_SGRBG10DPCM8</constant></refname> +	<refname id="V4L2-PIX-FMT-SRGGB10DPCM8"><constant>V4L2_PIX_FMT_SRGGB10DPCM8</constant></refname> +	<refpurpose>10-bit Bayer formats compressed to 8 bits</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>The following four pixel formats are raw sRGB / Bayer formats +	with 10 bits per colour compressed to 8 bits each, using DPCM +	compression. DPCM, differential pulse-code modulation, is lossy. +	Each colour component consumes 8 bits of memory. In other respects +	this format is similar to <xref linkend="pixfmt-srggb10" />.</para> + +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml new file mode 100644 index 00000000000..9ba4fb690bc --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml @@ -0,0 +1,90 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_SRGGB12 ('RG12'), +	 V4L2_PIX_FMT_SGRBG12 ('BA12'), +	 V4L2_PIX_FMT_SGBRG12 ('GB12'), +	 V4L2_PIX_FMT_SBGGR12 ('BG12'), +	 </refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-SRGGB12"><constant>V4L2_PIX_FMT_SRGGB12</constant></refname> +	<refname id="V4L2-PIX-FMT-SGRBG12"><constant>V4L2_PIX_FMT_SGRBG12</constant></refname> +	<refname id="V4L2-PIX-FMT-SGBRG12"><constant>V4L2_PIX_FMT_SGBRG12</constant></refname> +	<refname id="V4L2-PIX-FMT-SBGGR12"><constant>V4L2_PIX_FMT_SBGGR12</constant></refname> +	<refpurpose>12-bit Bayer formats expanded to 16 bits</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>The following four pixel formats are raw sRGB / Bayer formats with +12 bits per colour. Each colour component is stored in a 16-bit word, with 6 +unused high bits filled with zeros. Each n-pixel row contains n/2 green samples +and n/2 blue or red samples, with alternating red and blue rows. Bytes are +stored in memory in little endian order. They are conventionally described +as GRGR... BGBG..., RGRG... GBGB..., etc. Below is an example of one of these +formats</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_SBGGR12</constant> 4 × 4 +pixel image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte, high 6 bits in high bytes are 0. +	  <informaltable frame="none"> +	    <tgroup cols="5" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>B<subscript>00low</subscript></entry> +		  <entry>B<subscript>00high</subscript></entry> +		  <entry>G<subscript>01low</subscript></entry> +		  <entry>G<subscript>01high</subscript></entry> +		  <entry>B<subscript>02low</subscript></entry> +		  <entry>B<subscript>02high</subscript></entry> +		  <entry>G<subscript>03low</subscript></entry> +		  <entry>G<subscript>03high</subscript></entry> +		</row> +		<row> +		  <entry>start + 8:</entry> +		  <entry>G<subscript>10low</subscript></entry> +		  <entry>G<subscript>10high</subscript></entry> +		  <entry>R<subscript>11low</subscript></entry> +		  <entry>R<subscript>11high</subscript></entry> +		  <entry>G<subscript>12low</subscript></entry> +		  <entry>G<subscript>12high</subscript></entry> +		  <entry>R<subscript>13low</subscript></entry> +		  <entry>R<subscript>13high</subscript></entry> +		</row> +		<row> +		  <entry>start + 16:</entry> +		  <entry>B<subscript>20low</subscript></entry> +		  <entry>B<subscript>20high</subscript></entry> +		  <entry>G<subscript>21low</subscript></entry> +		  <entry>G<subscript>21high</subscript></entry> +		  <entry>B<subscript>22low</subscript></entry> +		  <entry>B<subscript>22high</subscript></entry> +		  <entry>G<subscript>23low</subscript></entry> +		  <entry>G<subscript>23high</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>G<subscript>30low</subscript></entry> +		  <entry>G<subscript>30high</subscript></entry> +		  <entry>R<subscript>31low</subscript></entry> +		  <entry>R<subscript>31high</subscript></entry> +		  <entry>G<subscript>32low</subscript></entry> +		  <entry>G<subscript>32high</subscript></entry> +		  <entry>R<subscript>33low</subscript></entry> +		  <entry>R<subscript>33high</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml new file mode 100644 index 00000000000..2570e3be3cf --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml @@ -0,0 +1,67 @@ +    <refentry id="V4L2-PIX-FMT-SRGGB8"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_SRGGB8 ('RGGB')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_SRGGB8</constant></refname> +	<refpurpose>Bayer RGB format</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This is commonly the native format of digital cameras, +reflecting the arrangement of sensors on the CCD device. Only one red, +green or blue value is given for each pixel. Missing components must +be interpolated from neighbouring pixels. From left to right the first +row consists of a red and green value, the second row of a green and +blue value. This scheme repeats to the right and down for every two +columns and rows.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_SRGGB8</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +	      <informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>R<subscript>00</subscript></entry> +		      <entry>G<subscript>01</subscript></entry> +		      <entry>R<subscript>02</subscript></entry> +		      <entry>G<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>G<subscript>10</subscript></entry> +		      <entry>B<subscript>11</subscript></entry> +		      <entry>G<subscript>12</subscript></entry> +		      <entry>B<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>R<subscript>20</subscript></entry> +		      <entry>G<subscript>21</subscript></entry> +		      <entry>R<subscript>22</subscript></entry> +		      <entry>G<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>G<subscript>30</subscript></entry> +		      <entry>B<subscript>31</subscript></entry> +		      <entry>G<subscript>32</subscript></entry> +		      <entry>B<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +	      </informaltable> +	    </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-uv8.xml b/Documentation/DocBook/media/v4l/pixfmt-uv8.xml new file mode 100644 index 00000000000..c507c1f73cd --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-uv8.xml @@ -0,0 +1,62 @@ +	<refentry id="V4L2-PIX-FMT-UV8"> +	  <refmeta> +	    <refentrytitle>V4L2_PIX_FMT_UV8  ('UV8')</refentrytitle> +	    &manvol; +	  </refmeta> +	  <refnamediv> +	    <refname><constant>V4L2_PIX_FMT_UV8</constant></refname> +	    <refpurpose>UV plane interleaved</refpurpose> +	  </refnamediv> +	  <refsect1> +	    <title>Description</title> +	    <para>In this format there is no Y plane, Only CbCr plane. ie +	    (UV interleaved)</para> +	    <example> +	    <title> +	      <constant>V4L2_PIX_FMT_UV8</constant> +	       pixel image +	    </title> + +	    <formalpara> +	      <title>Byte Order.</title> +	      <para>Each cell is one byte. +	        <informaltable frame="none"> +	        <tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	      </formalpara> +	    </example> +	  </refsect1> +	</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml b/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml new file mode 100644 index 00000000000..b1f6801a17f --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml @@ -0,0 +1,120 @@ +    <refentry id="V4L2-PIX-FMT-UYVY"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_UYVY ('UYVY')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_UYVY</constant></refname> +	<refpurpose>Variation of +<constant>V4L2_PIX_FMT_YUYV</constant> with different order of samples +in memory</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>In this format each four bytes is two pixels. Each four +bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and +the Cb and Cr belong to both pixels. As you can see, the Cr and Cb +components have half the horizontal resolution of the Y +component.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_UYVY</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="9" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml b/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml new file mode 100644 index 00000000000..82803408b38 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml @@ -0,0 +1,120 @@ +    <refentry id="V4L2-PIX-FMT-VYUY"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_VYUY ('VYUY')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_VYUY</constant></refname> +	<refpurpose>Variation of +<constant>V4L2_PIX_FMT_YUYV</constant> with different order of samples +in memory</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>In this format each four bytes is two pixels. Each four +bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and +the Cb and Cr belong to both pixels. As you can see, the Cr and Cb +components have half the horizontal resolution of the Y +component.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_VYUY</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="9" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-y10.xml b/Documentation/DocBook/media/v4l/pixfmt-y10.xml new file mode 100644 index 00000000000..d065043db8d --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-y10.xml @@ -0,0 +1,79 @@ +<refentry id="V4L2-PIX-FMT-Y10"> +  <refmeta> +    <refentrytitle>V4L2_PIX_FMT_Y10 ('Y10 ')</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname><constant>V4L2_PIX_FMT_Y10</constant></refname> +    <refpurpose>Grey-scale image</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>This is a grey-scale image with a depth of 10 bits per pixel. Pixels +are stored in 16-bit words with unused high bits padded with 0. The least +significant byte is stored at lower memory addresses (little-endian).</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_Y10</constant> 4 × 4 +pixel image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte. +	  <informaltable frame="none"> +	    <tgroup cols="9" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>Y'<subscript>00low</subscript></entry> +		  <entry>Y'<subscript>00high</subscript></entry> +		  <entry>Y'<subscript>01low</subscript></entry> +		  <entry>Y'<subscript>01high</subscript></entry> +		  <entry>Y'<subscript>02low</subscript></entry> +		  <entry>Y'<subscript>02high</subscript></entry> +		  <entry>Y'<subscript>03low</subscript></entry> +		  <entry>Y'<subscript>03high</subscript></entry> +		</row> +		<row> +		  <entry>start + 8:</entry> +		  <entry>Y'<subscript>10low</subscript></entry> +		  <entry>Y'<subscript>10high</subscript></entry> +		  <entry>Y'<subscript>11low</subscript></entry> +		  <entry>Y'<subscript>11high</subscript></entry> +		  <entry>Y'<subscript>12low</subscript></entry> +		  <entry>Y'<subscript>12high</subscript></entry> +		  <entry>Y'<subscript>13low</subscript></entry> +		  <entry>Y'<subscript>13high</subscript></entry> +		</row> +		<row> +		  <entry>start + 16:</entry> +		  <entry>Y'<subscript>20low</subscript></entry> +		  <entry>Y'<subscript>20high</subscript></entry> +		  <entry>Y'<subscript>21low</subscript></entry> +		  <entry>Y'<subscript>21high</subscript></entry> +		  <entry>Y'<subscript>22low</subscript></entry> +		  <entry>Y'<subscript>22high</subscript></entry> +		  <entry>Y'<subscript>23low</subscript></entry> +		  <entry>Y'<subscript>23high</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>Y'<subscript>30low</subscript></entry> +		  <entry>Y'<subscript>30high</subscript></entry> +		  <entry>Y'<subscript>31low</subscript></entry> +		  <entry>Y'<subscript>31high</subscript></entry> +		  <entry>Y'<subscript>32low</subscript></entry> +		  <entry>Y'<subscript>32high</subscript></entry> +		  <entry>Y'<subscript>33low</subscript></entry> +		  <entry>Y'<subscript>33high</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-y10b.xml b/Documentation/DocBook/media/v4l/pixfmt-y10b.xml new file mode 100644 index 00000000000..adb0ad808c9 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-y10b.xml @@ -0,0 +1,43 @@ +<refentry id="V4L2-PIX-FMT-Y10BPACK"> +  <refmeta> +    <refentrytitle>V4L2_PIX_FMT_Y10BPACK ('Y10B')</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname><constant>V4L2_PIX_FMT_Y10BPACK</constant></refname> +    <refpurpose>Grey-scale image as a bit-packed array</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>This is a packed grey-scale image format with a depth of 10 bits per +      pixel. Pixels are stored in a bit-packed array of 10bit bits per pixel, +      with no padding between them and with the most significant bits coming +      first from the left.</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_Y10BPACK</constant> 4 pixel data stream taking 5 bytes</title> + +      <formalpara> +	<title>Bit-packed representation</title> +	<para>pixels cross the byte boundary and have a ratio of 5 bytes for each 4 +          pixels. +	  <informaltable frame="all"> +	    <tgroup cols="5" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>Y'<subscript>00[9:2]</subscript></entry> +		  <entry>Y'<subscript>00[1:0]</subscript>Y'<subscript>01[9:4]</subscript></entry> +		  <entry>Y'<subscript>01[3:0]</subscript>Y'<subscript>02[9:6]</subscript></entry> +		  <entry>Y'<subscript>02[5:0]</subscript>Y'<subscript>03[9:8]</subscript></entry> +		  <entry>Y'<subscript>03[7:0]</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-y12.xml b/Documentation/DocBook/media/v4l/pixfmt-y12.xml new file mode 100644 index 00000000000..ff417b858cc --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-y12.xml @@ -0,0 +1,79 @@ +<refentry id="V4L2-PIX-FMT-Y12"> +  <refmeta> +    <refentrytitle>V4L2_PIX_FMT_Y12 ('Y12 ')</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname><constant>V4L2_PIX_FMT_Y12</constant></refname> +    <refpurpose>Grey-scale image</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>This is a grey-scale image with a depth of 12 bits per pixel. Pixels +are stored in 16-bit words with unused high bits padded with 0. The least +significant byte is stored at lower memory addresses (little-endian).</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_Y12</constant> 4 × 4 +pixel image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte. +	  <informaltable frame="none"> +	    <tgroup cols="9" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>Y'<subscript>00low</subscript></entry> +		  <entry>Y'<subscript>00high</subscript></entry> +		  <entry>Y'<subscript>01low</subscript></entry> +		  <entry>Y'<subscript>01high</subscript></entry> +		  <entry>Y'<subscript>02low</subscript></entry> +		  <entry>Y'<subscript>02high</subscript></entry> +		  <entry>Y'<subscript>03low</subscript></entry> +		  <entry>Y'<subscript>03high</subscript></entry> +		</row> +		<row> +		  <entry>start + 8:</entry> +		  <entry>Y'<subscript>10low</subscript></entry> +		  <entry>Y'<subscript>10high</subscript></entry> +		  <entry>Y'<subscript>11low</subscript></entry> +		  <entry>Y'<subscript>11high</subscript></entry> +		  <entry>Y'<subscript>12low</subscript></entry> +		  <entry>Y'<subscript>12high</subscript></entry> +		  <entry>Y'<subscript>13low</subscript></entry> +		  <entry>Y'<subscript>13high</subscript></entry> +		</row> +		<row> +		  <entry>start + 16:</entry> +		  <entry>Y'<subscript>20low</subscript></entry> +		  <entry>Y'<subscript>20high</subscript></entry> +		  <entry>Y'<subscript>21low</subscript></entry> +		  <entry>Y'<subscript>21high</subscript></entry> +		  <entry>Y'<subscript>22low</subscript></entry> +		  <entry>Y'<subscript>22high</subscript></entry> +		  <entry>Y'<subscript>23low</subscript></entry> +		  <entry>Y'<subscript>23high</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>Y'<subscript>30low</subscript></entry> +		  <entry>Y'<subscript>30high</subscript></entry> +		  <entry>Y'<subscript>31low</subscript></entry> +		  <entry>Y'<subscript>31high</subscript></entry> +		  <entry>Y'<subscript>32low</subscript></entry> +		  <entry>Y'<subscript>32high</subscript></entry> +		  <entry>Y'<subscript>33low</subscript></entry> +		  <entry>Y'<subscript>33high</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-y16.xml b/Documentation/DocBook/media/v4l/pixfmt-y16.xml new file mode 100644 index 00000000000..ff4f727d562 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-y16.xml @@ -0,0 +1,81 @@ +<refentry id="V4L2-PIX-FMT-Y16"> +  <refmeta> +    <refentrytitle>V4L2_PIX_FMT_Y16 ('Y16 ')</refentrytitle> +    &manvol; +  </refmeta> +  <refnamediv> +    <refname><constant>V4L2_PIX_FMT_Y16</constant></refname> +    <refpurpose>Grey-scale image</refpurpose> +  </refnamediv> +  <refsect1> +    <title>Description</title> + +    <para>This is a grey-scale image with a depth of 16 bits per +pixel. The least significant byte is stored at lower memory addresses +(little-endian). Note the actual sampling precision may be lower than +16 bits, for example 10 bits per pixel with values in range 0 to +1023.</para> + +    <example> +      <title><constant>V4L2_PIX_FMT_Y16</constant> 4 × 4 +pixel image</title> + +      <formalpara> +	<title>Byte Order.</title> +	<para>Each cell is one byte. +	  <informaltable frame="none"> +	    <tgroup cols="9" align="center"> +	      <colspec align="left" colwidth="2*" /> +	      <tbody valign="top"> +		<row> +		  <entry>start + 0:</entry> +		  <entry>Y'<subscript>00low</subscript></entry> +		  <entry>Y'<subscript>00high</subscript></entry> +		  <entry>Y'<subscript>01low</subscript></entry> +		  <entry>Y'<subscript>01high</subscript></entry> +		  <entry>Y'<subscript>02low</subscript></entry> +		  <entry>Y'<subscript>02high</subscript></entry> +		  <entry>Y'<subscript>03low</subscript></entry> +		  <entry>Y'<subscript>03high</subscript></entry> +		</row> +		<row> +		  <entry>start + 8:</entry> +		  <entry>Y'<subscript>10low</subscript></entry> +		  <entry>Y'<subscript>10high</subscript></entry> +		  <entry>Y'<subscript>11low</subscript></entry> +		  <entry>Y'<subscript>11high</subscript></entry> +		  <entry>Y'<subscript>12low</subscript></entry> +		  <entry>Y'<subscript>12high</subscript></entry> +		  <entry>Y'<subscript>13low</subscript></entry> +		  <entry>Y'<subscript>13high</subscript></entry> +		</row> +		<row> +		  <entry>start + 16:</entry> +		  <entry>Y'<subscript>20low</subscript></entry> +		  <entry>Y'<subscript>20high</subscript></entry> +		  <entry>Y'<subscript>21low</subscript></entry> +		  <entry>Y'<subscript>21high</subscript></entry> +		  <entry>Y'<subscript>22low</subscript></entry> +		  <entry>Y'<subscript>22high</subscript></entry> +		  <entry>Y'<subscript>23low</subscript></entry> +		  <entry>Y'<subscript>23high</subscript></entry> +		</row> +		<row> +		  <entry>start + 24:</entry> +		  <entry>Y'<subscript>30low</subscript></entry> +		  <entry>Y'<subscript>30high</subscript></entry> +		  <entry>Y'<subscript>31low</subscript></entry> +		  <entry>Y'<subscript>31high</subscript></entry> +		  <entry>Y'<subscript>32low</subscript></entry> +		  <entry>Y'<subscript>32high</subscript></entry> +		  <entry>Y'<subscript>33low</subscript></entry> +		  <entry>Y'<subscript>33high</subscript></entry> +		</row> +	      </tbody> +	    </tgroup> +	  </informaltable> +	</para> +      </formalpara> +    </example> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-y41p.xml b/Documentation/DocBook/media/v4l/pixfmt-y41p.xml new file mode 100644 index 00000000000..98dcb91d291 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-y41p.xml @@ -0,0 +1,149 @@ +    <refentry id="V4L2-PIX-FMT-Y41P"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_Y41P ('Y41P')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_Y41P</constant></refname> +	<refpurpose>Format with ¼ horizontal chroma +resolution, also known as YUV 4:1:1</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>In this format each 12 bytes is eight pixels. In the +twelve bytes are two CbCr pairs and eight Y's. The first CbCr pair +goes with the first four Y's, and the second CbCr pair goes with the +other four Y's. The Cb and Cr components have one fourth the +horizontal resolution of the Y component.</para> + +	<para>Do not confuse this format with <link +linkend="V4L2-PIX-FMT-YUV411P"><constant>V4L2_PIX_FMT_YUV411P</constant></link>. +Y41P is derived from "YUV 4:1:1 <emphasis>packed</emphasis>", while +YUV411P stands for "YUV 4:1:1 <emphasis>planar</emphasis>".</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_Y41P</constant> 8 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="13" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		      <entry>Y'<subscript>04</subscript></entry> +		      <entry>Y'<subscript>05</subscript></entry> +		      <entry>Y'<subscript>06</subscript></entry> +		      <entry>Y'<subscript>07</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		      <entry>Y'<subscript>14</subscript></entry> +		      <entry>Y'<subscript>15</subscript></entry> +		      <entry>Y'<subscript>16</subscript></entry> +		      <entry>Y'<subscript>17</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		      <entry>Y'<subscript>24</subscript></entry> +		      <entry>Y'<subscript>25</subscript></entry> +		      <entry>Y'<subscript>26</subscript></entry> +		      <entry>Y'<subscript>27</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 36:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		      <entry>Y'<subscript>34</subscript></entry> +		      <entry>Y'<subscript>35</subscript></entry> +		      <entry>Y'<subscript>36</subscript></entry> +		      <entry>Y'<subscript>37</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +	      </informaltable></para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="15" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry><entry></entry> +		      <entry>4</entry><entry></entry><entry>5</entry><entry></entry> +		      <entry>6</entry><entry></entry><entry>7</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml new file mode 100644 index 00000000000..0869dce5f92 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml @@ -0,0 +1,133 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YVU410 ('YVU9'), V4L2_PIX_FMT_YUV410 ('YUV9')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-YVU410"><constant>V4L2_PIX_FMT_YVU410</constant></refname> +	<refname id="V4L2-PIX-FMT-YUV410"><constant>V4L2_PIX_FMT_YUV410</constant></refname> +	<refpurpose>Planar formats with ¼ horizontal and +vertical chroma resolution, also known as YUV 4:1:0</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>These are planar formats, as opposed to a packed format. +The three components are separated into three sub-images or planes. +The Y plane is first. The Y plane has one byte per pixel. For +<constant>V4L2_PIX_FMT_YVU410</constant>, the Cr plane immediately +follows the Y plane in memory. The Cr plane is ¼ the width and +¼ the height of the Y plane (and of the image). Each Cr belongs +to 16 pixels, a four-by-four square of the image. Following the Cr +plane is the Cb plane, just like the Cr plane. +<constant>V4L2_PIX_FMT_YUV410</constant> is the same, except the Cb +plane comes first, then the Cr plane.</para> + +	<para>If the Y plane has pad bytes after each row, then the Cr +and Cb planes have ¼ as many pad bytes after their rows. In +other words, four Cx rows (including padding) are exactly as long as +one Y row (including padding).</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YVU410</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 17:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry></entry><entry></entry><entry>C</entry> +		      <entry></entry><entry></entry><entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml new file mode 100644 index 00000000000..086dc731bf0 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml @@ -0,0 +1,147 @@ +    <refentry id="V4L2-PIX-FMT-YUV411P"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YUV411P ('411P')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_YUV411P</constant></refname> +	<refpurpose>Format with ¼ horizontal chroma resolution, +also known as YUV 4:1:1. Planar layout as opposed to +<constant>V4L2_PIX_FMT_Y41P</constant></refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This format is not commonly used. This is a planar +format similar to the 4:2:2 planar format except with half as many +chroma. The three components are separated into three sub-images or +planes. The Y plane is first. The Y plane has one byte per pixel. The +Cb plane immediately follows the Y plane in memory. The Cb plane is +¼ the width of the Y plane (and of the image). Each Cb belongs +to 4 pixels all on the same row. For example, +Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>, +Y'<subscript>01</subscript>, Y'<subscript>02</subscript> and +Y'<subscript>03</subscript>. Following the Cb plane is the Cr plane, +just like the Cb plane.</para> + +	<para>If the Y plane has pad bytes after each row, then the Cr +and Cb planes have ¼ as many pad bytes after their rows. In +other words, four C x rows (including padding) is exactly as long as +one Y row (including padding).</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YUV411P</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 17:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 18:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 19:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 20:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 21:</entry> +		      <entry>Cr<subscript>10</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 22:</entry> +		      <entry>Cr<subscript>20</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 23:</entry> +		      <entry>Cr<subscript>30</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry>C</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml new file mode 100644 index 00000000000..48649fac159 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml @@ -0,0 +1,149 @@ +    <refentry> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YVU420 ('YV12'), V4L2_PIX_FMT_YUV420 ('YU12')</refentrytitle> +	&manvol; +     </refmeta> +      <refnamediv> +	<refname id="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></refname> +	<refname id="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></refname> +	<refpurpose>Planar formats with ½ horizontal and +vertical chroma resolution, also known as YUV 4:2:0</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>These are planar formats, as opposed to a packed format. +The three components are separated into three sub- images or planes. +The Y plane is first. The Y plane has one byte per pixel. For +<constant>V4L2_PIX_FMT_YVU420</constant>, the Cr plane immediately +follows the Y plane in memory. The Cr plane is half the width and half +the height of the Y plane (and of the image). Each Cr belongs to four +pixels, a two-by-two square of the image. For example, +Cr<subscript>0</subscript> belongs to Y'<subscript>00</subscript>, +Y'<subscript>01</subscript>, Y'<subscript>10</subscript>, and +Y'<subscript>11</subscript>. Following the Cr plane is the Cb plane, +just like the Cr plane. <constant>V4L2_PIX_FMT_YUV420</constant> is +the same except the Cb plane comes first, then the Cr plane.</para> + +	<para>If the Y plane has pad bytes after each row, then the Cr +and Cb planes have half as many pad bytes after their rows. In other +words, two Cx rows (including padding) is exactly as long as one Y row +(including padding).</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YVU420</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 18:</entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 20:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 22:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml new file mode 100644 index 00000000000..60308f1eefd --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml @@ -0,0 +1,154 @@ +    <refentry id="V4L2-PIX-FMT-YUV420M"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname> <constant>V4L2_PIX_FMT_YUV420M</constant></refname> +	<refpurpose>Variation of <constant>V4L2_PIX_FMT_YUV420</constant> +	  with planes non contiguous in memory. </refpurpose> +      </refnamediv> + +      <refsect1> +	<title>Description</title> + +	<para>This is a multi-planar format, as opposed to a packed format. +The three components are separated into three sub- images or planes. + +The Y plane is first. The Y plane has one byte per pixel. The Cb data +constitutes the second plane which is half the width and half +the height of the Y plane (and of the image). Each Cb belongs to four +pixels, a two-by-two square of the image. For example, +Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>, +Y'<subscript>01</subscript>, Y'<subscript>10</subscript>, and +Y'<subscript>11</subscript>. The Cr data, just like the Cb plane, is +in the third plane. </para> + +	<para>If the Y plane has pad bytes after each row, then the Cb +and Cr planes have half as many pad bytes after their rows. In other +words, two Cx rows (including padding) is exactly as long as one Y row +(including padding).</para> + +	<para><constant>V4L2_PIX_FMT_NV12M</constant> is intended to be +used only in drivers and applications that support the multi-planar API, +described in <xref linkend="planar-apis"/>. </para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YVU420M</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start0 + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row><entry></entry></row> +		    <row> +		      <entry>start1 + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start1 + 2:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		    </row> +		    <row><entry></entry></row> +		    <row> +		      <entry>start2 + 0:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start2 + 2:</entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml new file mode 100644 index 00000000000..4ce6463fe0a --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml @@ -0,0 +1,153 @@ +    <refentry id="V4L2-PIX-FMT-YUV422P"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YUV422P ('422P')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_YUV422P</constant></refname> +	<refpurpose>Format with ½ horizontal chroma resolution, +also known as YUV 4:2:2. Planar layout as opposed to +<constant>V4L2_PIX_FMT_YUYV</constant></refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>This format is not commonly used. This is a planar +version of the YUYV format. The three components are separated into +three sub-images or planes. The Y plane is first. The Y plane has one +byte per pixel. The Cb plane immediately follows the Y plane in +memory. The Cb plane is half the width of the Y plane (and of the +image). Each Cb belongs to two pixels. For example, +Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>, +Y'<subscript>01</subscript>. Following the Cb plane is the Cr plane, +just like the Cb plane.</para> + +	<para>If the Y plane has pad bytes after each row, then the Cr +and Cb planes have half as many pad bytes after their rows. In other +words, two Cx rows (including padding) is exactly as long as one Y row +(including padding).</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YUV422P</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 18:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 20:</entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 22:</entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 26:</entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 28:</entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 30:</entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml b/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml new file mode 100644 index 00000000000..58384092251 --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml @@ -0,0 +1,120 @@ +    <refentry id="V4L2-PIX-FMT-YUYV"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YUYV ('YUYV')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_YUYV</constant></refname> +	<refpurpose>Packed format with ½ horizontal chroma +resolution, also known as YUV 4:2:2</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>In this format each four bytes is two pixels. Each four +bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and +the Cb and Cr belong to both pixels. As you can see, the Cr and Cb +components have half the horizontal resolution of the Y component. +<constant>V4L2_PIX_FMT_YUYV </constant> is known in the Windows +environment as YUY2.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YUYV</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="9" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yvu420m.xml b/Documentation/DocBook/media/v4l/pixfmt-yvu420m.xml new file mode 100644 index 00000000000..2330667907c --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yvu420m.xml @@ -0,0 +1,154 @@ +    <refentry id="V4L2-PIX-FMT-YVU420M"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YVU420M ('YM21')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname> <constant>V4L2_PIX_FMT_YVU420M</constant></refname> +	<refpurpose>Variation of <constant>V4L2_PIX_FMT_YVU420</constant> +	  with planes non contiguous in memory. </refpurpose> +      </refnamediv> + +      <refsect1> +	<title>Description</title> + +	<para>This is a multi-planar format, as opposed to a packed format. +The three components are separated into three sub-images or planes. + +The Y plane is first. The Y plane has one byte per pixel. The Cr data +constitutes the second plane which is half the width and half +the height of the Y plane (and of the image). Each Cr belongs to four +pixels, a two-by-two square of the image. For example, +Cr<subscript>0</subscript> belongs to Y'<subscript>00</subscript>, +Y'<subscript>01</subscript>, Y'<subscript>10</subscript>, and +Y'<subscript>11</subscript>. The Cb data, just like the Cr plane, constitutes +the third plane. </para> + +	<para>If the Y plane has pad bytes after each row, then the Cr +and Cb planes have half as many pad bytes after their rows. In other +words, two Cx rows (including padding) is exactly as long as one Y row +(including padding).</para> + +	<para><constant>V4L2_PIX_FMT_YVU420M</constant> is intended to be +used only in drivers and applications that support the multi-planar API, +described in <xref linkend="planar-apis"/>. </para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YVU420M</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="5" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start0 + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 4:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 8:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		    </row> +		    <row> +		      <entry>start0 + 12:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		    </row> +		    <row><entry></entry></row> +		    <row> +		      <entry>start1 + 0:</entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start1 + 2:</entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		    </row> +		    <row><entry></entry></row> +		    <row> +		      <entry>start2 + 0:</entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start2 + 2:</entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry></entry> +		      <entry></entry><entry>C</entry><entry></entry><entry></entry> +		      <entry></entry><entry>C</entry><entry></entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry></entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml b/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml new file mode 100644 index 00000000000..bfffdc76d3d --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml @@ -0,0 +1,120 @@ +    <refentry id="V4L2-PIX-FMT-YVYU"> +      <refmeta> +	<refentrytitle>V4L2_PIX_FMT_YVYU ('YVYU')</refentrytitle> +	&manvol; +      </refmeta> +      <refnamediv> +	<refname><constant>V4L2_PIX_FMT_YVYU</constant></refname> +	<refpurpose>Variation of +<constant>V4L2_PIX_FMT_YUYV</constant> with different order of samples +in memory</refpurpose> +      </refnamediv> +      <refsect1> +	<title>Description</title> + +	<para>In this format each four bytes is two pixels. Each four +bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and +the Cb and Cr belong to both pixels. As you can see, the Cr and Cb +components have half the horizontal resolution of the Y +component.</para> + +	<example> +	  <title><constant>V4L2_PIX_FMT_YVYU</constant> 4 × 4 +pixel image</title> + +	  <formalpara> +	    <title>Byte Order.</title> +	    <para>Each cell is one byte. +		<informaltable frame="none"> +		<tgroup cols="9" align="center"> +		  <colspec align="left" colwidth="2*" /> +		  <tbody valign="top"> +		    <row> +		      <entry>start + 0:</entry> +		      <entry>Y'<subscript>00</subscript></entry> +		      <entry>Cr<subscript>00</subscript></entry> +		      <entry>Y'<subscript>01</subscript></entry> +		      <entry>Cb<subscript>00</subscript></entry> +		      <entry>Y'<subscript>02</subscript></entry> +		      <entry>Cr<subscript>01</subscript></entry> +		      <entry>Y'<subscript>03</subscript></entry> +		      <entry>Cb<subscript>01</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 8:</entry> +		      <entry>Y'<subscript>10</subscript></entry> +		      <entry>Cr<subscript>10</subscript></entry> +		      <entry>Y'<subscript>11</subscript></entry> +		      <entry>Cb<subscript>10</subscript></entry> +		      <entry>Y'<subscript>12</subscript></entry> +		      <entry>Cr<subscript>11</subscript></entry> +		      <entry>Y'<subscript>13</subscript></entry> +		      <entry>Cb<subscript>11</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 16:</entry> +		      <entry>Y'<subscript>20</subscript></entry> +		      <entry>Cr<subscript>20</subscript></entry> +		      <entry>Y'<subscript>21</subscript></entry> +		      <entry>Cb<subscript>20</subscript></entry> +		      <entry>Y'<subscript>22</subscript></entry> +		      <entry>Cr<subscript>21</subscript></entry> +		      <entry>Y'<subscript>23</subscript></entry> +		      <entry>Cb<subscript>21</subscript></entry> +		    </row> +		    <row> +		      <entry>start + 24:</entry> +		      <entry>Y'<subscript>30</subscript></entry> +		      <entry>Cr<subscript>30</subscript></entry> +		      <entry>Y'<subscript>31</subscript></entry> +		      <entry>Cb<subscript>30</subscript></entry> +		      <entry>Y'<subscript>32</subscript></entry> +		      <entry>Cr<subscript>31</subscript></entry> +		      <entry>Y'<subscript>33</subscript></entry> +		      <entry>Cb<subscript>31</subscript></entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> + +	  <formalpara> +	    <title>Color Sample Location.</title> +	    <para> +		<informaltable frame="none"> +		<tgroup cols="7" align="center"> +		  <tbody valign="top"> +		    <row> +		      <entry></entry> +		      <entry>0</entry><entry></entry><entry>1</entry><entry></entry> +		      <entry>2</entry><entry></entry><entry>3</entry> +		    </row> +		    <row> +		      <entry>0</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>1</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>2</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		    <row> +		      <entry>3</entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry> +		      <entry>Y</entry><entry>C</entry><entry>Y</entry> +		    </row> +		  </tbody> +		</tgroup> +		</informaltable> +	      </para> +	  </formalpara> +	</example> +      </refsect1> +    </refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml new file mode 100644 index 00000000000..91dcbc84f3f --- /dev/null +++ b/Documentation/DocBook/media/v4l/pixfmt.xml @@ -0,0 +1,1063 @@ +  <title>Image Formats</title> + +  <para>The V4L2 API was primarily designed for devices exchanging +image data with applications. The +<structname>v4l2_pix_format</structname> and <structname>v4l2_pix_format_mplane +</structname> structures define the format and layout of an image in memory. +The former is used with the single-planar API, while the latter is used with the +multi-planar version (see <xref linkend="planar-apis"/>). Image formats are +negotiated with the &VIDIOC-S-FMT; ioctl. (The explanations here focus on video +capturing and output, for overlay frame buffer formats see also +&VIDIOC-G-FBUF;.)</para> + +<section> +  <title>Single-planar format structure</title> +  <table pgwide="1" frame="none" id="v4l2-pix-format"> +    <title>struct <structname>v4l2_pix_format</structname></title> +    <tgroup cols="3"> +      &cs-str; +      <tbody valign="top"> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>width</structfield></entry> +	  <entry>Image width in pixels.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>height</structfield></entry> +	  <entry>Image height in pixels. If <structfield>field</structfield> is +	  one of <constant>V4L2_FIELD_TOP</constant>, <constant>V4L2_FIELD_BOTTOM</constant> +	  or <constant>V4L2_FIELD_ALTERNATE</constant> then height refers to the +	  number of lines in the field, otherwise it refers to the number of +	  lines in the frame (which is twice the field height for interlaced +	  formats).</entry> +	</row> +	<row> +	  <entry spanname="hspan">Applications set these fields to +request an image size, drivers return the closest possible values. In +case of planar formats the <structfield>width</structfield> and +<structfield>height</structfield> applies to the largest plane. To +avoid ambiguities drivers must return values rounded up to a multiple +of the scale factor of any smaller planes. For example when the image +format is YUV 4:2:0, <structfield>width</structfield> and +<structfield>height</structfield> must be multiples of two.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>pixelformat</structfield></entry> +	  <entry>The pixel format or type of compression, set by the +application. This is a little endian <link +linkend="v4l2-fourcc">four character code</link>. V4L2 defines +standard RGB formats in <xref linkend="rgb-formats" />, YUV formats in <xref +linkend="yuv-formats" />, and reserved codes in <xref +linkend="reserved-formats" /></entry> +	</row> +	<row> +	  <entry>&v4l2-field;</entry> +	  <entry><structfield>field</structfield></entry> +	  <entry>Video images are typically interlaced. Applications +can request to capture or output only the top or bottom field, or both +fields interlaced or sequentially stored in one buffer or alternating +in separate buffers. Drivers return the actual field order selected. +For more details on fields see <xref linkend="field-order" />.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>bytesperline</structfield></entry> +	  <entry>Distance in bytes between the leftmost pixels in two +adjacent lines.</entry> +	</row> +	<row> +	  <entry spanname="hspan"><para>Both applications and drivers +can set this field to request padding bytes at the end of each line. +Drivers however may ignore the value requested by the application, +returning <structfield>width</structfield> times bytes per pixel or a +larger value required by the hardware. That implies applications can +just set this field to zero to get a reasonable +default.</para><para>Video hardware may access padding bytes, +therefore they must reside in accessible memory. Consider cases where +padding bytes after the last line of an image cross a system page +boundary. Input devices may write padding bytes, the value is +undefined. Output devices ignore the contents of padding +bytes.</para><para>When the image format is planar the +<structfield>bytesperline</structfield> value applies to the largest +plane and is divided by the same factor as the +<structfield>width</structfield> field for any smaller planes. For +example the Cb and Cr planes of a YUV 4:2:0 image have half as many +padding bytes following each line as the Y plane. To avoid ambiguities +drivers must return a <structfield>bytesperline</structfield> value +rounded up to a multiple of the scale factor.</para> +<para>For compressed formats the <structfield>bytesperline</structfield> +value makes no sense. Applications and drivers must set this to 0 in +that case.</para></entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>sizeimage</structfield></entry> +	  <entry>Size in bytes of the buffer to hold a complete image, +set by the driver. Usually this is +<structfield>bytesperline</structfield> times +<structfield>height</structfield>. When the image consists of variable +length compressed data this is the maximum number of bytes required to +hold an image.</entry> +	</row> +	<row> +	  <entry>&v4l2-colorspace;</entry> +	  <entry><structfield>colorspace</structfield></entry> +	  <entry>This information supplements the +<structfield>pixelformat</structfield> and must be set by the driver for +capture streams and by the application for output streams, +see <xref linkend="colorspaces" />.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>priv</structfield></entry> +	  <entry>Reserved for custom (driver defined) additional +information about formats. When not used drivers and applications must +set this field to zero.</entry> +	</row> +      </tbody> +    </tgroup> +  </table> +</section> + +<section> +  <title>Multi-planar format structures</title> +  <para>The <structname>v4l2_plane_pix_format</structname> structures define +    size and layout for each of the planes in a multi-planar format. +    The <structname>v4l2_pix_format_mplane</structname> structure contains +    information common to all planes (such as image width and height) and +    an array of <structname>v4l2_plane_pix_format</structname> structures, +    describing all planes of that format.</para> +  <table pgwide="1" frame="none" id="v4l2-plane-pix-format"> +    <title>struct <structname>v4l2_plane_pix_format</structname></title> +    <tgroup cols="3"> +      &cs-str; +      <tbody valign="top"> +        <row> +          <entry>__u32</entry> +          <entry><structfield>sizeimage</structfield></entry> +          <entry>Maximum size in bytes required for image data in this plane. +          </entry> +        </row> +        <row> +          <entry>__u16</entry> +          <entry><structfield>bytesperline</structfield></entry> +          <entry>Distance in bytes between the leftmost pixels in two adjacent +            lines. See &v4l2-pix-format;.</entry> +        </row> +        <row> +          <entry>__u16</entry> +          <entry><structfield>reserved[7]</structfield></entry> +          <entry>Reserved for future extensions. Should be zeroed by the +           application.</entry> +        </row> +      </tbody> +    </tgroup> +  </table> +  <table pgwide="1" frame="none" id="v4l2-pix-format-mplane"> +    <title>struct <structname>v4l2_pix_format_mplane</structname></title> +    <tgroup cols="3"> +      &cs-str; +      <tbody valign="top"> +        <row> +          <entry>__u32</entry> +          <entry><structfield>width</structfield></entry> +          <entry>Image width in pixels. See &v4l2-pix-format;.</entry> +        </row> +        <row> +          <entry>__u32</entry> +          <entry><structfield>height</structfield></entry> +          <entry>Image height in pixels. See &v4l2-pix-format;.</entry> +        </row> +        <row> +          <entry>__u32</entry> +          <entry><structfield>pixelformat</structfield></entry> +          <entry>The pixel format. Both single- and multi-planar four character +codes can be used.</entry> +        </row> +        <row> +          <entry>&v4l2-field;</entry> +          <entry><structfield>field</structfield></entry> +          <entry>See &v4l2-pix-format;.</entry> +        </row> +        <row> +          <entry>&v4l2-colorspace;</entry> +          <entry><structfield>colorspace</structfield></entry> +          <entry>See &v4l2-pix-format;.</entry> +        </row> +        <row> +          <entry>&v4l2-plane-pix-format;</entry> +          <entry><structfield>plane_fmt[VIDEO_MAX_PLANES]</structfield></entry> +          <entry>An array of structures describing format of each plane this +          pixel format consists of. The number of valid entries in this array +          has to be put in the <structfield>num_planes</structfield> +          field.</entry> +        </row> +        <row> +          <entry>__u8</entry> +          <entry><structfield>num_planes</structfield></entry> +          <entry>Number of planes (i.e. separate memory buffers) for this format +          and the number of valid entries in the +          <structfield>plane_fmt</structfield> array.</entry> +        </row> +        <row> +          <entry>__u8</entry> +          <entry><structfield>reserved[11]</structfield></entry> +          <entry>Reserved for future extensions. Should be zeroed by the +           application.</entry> +        </row> +      </tbody> +    </tgroup> +  </table> +</section> + +  <section> +    <title>Standard Image Formats</title> + +    <para>In order to exchange images between drivers and +applications, it is necessary to have standard image data formats +which both sides will interpret the same way. V4L2 includes several +such formats, and this section is intended to be an unambiguous +specification of the standard image data formats in V4L2.</para> + +    <para>V4L2 drivers are not limited to these formats, however. +Driver-specific formats are possible. In that case the application may +depend on a codec to convert images to one of the standard formats +when needed. But the data can still be stored and retrieved in the +proprietary format. For example, a device may support a proprietary +compressed format. Applications can still capture and save the data in +the compressed format, saving much disk space, and later use a codec +to convert the images to the X Windows screen format when the video is +to be displayed.</para> + +    <para>Even so, ultimately, some standard formats are needed, so +the V4L2 specification would not be complete without well-defined +standard formats.</para> + +    <para>The V4L2 standard formats are mainly uncompressed formats. The +pixels are always arranged in memory from left to right, and from top +to bottom. The first byte of data in the image buffer is always for +the leftmost pixel of the topmost row. Following that is the pixel +immediately to its right, and so on until the end of the top row of +pixels. Following the rightmost pixel of the row there may be zero or +more bytes of padding to guarantee that each row of pixel data has a +certain alignment. Following the pad bytes, if any, is data for the +leftmost pixel of the second row from the top, and so on. The last row +has just as many pad bytes after it as the other rows.</para> + +    <para>In V4L2 each format has an identifier which looks like +<constant>PIX_FMT_XXX</constant>, defined in the <link +linkend="videodev">videodev.h</link> header file. These identifiers +represent <link linkend="v4l2-fourcc">four character (FourCC) codes</link> +which are also listed below, however they are not the same as those +used in the Windows world.</para> + +    <para>For some formats, data is stored in separate, discontiguous +memory buffers. Those formats are identified by a separate set of FourCC codes +and are referred to as "multi-planar formats". For example, a YUV422 frame is +normally stored in one memory buffer, but it can also be placed in two or three +separate buffers, with Y component in one buffer and CbCr components in another +in the 2-planar version or with each component in its own buffer in the +3-planar case. Those sub-buffers are referred to as "planes".</para> +  </section> + +  <section id="colorspaces"> +    <title>Colorspaces</title> + +    <para>[intro]</para> + +    <!-- See proposal by Billy Biggs, video4linux-list@redhat.com +on 11 Oct 2002, subject: "Re: [V4L] Re: v4l2 api", and +http://vektor.theorem.ca/graphics/ycbcr/ and +http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html --> + +    <para> +      <variablelist> +	<varlistentry> +	  <term>Gamma Correction</term> +	  <listitem> +	    <para>[to do]</para> +	    <para>E'<subscript>R</subscript> = f(R)</para> +	    <para>E'<subscript>G</subscript> = f(G)</para> +	    <para>E'<subscript>B</subscript> = f(B)</para> +	  </listitem> +	</varlistentry> +	<varlistentry> +	  <term>Construction of luminance and color-difference +signals</term> +	  <listitem> +	    <para>[to do]</para> +	    <para>E'<subscript>Y</subscript> = +Coeff<subscript>R</subscript> E'<subscript>R</subscript> ++ Coeff<subscript>G</subscript> E'<subscript>G</subscript> ++ Coeff<subscript>B</subscript> E'<subscript>B</subscript></para> +	    <para>(E'<subscript>R</subscript> - E'<subscript>Y</subscript>) = E'<subscript>R</subscript> +- Coeff<subscript>R</subscript> E'<subscript>R</subscript> +- Coeff<subscript>G</subscript> E'<subscript>G</subscript> +- Coeff<subscript>B</subscript> E'<subscript>B</subscript></para> +	    <para>(E'<subscript>B</subscript> - E'<subscript>Y</subscript>) = E'<subscript>B</subscript> +- Coeff<subscript>R</subscript> E'<subscript>R</subscript> +- Coeff<subscript>G</subscript> E'<subscript>G</subscript> +- Coeff<subscript>B</subscript> E'<subscript>B</subscript></para> +	  </listitem> +	</varlistentry> +	<varlistentry> +	  <term>Re-normalized color-difference signals</term> +	  <listitem> +	    <para>The color-difference signals are scaled back to unity +range [-0.5;+0.5]:</para> +	    <para>K<subscript>B</subscript> = 0.5 / (1 - Coeff<subscript>B</subscript>)</para> +	    <para>K<subscript>R</subscript> = 0.5 / (1 - Coeff<subscript>R</subscript>)</para> +	    <para>P<subscript>B</subscript> = +K<subscript>B</subscript> (E'<subscript>B</subscript> - E'<subscript>Y</subscript>) = +  0.5 (Coeff<subscript>R</subscript> / Coeff<subscript>B</subscript>) E'<subscript>R</subscript> ++ 0.5 (Coeff<subscript>G</subscript> / Coeff<subscript>B</subscript>) E'<subscript>G</subscript> ++ 0.5 E'<subscript>B</subscript></para> +	    <para>P<subscript>R</subscript> = +K<subscript>R</subscript> (E'<subscript>R</subscript> - E'<subscript>Y</subscript>) = +  0.5 E'<subscript>R</subscript> ++ 0.5 (Coeff<subscript>G</subscript> / Coeff<subscript>R</subscript>) E'<subscript>G</subscript> ++ 0.5 (Coeff<subscript>B</subscript> / Coeff<subscript>R</subscript>) E'<subscript>B</subscript></para> +	  </listitem> +	</varlistentry> +	<varlistentry> +	  <term>Quantization</term> +	  <listitem> +	    <para>[to do]</para> +	    <para>Y' = (Lum. Levels - 1) · E'<subscript>Y</subscript> + Lum. Offset</para> +	    <para>C<subscript>B</subscript> = (Chrom. Levels - 1) +· P<subscript>B</subscript> + Chrom. Offset</para> +	    <para>C<subscript>R</subscript> = (Chrom. Levels - 1) +· P<subscript>R</subscript> + Chrom. Offset</para> +	    <para>Rounding to the nearest integer and clamping to the range +[0;255] finally yields the digital color components Y'CbCr +stored in YUV images.</para> +	  </listitem> +	</varlistentry> +      </variablelist> +    </para> + +    <example> +      <title>ITU-R Rec. BT.601 color conversion</title> + +      <para>Forward Transformation</para> + +      <programlisting> +int ER, EG, EB;         /* gamma corrected RGB input [0;255] */ +int Y1, Cb, Cr;         /* output [0;255] */ + +double r, g, b;         /* temporaries */ +double y1, pb, pr; + +int +clamp (double x) +{ +	int r = x;      /* round to nearest */ + +	if (r < 0)         return 0; +	else if (r > 255)  return 255; +	else               return r; +} + +r = ER / 255.0; +g = EG / 255.0; +b = EB / 255.0; + +y1  =  0.299  * r + 0.587 * g + 0.114  * b; +pb  = -0.169  * r - 0.331 * g + 0.5    * b; +pr  =  0.5    * r - 0.419 * g - 0.081  * b; + +Y1 = clamp (219 * y1 + 16); +Cb = clamp (224 * pb + 128); +Cr = clamp (224 * pr + 128); + +/* or shorter */ + +y1 = 0.299 * ER + 0.587 * EG + 0.114 * EB; + +Y1 = clamp ( (219 / 255.0)                    *       y1  + 16); +Cb = clamp (((224 / 255.0) / (2 - 2 * 0.114)) * (EB - y1) + 128); +Cr = clamp (((224 / 255.0) / (2 - 2 * 0.299)) * (ER - y1) + 128); +      </programlisting> + +      <para>Inverse Transformation</para> + +      <programlisting> +int Y1, Cb, Cr;         /* gamma pre-corrected input [0;255] */ +int ER, EG, EB;         /* output [0;255] */ + +double r, g, b;         /* temporaries */ +double y1, pb, pr; + +int +clamp (double x) +{ +	int r = x;      /* round to nearest */ + +	if (r < 0)         return 0; +	else if (r > 255)  return 255; +	else               return r; +} + +y1 = (Y1 - 16) / 219.0; +pb = (Cb - 128) / 224.0; +pr = (Cr - 128) / 224.0; + +r = 1.0 * y1 + 0     * pb + 1.402 * pr; +g = 1.0 * y1 - 0.344 * pb - 0.714 * pr; +b = 1.0 * y1 + 1.772 * pb + 0     * pr; + +ER = clamp (r * 255); /* [ok? one should prob. limit y1,pb,pr] */ +EG = clamp (g * 255); +EB = clamp (b * 255); +      </programlisting> +    </example> + +    <table pgwide="1" id="v4l2-colorspace" orient="land"> +      <title>enum v4l2_colorspace</title> +      <tgroup cols="11" align="center"> +	<colspec align="left" /> +	<colspec align="center" /> +	<colspec align="left" /> +	<colspec colname="cr" /> +	<colspec colname="cg" /> +	<colspec colname="cb" /> +	<colspec colname="wp" /> +	<colspec colname="gc" /> +	<colspec colname="lum" /> +	<colspec colname="qy" /> +	<colspec colname="qc" /> +	<spanspec namest="cr" nameend="cb" spanname="chrom" /> +	<spanspec namest="qy" nameend="qc" spanname="quant" /> +	<spanspec namest="lum" nameend="qc" spanname="spam" /> +	<thead> +	  <row> +	    <entry morerows="1">Identifier</entry> +	    <entry morerows="1">Value</entry> +	    <entry morerows="1">Description</entry> +	    <entry spanname="chrom">Chromaticities<footnote> +		<para>The coordinates of the color primaries are +given in the CIE system (1931)</para> +	      </footnote></entry> +	    <entry morerows="1">White Point</entry> +	    <entry morerows="1">Gamma Correction</entry> +	    <entry morerows="1">Luminance E'<subscript>Y</subscript></entry> +	    <entry spanname="quant">Quantization</entry> +	  </row> +	  <row> +	    <entry>Red</entry> +	    <entry>Green</entry> +	    <entry>Blue</entry> +	    <entry>Y'</entry> +	    <entry>Cb, Cr</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_SMPTE170M</constant></entry> +	    <entry>1</entry> +	    <entry>NTSC/PAL according to <xref linkend="smpte170m" />, +<xref linkend="itu601" /></entry> +	    <entry>x = 0.630, y = 0.340</entry> +	    <entry>x = 0.310, y = 0.595</entry> +	    <entry>x = 0.155, y = 0.070</entry> +	    <entry>x = 0.3127, y = 0.3290, +	    Illuminant D<subscript>65</subscript></entry> +	    <entry>E' = 4.5 I for I ≤0.018, +1.099 I<superscript>0.45</superscript> - 0.099 for 0.018 < I</entry> +	    <entry>0.299 E'<subscript>R</subscript> ++ 0.587 E'<subscript>G</subscript> ++ 0.114 E'<subscript>B</subscript></entry> +	    <entry>219 E'<subscript>Y</subscript> + 16</entry> +	    <entry>224 P<subscript>B,R</subscript> + 128</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_SMPTE240M</constant></entry> +	    <entry>2</entry> +	    <entry>1125-Line (US) HDTV, see <xref +linkend="smpte240m" /></entry> +	    <entry>x = 0.630, y = 0.340</entry> +	    <entry>x = 0.310, y = 0.595</entry> +	    <entry>x = 0.155, y = 0.070</entry> +	    <entry>x = 0.3127, y = 0.3290, +	    Illuminant D<subscript>65</subscript></entry> +	    <entry>E' = 4 I for I ≤0.0228, +1.1115 I<superscript>0.45</superscript> - 0.1115 for 0.0228 < I</entry> +	    <entry>0.212 E'<subscript>R</subscript> ++ 0.701 E'<subscript>G</subscript> ++ 0.087 E'<subscript>B</subscript></entry> +	    <entry>219 E'<subscript>Y</subscript> + 16</entry> +	    <entry>224 P<subscript>B,R</subscript> + 128</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_REC709</constant></entry> +	    <entry>3</entry> +	    <entry>HDTV and modern devices, see <xref +linkend="itu709" /></entry> +	    <entry>x = 0.640, y = 0.330</entry> +	    <entry>x = 0.300, y = 0.600</entry> +	    <entry>x = 0.150, y = 0.060</entry> +	    <entry>x = 0.3127, y = 0.3290, +	    Illuminant D<subscript>65</subscript></entry> +	    <entry>E' = 4.5 I for I ≤0.018, +1.099 I<superscript>0.45</superscript> - 0.099 for 0.018 < I</entry> +	    <entry>0.2125 E'<subscript>R</subscript> ++ 0.7154 E'<subscript>G</subscript> ++ 0.0721 E'<subscript>B</subscript></entry> +	    <entry>219 E'<subscript>Y</subscript> + 16</entry> +	    <entry>224 P<subscript>B,R</subscript> + 128</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_BT878</constant></entry> +	    <entry>4</entry> +	    <entry>Broken Bt878 extents<footnote> +		<para>The ubiquitous Bt878 video capture chip +quantizes E'<subscript>Y</subscript> to 238 levels, yielding a range +of Y' = 16 … 253, unlike Rec. 601 Y' = 16 … +235. This is not a typo in the Bt878 documentation, it has been +implemented in silicon. The chroma extents are unclear.</para> +	      </footnote>, <xref linkend="itu601" /></entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>0.299 E'<subscript>R</subscript> ++ 0.587 E'<subscript>G</subscript> ++ 0.114 E'<subscript>B</subscript></entry> +	    <entry><emphasis>237</emphasis> E'<subscript>Y</subscript> + 16</entry> +	    <entry>224 P<subscript>B,R</subscript> + 128 (probably)</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_470_SYSTEM_M</constant></entry> +	    <entry>5</entry> +	    <entry>M/NTSC<footnote> +		<para>No identifier exists for M/PAL which uses +the chromaticities of M/NTSC, the remaining parameters are equal to B and +G/PAL.</para> +	      </footnote> according to <xref linkend="itu470" />, <xref +		linkend="itu601" /></entry> +	    <entry>x = 0.67, y = 0.33</entry> +	    <entry>x = 0.21, y = 0.71</entry> +	    <entry>x = 0.14, y = 0.08</entry> +	    <entry>x = 0.310, y = 0.316, Illuminant C</entry> +	    <entry>?</entry> +	    <entry>0.299 E'<subscript>R</subscript> ++ 0.587 E'<subscript>G</subscript> ++ 0.114 E'<subscript>B</subscript></entry> +	    <entry>219 E'<subscript>Y</subscript> + 16</entry> +	    <entry>224 P<subscript>B,R</subscript> + 128</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_470_SYSTEM_BG</constant></entry> +	    <entry>6</entry> +	    <entry>625-line PAL and SECAM systems according to <xref +linkend="itu470" />, <xref linkend="itu601" /></entry> +	    <entry>x = 0.64, y = 0.33</entry> +	    <entry>x = 0.29, y = 0.60</entry> +	    <entry>x = 0.15, y = 0.06</entry> +	    <entry>x = 0.313, y = 0.329, +Illuminant D<subscript>65</subscript></entry> +	    <entry>?</entry> +	    <entry>0.299 E'<subscript>R</subscript> ++ 0.587 E'<subscript>G</subscript> ++ 0.114 E'<subscript>B</subscript></entry> +	    <entry>219 E'<subscript>Y</subscript> + 16</entry> +	    <entry>224 P<subscript>B,R</subscript> + 128</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_JPEG</constant></entry> +	    <entry>7</entry> +	    <entry>JPEG Y'CbCr, see <xref linkend="jfif" />, <xref linkend="itu601" /></entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>?</entry> +	    <entry>0.299 E'<subscript>R</subscript> ++ 0.587 E'<subscript>G</subscript> ++ 0.114 E'<subscript>B</subscript></entry> +	    <entry>256 E'<subscript>Y</subscript> + 16<footnote> +		<para>Note JFIF quantizes +Y'P<subscript>B</subscript>P<subscript>R</subscript> in range [0;+1] and +[-0.5;+0.5] to <emphasis>257</emphasis> levels, however Y'CbCr signals +are still clamped to [0;255].</para> +	      </footnote></entry> +	    <entry>256 P<subscript>B,R</subscript> + 128</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_COLORSPACE_SRGB</constant></entry> +	    <entry>8</entry> +	    <entry>[?]</entry> +	    <entry>x = 0.640, y = 0.330</entry> +	    <entry>x = 0.300, y = 0.600</entry> +	    <entry>x = 0.150, y = 0.060</entry> +	    <entry>x = 0.3127, y = 0.3290, +	    Illuminant D<subscript>65</subscript></entry> +	    <entry>E' = 4.5 I for I ≤0.018, +1.099 I<superscript>0.45</superscript> - 0.099 for 0.018 < I</entry> +	    <entry spanname="spam">n/a</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </section> + +  <section id="pixfmt-indexed"> +    <title>Indexed Format</title> + +    <para>In this format each pixel is represented by an 8 bit index +into a 256 entry ARGB palette. It is intended for <link +linkend="osd">Video Output Overlays</link> only. There are no ioctls to +access the palette, this must be done with ioctls of the Linux framebuffer API.</para> + +    <table pgwide="0" frame="none"> +      <title>Indexed Image Format</title> +      <tgroup cols="37" align="center"> +	<colspec colname="id" align="left" /> +	<colspec colname="fourcc" /> +	<colspec colname="bit" /> + +	<colspec colnum="4" colname="b07" align="center" /> +	<colspec colnum="5" colname="b06" align="center" /> +	<colspec colnum="6" colname="b05" align="center" /> +	<colspec colnum="7" colname="b04" align="center" /> +	<colspec colnum="8" colname="b03" align="center" /> +	<colspec colnum="9" colname="b02" align="center" /> +	<colspec colnum="10" colname="b01" align="center" /> +	<colspec colnum="11" colname="b00" align="center" /> + +	<spanspec namest="b07" nameend="b00" spanname="b0" /> +	<spanspec namest="b17" nameend="b10" spanname="b1" /> +	<spanspec namest="b27" nameend="b20" spanname="b2" /> +	<spanspec namest="b37" nameend="b30" spanname="b3" /> +	<thead> +	  <row> +	    <entry>Identifier</entry> +	    <entry>Code</entry> +	    <entry> </entry> +	    <entry spanname="b0">Byte 0</entry> +	  </row> +	  <row> +	    <entry> </entry> +	    <entry> </entry> +	    <entry>Bit</entry> +	    <entry>7</entry> +	    <entry>6</entry> +	    <entry>5</entry> +	    <entry>4</entry> +	    <entry>3</entry> +	    <entry>2</entry> +	    <entry>1</entry> +	    <entry>0</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row id="V4L2-PIX-FMT-PAL8"> +	    <entry><constant>V4L2_PIX_FMT_PAL8</constant></entry> +	    <entry>'PAL8'</entry> +	    <entry></entry> +	    <entry>i<subscript>7</subscript></entry> +	    <entry>i<subscript>6</subscript></entry> +	    <entry>i<subscript>5</subscript></entry> +	    <entry>i<subscript>4</subscript></entry> +	    <entry>i<subscript>3</subscript></entry> +	    <entry>i<subscript>2</subscript></entry> +	    <entry>i<subscript>1</subscript></entry> +	    <entry>i<subscript>0</subscript></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </section> + +  <section id="pixfmt-rgb"> +    <title>RGB Formats</title> + +    &sub-packed-rgb; +    &sub-sbggr8; +    &sub-sgbrg8; +    &sub-sgrbg8; +    &sub-srggb8; +    &sub-sbggr16; +    &sub-srggb10; +    &sub-srggb10alaw8; +    &sub-srggb10dpcm8; +    &sub-srggb12; +  </section> + +  <section id="yuv-formats"> +    <title>YUV Formats</title> + +    <para>YUV is the format native to TV broadcast and composite video +signals. It separates the brightness information (Y) from the color +information (U and V or Cb and Cr). The color information consists of +red and blue <emphasis>color difference</emphasis> signals, this way +the green component can be reconstructed by subtracting from the +brightness component. See <xref linkend="colorspaces" /> for conversion +examples. YUV was chosen because early television would only transmit +brightness information. To add color in a way compatible with existing +receivers a new signal carrier was added to transmit the color +difference signals. Secondary in the YUV format the U and V components +usually have lower resolution than the Y component. This is an analog +video compression technique taking advantage of a property of the +human visual system, being more sensitive to brightness +information.</para> + +    &sub-packed-yuv; +    &sub-grey; +    &sub-y10; +    &sub-y12; +    &sub-y10b; +    &sub-y16; +    &sub-uv8; +    &sub-yuyv; +    &sub-uyvy; +    &sub-yvyu; +    &sub-vyuy; +    &sub-y41p; +    &sub-yuv420; +    &sub-yuv420m; +    &sub-yvu420m; +    &sub-yuv410; +    &sub-yuv422p; +    &sub-yuv411p; +    &sub-nv12; +    &sub-nv12m; +    &sub-nv12mt; +    &sub-nv16; +    &sub-nv16m; +    &sub-nv24; +    &sub-m420; +  </section> + +  <section> +    <title>Compressed Formats</title> + +    <table pgwide="1" frame="none" id="compressed-formats"> +      <title>Compressed Image Formats</title> +      <tgroup cols="3" align="left"> +	&cs-def; +	<thead> +	  <row> +	    <entry>Identifier</entry> +	    <entry>Code</entry> +	    <entry>Details</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	 <row id="V4L2-PIX-FMT-JPEG"> +	    <entry><constant>V4L2_PIX_FMT_JPEG</constant></entry> +	    <entry>'JPEG'</entry> +	    <entry>TBD. See also &VIDIOC-G-JPEGCOMP;, +	    &VIDIOC-S-JPEGCOMP;.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-MPEG"> +	    <entry><constant>V4L2_PIX_FMT_MPEG</constant></entry> +	    <entry>'MPEG'</entry> +	    <entry>MPEG multiplexed stream. The actual format is determined by +extended control <constant>V4L2_CID_MPEG_STREAM_TYPE</constant>, see +<xref linkend="mpeg-control-id" />.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-H264"> +		<entry><constant>V4L2_PIX_FMT_H264</constant></entry> +		<entry>'H264'</entry> +		<entry>H264 video elementary stream with start codes.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-H264-NO-SC"> +		<entry><constant>V4L2_PIX_FMT_H264_NO_SC</constant></entry> +		<entry>'AVC1'</entry> +		<entry>H264 video elementary stream without start codes.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-H264-MVC"> +		<entry><constant>V4L2_PIX_FMT_H264_MVC</constant></entry> +		<entry>'M264'</entry> +		<entry>H264 MVC video elementary stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-H263"> +		<entry><constant>V4L2_PIX_FMT_H263</constant></entry> +		<entry>'H263'</entry> +		<entry>H263 video elementary stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-MPEG1"> +		<entry><constant>V4L2_PIX_FMT_MPEG1</constant></entry> +		<entry>'MPG1'</entry> +		<entry>MPEG1 video elementary stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-MPEG2"> +		<entry><constant>V4L2_PIX_FMT_MPEG2</constant></entry> +		<entry>'MPG2'</entry> +		<entry>MPEG2 video elementary stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-MPEG4"> +		<entry><constant>V4L2_PIX_FMT_MPEG4</constant></entry> +		<entry>'MPG4'</entry> +		<entry>MPEG4 video elementary stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-XVID"> +		<entry><constant>V4L2_PIX_FMT_XVID</constant></entry> +		<entry>'XVID'</entry> +		<entry>Xvid video elementary stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-VC1-ANNEX-G"> +		<entry><constant>V4L2_PIX_FMT_VC1_ANNEX_G</constant></entry> +		<entry>'VC1G'</entry> +		<entry>VC1, SMPTE 421M Annex G compliant stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-VC1-ANNEX-L"> +		<entry><constant>V4L2_PIX_FMT_VC1_ANNEX_L</constant></entry> +		<entry>'VC1L'</entry> +		<entry>VC1, SMPTE 421M Annex L compliant stream.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-VP8"> +		<entry><constant>V4L2_PIX_FMT_VP8</constant></entry> +		<entry>'VP80'</entry> +		<entry>VP8 video elementary stream.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </section> + +  <section id="sdr-formats"> +    <title>SDR Formats</title> + +    <para>These formats are used for <link linkend="sdr">SDR Capture</link> +interface only.</para> + +    &sub-sdr-cu08; +    &sub-sdr-cu16le; + +  </section> + +  <section id="pixfmt-reserved"> +    <title>Reserved Format Identifiers</title> + +    <para>These formats are not defined by this specification, they +are just listed for reference and to avoid naming conflicts. If you +want to register your own format, send an e-mail to the linux-media mailing +list &v4l-ml; for inclusion in the <filename>videodev2.h</filename> +file. If you want to share your format with other developers add a +link to your documentation and send a copy to the linux-media mailing list +for inclusion in this section. If you think your format should be listed +in a standard format section please make a proposal on the linux-media mailing +list.</para> + +    <table pgwide="1" frame="none" id="reserved-formats"> +      <title>Reserved Image Formats</title> +      <tgroup cols="3" align="left"> +	&cs-def; +	<thead> +	  <row> +	    <entry>Identifier</entry> +	    <entry>Code</entry> +	    <entry>Details</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row id="V4L2-PIX-FMT-DV"> +	    <entry><constant>V4L2_PIX_FMT_DV</constant></entry> +	    <entry>'dvsd'</entry> +	    <entry>unknown</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-ET61X251"> +	    <entry><constant>V4L2_PIX_FMT_ET61X251</constant></entry> +	    <entry>'E625'</entry> +	    <entry>Compressed format of the ET61X251 driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-HI240"> +	    <entry><constant>V4L2_PIX_FMT_HI240</constant></entry> +	    <entry>'HI24'</entry> +	    <entry><para>8 bit RGB format used by the BTTV driver.</para></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-HM12"> +	    <entry><constant>V4L2_PIX_FMT_HM12</constant></entry> +	    <entry>'HM12'</entry> +	    <entry><para>YUV 4:2:0 format used by the +IVTV driver, <ulink url="http://www.ivtvdriver.org/"> +http://www.ivtvdriver.org/</ulink></para><para>The format is documented in the +kernel sources in the file <filename>Documentation/video4linux/cx2341x/README.hm12</filename> +</para></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-CPIA1"> +	    <entry><constant>V4L2_PIX_FMT_CPIA1</constant></entry> +	    <entry>'CPIA'</entry> +	    <entry>YUV format used by the gspca cpia1 driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-JPGL"> +	    <entry><constant>V4L2_PIX_FMT_JPGL</constant></entry> +	    <entry>'JPGL'</entry> +	    <entry>JPEG-Light format (Pegasus Lossless JPEG) +			used in Divio webcams NW 80x.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SPCA501"> +	    <entry><constant>V4L2_PIX_FMT_SPCA501</constant></entry> +	    <entry>'S501'</entry> +	    <entry>YUYV per line used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SPCA505"> +	    <entry><constant>V4L2_PIX_FMT_SPCA505</constant></entry> +	    <entry>'S505'</entry> +	    <entry>YYUV per line used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SPCA508"> +	    <entry><constant>V4L2_PIX_FMT_SPCA508</constant></entry> +	    <entry>'S508'</entry> +	    <entry>YUVY per line used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SPCA561"> +	    <entry><constant>V4L2_PIX_FMT_SPCA561</constant></entry> +	    <entry>'S561'</entry> +	    <entry>Compressed GBRG Bayer format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-PAC207"> +	    <entry><constant>V4L2_PIX_FMT_PAC207</constant></entry> +	    <entry>'P207'</entry> +	    <entry>Compressed BGGR Bayer format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-MR97310A"> +	    <entry><constant>V4L2_PIX_FMT_MR97310A</constant></entry> +	    <entry>'M310'</entry> +	    <entry>Compressed BGGR Bayer format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-JL2005BCD"> +	    <entry><constant>V4L2_PIX_FMT_JL2005BCD</constant></entry> +	    <entry>'JL20'</entry> +	    <entry>JPEG compressed RGGB Bayer format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-OV511"> +	    <entry><constant>V4L2_PIX_FMT_OV511</constant></entry> +	    <entry>'O511'</entry> +	    <entry>OV511 JPEG format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-OV518"> +	    <entry><constant>V4L2_PIX_FMT_OV518</constant></entry> +	    <entry>'O518'</entry> +	    <entry>OV518 JPEG format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-PJPG"> +	    <entry><constant>V4L2_PIX_FMT_PJPG</constant></entry> +	    <entry>'PJPG'</entry> +	    <entry>Pixart 73xx JPEG format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SE401"> +	    <entry><constant>V4L2_PIX_FMT_SE401</constant></entry> +	    <entry>'S401'</entry> +	    <entry>Compressed RGB format used by the gspca se401 driver</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SQ905C"> +	    <entry><constant>V4L2_PIX_FMT_SQ905C</constant></entry> +	    <entry>'905C'</entry> +	    <entry>Compressed RGGB bayer format used by the gspca driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-MJPEG"> +	    <entry><constant>V4L2_PIX_FMT_MJPEG</constant></entry> +	    <entry>'MJPG'</entry> +	    <entry>Compressed format used by the Zoran driver</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-PWC1"> +	    <entry><constant>V4L2_PIX_FMT_PWC1</constant></entry> +	    <entry>'PWC1'</entry> +	    <entry>Compressed format of the PWC driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-PWC2"> +	    <entry><constant>V4L2_PIX_FMT_PWC2</constant></entry> +	    <entry>'PWC2'</entry> +	    <entry>Compressed format of the PWC driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SN9C10X"> +	    <entry><constant>V4L2_PIX_FMT_SN9C10X</constant></entry> +	    <entry>'S910'</entry> +	    <entry>Compressed format of the SN9C102 driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SN9C20X-I420"> +	    <entry><constant>V4L2_PIX_FMT_SN9C20X_I420</constant></entry> +	    <entry>'S920'</entry> +	    <entry>YUV 4:2:0 format of the gspca sn9c20x driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-SN9C2028"> +	    <entry><constant>V4L2_PIX_FMT_SN9C2028</constant></entry> +	    <entry>'SONX'</entry> +	    <entry>Compressed GBRG bayer format of the gspca sn9c2028 driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-STV0680"> +	    <entry><constant>V4L2_PIX_FMT_STV0680</constant></entry> +	    <entry>'S680'</entry> +	    <entry>Bayer format of the gspca stv0680 driver.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-WNVA"> +	    <entry><constant>V4L2_PIX_FMT_WNVA</constant></entry> +	    <entry>'WNVA'</entry> +	    <entry><para>Used by the Winnov Videum driver, <ulink +url="http://www.thedirks.org/winnov/"> +http://www.thedirks.org/winnov/</ulink></para></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-TM6000"> +	    <entry><constant>V4L2_PIX_FMT_TM6000</constant></entry> +	    <entry>'TM60'</entry> +	    <entry><para>Used by Trident tm6000</para></entry> +	  </row> +	  <row id="V4L2-PIX-FMT-CIT-YYVYUY"> +	    <entry><constant>V4L2_PIX_FMT_CIT_YYVYUY</constant></entry> +	    <entry>'CITV'</entry> +	    <entry><para>Used by xirlink CIT, found at IBM webcams.</para> +	           <para>Uses one line of Y then 1 line of VYUY</para> +	    </entry> +	  </row> +	  <row id="V4L2-PIX-FMT-KONICA420"> +	    <entry><constant>V4L2_PIX_FMT_KONICA420</constant></entry> +	    <entry>'KONI'</entry> +	    <entry><para>Used by Konica webcams.</para> +	           <para>YUV420 planar in blocks of 256 pixels.</para> +	    </entry> +	  </row> +	  <row id="V4L2-PIX-FMT-YYUV"> +	    <entry><constant>V4L2_PIX_FMT_YYUV</constant></entry> +	    <entry>'YYUV'</entry> +	    <entry>unknown</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-Y4"> +	    <entry><constant>V4L2_PIX_FMT_Y4</constant></entry> +	    <entry>'Y04 '</entry> +	    <entry>Old 4-bit greyscale format. Only the most significant 4 bits of each byte are used, +the other bits are set to 0.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-Y6"> +	    <entry><constant>V4L2_PIX_FMT_Y6</constant></entry> +	    <entry>'Y06 '</entry> +	    <entry>Old 6-bit greyscale format. Only the most significant 6 bits of each byte are used, +the other bits are set to 0.</entry> +	  </row> +	  <row id="V4L2-PIX-FMT-S5C-UYVY-JPG"> +	    <entry><constant>V4L2_PIX_FMT_S5C_UYVY_JPG</constant></entry> +	    <entry>'S5CI'</entry> +	    <entry>Two-planar format used by Samsung S5C73MX cameras. The +first plane contains interleaved JPEG and UYVY image data, followed by meta data +in form of an array of offsets to the UYVY data blocks. The actual pointer array +follows immediately the interleaved JPEG/UYVY data, the number of entries in +this array equals the height of the UYVY image. Each entry is a 4-byte unsigned +integer in big endian order and it's an offset to a single pixel line of the +UYVY image. The first plane can start either with JPEG or UYVY data chunk. The +size of a single UYVY block equals the UYVY image's width multiplied by 2. The +size of a JPEG chunk depends on the image and can vary with each line. +<para>The second plane, at an offset of 4084 bytes, contains a 4-byte offset to +the pointer array in the first plane. This offset is followed by a 4-byte value +indicating size of the pointer array. All numbers in the second plane are also +in big endian order. Remaining data in the second plane is undefined. The +information in the second plane allows to easily find location of the pointer +array, which can be different for each frame. The size of the pointer array is +constant for given UYVY image height.</para> +<para>In order to extract UYVY and JPEG frames an application can initially set +a data pointer to the start of first plane and then add an offset from the first +entry of the pointers table. Such a pointer indicates start of an UYVY image +pixel line. Whole UYVY line can be copied to a separate buffer. These steps +should be repeated for each line, i.e. the number of entries in the pointer +array. Anything what's in between the UYVY lines is JPEG data and should be +concatenated to form the JPEG stream. </para> +</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </section> diff --git a/Documentation/DocBook/media/v4l/planar-apis.xml b/Documentation/DocBook/media/v4l/planar-apis.xml new file mode 100644 index 00000000000..878ce204048 --- /dev/null +++ b/Documentation/DocBook/media/v4l/planar-apis.xml @@ -0,0 +1,62 @@ +<section id="planar-apis"> +  <title>Single- and multi-planar APIs</title> + +  <para>Some devices require data for each input or output video frame +  to be placed in discontiguous memory buffers. In such cases, one +  video frame has to be addressed using more than one memory address, i.e. one +  pointer per "plane". A plane is a sub-buffer of the current frame. For +  examples of such formats see <xref linkend="pixfmt" />.</para> + +  <para>Initially, V4L2 API did not support multi-planar buffers and a set of +  extensions has been introduced to handle them. Those extensions constitute +  what is being referred to as the "multi-planar API".</para> + +  <para>Some of the V4L2 API calls and structures are interpreted differently, +  depending on whether single- or multi-planar API is being used. An application +  can choose whether to use one or the other by passing a corresponding buffer +  type to its ioctl calls. Multi-planar versions of buffer types are suffixed +  with an `_MPLANE' string. For a list of available multi-planar buffer types +  see &v4l2-buf-type;. +  </para> + +  <section> +    <title>Multi-planar formats</title> +    <para>Multi-planar API introduces new multi-planar formats. Those formats +    use a separate set of FourCC codes. It is important to distinguish between +    the multi-planar API and a multi-planar format. Multi-planar API calls can +    handle all single-planar formats as well (as long as they are passed in +    multi-planar API structures), while the single-planar API cannot +    handle multi-planar formats.</para> +  </section> + +  <section> +    <title>Calls that distinguish between single and multi-planar APIs</title> +    <variablelist> +      <varlistentry> +        <term>&VIDIOC-QUERYCAP;</term> +        <listitem><para>Two additional multi-planar capabilities are added. They can +        be set together with non-multi-planar ones for devices that handle +        both single- and multi-planar formats.</para></listitem> +      </varlistentry> +      <varlistentry> +        <term>&VIDIOC-G-FMT;, &VIDIOC-S-FMT;, &VIDIOC-TRY-FMT;</term> +        <listitem><para>New structures for describing multi-planar formats are added: +        &v4l2-pix-format-mplane; and &v4l2-plane-pix-format;. Drivers may +        define new multi-planar formats, which have distinct FourCC codes from +        the existing single-planar ones.</para> +        </listitem> +      </varlistentry> +      <varlistentry> +        <term>&VIDIOC-QBUF;, &VIDIOC-DQBUF;, &VIDIOC-QUERYBUF;</term> +        <listitem><para>A new &v4l2-plane; structure for describing planes is added. +        Arrays of this structure are passed in the new +        <structfield>m.planes</structfield> field of &v4l2-buffer;.</para> +        </listitem> +      </varlistentry> +      <varlistentry> +        <term>&VIDIOC-REQBUFS;</term> +        <listitem><para>Will allocate multi-planar buffers as requested.</para></listitem> +      </varlistentry> +    </variablelist> +  </section> +</section> diff --git a/Documentation/DocBook/media/v4l/remote_controllers.xml b/Documentation/DocBook/media/v4l/remote_controllers.xml new file mode 100644 index 00000000000..5124a6c4daa --- /dev/null +++ b/Documentation/DocBook/media/v4l/remote_controllers.xml @@ -0,0 +1,320 @@ +<partinfo> +<authorgroup> +<author> +<firstname>Mauro</firstname> +<surname>Chehab</surname> +<othername role="mi">Carvalho</othername> +<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation> +<contrib>Initial version.</contrib> +</author> +</authorgroup> +<copyright> +	<year>2009-2014</year> +        <holder>Mauro Carvalho Chehab</holder> +</copyright> + +<revhistory> +<!-- Put document revisions here, newest first. --> +<revision> +<revnumber>3.15</revnumber> +<date>2014-02-06</date> +<authorinitials>mcc</authorinitials> +<revremark>Added the interface description and the RC sysfs class description.</revremark> +</revision> +<revision> +<revnumber>1.0</revnumber> +<date>2009-09-06</date> +<authorinitials>mcc</authorinitials> +<revremark>Initial revision</revremark> +</revision> +</revhistory> +</partinfo> + + <title>Remote Controller API</title> + <chapter id="remote_controllers"> + +<title>Remote Controllers</title> + +<section id="Remote_controllers_Intro"> +<title>Introduction</title> + +<para>Currently, most analog and digital devices have a Infrared input for remote controllers. Each +manufacturer has their own type of control. It is not rare for the same manufacturer to ship different +types of controls, depending on the device.</para> +<para>A Remote Controller interface is mapped as a normal evdev/input interface, just like a keyboard or a mouse. +So, it uses all ioctls already defined for any other input devices.</para> +<para>However, remove controllers are more flexible than a normal input device, as the IR +receiver (and/or transmitter) can be used in conjunction with a wide variety of different IR remotes.</para> +<para>In order to allow flexibility, the Remote Controller subsystem allows controlling the +RC-specific attributes via <link linkend="remote_controllers_sysfs_nodes">the sysfs class nodes</link>.</para> +</section> + +<section id="remote_controllers_sysfs_nodes"> +<title>Remote Controller's sysfs nodes</title> +<para>As defined at <constant>Documentation/ABI/testing/sysfs-class-rc</constant>, those are the sysfs nodes that control the Remote Controllers:</para> + +<section id="sys_class_rc"> +<title>/sys/class/rc/</title> +<para>The <constant>/sys/class/rc/</constant> class sub-directory belongs to the Remote Controller +core and provides a sysfs interface for configuring infrared remote controller receivers. +</para> + +</section> +<section id="sys_class_rc_rcN"> +<title>/sys/class/rc/rcN/</title> +<para>A <constant>/sys/class/rc/rcN</constant> directory is created for each remote +  control receiver device where N is the number of the receiver.</para> + +</section> +<section id="sys_class_rc_rcN_protocols"> +<title>/sys/class/rc/rcN/protocols</title> +<para>Reading this file returns a list of available protocols, something like:</para> +<para><constant>rc5 [rc6] nec jvc [sony]</constant></para> +<para>Enabled protocols are shown in [] brackets.</para> +<para>Writing "+proto" will add a protocol to the list of enabled protocols.</para> +<para>Writing "-proto" will remove a protocol from the list of enabled protocols.</para> +<para>Writing "proto" will enable only "proto".</para> +<para>Writing "none" will disable all protocols.</para> +<para>Write fails with EINVAL if an invalid protocol combination or unknown protocol name is used.</para> + +</section> +<section id="sys_class_rc_rcN_filter"> +<title>/sys/class/rc/rcN/filter</title> +<para>Sets the scancode filter expected value.</para> +<para>Use in combination with <constant>/sys/class/rc/rcN/filter_mask</constant> to set the +expected value of the bits set in the filter mask. +If the hardware supports it then scancodes which do not match +the filter will be ignored. Otherwise the write will fail with +an error.</para> +<para>This value may be reset to 0 if the current protocol is altered.</para> + +</section> +<section id="sys_class_rc_rcN_filter_mask"> +<title>/sys/class/rc/rcN/filter_mask</title> +<para>Sets the scancode filter mask of bits to compare. +Use in combination with <constant>/sys/class/rc/rcN/filter</constant> to set the bits +of the scancode which should be compared against the expected +value. A value of 0 disables the filter to allow all valid +scancodes to be processed.</para> +<para>If the hardware supports it then scancodes which do not match +the filter will be ignored. Otherwise the write will fail with +an error.</para> +<para>This value may be reset to 0 if the current protocol is altered.</para> + +</section> +<section id="sys_class_rc_rcN_wakeup_protocols"> +<title>/sys/class/rc/rcN/wakeup_protocols</title> +<para>Reading this file returns a list of available protocols to use for the +wakeup filter, something like:</para> +<para><constant>rc5 rc6 nec jvc [sony]</constant></para> +<para>The enabled wakeup protocol is shown in [] brackets.</para> +<para>Writing "+proto" will add a protocol to the list of enabled wakeup +protocols.</para> +<para>Writing "-proto" will remove a protocol from the list of enabled wakeup +protocols.</para> +<para>Writing "proto" will use "proto" for wakeup events.</para> +<para>Writing "none" will disable wakeup.</para> +<para>Write fails with EINVAL if an invalid protocol combination or unknown +protocol name is used, or if wakeup is not supported by the hardware.</para> + +</section> +<section id="sys_class_rc_rcN_wakeup_filter"> +<title>/sys/class/rc/rcN/wakeup_filter</title> +<para>Sets the scancode wakeup filter expected value. +Use in combination with <constant>/sys/class/rc/rcN/wakeup_filter_mask</constant> to +set the expected value of the bits set in the wakeup filter mask +to trigger a system wake event.</para> +<para>If the hardware supports it and wakeup_filter_mask is not 0 then +scancodes which match the filter will wake the system from e.g. +suspend to RAM or power off. +Otherwise the write will fail with an error.</para> +<para>This value may be reset to 0 if the wakeup protocol is altered.</para> + +</section> +<section id="sys_class_rc_rcN_wakeup_filter_mask"> +<title>/sys/class/rc/rcN/wakeup_filter_mask</title> +<para>Sets the scancode wakeup filter mask of bits to compare. +Use in combination with <constant>/sys/class/rc/rcN/wakeup_filter</constant> to set +the bits of the scancode which should be compared against the +expected value to trigger a system wake event.</para> +<para>If the hardware supports it and wakeup_filter_mask is not 0 then +scancodes which match the filter will wake the system from e.g. +suspend to RAM or power off. +Otherwise the write will fail with an error.</para> +<para>This value may be reset to 0 if the wakeup protocol is altered.</para> +</section> +</section> + +<section id="Remote_controllers_tables"> +<title>Remote controller tables</title> +<para>Unfortunately, for several years, there was no effort to create uniform IR keycodes for +different devices.  This caused the same IR keyname to be mapped completely differently on +different IR devices. This resulted that the same IR keyname to be mapped completely different on +different IR's. Due to that, V4L2 API now specifies a standard for mapping Media keys on IR.</para> +<para>This standard should be used by both V4L/DVB drivers and userspace applications</para> +<para>The modules register the remote as keyboard within the linux input layer. This means that the IR key strokes will look like normal keyboard key strokes (if CONFIG_INPUT_KEYBOARD is enabled). Using the event devices (CONFIG_INPUT_EVDEV) it is possible for applications to access the remote via /dev/input/event devices.</para> + +<table pgwide="1" frame="none" id="rc_standard_keymap"> +<title>IR default keymapping</title> +<tgroup cols="3"> +&cs-str; +<tbody valign="top"> +<row> +<entry>Key code</entry> +<entry>Meaning</entry> +<entry>Key examples on IR</entry> +</row> + +<row><entry><emphasis role="bold">Numeric keys</emphasis></entry></row> + +<row><entry><constant>KEY_0</constant></entry><entry>Keyboard digit 0</entry><entry>0</entry></row> +<row><entry><constant>KEY_1</constant></entry><entry>Keyboard digit 1</entry><entry>1</entry></row> +<row><entry><constant>KEY_2</constant></entry><entry>Keyboard digit 2</entry><entry>2</entry></row> +<row><entry><constant>KEY_3</constant></entry><entry>Keyboard digit 3</entry><entry>3</entry></row> +<row><entry><constant>KEY_4</constant></entry><entry>Keyboard digit 4</entry><entry>4</entry></row> +<row><entry><constant>KEY_5</constant></entry><entry>Keyboard digit 5</entry><entry>5</entry></row> +<row><entry><constant>KEY_6</constant></entry><entry>Keyboard digit 6</entry><entry>6</entry></row> +<row><entry><constant>KEY_7</constant></entry><entry>Keyboard digit 7</entry><entry>7</entry></row> +<row><entry><constant>KEY_8</constant></entry><entry>Keyboard digit 8</entry><entry>8</entry></row> +<row><entry><constant>KEY_9</constant></entry><entry>Keyboard digit 9</entry><entry>9</entry></row> + +<row><entry><emphasis role="bold">Movie play control</emphasis></entry></row> + +<row><entry><constant>KEY_FORWARD</constant></entry><entry>Instantly advance in time</entry><entry>>> / FORWARD</entry></row> +<row><entry><constant>KEY_BACK</constant></entry><entry>Instantly go back in time</entry><entry><<< / BACK</entry></row> +<row><entry><constant>KEY_FASTFORWARD</constant></entry><entry>Play movie faster</entry><entry>>>> / FORWARD</entry></row> +<row><entry><constant>KEY_REWIND</constant></entry><entry>Play movie back</entry><entry>REWIND / BACKWARD</entry></row> +<row><entry><constant>KEY_NEXT</constant></entry><entry>Select next chapter / sub-chapter / interval</entry><entry>NEXT / SKIP</entry></row> +<row><entry><constant>KEY_PREVIOUS</constant></entry><entry>Select previous chapter / sub-chapter / interval</entry><entry><< /  PREV / PREVIOUS</entry></row> +<row><entry><constant>KEY_AGAIN</constant></entry><entry>Repeat the video or a video interval</entry><entry>REPEAT / LOOP / RECALL</entry></row> +<row><entry><constant>KEY_PAUSE</constant></entry><entry>Pause sroweam</entry><entry>PAUSE / FREEZE</entry></row> +<row><entry><constant>KEY_PLAY</constant></entry><entry>Play movie at the normal timeshift</entry><entry>NORMAL TIMESHIFT / LIVE / ></entry></row> +<row><entry><constant>KEY_PLAYPAUSE</constant></entry><entry>Alternate between play and pause</entry><entry>PLAY / PAUSE</entry></row> +<row><entry><constant>KEY_STOP</constant></entry><entry>Stop sroweam</entry><entry>STOP</entry></row> +<row><entry><constant>KEY_RECORD</constant></entry><entry>Start/stop recording sroweam</entry><entry>CAPTURE / REC / RECORD/PAUSE</entry></row> +<row><entry><constant>KEY_CAMERA</constant></entry><entry>Take a picture of the image</entry><entry>CAMERA ICON / CAPTURE / SNAPSHOT</entry></row> +<row><entry><constant>KEY_SHUFFLE</constant></entry><entry>Enable shuffle mode</entry><entry>SHUFFLE</entry></row> +<row><entry><constant>KEY_TIME</constant></entry><entry>Activate time shift mode</entry><entry>TIME SHIFT</entry></row> +<row><entry><constant>KEY_TITLE</constant></entry><entry>Allow changing the chapter</entry><entry>CHAPTER</entry></row> +<row><entry><constant>KEY_SUBTITLE</constant></entry><entry>Allow changing the subtitle</entry><entry>SUBTITLE</entry></row> + +<row><entry><emphasis role="bold">Image control</emphasis></entry></row> + +<row><entry><constant>KEY_BRIGHTNESSDOWN</constant></entry><entry>Decrease Brightness</entry><entry>BRIGHTNESS DECREASE</entry></row> +<row><entry><constant>KEY_BRIGHTNESSUP</constant></entry><entry>Increase Brightness</entry><entry>BRIGHTNESS INCREASE</entry></row> + +<row><entry><constant>KEY_ANGLE</constant></entry><entry>Switch video camera angle (on videos with more than one angle stored)</entry><entry>ANGLE / SWAP</entry></row> +<row><entry><constant>KEY_EPG</constant></entry><entry>Open the Elecrowonic Play Guide (EPG)</entry><entry>EPG / GUIDE</entry></row> +<row><entry><constant>KEY_TEXT</constant></entry><entry>Activate/change closed caption mode</entry><entry>CLOSED CAPTION/TELETEXT / DVD TEXT / TELETEXT / TTX</entry></row> + +<row><entry><emphasis role="bold">Audio control</emphasis></entry></row> + +<row><entry><constant>KEY_AUDIO</constant></entry><entry>Change audio source</entry><entry>AUDIO SOURCE / AUDIO / MUSIC</entry></row> +<row><entry><constant>KEY_MUTE</constant></entry><entry>Mute/unmute audio</entry><entry>MUTE / DEMUTE / UNMUTE</entry></row> +<row><entry><constant>KEY_VOLUMEDOWN</constant></entry><entry>Decrease volume</entry><entry>VOLUME- / VOLUME DOWN</entry></row> +<row><entry><constant>KEY_VOLUMEUP</constant></entry><entry>Increase volume</entry><entry>VOLUME+ / VOLUME UP</entry></row> +<row><entry><constant>KEY_MODE</constant></entry><entry>Change sound mode</entry><entry>MONO/STEREO</entry></row> +<row><entry><constant>KEY_LANGUAGE</constant></entry><entry>Select Language</entry><entry>1ST / 2ND LANGUAGE / DVD LANG / MTS/SAP / MTS SEL</entry></row> + +<row><entry><emphasis role="bold">Channel control</emphasis></entry></row> + +<row><entry><constant>KEY_CHANNEL</constant></entry><entry>Go to the next favorite channel</entry><entry>ALT / CHANNEL / CH SURFING / SURF / FAV</entry></row> +<row><entry><constant>KEY_CHANNELDOWN</constant></entry><entry>Decrease channel sequencially</entry><entry>CHANNEL - / CHANNEL DOWN / DOWN</entry></row> +<row><entry><constant>KEY_CHANNELUP</constant></entry><entry>Increase channel sequencially</entry><entry>CHANNEL + / CHANNEL UP / UP</entry></row> +<row><entry><constant>KEY_DIGITS</constant></entry><entry>Use more than one digit for channel</entry><entry>PLUS / 100/ 1xx / xxx /  -/--  / Single Double Triple Digit</entry></row> +<row><entry><constant>KEY_SEARCH</constant></entry><entry>Start channel autoscan</entry><entry>SCAN / AUTOSCAN</entry></row> + +<row><entry><emphasis role="bold">Colored keys</emphasis></entry></row> + +<row><entry><constant>KEY_BLUE</constant></entry><entry>IR Blue key</entry><entry>BLUE</entry></row> +<row><entry><constant>KEY_GREEN</constant></entry><entry>IR Green Key</entry><entry>GREEN</entry></row> +<row><entry><constant>KEY_RED</constant></entry><entry>IR Red key</entry><entry>RED</entry></row> +<row><entry><constant>KEY_YELLOW</constant></entry><entry>IR Yellow key</entry><entry> YELLOW</entry></row> + +<row><entry><emphasis role="bold">Media selection</emphasis></entry></row> + +<row><entry><constant>KEY_CD</constant></entry><entry>Change input source to Compact Disc</entry><entry>CD</entry></row> +<row><entry><constant>KEY_DVD</constant></entry><entry>Change input to DVD</entry><entry>DVD / DVD MENU</entry></row> +<row><entry><constant>KEY_EJECTCLOSECD</constant></entry><entry>Open/close the CD/DVD player</entry><entry>-> ) / CLOSE / OPEN</entry></row> + +<row><entry><constant>KEY_MEDIA</constant></entry><entry>Turn on/off Media application</entry><entry>PC/TV /  TURN ON/OFF APP</entry></row> +<row><entry><constant>KEY_PC</constant></entry><entry>Selects from TV to PC</entry><entry>PC</entry></row> +<row><entry><constant>KEY_RADIO</constant></entry><entry>Put into AM/FM radio mode</entry><entry>RADIO / TV/FM / TV/RADIO / FM / FM/RADIO</entry></row> +<row><entry><constant>KEY_TV</constant></entry><entry>Select tv mode</entry><entry>TV / LIVE TV</entry></row> +<row><entry><constant>KEY_TV2</constant></entry><entry>Select Cable mode</entry><entry>AIR/CBL</entry></row> +<row><entry><constant>KEY_VCR</constant></entry><entry>Select VCR mode</entry><entry>VCR MODE / DTR</entry></row> +<row><entry><constant>KEY_VIDEO</constant></entry><entry>Alternate between input modes</entry><entry>SOURCE / SELECT / DISPLAY / SWITCH INPUTS / VIDEO</entry></row> + +<row><entry><emphasis role="bold">Power control</emphasis></entry></row> + +<row><entry><constant>KEY_POWER</constant></entry><entry>Turn on/off computer</entry><entry>SYSTEM POWER / COMPUTER POWER</entry></row> +<row><entry><constant>KEY_POWER2</constant></entry><entry>Turn on/off application</entry><entry>TV ON/OFF / POWER</entry></row> +<row><entry><constant>KEY_SLEEP</constant></entry><entry>Activate sleep timer</entry><entry>SLEEP / SLEEP TIMER</entry></row> +<row><entry><constant>KEY_SUSPEND</constant></entry><entry>Put computer into suspend mode</entry><entry>STANDBY / SUSPEND</entry></row> + +<row><entry><emphasis role="bold">Window control</emphasis></entry></row> + +<row><entry><constant>KEY_CLEAR</constant></entry><entry>Stop sroweam and return to default input video/audio</entry><entry>CLEAR / RESET / BOSS KEY</entry></row> +<row><entry><constant>KEY_CYCLEWINDOWS</constant></entry><entry>Minimize windows and move to the next one</entry><entry>ALT-TAB / MINIMIZE / DESKTOP</entry></row> +<row><entry><constant>KEY_FAVORITES</constant></entry><entry>Open the favorites sroweam window</entry><entry>TV WALL / Favorites</entry></row> +<row><entry><constant>KEY_MENU</constant></entry><entry>Call application menu</entry><entry>2ND CONTROLS (USA: MENU) / DVD/MENU / SHOW/HIDE CTRL</entry></row> +<row><entry><constant>KEY_NEW</constant></entry><entry>Open/Close Picture in Picture</entry><entry>PIP</entry></row> +<row><entry><constant>KEY_OK</constant></entry><entry>Send a confirmation code to application</entry><entry>OK / ENTER / RETURN</entry></row> +<row><entry><constant>KEY_SCREEN</constant></entry><entry>Select screen aspect ratio</entry><entry>4:3 16:9 SELECT</entry></row> +<row><entry><constant>KEY_ZOOM</constant></entry><entry>Put device into zoom/full screen mode</entry><entry>ZOOM / FULL SCREEN / ZOOM+ / HIDE PANNEL / SWITCH</entry></row> + +<row><entry><emphasis role="bold">Navigation keys</emphasis></entry></row> + +<row><entry><constant>KEY_ESC</constant></entry><entry>Cancel current operation</entry><entry>CANCEL / BACK</entry></row> +<row><entry><constant>KEY_HELP</constant></entry><entry>Open a Help window</entry><entry>HELP</entry></row> +<row><entry><constant>KEY_HOMEPAGE</constant></entry><entry>Navigate to Homepage</entry><entry>HOME</entry></row> +<row><entry><constant>KEY_INFO</constant></entry><entry>Open On Screen Display</entry><entry>DISPLAY INFORMATION / OSD</entry></row> +<row><entry><constant>KEY_WWW</constant></entry><entry>Open the default browser</entry><entry>WEB</entry></row> +<row><entry><constant>KEY_UP</constant></entry><entry>Up key</entry><entry>UP</entry></row> +<row><entry><constant>KEY_DOWN</constant></entry><entry>Down key</entry><entry>DOWN</entry></row> +<row><entry><constant>KEY_LEFT</constant></entry><entry>Left key</entry><entry>LEFT</entry></row> +<row><entry><constant>KEY_RIGHT</constant></entry><entry>Right key</entry><entry>RIGHT</entry></row> + +<row><entry><emphasis role="bold">Miscellaneous keys</emphasis></entry></row> + +<row><entry><constant>KEY_DOT</constant></entry><entry>Return a dot</entry><entry>.</entry></row> +<row><entry><constant>KEY_FN</constant></entry><entry>Select a function</entry><entry>FUNCTION</entry></row> + +</tbody> +</tgroup> +</table> + +<para>It should be noticed that, sometimes, there some fundamental missing keys at some cheaper IR's. Due to that, it is recommended to:</para> + +<table pgwide="1" frame="none" id="rc_keymap_notes"> +<title>Notes</title> +<tgroup cols="1"> +&cs-str; +<tbody valign="top"> +<row> +<entry>On simpler IR's, without separate channel keys, you need to map UP as <constant>KEY_CHANNELUP</constant></entry> +</row><row> +<entry>On simpler IR's, without separate channel keys, you need to map DOWN as <constant>KEY_CHANNELDOWN</constant></entry> +</row><row> +<entry>On simpler IR's, without separate volume keys, you need to map LEFT as <constant>KEY_VOLUMEDOWN</constant></entry> +</row><row> +<entry>On simpler IR's, without separate volume keys, you need to map RIGHT as <constant>KEY_VOLUMEUP</constant></entry> +</row> +</tbody> +</tgroup> +</table> + +</section> + +<section id="Remote_controllers_table_change"> +<title>Changing default Remote Controller mappings</title> +<para>The event interface provides two ioctls to be used against +the /dev/input/event device, to allow changing the default +keymapping.</para> + +<para>This program demonstrates how to replace the keymap tables.</para> +&sub-keytable-c; +</section> + +&sub-lirc_device_interface; +</chapter> diff --git a/Documentation/DocBook/media/v4l/selection-api.xml b/Documentation/DocBook/media/v4l/selection-api.xml new file mode 100644 index 00000000000..4c238ce068b --- /dev/null +++ b/Documentation/DocBook/media/v4l/selection-api.xml @@ -0,0 +1,325 @@ +<section id="selection-api"> + +  <title>Experimental API for cropping, composing and scaling</title> + +      <note> +	<title>Experimental</title> + +	<para>This is an <link linkend="experimental">experimental</link> +interface and may change in the future.</para> +      </note> + +  <section> +    <title>Introduction</title> + +<para>Some video capture devices can sample a subsection of a picture and +shrink or enlarge it to an image of arbitrary size. Next, the devices can +insert the image into larger one. Some video output devices can crop part of an +input image, scale it up or down and insert it at an arbitrary scan line and +horizontal offset into a video signal. We call these abilities cropping, +scaling and composing.</para> + +<para>On a video <emphasis>capture</emphasis> device the source is a video +signal, and the cropping target determine the area actually sampled. The sink +is an image stored in a memory buffer.  The composing area specifies which part +of the buffer is actually written to by the hardware. </para> + +<para>On a video <emphasis>output</emphasis> device the source is an image in a +memory buffer, and the cropping target is a part of an image to be shown on a +display. The sink is the display or the graphics screen. The application may +select the part of display where the image should be displayed. The size and +position of such a window is controlled by the compose target.</para> + +<para>Rectangles for all cropping and composing targets are defined even if the +device does supports neither cropping nor composing. Their size and position +will be fixed in such a case. If the device does not support scaling then the +cropping and composing rectangles have the same size.</para> + +  </section> + +    <section> +      <title>Selection targets</title> + +      <para> +      <figure id="sel-targets-capture"> +	<title>Cropping and composing targets</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="selection.png" format="PNG" /> +	  </imageobject> +	  <textobject> +	    <phrase>Targets used by a cropping, composing and scaling +            process</phrase> +	  </textobject> +	</mediaobject> +      </figure> +      </para> + +      <para>See <xref linkend="v4l2-selection-targets" /> for more +    information.</para> +    </section> + +  <section> + +  <title>Configuration</title> + +<para>Applications can use the <link linkend="vidioc-g-selection">selection +API</link> to select an area in a video signal or a buffer, and to query for +default settings and hardware limits.</para> + +<para>Video hardware can have various cropping, composing and scaling +limitations. It may only scale up or down, support only discrete scaling +factors, or have different scaling abilities in the horizontal and vertical +directions. Also it may not support scaling at all. At the same time the +cropping/composing rectangles may have to be aligned, and both the source and +the sink may have arbitrary upper and lower size limits. Therefore, as usual, +drivers are expected to adjust the requested parameters and return the actual +values selected. An application can control the rounding behaviour using <link +linkend="v4l2-selection-flags"> constraint flags </link>.</para> + +   <section> + +   <title>Configuration of video capture</title> + +<para>See figure <xref linkend="sel-targets-capture" /> for examples of the +selection targets available for a video capture device.  It is recommended to +configure the cropping targets before to the composing targets.</para> + +<para>The range of coordinates of the top left corner, width and height of +areas that can be sampled is given by the <constant> V4L2_SEL_TGT_CROP_BOUNDS +</constant> target. It is recommended for the driver developers to put the +top/left corner at position <constant> (0,0) </constant>.  The rectangle's +coordinates are expressed in pixels.</para> + +<para>The top left corner, width and height of the source rectangle, that is +the area actually sampled, is given by the <constant> V4L2_SEL_TGT_CROP +</constant> target. It uses the same coordinate system as <constant> +V4L2_SEL_TGT_CROP_BOUNDS </constant>. The active cropping area must lie +completely inside the capture boundaries. The driver may further adjust the +requested size and/or position according to hardware limitations.</para> + +<para>Each capture device has a default source rectangle, given by the +<constant> V4L2_SEL_TGT_CROP_DEFAULT </constant> target. This rectangle shall +over what the driver writer considers the complete picture.  Drivers shall set +the active crop rectangle to the default when the driver is first loaded, but +not later.</para> + +<para>The composing targets refer to a memory buffer. The limits of composing +coordinates are obtained using <constant> V4L2_SEL_TGT_COMPOSE_BOUNDS +</constant>.  All coordinates are expressed in pixels. The rectangle's top/left +corner must be located at position <constant> (0,0) </constant>. The width and +height are equal to the image size set by <constant> VIDIOC_S_FMT </constant>. +</para> + +<para>The part of a buffer into which the image is inserted by the hardware is +controlled by the <constant> V4L2_SEL_TGT_COMPOSE </constant> target. +The rectangle's coordinates are also expressed in the same coordinate system as +the bounds rectangle. The composing rectangle must lie completely inside bounds +rectangle. The driver must adjust the composing rectangle to fit to the +bounding limits. Moreover, the driver can perform other adjustments according +to hardware limitations. The application can control rounding behaviour using +<link linkend="v4l2-selection-flags"> constraint flags </link>.</para> + +<para>For capture devices the default composing rectangle is queried using +<constant> V4L2_SEL_TGT_COMPOSE_DEFAULT </constant>. It is usually equal to the +bounding rectangle.</para> + +<para>The part of a buffer that is modified by the hardware is given by +<constant> V4L2_SEL_TGT_COMPOSE_PADDED </constant>. It contains all pixels +defined using <constant> V4L2_SEL_TGT_COMPOSE </constant> plus all +padding data modified by hardware during insertion process. All pixels outside +this rectangle <emphasis>must not</emphasis> be changed by the hardware. The +content of pixels that lie inside the padded area but outside active area is +undefined. The application can use the padded and active rectangles to detect +where the rubbish pixels are located and remove them if needed.</para> + +   </section> + +   <section> + +   <title>Configuration of video output</title> + +<para>For output devices targets and ioctls are used similarly to the video +capture case. The <emphasis> composing </emphasis> rectangle refers to the +insertion of an image into a video signal. The cropping rectangles refer to a +memory buffer. It is recommended to configure the composing targets before to +the cropping targets.</para> + +<para>The cropping targets refer to the memory buffer that contains an image to +be inserted into a video signal or graphical screen. The limits of cropping +coordinates are obtained using <constant> V4L2_SEL_TGT_CROP_BOUNDS </constant>. +All coordinates are expressed in pixels. The top/left corner is always point +<constant> (0,0) </constant>.  The width and height is equal to the image size +specified using <constant> VIDIOC_S_FMT </constant> ioctl.</para> + +<para>The top left corner, width and height of the source rectangle, that is +the area from which image date are processed by the hardware, is given by the +<constant> V4L2_SEL_TGT_CROP </constant>. Its coordinates are expressed +in in the same coordinate system as the bounds rectangle. The active cropping +area must lie completely inside the crop boundaries and the driver may further +adjust the requested size and/or position according to hardware +limitations.</para> + +<para>For output devices the default cropping rectangle is queried using +<constant> V4L2_SEL_TGT_CROP_DEFAULT </constant>. It is usually equal to the +bounding rectangle.</para> + +<para>The part of a video signal or graphics display where the image is +inserted by the hardware is controlled by <constant> +V4L2_SEL_TGT_COMPOSE </constant> target.  The rectangle's coordinates +are expressed in pixels. The composing rectangle must lie completely inside the +bounds rectangle.  The driver must adjust the area to fit to the bounding +limits.  Moreover, the driver can perform other adjustments according to +hardware limitations. </para> + +<para>The device has a default composing rectangle, given by the <constant> +V4L2_SEL_TGT_COMPOSE_DEFAULT </constant> target. This rectangle shall cover what +the driver writer considers the complete picture. It is recommended for the +driver developers to put the top/left corner at position <constant> (0,0) +</constant>. Drivers shall set the active composing rectangle to the default +one when the driver is first loaded.</para> + +<para>The devices may introduce additional content to video signal other than +an image from memory buffers.  It includes borders around an image. However, +such a padded area is driver-dependent feature not covered by this document. +Driver developers are encouraged to keep padded rectangle equal to active one. +The padded target is accessed by the <constant> V4L2_SEL_TGT_COMPOSE_PADDED +</constant> identifier.  It must contain all pixels from the <constant> +V4L2_SEL_TGT_COMPOSE </constant> target.</para> + +   </section> + +   <section> + +     <title>Scaling control</title> + +<para>An application can detect if scaling is performed by comparing the width +and the height of rectangles obtained using <constant> V4L2_SEL_TGT_CROP +</constant> and <constant> V4L2_SEL_TGT_COMPOSE </constant> targets. If +these are not equal then the scaling is applied. The application can compute +the scaling ratios using these values.</para> + +   </section> + +  </section> + +  <section> + +    <title>Comparison with old cropping API</title> + +<para>The selection API was introduced to cope with deficiencies of previous +<link linkend="crop"> API </link>, that was designed to control simple capture +devices. Later the cropping API was adopted by video output drivers. The ioctls +are used to select a part of the display were the video signal is inserted. It +should be considered as an API abuse because the described operation is +actually the composing.  The selection API makes a clear distinction between +composing and cropping operations by setting the appropriate targets.  The V4L2 +API lacks any support for composing to and cropping from an image inside a +memory buffer.  The application could configure a capture device to fill only a +part of an image by abusing V4L2 API.  Cropping a smaller image from a larger +one is achieved by setting the field +&v4l2-pix-format;<structfield>::bytesperline</structfield>.  Introducing an image offsets +could be done by modifying field &v4l2-buffer;<structfield>::m_userptr</structfield> +before calling <constant> VIDIOC_QBUF </constant>. Those +operations should be avoided because they are not portable (endianness), and do +not work for macroblock and Bayer formats and mmap buffers.  The selection API +deals with configuration of buffer cropping/composing in a clear, intuitive and +portable way.  Next, with the selection API the concepts of the padded target +and constraints flags are introduced.  Finally, &v4l2-crop; and &v4l2-cropcap; +have no reserved fields. Therefore there is no way to extend their functionality. +The new &v4l2-selection; provides a lot of place for future +extensions.  Driver developers are encouraged to implement only selection API. +The former cropping API would be simulated using the new one. </para> + +  </section> + +   <section> +      <title>Examples</title> +      <example> +	<title>Resetting the cropping parameters</title> + +	<para>(A video capture device is assumed; change <constant> +V4L2_BUF_TYPE_VIDEO_CAPTURE </constant> for other devices; change target to +<constant> V4L2_SEL_TGT_COMPOSE_* </constant> family to configure composing +area)</para> + +	<programlisting> + +	&v4l2-selection; sel = { +		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE, +		.target = V4L2_SEL_TGT_CROP_DEFAULT, +	}; +	ret = ioctl(fd, &VIDIOC-G-SELECTION;, &sel); +	if (ret) +		exit(-1); +	sel.target = V4L2_SEL_TGT_CROP; +	ret = ioctl(fd, &VIDIOC-S-SELECTION;, &sel); +	if (ret) +		exit(-1); + +        </programlisting> +      </example> + +      <example> +	<title>Simple downscaling</title> +	<para>Setting a composing area on output of size of <emphasis> at most +</emphasis> half of limit placed at a center of a display.</para> +	<programlisting> + +	&v4l2-selection; sel = { +		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT, +		.target = V4L2_SEL_TGT_COMPOSE_BOUNDS, +	}; +	struct v4l2_rect r; + +	ret = ioctl(fd, &VIDIOC-G-SELECTION;, &sel); +	if (ret) +		exit(-1); +	/* setting smaller compose rectangle */ +	r.width = sel.r.width / 2; +	r.height = sel.r.height / 2; +	r.left = sel.r.width / 4; +	r.top = sel.r.height / 4; +	sel.r = r; +	sel.target = V4L2_SEL_TGT_COMPOSE; +	sel.flags = V4L2_SEL_FLAG_LE; +	ret = ioctl(fd, &VIDIOC-S-SELECTION;, &sel); +	if (ret) +		exit(-1); + +        </programlisting> +      </example> + +      <example> +	<title>Querying for scaling factors</title> +	<para>A video output device is assumed; change <constant> +V4L2_BUF_TYPE_VIDEO_OUTPUT </constant> for other devices</para> +	<programlisting> + +	&v4l2-selection; compose = { +		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT, +		.target = V4L2_SEL_TGT_COMPOSE, +	}; +	&v4l2-selection; crop = { +		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT, +		.target = V4L2_SEL_TGT_CROP, +	}; +	double hscale, vscale; + +	ret = ioctl(fd, &VIDIOC-G-SELECTION;, &compose); +	if (ret) +		exit(-1); +	ret = ioctl(fd, &VIDIOC-G-SELECTION;, &crop); +	if (ret) +		exit(-1); + +	/* computing scaling factors */ +	hscale = (double)compose.r.width / crop.r.width; +	vscale = (double)compose.r.height / crop.r.height; + +	</programlisting> +      </example> + +   </section> + +</section> diff --git a/Documentation/DocBook/media/v4l/selections-common.xml b/Documentation/DocBook/media/v4l/selections-common.xml new file mode 100644 index 00000000000..7502f784b8c --- /dev/null +++ b/Documentation/DocBook/media/v4l/selections-common.xml @@ -0,0 +1,164 @@ +<section id="v4l2-selections-common"> + +  <title>Common selection definitions</title> + +  <para>While the <link linkend="selection-api">V4L2 selection +  API</link> and <link linkend="v4l2-subdev-selections">V4L2 subdev +  selection APIs</link> are very similar, there's one fundamental +  difference between the two. On sub-device API, the selection +  rectangle refers to the media bus format, and is bound to a +  sub-device's pad. On the V4L2 interface the selection rectangles +  refer to the in-memory pixel format.</para> + +  <para>This section defines the common definitions of the +  selection interfaces on the two APIs.</para> + +  <section id="v4l2-selection-targets"> + +    <title>Selection targets</title> + +    <para>The precise meaning of the selection targets may be +    dependent on which of the two interfaces they are used.</para> + +    <table pgwide="1" frame="none" id="v4l2-selection-targets-table"> +    <title>Selection target definitions</title> +      <tgroup cols="5"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<colspec colname="c5" /> +	&cs-def; +	<thead> +	  <row rowsep="1"> +	    <entry align="left">Target name</entry> +	    <entry align="left">id</entry> +	    <entry align="left">Definition</entry> +	    <entry align="left">Valid for V4L2</entry> +	    <entry align="left">Valid for V4L2 subdev</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_CROP</constant></entry> +	    <entry>0x0000</entry> +	    <entry>Crop rectangle. Defines the cropped area.</entry> +	    <entry>Yes</entry> +	    <entry>Yes</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_CROP_DEFAULT</constant></entry> +	    <entry>0x0001</entry> +	    <entry>Suggested cropping rectangle that covers the "whole picture".</entry> +	    <entry>Yes</entry> +	    <entry>No</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_CROP_BOUNDS</constant></entry> +	    <entry>0x0002</entry> +	    <entry>Bounds of the crop rectangle. All valid crop +	    rectangles fit inside the crop bounds rectangle. +	    </entry> +	    <entry>Yes</entry> +	    <entry>Yes</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_COMPOSE</constant></entry> +	    <entry>0x0100</entry> +	    <entry>Compose rectangle. Used to configure scaling +	    and composition.</entry> +	    <entry>Yes</entry> +	    <entry>Yes</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_COMPOSE_DEFAULT</constant></entry> +	    <entry>0x0101</entry> +	    <entry>Suggested composition rectangle that covers the "whole picture".</entry> +	    <entry>Yes</entry> +	    <entry>No</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_COMPOSE_BOUNDS</constant></entry> +	    <entry>0x0102</entry> +	    <entry>Bounds of the compose rectangle. All valid compose +	    rectangles fit inside the compose bounds rectangle.</entry> +	    <entry>Yes</entry> +	    <entry>Yes</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_TGT_COMPOSE_PADDED</constant></entry> +	    <entry>0x0103</entry> +	    <entry>The active area and all padding pixels that are inserted or +	    modified by hardware.</entry> +	    <entry>Yes</entry> +	    <entry>No</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </section> + +  <section id="v4l2-selection-flags"> + +    <title>Selection flags</title> + +    <table pgwide="1" frame="none" id="v4l2-selection-flags-table"> +    <title>Selection flag definitions</title> +      <tgroup cols="5"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<colspec colname="c5" /> +	&cs-def; +	<thead> +	<row rowsep="1"> +	    <entry align="left">Flag name</entry> +	    <entry align="left">id</entry> +	    <entry align="left">Definition</entry> +	    <entry align="left">Valid for V4L2</entry> +	    <entry align="left">Valid for V4L2 subdev</entry> +	</row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_SEL_FLAG_GE</constant></entry> +	    <entry>(1 << 0)</entry> +	    <entry>Suggest the driver it should choose greater or +	    equal rectangle (in size) than was requested. Albeit the +	    driver may choose a lesser size, it will only do so due to +	    hardware limitations. Without this flag (and +	    <constant>V4L2_SEL_FLAG_LE</constant>) the +	    behaviour is to choose the closest possible +	    rectangle.</entry> +	    <entry>Yes</entry> +	    <entry>Yes</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_FLAG_LE</constant></entry> +	    <entry>(1 << 1)</entry> +	    <entry>Suggest the driver it +	    should choose lesser or equal rectangle (in size) than was +	    requested. Albeit the driver may choose a greater size, it +	    will only do so due to hardware limitations.</entry> +	    <entry>Yes</entry> +	    <entry>Yes</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SEL_FLAG_KEEP_CONFIG</constant></entry> +	    <entry>(1 << 2)</entry> +	    <entry>The configuration must not be propagated to any +	    further processing steps. If this flag is not given, the +	    configuration is propagated inside the subdevice to all +	    further processing steps.</entry> +	    <entry>No</entry> +	    <entry>Yes</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </section> + +</section> diff --git a/Documentation/DocBook/media/v4l/subdev-formats.xml b/Documentation/DocBook/media/v4l/subdev-formats.xml new file mode 100644 index 00000000000..b2d5a0363cb --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-formats.xml @@ -0,0 +1,3501 @@ +<section id="v4l2-mbus-format"> +  <title>Media Bus Formats</title> + +  <table pgwide="1" frame="none" id="v4l2-mbus-framefmt"> +    <title>struct <structname>v4l2_mbus_framefmt</structname></title> +    <tgroup cols="3"> +      &cs-str; +      <tbody valign="top"> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>width</structfield></entry> +	  <entry>Image width, in pixels.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>height</structfield></entry> +	  <entry>Image height, in pixels.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>code</structfield></entry> +	  <entry>Format code, from &v4l2-mbus-pixelcode;.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>field</structfield></entry> +	  <entry>Field order, from &v4l2-field;. See +	  <xref linkend="field-order" /> for details.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>colorspace</structfield></entry> +	  <entry>Image colorspace, from &v4l2-colorspace;. See +	  <xref linkend="colorspaces" /> for details.</entry> +	</row> +	<row> +	  <entry>__u32</entry> +	  <entry><structfield>reserved</structfield>[7]</entry> +	  <entry>Reserved for future extensions. Applications and drivers must +	  set the array to zero.</entry> +	</row> +      </tbody> +    </tgroup> +  </table> + +  <section id="v4l2-mbus-pixelcode"> +    <title>Media Bus Pixel Codes</title> + +    <para>The media bus pixel codes describe image formats as flowing over +    physical busses (both between separate physical components and inside SoC +    devices). This should not be confused with the V4L2 pixel formats that +    describe, using four character codes, image formats as stored in memory. +    </para> + +    <para>While there is a relationship between image formats on busses and +    image formats in memory (a raw Bayer image won't be magically converted to +    JPEG just by storing it to memory), there is no one-to-one correspondance +    between them.</para> + +    <section> +      <title>Packed RGB Formats</title> + +      <para>Those formats transfer pixel data as red, green and blue components. +      The format code is made of the following information. +      <itemizedlist> +	<listitem><para>The red, green and blue components order code, as encoded in a +	pixel sample. Possible values are RGB and BGR.</para></listitem> +	<listitem><para>The number of bits per component, for each component. The values +	can be different for all components. Common values are 555 and 565.</para> +	</listitem> +	<listitem><para>The number of bus samples per pixel. Pixels that are wider than +	the bus width must be transferred in multiple samples. Common values are +	1 and 2.</para></listitem> +	<listitem><para>The bus width.</para></listitem> +	<listitem><para>For formats where the total number of bits per pixel is smaller +	than the number of bus samples per pixel times the bus width, a padding +	value stating if the bytes are padded in their most high order bits +	(PADHI) or low order bits (PADLO).</para></listitem> +	<listitem><para>For formats where the number of bus samples per pixel is larger +	than 1, an endianness value stating if the pixel is transferred MSB first +	(BE) or LSB first (LE).</para></listitem> +      </itemizedlist> +      </para> + +      <para>For instance, a format where pixels are encoded as 5-bits red, 5-bits +      green and 5-bit blue values padded on the high bit, transferred as 2 8-bit +      samples per pixel with the most significant bits (padding, red and half of +      the green value) transferred first will be named +      <constant>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</constant>. +      </para> + +      <para>The following tables list existing packed RGB formats.</para> + +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb"> +	<title>RGB formats</title> +	<tgroup cols="27"> +	  <colspec colname="id" align="left" /> +	  <colspec colname="code" align="center"/> +	  <colspec colname="bit" /> +	  <colspec colnum="4" colname="b31" align="center" /> +	  <colspec colnum="5" colname="b20" align="center" /> +	  <colspec colnum="6" colname="b29" align="center" /> +	  <colspec colnum="7" colname="b28" align="center" /> +	  <colspec colnum="8" colname="b27" align="center" /> +	  <colspec colnum="9" colname="b26" align="center" /> +	  <colspec colnum="10" colname="b25" align="center" /> +	  <colspec colnum="11" colname="b24" align="center" /> +	  <colspec colnum="12" colname="b23" align="center" /> +	  <colspec colnum="13" colname="b22" align="center" /> +	  <colspec colnum="14" colname="b21" align="center" /> +	  <colspec colnum="15" colname="b20" align="center" /> +	  <colspec colnum="16" colname="b19" align="center" /> +	  <colspec colnum="17" colname="b18" align="center" /> +	  <colspec colnum="18" colname="b17" align="center" /> +	  <colspec colnum="19" colname="b16" align="center" /> +	  <colspec colnum="20" colname="b15" align="center" /> +	  <colspec colnum="21" colname="b14" align="center" /> +	  <colspec colnum="22" colname="b13" align="center" /> +	  <colspec colnum="23" colname="b12" align="center" /> +	  <colspec colnum="24" colname="b11" align="center" /> +	  <colspec colnum="25" colname="b10" align="center" /> +	  <colspec colnum="26" colname="b09" align="center" /> +	  <colspec colnum="27" colname="b08" align="center" /> +	  <colspec colnum="28" colname="b07" align="center" /> +	  <colspec colnum="29" colname="b06" align="center" /> +	  <colspec colnum="30" colname="b05" align="center" /> +	  <colspec colnum="31" colname="b04" align="center" /> +	  <colspec colnum="32" colname="b03" align="center" /> +	  <colspec colnum="33" colname="b02" align="center" /> +	  <colspec colnum="34" colname="b01" align="center" /> +	  <colspec colnum="35" colname="b00" align="center" /> +	  <spanspec namest="b31" nameend="b00" spanname="b0" /> +	  <thead> +	    <row> +	      <entry>Identifier</entry> +	      <entry>Code</entry> +	      <entry></entry> +	      <entry spanname="b0">Data organization</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry>Bit</entry> +	      <entry>31</entry> +	      <entry>30</entry> +	      <entry>29</entry> +	      <entry>28</entry> +	      <entry>27</entry> +	      <entry>26</entry> +	      <entry>25</entry> +	      <entry>24</entry> +	      <entry>23</entry> +	      <entry>22</entry> +	      <entry>21</entry> +	      <entry>20</entry> +	      <entry>19</entry> +	      <entry>18</entry> +	      <entry>17</entry> +	      <entry>16</entry> +	      <entry>15</entry> +	      <entry>14</entry> +	      <entry>13</entry> +	      <entry>12</entry> +	      <entry>11</entry> +	      <entry>10</entry> +	      <entry>9</entry> +	      <entry>8</entry> +	      <entry>7</entry> +	      <entry>6</entry> +	      <entry>5</entry> +	      <entry>4</entry> +	      <entry>3</entry> +	      <entry>2</entry> +	      <entry>1</entry> +	      <entry>0</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row id="V4L2-MBUS-FMT-RGB444-2X8-PADHI-BE"> +	      <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE</entry> +	      <entry>0x1001</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB444-2X8-PADHI-LE"> +	      <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE</entry> +	      <entry>0x1002</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB555-2X8-PADHI-BE"> +	      <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</entry> +	      <entry>0x1003</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>0</entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB555-2X8-PADHI-LE"> +	      <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE</entry> +	      <entry>0x1004</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>0</entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-BGR565-2X8-BE"> +	      <entry>V4L2_MBUS_FMT_BGR565_2X8_BE</entry> +	      <entry>0x1005</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-BGR565-2X8-LE"> +	      <entry>V4L2_MBUS_FMT_BGR565_2X8_LE</entry> +	      <entry>0x1006</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB565-2X8-BE"> +	      <entry>V4L2_MBUS_FMT_RGB565_2X8_BE</entry> +	      <entry>0x1007</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB565-2X8-LE"> +	      <entry>V4L2_MBUS_FMT_RGB565_2X8_LE</entry> +	      <entry>0x1008</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB666-1X18"> +	      <entry>V4L2_MBUS_FMT_RGB666_1X18</entry> +	      <entry>0x1009</entry> +	      <entry></entry> +	      &dash-ent-14; +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB888-1X24"> +	      <entry>V4L2_MBUS_FMT_RGB888_1X24</entry> +	      <entry>0x100a</entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB888-2X12-BE"> +	      <entry>V4L2_MBUS_FMT_RGB888_2X12_BE</entry> +	      <entry>0x100b</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-RGB888-2X12-LE"> +	      <entry>V4L2_MBUS_FMT_RGB888_2X12_LE</entry> +	      <entry>0x100c</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-ARGB888-1X32"> +	      <entry>V4L2_MBUS_FMT_ARGB888_1X32</entry> +	      <entry>0x100d</entry> +	      <entry></entry> +	      <entry>a<subscript>7</subscript></entry> +	      <entry>a<subscript>6</subscript></entry> +	      <entry>a<subscript>5</subscript></entry> +	      <entry>a<subscript>4</subscript></entry> +	      <entry>a<subscript>3</subscript></entry> +	      <entry>a<subscript>2</subscript></entry> +	      <entry>a<subscript>1</subscript></entry> +	      <entry>a<subscript>0</subscript></entry> +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> + +    <section> +      <title>Bayer Formats</title> + +      <para>Those formats transfer pixel data as red, green and blue components. +      The format code is made of the following information. +      <itemizedlist> +	<listitem><para>The red, green and blue components order code, as encoded in a +	pixel sample. The possible values are shown in <xref +	linkend="bayer-patterns" />.</para></listitem> +	<listitem><para>The number of bits per pixel component. All components are +	transferred on the same number of bits. Common values are 8, 10 and 12.</para> +	</listitem> +	<listitem><para>The compression (optional). If the pixel components are +	ALAW- or DPCM-compressed, a mention of the compression scheme and the +	number of bits per compressed pixel component.</para></listitem> +	<listitem><para>The number of bus samples per pixel. Pixels that are wider than +	the bus width must be transferred in multiple samples. Common values are +	1 and 2.</para></listitem> +	<listitem><para>The bus width.</para></listitem> +	<listitem><para>For formats where the total number of bits per pixel is smaller +	than the number of bus samples per pixel times the bus width, a padding +	value stating if the bytes are padded in their most high order bits +	(PADHI) or low order bits (PADLO).</para></listitem> +	<listitem><para>For formats where the number of bus samples per pixel is larger +	than 1, an endianness value stating if the pixel is transferred MSB first +	(BE) or LSB first (LE).</para></listitem> +      </itemizedlist> +      </para> + +      <para>For instance, a format with uncompressed 10-bit Bayer components +      arranged in a red, green, green, blue pattern transferred as 2 8-bit +      samples per pixel with the least significant bits transferred first will +      be named <constant>V4L2_MBUS_FMT_SRGGB10_2X8_PADHI_LE</constant>. +      </para> + +      <figure id="bayer-patterns"> +	<title>Bayer Patterns</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="bayer.png" format="PNG" /> +	  </imageobject> +	  <textobject> +	    <phrase>Bayer filter color patterns</phrase> +	  </textobject> +	</mediaobject> +      </figure> + +      <para>The following table lists existing packed Bayer formats. The data +      organization is given as an example for the first pixel only.</para> + +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-bayer"> +	<title>Bayer Formats</title> +	<tgroup cols="15"> +	  <colspec colname="id" align="left" /> +	  <colspec colname="code" align="center"/> +	  <colspec colname="bit" /> +	  <colspec colnum="4" colname="b11" align="center" /> +	  <colspec colnum="5" colname="b10" align="center" /> +	  <colspec colnum="6" colname="b09" align="center" /> +	  <colspec colnum="7" colname="b08" align="center" /> +	  <colspec colnum="8" colname="b07" align="center" /> +	  <colspec colnum="9" colname="b06" align="center" /> +	  <colspec colnum="10" colname="b05" align="center" /> +	  <colspec colnum="11" colname="b04" align="center" /> +	  <colspec colnum="12" colname="b03" align="center" /> +	  <colspec colnum="13" colname="b02" align="center" /> +	  <colspec colnum="14" colname="b01" align="center" /> +	  <colspec colnum="15" colname="b00" align="center" /> +	  <spanspec namest="b11" nameend="b00" spanname="b0" /> +	  <thead> +	    <row> +	      <entry>Identifier</entry> +	      <entry>Code</entry> +	      <entry></entry> +	      <entry spanname="b0">Data organization</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry>Bit</entry> +	      <entry>11</entry> +	      <entry>10</entry> +	      <entry>9</entry> +	      <entry>8</entry> +	      <entry>7</entry> +	      <entry>6</entry> +	      <entry>5</entry> +	      <entry>4</entry> +	      <entry>3</entry> +	      <entry>2</entry> +	      <entry>1</entry> +	      <entry>0</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row id="V4L2-MBUS-FMT-SBGGR8-1X8"> +	      <entry>V4L2_MBUS_FMT_SBGGR8_1X8</entry> +	      <entry>0x3001</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGBRG8-1X8"> +	      <entry>V4L2_MBUS_FMT_SGBRG8_1X8</entry> +	      <entry>0x3013</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGRBG8-1X8"> +	      <entry>V4L2_MBUS_FMT_SGRBG8_1X8</entry> +	      <entry>0x3002</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SRGGB8-1X8"> +	      <entry>V4L2_MBUS_FMT_SRGGB8_1X8</entry> +	      <entry>0x3014</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-ALAW8-1X8"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_ALAW8_1X8</entry> +	      <entry>0x3015</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGBRG10-ALAW8-1X8"> +	      <entry>V4L2_MBUS_FMT_SGBRG10_ALAW8_1X8</entry> +	      <entry>0x3016</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGRBG10-ALAW8-1X8"> +	      <entry>V4L2_MBUS_FMT_SGRBG10_ALAW8_1X8</entry> +	      <entry>0x3017</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SRGGB10-ALAW8-1X8"> +	      <entry>V4L2_MBUS_FMT_SRGGB10_ALAW8_1X8</entry> +	      <entry>0x3018</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry> +	      <entry>0x300b</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGBRG10-DPCM8-1X8"> +	      <entry>V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8</entry> +	      <entry>0x300c</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGRBG10-DPCM8-1X8"> +	      <entry>V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8</entry> +	      <entry>0x3009</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SRGGB10-DPCM8-1X8"> +	      <entry>V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8</entry> +	      <entry>0x300d</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADHI-BE"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE</entry> +	      <entry>0x3003</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>b<subscript>9</subscript></entry> +	      <entry>b<subscript>8</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADHI-LE"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE</entry> +	      <entry>0x3004</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>b<subscript>9</subscript></entry> +	      <entry>b<subscript>8</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADLO-BE"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE</entry> +	      <entry>0x3005</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>9</subscript></entry> +	      <entry>b<subscript>8</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADLO-LE"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE</entry> +	      <entry>0x3006</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	      <entry>0</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>9</subscript></entry> +	      <entry>b<subscript>8</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR10-1X10"> +	      <entry>V4L2_MBUS_FMT_SBGGR10_1X10</entry> +	      <entry>0x3007</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>b<subscript>9</subscript></entry> +	      <entry>b<subscript>8</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGBRG10-1X10"> +	      <entry>V4L2_MBUS_FMT_SGBRG10_1X10</entry> +	      <entry>0x300e</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>9</subscript></entry> +	      <entry>g<subscript>8</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGRBG10-1X10"> +	      <entry>V4L2_MBUS_FMT_SGRBG10_1X10</entry> +	      <entry>0x300a</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>g<subscript>9</subscript></entry> +	      <entry>g<subscript>8</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SRGGB10-1X10"> +	      <entry>V4L2_MBUS_FMT_SRGGB10_1X10</entry> +	      <entry>0x300f</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>r<subscript>9</subscript></entry> +	      <entry>r<subscript>8</subscript></entry> +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SBGGR12-1X12"> +	      <entry>V4L2_MBUS_FMT_SBGGR12_1X12</entry> +	      <entry>0x3008</entry> +	      <entry></entry> +	      <entry>b<subscript>11</subscript></entry> +	      <entry>b<subscript>10</subscript></entry> +	      <entry>b<subscript>9</subscript></entry> +	      <entry>b<subscript>8</subscript></entry> +	      <entry>b<subscript>7</subscript></entry> +	      <entry>b<subscript>6</subscript></entry> +	      <entry>b<subscript>5</subscript></entry> +	      <entry>b<subscript>4</subscript></entry> +	      <entry>b<subscript>3</subscript></entry> +	      <entry>b<subscript>2</subscript></entry> +	      <entry>b<subscript>1</subscript></entry> +	      <entry>b<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGBRG12-1X12"> +	      <entry>V4L2_MBUS_FMT_SGBRG12_1X12</entry> +	      <entry>0x3010</entry> +	      <entry></entry> +	      <entry>g<subscript>11</subscript></entry> +	      <entry>g<subscript>10</subscript></entry> +	      <entry>g<subscript>9</subscript></entry> +	      <entry>g<subscript>8</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SGRBG12-1X12"> +	      <entry>V4L2_MBUS_FMT_SGRBG12_1X12</entry> +	      <entry>0x3011</entry> +	      <entry></entry> +	      <entry>g<subscript>11</subscript></entry> +	      <entry>g<subscript>10</subscript></entry> +	      <entry>g<subscript>9</subscript></entry> +	      <entry>g<subscript>8</subscript></entry> +	      <entry>g<subscript>7</subscript></entry> +	      <entry>g<subscript>6</subscript></entry> +	      <entry>g<subscript>5</subscript></entry> +	      <entry>g<subscript>4</subscript></entry> +	      <entry>g<subscript>3</subscript></entry> +	      <entry>g<subscript>2</subscript></entry> +	      <entry>g<subscript>1</subscript></entry> +	      <entry>g<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-SRGGB12-1X12"> +	      <entry>V4L2_MBUS_FMT_SRGGB12_1X12</entry> +	      <entry>0x3012</entry> +	      <entry></entry> +	      <entry>r<subscript>11</subscript></entry> +	      <entry>r<subscript>10</subscript></entry> +	      <entry>r<subscript>9</subscript></entry> +	      <entry>r<subscript>8</subscript></entry> +	      <entry>r<subscript>7</subscript></entry> +	      <entry>r<subscript>6</subscript></entry> +	      <entry>r<subscript>5</subscript></entry> +	      <entry>r<subscript>4</subscript></entry> +	      <entry>r<subscript>3</subscript></entry> +	      <entry>r<subscript>2</subscript></entry> +	      <entry>r<subscript>1</subscript></entry> +	      <entry>r<subscript>0</subscript></entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> + +    <section> +      <title>Packed YUV Formats</title> + +      <para>Those data formats transfer pixel data as (possibly downsampled) Y, U +      and V components. Some formats include dummy bits in some of their samples +      and are collectively referred to as "YDYC" (Y-Dummy-Y-Chroma) formats. +      One cannot rely on the values of these dummy bits as those are undefined. +      </para> +      <para>The format code is made of the following information. +      <itemizedlist> +	<listitem><para>The Y, U and V components order code, as transferred on the +	bus. Possible values are YUYV, UYVY, YVYU and VYUY for formats with no +	dummy bit, and YDYUYDYV, YDYVYDYU, YUYDYVYD and YVYDYUYD for YDYC formats. +	</para></listitem> +	<listitem><para>The number of bits per pixel component. All components are +	transferred on the same number of bits. Common values are 8, 10 and 12.</para> +	</listitem> +	<listitem><para>The number of bus samples per pixel. Pixels that are wider than +	the bus width must be transferred in multiple samples. Common values are +	1, 1.5 (encoded as 1_5) and 2.</para></listitem> +	<listitem><para>The bus width. When the bus width is larger than the number of +	bits per pixel component, several components are packed in a single bus +	sample. The components are ordered as specified by the order code, with +	components on the left of the code transferred in the high order bits. +	Common values are 8 and 16.</para> +	</listitem> +      </itemizedlist> +      </para> + +      <para>For instance, a format where pixels are encoded as 8-bit YUV values +      downsampled to 4:2:2 and transferred as 2 8-bit bus samples per pixel in the +      U, Y, V, Y order will be named <constant>V4L2_MBUS_FMT_UYVY8_2X8</constant>. +      </para> + +	<para><xref linkend="v4l2-mbus-pixelcode-yuv8"/> lists existing packed YUV +	formats and describes the organization of each pixel data in each sample. +	When a format pattern is split across multiple samples each of the samples +	in the pattern is described.</para> + +	<para>The role of each bit transferred over the bus is identified by one +	of the following codes.</para> + +	<itemizedlist> +	   <listitem><para>y<subscript>x</subscript> for luma component bit number x</para></listitem> +	   <listitem><para>u<subscript>x</subscript> for blue chroma component bit number x</para></listitem> +	   <listitem><para>v<subscript>x</subscript> for red chroma component bit number x</para></listitem> +	   <listitem><para>a<subscript>x</subscript> for alpha component bit number x</para></listitem> +	   <listitem><para>- for non-available bits (for positions higher than the bus width)</para></listitem> +	   <listitem><para>d for dummy bits</para></listitem> +	</itemizedlist> + +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-yuv8"> +	<title>YUV Formats</title> +	<tgroup cols="23"> +	  <colspec colname="id" align="left" /> +	  <colspec colname="code" align="center"/> +	  <colspec colname="bit" /> +	  <colspec colnum="4" colname="b31" align="center" /> +	  <colspec colnum="5" colname="b20" align="center" /> +	  <colspec colnum="6" colname="b29" align="center" /> +	  <colspec colnum="7" colname="b28" align="center" /> +	  <colspec colnum="8" colname="b27" align="center" /> +	  <colspec colnum="9" colname="b26" align="center" /> +	  <colspec colnum="10" colname="b25" align="center" /> +	  <colspec colnum="11" colname="b24" align="center" /> +	  <colspec colnum="12" colname="b23" align="center" /> +	  <colspec colnum="13" colname="b22" align="center" /> +	  <colspec colnum="14" colname="b21" align="center" /> +	  <colspec colnum="15" colname="b20" align="center" /> +	  <colspec colnum="16" colname="b19" align="center" /> +	  <colspec colnum="17" colname="b18" align="center" /> +	  <colspec colnum="18" colname="b17" align="center" /> +	  <colspec colnum="19" colname="b16" align="center" /> +	  <colspec colnum="20" colname="b15" align="center" /> +	  <colspec colnum="21" colname="b14" align="center" /> +	  <colspec colnum="22" colname="b13" align="center" /> +	  <colspec colnum="23" colname="b12" align="center" /> +	  <colspec colnum="24" colname="b11" align="center" /> +	  <colspec colnum="25" colname="b10" align="center" /> +	  <colspec colnum="26" colname="b09" align="center" /> +	  <colspec colnum="27" colname="b08" align="center" /> +	  <colspec colnum="28" colname="b07" align="center" /> +	  <colspec colnum="29" colname="b06" align="center" /> +	  <colspec colnum="30" colname="b05" align="center" /> +	  <colspec colnum="31" colname="b04" align="center" /> +	  <colspec colnum="32" colname="b03" align="center" /> +	  <colspec colnum="33" colname="b02" align="center" /> +	  <colspec colnum="34" colname="b01" align="center" /> +	  <colspec colnum="35" colname="b00" align="center" /> +	  <spanspec namest="b31" nameend="b00" spanname="b0" /> +	  <thead> +	    <row> +	      <entry>Identifier</entry> +	      <entry>Code</entry> +	      <entry></entry> +	      <entry spanname="b0">Data organization</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry>Bit</entry> +	      <entry>31</entry> +	      <entry>30</entry> +	      <entry>29</entry> +	      <entry>28</entry> +	      <entry>27</entry> +	      <entry>26</entry> +	      <entry>25</entry> +	      <entry>24</entry> +	      <entry>23</entry> +	      <entry>22</entry> +	      <entry>21</entry> +	      <entry>10</entry> +	      <entry>19</entry> +	      <entry>18</entry> +	      <entry>17</entry> +	      <entry>16</entry> +	      <entry>15</entry> +	      <entry>14</entry> +	      <entry>13</entry> +	      <entry>12</entry> +	      <entry>11</entry> +	      <entry>10</entry> +	      <entry>9</entry> +	      <entry>8</entry> +	      <entry>7</entry> +	      <entry>6</entry> +	      <entry>5</entry> +	      <entry>4</entry> +	      <entry>3</entry> +	      <entry>2</entry> +	      <entry>1</entry> +	      <entry>0</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row id="V4L2-MBUS-FMT-Y8-1X8"> +	      <entry>V4L2_MBUS_FMT_Y8_1X8</entry> +	      <entry>0x2001</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UV8-1X8"> +	      <entry>V4L2_MBUS_FMT_UV8_1X8</entry> +	      <entry>0x2015</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY8-1_5X8"> +	      <entry>V4L2_MBUS_FMT_UYVY8_1_5X8</entry> +	      <entry>0x2002</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY8-1_5X8"> +	      <entry>V4L2_MBUS_FMT_VYUY8_1_5X8</entry> +	      <entry>0x2003</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV8-1_5X8"> +	      <entry>V4L2_MBUS_FMT_YUYV8_1_5X8</entry> +	      <entry>0x2004</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU8-1_5X8"> +	      <entry>V4L2_MBUS_FMT_YVYU8_1_5X8</entry> +	      <entry>0x2005</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY8-2X8"> +	      <entry>V4L2_MBUS_FMT_UYVY8_2X8</entry> +	      <entry>0x2006</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY8-2X8"> +	      <entry>V4L2_MBUS_FMT_VYUY8_2X8</entry> +	      <entry>0x2007</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV8-2X8"> +	      <entry>V4L2_MBUS_FMT_YUYV8_2X8</entry> +	      <entry>0x2008</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU8-2X8"> +	      <entry>V4L2_MBUS_FMT_YVYU8_2X8</entry> +	      <entry>0x2009</entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-24; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-Y10-1X10"> +	      <entry>V4L2_MBUS_FMT_Y10_1X10</entry> +	      <entry>0x200a</entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY10-2X10"> +	      <entry>V4L2_MBUS_FMT_UYVY10_2X10</entry> +	      <entry>0x2018</entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY10-2X10"> +	      <entry>V4L2_MBUS_FMT_VYUY10_2X10</entry> +	      <entry>0x2019</entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV10-2X10"> +	      <entry>V4L2_MBUS_FMT_YUYV10_2X10</entry> +	      <entry>0x200b</entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU10-2X10"> +	      <entry>V4L2_MBUS_FMT_YVYU10_2X10</entry> +	      <entry>0x200c</entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-22; +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-Y12-1X12"> +	      <entry>V4L2_MBUS_FMT_Y12_1X12</entry> +	      <entry>0x2013</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY8-1X16"> +	      <entry>V4L2_MBUS_FMT_UYVY8_1X16</entry> +	      <entry>0x200f</entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY8-1X16"> +	      <entry>V4L2_MBUS_FMT_VYUY8_1X16</entry> +	      <entry>0x2010</entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV8-1X16"> +	      <entry>V4L2_MBUS_FMT_YUYV8_1X16</entry> +	      <entry>0x2011</entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU8-1X16"> +	      <entry>V4L2_MBUS_FMT_YVYU8_1X16</entry> +	      <entry>0x2012</entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YDYUYDYV8-1X16"> +	      <entry>V4L2_MBUS_FMT_YDYUYDYV8_1X16</entry> +	      <entry>0x2014</entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	      <entry>d</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-16; +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY10-1X20"> +	      <entry>V4L2_MBUS_FMT_UYVY10_1X20</entry> +	      <entry>0x201a</entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY10-1X20"> +	      <entry>V4L2_MBUS_FMT_VYUY10_1X20</entry> +	      <entry>0x201b</entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV10-1X20"> +	      <entry>V4L2_MBUS_FMT_YUYV10_1X20</entry> +	      <entry>0x200d</entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU10-1X20"> +	      <entry>V4L2_MBUS_FMT_YVYU10_1X20</entry> +	      <entry>0x200e</entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-12; +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUV10-1X30"> +	      <entry>V4L2_MBUS_FMT_YUV10_1X30</entry> +	      <entry>0x2016</entry> +	      <entry></entry> +	      <entry>-</entry> +	      <entry>-</entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-AYUV8-1X32"> +	      <entry>V4L2_MBUS_FMT_AYUV8_1X32</entry> +	      <entry>0x2017</entry> +	      <entry></entry> +	      <entry>a<subscript>7</subscript></entry> +	      <entry>a<subscript>6</subscript></entry> +	      <entry>a<subscript>5</subscript></entry> +	      <entry>a<subscript>4</subscript></entry> +	      <entry>a<subscript>3</subscript></entry> +	      <entry>a<subscript>2</subscript></entry> +	      <entry>a<subscript>1</subscript></entry> +	      <entry>a<subscript>0</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY12-2X12"> +	      <entry>V4L2_MBUS_FMT_UYVY12_2X12</entry> +	      <entry>0x201c</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY12-2X12"> +	      <entry>V4L2_MBUS_FMT_VYUY12_2X12</entry> +	      <entry>0x201d</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV12-2X12"> +	      <entry>V4L2_MBUS_FMT_YUYV12_2X12</entry> +	      <entry>0x201e</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU12-2X12"> +	      <entry>V4L2_MBUS_FMT_YVYU12_2X12</entry> +	      <entry>0x201f</entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-20; +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-UYVY12-1X24"> +	      <entry>V4L2_MBUS_FMT_UYVY12_1X24</entry> +	      <entry>0x2020</entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-VYUY12-1X24"> +	      <entry>V4L2_MBUS_FMT_VYUY12_1X24</entry> +	      <entry>0x2021</entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YUYV12-1X24"> +	      <entry>V4L2_MBUS_FMT_YUYV12_1X24</entry> +	      <entry>0x2022</entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row id="V4L2-MBUS-FMT-YVYU12-1X24"> +	      <entry>V4L2_MBUS_FMT_YVYU12_1X24</entry> +	      <entry>0x2023</entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>v<subscript>11</subscript></entry> +	      <entry>v<subscript>10</subscript></entry> +	      <entry>v<subscript>9</subscript></entry> +	      <entry>v<subscript>8</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry></entry> +	      &dash-ent-8; +	      <entry>y<subscript>11</subscript></entry> +	      <entry>y<subscript>10</subscript></entry> +	      <entry>y<subscript>9</subscript></entry> +	      <entry>y<subscript>8</subscript></entry> +	      <entry>y<subscript>7</subscript></entry> +	      <entry>y<subscript>6</subscript></entry> +	      <entry>y<subscript>5</subscript></entry> +	      <entry>y<subscript>4</subscript></entry> +	      <entry>y<subscript>3</subscript></entry> +	      <entry>y<subscript>2</subscript></entry> +	      <entry>y<subscript>1</subscript></entry> +	      <entry>y<subscript>0</subscript></entry> +	      <entry>u<subscript>11</subscript></entry> +	      <entry>u<subscript>10</subscript></entry> +	      <entry>u<subscript>9</subscript></entry> +	      <entry>u<subscript>8</subscript></entry> +	      <entry>u<subscript>7</subscript></entry> +	      <entry>u<subscript>6</subscript></entry> +	      <entry>u<subscript>5</subscript></entry> +	      <entry>u<subscript>4</subscript></entry> +	      <entry>u<subscript>3</subscript></entry> +	      <entry>u<subscript>2</subscript></entry> +	      <entry>u<subscript>1</subscript></entry> +	      <entry>u<subscript>0</subscript></entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> + +    <section> +      <title>HSV/HSL Formats</title> + +      <para>Those formats transfer pixel data as RGB values in a cylindrical-coordinate +      system using Hue-Saturation-Value or Hue-Saturation-Lightness components. The +      format code is made of the following information. +      <itemizedlist> +	<listitem><para>The hue, saturation, value or lightness and optional alpha +	components order code, as encoded in a pixel sample. The only currently +	supported value is AHSV. +	</para></listitem> +	<listitem><para>The number of bits per component, for each component. The values +	can be different for all components. The only currently supported value is 8888. +	</para></listitem> +	<listitem><para>The number of bus samples per pixel. Pixels that are wider than +	the bus width must be transferred in multiple samples. The only currently +	supported value is 1.</para></listitem> +	<listitem><para>The bus width.</para></listitem> +	<listitem><para>For formats where the total number of bits per pixel is smaller +	than the number of bus samples per pixel times the bus width, a padding +	value stating if the bytes are padded in their most high order bits +	(PADHI) or low order bits (PADLO).</para></listitem> +	<listitem><para>For formats where the number of bus samples per pixel is larger +	than 1, an endianness value stating if the pixel is transferred MSB first +	(BE) or LSB first (LE).</para></listitem> +      </itemizedlist> +      </para> + +      <para>The following table lists existing HSV/HSL formats.</para> + +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-hsv"> +	<title>HSV/HSL formats</title> +	<tgroup cols="27"> +	  <colspec colname="id" align="left" /> +	  <colspec colname="code" align="center"/> +	  <colspec colname="bit" /> +	  <colspec colnum="4" colname="b31" align="center" /> +	  <colspec colnum="5" colname="b20" align="center" /> +	  <colspec colnum="6" colname="b29" align="center" /> +	  <colspec colnum="7" colname="b28" align="center" /> +	  <colspec colnum="8" colname="b27" align="center" /> +	  <colspec colnum="9" colname="b26" align="center" /> +	  <colspec colnum="10" colname="b25" align="center" /> +	  <colspec colnum="11" colname="b24" align="center" /> +	  <colspec colnum="12" colname="b23" align="center" /> +	  <colspec colnum="13" colname="b22" align="center" /> +	  <colspec colnum="14" colname="b21" align="center" /> +	  <colspec colnum="15" colname="b20" align="center" /> +	  <colspec colnum="16" colname="b19" align="center" /> +	  <colspec colnum="17" colname="b18" align="center" /> +	  <colspec colnum="18" colname="b17" align="center" /> +	  <colspec colnum="19" colname="b16" align="center" /> +	  <colspec colnum="20" colname="b15" align="center" /> +	  <colspec colnum="21" colname="b14" align="center" /> +	  <colspec colnum="22" colname="b13" align="center" /> +	  <colspec colnum="23" colname="b12" align="center" /> +	  <colspec colnum="24" colname="b11" align="center" /> +	  <colspec colnum="25" colname="b10" align="center" /> +	  <colspec colnum="26" colname="b09" align="center" /> +	  <colspec colnum="27" colname="b08" align="center" /> +	  <colspec colnum="28" colname="b07" align="center" /> +	  <colspec colnum="29" colname="b06" align="center" /> +	  <colspec colnum="30" colname="b05" align="center" /> +	  <colspec colnum="31" colname="b04" align="center" /> +	  <colspec colnum="32" colname="b03" align="center" /> +	  <colspec colnum="33" colname="b02" align="center" /> +	  <colspec colnum="34" colname="b01" align="center" /> +	  <colspec colnum="35" colname="b00" align="center" /> +	  <spanspec namest="b31" nameend="b00" spanname="b0" /> +	  <thead> +	    <row> +	      <entry>Identifier</entry> +	      <entry>Code</entry> +	      <entry></entry> +	      <entry spanname="b0">Data organization</entry> +	    </row> +	    <row> +	      <entry></entry> +	      <entry></entry> +	      <entry>Bit</entry> +	      <entry>31</entry> +	      <entry>30</entry> +	      <entry>29</entry> +	      <entry>28</entry> +	      <entry>27</entry> +	      <entry>26</entry> +	      <entry>25</entry> +	      <entry>24</entry> +	      <entry>23</entry> +	      <entry>22</entry> +	      <entry>21</entry> +	      <entry>20</entry> +	      <entry>19</entry> +	      <entry>18</entry> +	      <entry>17</entry> +	      <entry>16</entry> +	      <entry>15</entry> +	      <entry>14</entry> +	      <entry>13</entry> +	      <entry>12</entry> +	      <entry>11</entry> +	      <entry>10</entry> +	      <entry>9</entry> +	      <entry>8</entry> +	      <entry>7</entry> +	      <entry>6</entry> +	      <entry>5</entry> +	      <entry>4</entry> +	      <entry>3</entry> +	      <entry>2</entry> +	      <entry>1</entry> +	      <entry>0</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row id="V4L2-MBUS-FMT-AHSV8888-1X32"> +	      <entry>V4L2_MBUS_FMT_AHSV8888_1X32</entry> +	      <entry>0x6001</entry> +	      <entry></entry> +	      <entry>a<subscript>7</subscript></entry> +	      <entry>a<subscript>6</subscript></entry> +	      <entry>a<subscript>5</subscript></entry> +	      <entry>a<subscript>4</subscript></entry> +	      <entry>a<subscript>3</subscript></entry> +	      <entry>a<subscript>2</subscript></entry> +	      <entry>a<subscript>1</subscript></entry> +	      <entry>a<subscript>0</subscript></entry> +	      <entry>h<subscript>7</subscript></entry> +	      <entry>h<subscript>6</subscript></entry> +	      <entry>h<subscript>5</subscript></entry> +	      <entry>h<subscript>4</subscript></entry> +	      <entry>h<subscript>3</subscript></entry> +	      <entry>h<subscript>2</subscript></entry> +	      <entry>h<subscript>1</subscript></entry> +	      <entry>h<subscript>0</subscript></entry> +	      <entry>s<subscript>7</subscript></entry> +	      <entry>s<subscript>6</subscript></entry> +	      <entry>s<subscript>5</subscript></entry> +	      <entry>s<subscript>4</subscript></entry> +	      <entry>s<subscript>3</subscript></entry> +	      <entry>s<subscript>2</subscript></entry> +	      <entry>s<subscript>1</subscript></entry> +	      <entry>s<subscript>0</subscript></entry> +	      <entry>v<subscript>7</subscript></entry> +	      <entry>v<subscript>6</subscript></entry> +	      <entry>v<subscript>5</subscript></entry> +	      <entry>v<subscript>4</subscript></entry> +	      <entry>v<subscript>3</subscript></entry> +	      <entry>v<subscript>2</subscript></entry> +	      <entry>v<subscript>1</subscript></entry> +	      <entry>v<subscript>0</subscript></entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> + +    <section> +      <title>JPEG Compressed Formats</title> + +      <para>Those data formats consist of an ordered sequence of 8-bit bytes +	obtained from JPEG compression process. Additionally to the +	<constant>_JPEG</constant> postfix the format code is made of +	the following information. +	<itemizedlist> +	  <listitem><para>The number of bus samples per entropy encoded byte.</para></listitem> +	  <listitem><para>The bus width.</para></listitem> +	</itemizedlist> +      </para> + +      <para>For instance, for a JPEG baseline process and an 8-bit bus width +        the format will be named <constant>V4L2_MBUS_FMT_JPEG_1X8</constant>. +      </para> + +      <para>The following table lists existing JPEG compressed formats.</para> + +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-jpeg"> +	<title>JPEG Formats</title> +	<tgroup cols="3"> +	  <colspec colname="id" align="left" /> +	  <colspec colname="code" align="left"/> +	  <colspec colname="remarks" align="left"/> +	  <thead> +	    <row> +	      <entry>Identifier</entry> +	      <entry>Code</entry> +	      <entry>Remarks</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row id="V4L2-MBUS-FMT-JPEG-1X8"> +	      <entry>V4L2_MBUS_FMT_JPEG_1X8</entry> +	      <entry>0x4001</entry> +	      <entry>Besides of its usage for the parallel bus this format is +		recommended for transmission of JPEG data over MIPI CSI bus +		using the User Defined 8-bit Data types. +	      </entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> + +    <section id="v4l2-mbus-vendor-spec-fmts"> +      <title>Vendor and Device Specific Formats</title> + +      <note> +	<title>Experimental</title> +	<para>This is an <link linkend="experimental">experimental</link> +interface and may change in the future.</para> +      </note> + +      <para>This section lists complex data formats that are either vendor or +	device specific. +      </para> + +      <para>The following table lists the existing vendor and device specific +	formats.</para> + +      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-vendor-specific"> +	<title>Vendor and device specific formats</title> +	<tgroup cols="3"> +	  <colspec colname="id" align="left" /> +	  <colspec colname="code" align="left"/> +	  <colspec colname="remarks" align="left"/> +	  <thead> +	    <row> +	      <entry>Identifier</entry> +	      <entry>Code</entry> +	      <entry>Comments</entry> +	    </row> +	  </thead> +	  <tbody valign="top"> +	    <row id="V4L2-MBUS-FMT-S5C-UYVY-JPEG-1X8"> +	      <entry>V4L2_MBUS_FMT_S5C_UYVY_JPEG_1X8</entry> +	      <entry>0x5001</entry> +	      <entry> +		Interleaved raw UYVY and JPEG image format with embedded +		meta-data used by Samsung S3C73MX camera sensors. +	      </entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> + +  </section> +</section> diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia b/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia new file mode 100644 index 00000000000..e32ba5362e1 --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia @@ -0,0 +1,614 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> +  <dia:diagramdata> +    <dia:attribute name="background"> +      <dia:color val="#ffffff"/> +    </dia:attribute> +    <dia:attribute name="pagebreak"> +      <dia:color val="#000099"/> +    </dia:attribute> +    <dia:attribute name="paper"> +      <dia:composite type="paper"> +        <dia:attribute name="name"> +          <dia:string>#A4#</dia:string> +        </dia:attribute> +        <dia:attribute name="tmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="bmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="lmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="rmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="is_portrait"> +          <dia:boolean val="false"/> +        </dia:attribute> +        <dia:attribute name="scaling"> +          <dia:real val="0.49000000953674316"/> +        </dia:attribute> +        <dia:attribute name="fitto"> +          <dia:boolean val="false"/> +        </dia:attribute> +      </dia:composite> +    </dia:attribute> +    <dia:attribute name="grid"> +      <dia:composite type="grid"> +        <dia:attribute name="width_x"> +          <dia:real val="1"/> +        </dia:attribute> +        <dia:attribute name="width_y"> +          <dia:real val="1"/> +        </dia:attribute> +        <dia:attribute name="visible_x"> +          <dia:int val="1"/> +        </dia:attribute> +        <dia:attribute name="visible_y"> +          <dia:int val="1"/> +        </dia:attribute> +        <dia:composite type="color"/> +      </dia:composite> +    </dia:attribute> +    <dia:attribute name="color"> +      <dia:color val="#d8e5e5"/> +    </dia:attribute> +    <dia:attribute name="guides"> +      <dia:composite type="guides"> +        <dia:attribute name="hguides"/> +        <dia:attribute name="vguides"/> +      </dia:composite> +    </dia:attribute> +  </dia:diagramdata> +  <dia:layer name="Background" visible="true" active="true"> +    <dia:object type="Standard - Box" version="0" id="O0"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-0.4,6.5"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-0.45,6.45;23.1387,16.2"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-0.4,6.5"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="23.48871579904775"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="9.6500000000000004"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="false"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O1"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.225,9.45"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.175,9.4;8.225,14.7"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="0.225,9.45"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="7.9499999999999975"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="5.1999999999999975"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a52a2a"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O2"> +      <dia:attribute name="obj_pos"> +        <dia:point val="3.175,10.55"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.125,10.5;7.925,14.45"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="3.175,10.55"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="4.6999999999999975"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.8499999999999979"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#0000ff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O3"> +      <dia:attribute name="obj_pos"> +        <dia:point val="3.725,11.3875"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.725,10.7925;6.6025,13.14"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink +crop +selection#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="3.725,11.3875"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#0000ff"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O4"> +      <dia:attribute name="obj_pos"> +        <dia:point val="1.475,7.9"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="1.475,7.305;1.475,8.0525"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>##</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="1.475,7.9"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O5"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.426918,7.89569"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.426918,7.30069;3.90942,8.84819"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink media +bus format#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="0.426918,7.89569"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#a52a2a"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O6"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.4887,7.75"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="17.4887,7.155;21.8112,8.7025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#source media +bus format#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="17.4887,7.75"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#8b6914"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O7"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.5244,9.5417"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="17.4744,9.4917;22.2387,13.35"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="17.5244,9.5417"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="4.6643157990477508"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.758300000000002"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#8b6914"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O8"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.5244,13.3"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.12132,13.2463;17.5781,14.4537"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="17.5244,13.3"/> +        <dia:point val="3.175,14.4"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O7" connection="5"/> +        <dia:connection handle="1" to="O2" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O9"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.5244,9.5417"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.12162,9.48832;17.5778,10.6034"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="17.5244,9.5417"/> +        <dia:point val="3.175,10.55"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O7" connection="0"/> +        <dia:connection handle="1" to="O2" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O10"> +      <dia:attribute name="obj_pos"> +        <dia:point val="22.1887,13.3"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.82132,13.2463;22.2424,14.4537"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="22.1887,13.3"/> +        <dia:point val="7.875,14.4"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O7" connection="7"/> +        <dia:connection handle="1" to="O2" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O11"> +      <dia:attribute name="obj_pos"> +        <dia:point val="22.1887,9.5417"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.82161,9.48831;22.2421,10.6034"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="22.1887,9.5417"/> +        <dia:point val="7.875,10.55"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O7" connection="2"/> +        <dia:connection handle="1" to="O2" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O12"> +      <dia:attribute name="obj_pos"> +        <dia:point val="23.23,10.5742"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="23.18,10.5242;24.13,11.4742"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="23.23,10.5742"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O13"> +      <dia:attribute name="obj_pos"> +        <dia:point val="24.08,10.9992"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.03,10.6388;32.4953,11.3624"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="24.08,10.9992"/> +        <dia:point val="32.3835,11.0007"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O12" connection="3"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O14"> +      <dia:attribute name="obj_pos"> +        <dia:point val="25.3454,10.49"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.3454,9.895;29.9904,10.6425"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 1 (source)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="25.3454,10.49"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O15"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-1.44491,11.6506"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-1.49491,11.6006;-0.54491,12.5506"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-1.44491,11.6506"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O16"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-9.61991,12.09"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-9.67,11.7149;-1.33311,12.4385"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="-9.61991,12.09"/> +        <dia:point val="-1.44491,12.0756"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O15" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O17"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-7.39291,11.49"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-7.39291,10.895;-3.58791,11.6425"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 0 (sink)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="-7.39291,11.49"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +  </dia:layer> +</dia:diagram> diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg b/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg new file mode 100644 index 00000000000..18b0f5de9ed --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd"> +<svg width="43cm" height="10cm" viewBox="-194 128 844 196" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +  <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="-8" y="130" width="469.774" height="193"/> +  <g> +    <rect style="fill: #ffffff" x="4.5" y="189" width="159" height="104"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a52a2a" x="4.5" y="189" width="159" height="104"/> +  </g> +  <g> +    <rect style="fill: #ffffff" x="63.5" y="211" width="94" height="77"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" x="63.5" y="211" width="94" height="77"/> +  </g> +  <text style="fill: #0000ff;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="74.5" y="227.75"> +    <tspan x="74.5" y="227.75">sink</tspan> +    <tspan x="74.5" y="243.75">crop</tspan> +    <tspan x="74.5" y="259.75">selection</tspan> +  </text> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="29.5" y="158"> +    <tspan x="29.5" y="158"></tspan> +  </text> +  <text style="fill: #a52a2a;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="8.53836" y="157.914"> +    <tspan x="8.53836" y="157.914">sink media</tspan> +    <tspan x="8.53836" y="173.914">bus format</tspan> +  </text> +  <text style="fill: #8b6914;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="349.774" y="155"> +    <tspan x="349.774" y="155">source media</tspan> +    <tspan x="349.774" y="171">bus format</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="350.488" y="190.834" width="93.2863" height="75.166"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #8b6914" x="350.488" y="190.834" width="93.2863" height="75.166"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="350.488" y1="266" x2="63.5" y2="288"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="350.488" y1="190.834" x2="63.5" y2="211"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="443.774" y1="266" x2="157.5" y2="288"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="443.774" y1="190.834" x2="157.5" y2="211"/> +  <g> +    <ellipse style="fill: #ffffff" cx="473.1" cy="219.984" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="473.1" cy="219.984" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="473.1" cy="219.984" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="481.6" y1="219.984" x2="637.934" y2="220.012"/> +    <polygon style="fill: #000000" points="645.434,220.014 635.433,225.012 637.934,220.012 635.435,215.012 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="645.434,220.014 635.433,225.012 637.934,220.012 635.435,215.012 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="506.908" y="209.8"> +    <tspan x="506.908" y="209.8">pad 1 (source)</tspan> +  </text> +  <g> +    <ellipse style="fill: #ffffff" cx="-20.3982" cy="241.512" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-20.3982" cy="241.512" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-20.3982" cy="241.512" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="-192.398" y1="241.8" x2="-38.6343" y2="241.529"/> +    <polygon style="fill: #000000" points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="-147.858" y="229.8"> +    <tspan x="-147.858" y="229.8">pad 0 (sink)</tspan> +  </text> +</svg> diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia b/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia new file mode 100644 index 00000000000..a0d78292784 --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia @@ -0,0 +1,1588 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> +  <dia:diagramdata> +    <dia:attribute name="background"> +      <dia:color val="#ffffff"/> +    </dia:attribute> +    <dia:attribute name="pagebreak"> +      <dia:color val="#000099"/> +    </dia:attribute> +    <dia:attribute name="paper"> +      <dia:composite type="paper"> +        <dia:attribute name="name"> +          <dia:string>#A4#</dia:string> +        </dia:attribute> +        <dia:attribute name="tmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="bmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="lmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="rmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="is_portrait"> +          <dia:boolean val="false"/> +        </dia:attribute> +        <dia:attribute name="scaling"> +          <dia:real val="0.49000000953674316"/> +        </dia:attribute> +        <dia:attribute name="fitto"> +          <dia:boolean val="false"/> +        </dia:attribute> +      </dia:composite> +    </dia:attribute> +    <dia:attribute name="grid"> +      <dia:composite type="grid"> +        <dia:attribute name="width_x"> +          <dia:real val="1"/> +        </dia:attribute> +        <dia:attribute name="width_y"> +          <dia:real val="1"/> +        </dia:attribute> +        <dia:attribute name="visible_x"> +          <dia:int val="1"/> +        </dia:attribute> +        <dia:attribute name="visible_y"> +          <dia:int val="1"/> +        </dia:attribute> +        <dia:composite type="color"/> +      </dia:composite> +    </dia:attribute> +    <dia:attribute name="color"> +      <dia:color val="#d8e5e5"/> +    </dia:attribute> +    <dia:attribute name="guides"> +      <dia:composite type="guides"> +        <dia:attribute name="hguides"/> +        <dia:attribute name="vguides"/> +      </dia:composite> +    </dia:attribute> +  </dia:diagramdata> +  <dia:layer name="Background" visible="true" active="true"> +    <dia:object type="Standard - Box" version="0" id="O0"> +      <dia:attribute name="obj_pos"> +        <dia:point val="15.945,6.45"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="15.895,6.4;26.4,18.95"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="15.945,6.45"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="10.404999999254942"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="12.449999999999992"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#ff765a"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O1"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-0.1,3.65"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-0.15,3.6;40.25,20.85"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-0.1,3.65"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="40.300000000000004"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="17.149999999999999"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="false"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O2"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-1.05,7.9106"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-1.1,7.8606;-0.15,8.8106"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-1.05,7.9106"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O3"> +      <dia:attribute name="obj_pos"> +        <dia:point val="40.3366,9.8342"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="40.2866,9.7842;41.2366,10.7342"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="40.3366,9.8342"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O4"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-9.225,8.35"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-9.27509,7.97487;-0.938197,8.69848"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="-9.225,8.35"/> +        <dia:point val="-1.05,8.3356"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O2" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O5"> +      <dia:attribute name="obj_pos"> +        <dia:point val="41.1866,10.2592"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="41.1366,9.89879;49.6019,10.6224"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="41.1866,10.2592"/> +        <dia:point val="49.4901,10.2607"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O3" connection="3"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O6"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-6.998,7.75"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-6.998,7.155;-3.193,7.9025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 0 (sink)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="-6.998,7.75"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O7"> +      <dia:attribute name="obj_pos"> +        <dia:point val="42.452,9.75"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="42.452,9.155;47.097,9.9025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 2 (source)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="42.452,9.75"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O8"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.275,6"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.225,5.95;8.275,11.25"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="0.275,6"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="7.9499999999999975"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="5.1999999999999975"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a52a2a"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O9"> +      <dia:attribute name="obj_pos"> +        <dia:point val="3.125,6.8"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.075,6.75;7.875,10.7"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="3.125,6.8"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="4.6999999999999975"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.8499999999999979"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#0000ff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O10"> +      <dia:attribute name="obj_pos"> +        <dia:point val="1.525,4.45"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="1.525,3.855;1.525,4.6025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>##</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="1.525,4.45"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O11"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.476918,4.44569"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.476918,3.85069;3.95942,5.39819"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink media +bus format#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="0.476918,4.44569"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#a52a2a"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O12"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.6822,9.28251"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="16.6322,9.23251;24.9922,17.9564"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="16.6822,9.28251"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="8.2600228398861297"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="8.6238900617957164"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#00ff00"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O13"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.6822,17.9064"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.05732,10.5823;16.7499,17.9741"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="16.6822,17.9064"/> +        <dia:point val="3.125,10.65"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O12" connection="5"/> +        <dia:connection handle="1" to="O9" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O14"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.6822,9.28251"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3.06681,6.74181;16.7404,9.3407"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="16.6822,9.28251"/> +        <dia:point val="3.125,6.8"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O12" connection="0"/> +        <dia:connection handle="1" to="O9" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O15"> +      <dia:attribute name="obj_pos"> +        <dia:point val="24.9422,17.9064"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.75945,10.5845;25.0077,17.9719"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="24.9422,17.9064"/> +        <dia:point val="7.825,10.65"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O12" connection="7"/> +        <dia:connection handle="1" to="O9" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O16"> +      <dia:attribute name="obj_pos"> +        <dia:point val="24.9422,9.28251"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.76834,6.74334;24.9989,9.33917"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="24.9422,9.28251"/> +        <dia:point val="7.825,6.8"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O12" connection="2"/> +        <dia:connection handle="1" to="O9" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O17"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.7352,7.47209"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="16.7352,6.87709;22.5602,8.42459"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink compose +selection (scaling)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="16.7352,7.47209"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#00ff00"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O18"> +      <dia:attribute name="obj_pos"> +        <dia:point val="20.4661,9.72825"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="20.4161,9.67825;25.5254,13.3509"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="20.4661,9.72825"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.009308462554376"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.5726155970598077"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O19"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.475,5.2564"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="34.475,4.6614;38.7975,6.2089"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#source media +bus format#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="34.475,5.2564"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#8b6914"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O20"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.4244,8.6917"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="34.3744,8.6417;39.4837,12.3143"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="34.4244,8.6917"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.009308462554376"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.5726155970598077"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#8b6914"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O21"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.4244,12.2643"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="20.4125,12.2107;34.478,13.3545"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.4244,12.2643"/> +        <dia:point val="20.4661,13.3009"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O20" connection="5"/> +        <dia:connection handle="1" to="O18" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O22"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.4244,8.6917"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="20.4125,8.63813;34.478,9.78182"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.4244,8.6917"/> +        <dia:point val="20.4661,9.72825"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O20" connection="0"/> +        <dia:connection handle="1" to="O18" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O23"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.4337,12.2643"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.4218,12.2107;39.4873,13.3545"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="39.4337,12.2643"/> +        <dia:point val="25.4754,13.3009"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O20" connection="7"/> +        <dia:connection handle="1" to="O18" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O24"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.4337,8.6917"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.4218,8.63813;39.4873,9.78182"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="39.4337,8.6917"/> +        <dia:point val="25.4754,9.72825"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O20" connection="2"/> +        <dia:connection handle="1" to="O18" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O25"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.25,5.15"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="16.25,4.555;21.68,6.1025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink compose +bounds selection#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="16.25,5.15"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#ff765a"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O26"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-1.02991,16.6506"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-1.07991,16.6006;-0.12991,17.5506"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-1.02991,16.6506"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O27"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-9.20491,17.09"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-9.255,16.7149;-0.918107,17.4385"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="-9.20491,17.09"/> +        <dia:point val="-1.02991,17.0756"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O26" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O28"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-6.95,16.45"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-6.95,15.855;-3.145,16.6025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 1 (sink)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="-6.95,16.45"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O29"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.390412,14.64"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.340412,14.59;6.045,18.8"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="0.390412,14.64"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.604587512785236"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="4.1099999999999994"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a52a2a"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O30"> +      <dia:attribute name="obj_pos"> +        <dia:point val="2.645,15.74"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="2.595,15.69;5.6,18.3"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="2.645,15.74"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="2.904999999254942"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="2.5100000000000016"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#0000ff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O31"> +      <dia:attribute name="obj_pos"> +        <dia:point val="1.595,12.99"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="1.595,12.395;1.595,13.1425"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>##</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="1.595,12.99"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O32"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.945,12.595"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="2.58596,12.536;18.004,15.799"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="17.945,12.595"/> +        <dia:point val="2.645,15.74"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O36" connection="0"/> +        <dia:connection handle="1" to="O30" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O33"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.945,15.8"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="2.58772,15.7427;18.0023,18.3073"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="17.945,15.8"/> +        <dia:point val="2.645,18.25"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O36" connection="5"/> +        <dia:connection handle="1" to="O30" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O34"> +      <dia:attribute name="obj_pos"> +        <dia:point val="21.7,15.8"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="5.49307,15.7431;21.7569,18.3069"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="21.7,15.8"/> +        <dia:point val="5.55,18.25"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O36" connection="7"/> +        <dia:connection handle="1" to="O30" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O35"> +      <dia:attribute name="obj_pos"> +        <dia:point val="21.7,12.595"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="5.49136,12.5364;21.7586,15.7986"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="21.7,12.595"/> +        <dia:point val="5.55,15.74"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O36" connection="2"/> +        <dia:connection handle="1" to="O30" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O36"> +      <dia:attribute name="obj_pos"> +        <dia:point val="17.945,12.595"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="17.895,12.545;21.75,15.85"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="17.945,12.595"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="3.7549999992549452"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.2049999992549427"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#00ff00"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="false"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O37"> +      <dia:attribute name="obj_pos"> +        <dia:point val="22.1631,14.2233"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="22.1131,14.1733;25.45,16.7"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="22.1631,14.2233"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="3.2369000000000021"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="2.4267000000000003"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="false"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O38"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.6714,16.2367"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="34.6214,16.1867;37.9,18.75"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="34.6714,16.2367"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="3.178600000000003"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="2.4632999999999967"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#8b6914"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O39"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.6714,18.7"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="22.1057,16.5926;34.7288,18.7574"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.6714,18.7"/> +        <dia:point val="22.1631,16.65"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O38" connection="5"/> +        <dia:connection handle="1" to="O37" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O40"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.6714,16.2367"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="22.1058,14.166;34.7287,16.294"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.6714,16.2367"/> +        <dia:point val="22.1631,14.2233"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O38" connection="0"/> +        <dia:connection handle="1" to="O37" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O41"> +      <dia:attribute name="obj_pos"> +        <dia:point val="37.85,18.7"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.3425,16.5925;37.9075,18.7575"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="37.85,18.7"/> +        <dia:point val="25.4,16.65"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O38" connection="7"/> +        <dia:connection handle="1" to="O37" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O42"> +      <dia:attribute name="obj_pos"> +        <dia:point val="37.85,16.2367"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.3427,14.166;37.9073,16.294"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="37.85,16.2367"/> +        <dia:point val="25.4,14.2233"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O38" connection="2"/> +        <dia:connection handle="1" to="O37" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O43"> +      <dia:attribute name="obj_pos"> +        <dia:point val="40.347,16.7742"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="40.297,16.7242;41.247,17.6742"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="40.347,16.7742"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O44"> +      <dia:attribute name="obj_pos"> +        <dia:point val="41.197,17.1992"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="41.147,16.8388;49.6123,17.5624"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="41.197,17.1992"/> +        <dia:point val="49.5005,17.2007"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O43" connection="3"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O45"> +      <dia:attribute name="obj_pos"> +        <dia:point val="42.4624,16.69"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="42.4624,16.095;47.1074,16.8425"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 3 (source)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="42.4624,16.69"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O46"> +      <dia:attribute name="obj_pos"> +        <dia:point val="9.85,4.55"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="9.85,3.955;12.7275,6.3025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink +crop +selection#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="9.85,4.55"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#0000ff"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O47"> +      <dia:attribute name="obj_pos"> +        <dia:point val="27.65,4.75"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="27.65,4.155;30.5275,6.5025"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#source +crop +selection#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="27.65,4.75"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#a020f0"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O48"> +      <dia:attribute name="obj_pos"> +        <dia:point val="10.55,6.6"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.7135,6.39438;10.6035,7.11605"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="10.55,6.6"/> +        <dia:point val="7.825,6.8"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#0000ff"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O9" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O49"> +      <dia:attribute name="obj_pos"> +        <dia:point val="10.45,6.55"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="5.48029,6.48236;10.5176,15.8387"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="10.45,6.55"/> +        <dia:point val="5.55,15.74"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#0000ff"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O30" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O50"> +      <dia:attribute name="obj_pos"> +        <dia:point val="27.5246,6.66071"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.406,6.59136;27.594,9.82122"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="27.5246,6.66071"/> +        <dia:point val="25.4754,9.72825"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O18" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O51"> +      <dia:attribute name="obj_pos"> +        <dia:point val="27.5036,6.68935"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="25.2161,6.62775;27.5652,14.331"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="27.5036,6.68935"/> +        <dia:point val="25.4,14.2233"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O37" connection="2"/> +      </dia:connections> +    </dia:object> +  </dia:layer> +</dia:diagram> diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg b/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg new file mode 100644 index 00000000000..3322cf4c009 --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd"> +<svg width="59cm" height="18cm" viewBox="-186 71 1178 346" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +  <g> +    <rect style="fill: #ffffff" x="318.9" y="129" width="208.1" height="249"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff765a" x="318.9" y="129" width="208.1" height="249"/> +  </g> +  <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="-2" y="73" width="806" height="343"/> +  <g> +    <ellipse style="fill: #ffffff" cx="-12.5" cy="166.712" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-12.5" cy="166.712" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-12.5" cy="166.712" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <ellipse style="fill: #ffffff" cx="815.232" cy="205.184" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="815.232" cy="205.184" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="815.232" cy="205.184" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="-184.5" y1="167" x2="-30.7361" y2="166.729"/> +    <polygon style="fill: #000000" points="-23.2361,166.716 -33.2272,171.734 -30.7361,166.729 -33.2449,161.734 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="-23.2361,166.716 -33.2272,171.734 -30.7361,166.729 -33.2449,161.734 "/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="823.732" y1="205.184" x2="980.066" y2="205.212"/> +    <polygon style="fill: #000000" points="987.566,205.214 977.565,210.212 980.066,205.212 977.567,200.212 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="987.566,205.214 977.565,210.212 980.066,205.212 977.567,200.212 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="-139.96" y="155"> +    <tspan x="-139.96" y="155">pad 0 (sink)</tspan> +  </text> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="849.04" y="195"> +    <tspan x="849.04" y="195">pad 2 (source)</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="5.5" y="120" width="159" height="104"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a52a2a" x="5.5" y="120" width="159" height="104"/> +  </g> +  <g> +    <rect style="fill: #ffffff" x="62.5" y="136" width="94" height="77"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" x="62.5" y="136" width="94" height="77"/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="30.5" y="89"> +    <tspan x="30.5" y="89"></tspan> +  </text> +  <text style="fill: #a52a2a;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="9.53836" y="88.9138"> +    <tspan x="9.53836" y="88.9138">sink media</tspan> +    <tspan x="9.53836" y="104.914">bus format</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="333.644" y="185.65" width="165.2" height="172.478"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #00ff00" x="333.644" y="185.65" width="165.2" height="172.478"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="333.644" y1="358.128" x2="62.5" y2="213"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="333.644" y1="185.65" x2="62.5" y2="136"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="498.844" y1="358.128" x2="156.5" y2="213"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="498.844" y1="185.65" x2="156.5" y2="136"/> +  <text style="fill: #00ff00;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="334.704" y="149.442"> +    <tspan x="334.704" y="149.442">sink compose</tspan> +    <tspan x="334.704" y="165.442">selection (scaling)</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="409.322" y="194.565" width="100.186" height="71.4523"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x="409.322" y="194.565" width="100.186" height="71.4523"/> +  </g> +  <text style="fill: #8b6914;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="689.5" y="105.128"> +    <tspan x="689.5" y="105.128">source media</tspan> +    <tspan x="689.5" y="121.128">bus format</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="688.488" y="173.834" width="100.186" height="71.4523"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #8b6914" x="688.488" y="173.834" width="100.186" height="71.4523"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="688.488" y1="245.286" x2="409.322" y2="266.018"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="688.488" y1="173.834" x2="409.322" y2="194.565"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="788.674" y1="245.286" x2="509.508" y2="266.018"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="788.674" y1="173.834" x2="509.508" y2="194.565"/> +  <text style="fill: #ff765a;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="325" y="103"> +    <tspan x="325" y="103">sink compose</tspan> +    <tspan x="325" y="119">bounds selection</tspan> +  </text> +  <g> +    <ellipse style="fill: #ffffff" cx="-12.0982" cy="341.512" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-12.0982" cy="341.512" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-12.0982" cy="341.512" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="-184.098" y1="341.8" x2="-30.3343" y2="341.529"/> +    <polygon style="fill: #000000" points="-22.8343,341.516 -32.8254,346.534 -30.3343,341.529 -32.8431,336.534 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="-22.8343,341.516 -32.8254,346.534 -30.3343,341.529 -32.8431,336.534 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="-139" y="329"> +    <tspan x="-139" y="329">pad 1 (sink)</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="7.80824" y="292.8" width="112.092" height="82.2"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a52a2a" x="7.80824" y="292.8" width="112.092" height="82.2"/> +  </g> +  <g> +    <rect style="fill: #ffffff" x="52.9" y="314.8" width="58.1" height="50.2"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" x="52.9" y="314.8" width="58.1" height="50.2"/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="31.9" y="259.8"> +    <tspan x="31.9" y="259.8"></tspan> +  </text> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="358.9" y1="251.9" x2="52.9" y2="314.8"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="358.9" y1="316" x2="52.9" y2="365"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="434" y1="316" x2="111" y2="365"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="434" y1="251.9" x2="111" y2="314.8"/> +  <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #00ff00" x="358.9" y="251.9" width="75.1" height="64.1"/> +  <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x="443.262" y="284.466" width="64.738" height="48.534"/> +  <g> +    <rect style="fill: #ffffff" x="693.428" y="324.734" width="63.572" height="49.266"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #8b6914" x="693.428" y="324.734" width="63.572" height="49.266"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="693.428" y1="374" x2="443.262" y2="333"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="693.428" y1="324.734" x2="443.262" y2="284.466"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="757" y1="374" x2="508" y2="333"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="757" y1="324.734" x2="508" y2="284.466"/> +  <g> +    <ellipse style="fill: #ffffff" cx="815.44" cy="343.984" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="815.44" cy="343.984" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="815.44" cy="343.984" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="823.94" y1="343.984" x2="980.274" y2="344.012"/> +    <polygon style="fill: #000000" points="987.774,344.014 977.773,349.012 980.274,344.012 977.775,339.012 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="987.774,344.014 977.773,349.012 980.274,344.012 977.775,339.012 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="849.248" y="333.8"> +    <tspan x="849.248" y="333.8">pad 3 (source)</tspan> +  </text> +  <text style="fill: #0000ff;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="197" y="91"> +    <tspan x="197" y="91">sink</tspan> +    <tspan x="197" y="107">crop</tspan> +    <tspan x="197" y="123">selection</tspan> +  </text> +  <text style="fill: #a020f0;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="553" y="95"> +    <tspan x="553" y="95">source</tspan> +    <tspan x="553" y="111">crop</tspan> +    <tspan x="553" y="127">selection</tspan> +  </text> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" x1="211" y1="132" x2="166.21" y2="135.287"/> +    <polygon style="fill: #0000ff" points="158.73,135.836 168.337,130.118 166.21,135.287 169.069,140.091 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" points="158.73,135.836 168.337,130.118 166.21,135.287 169.069,140.091 "/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" x1="209" y1="131" x2="115.581" y2="306.209"/> +    <polygon style="fill: #0000ff" points="112.052,312.827 112.345,301.65 115.581,306.209 121.169,306.355 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" points="112.052,312.827 112.345,301.65 115.581,306.209 121.169,306.355 "/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x1="550.492" y1="133.214" x2="514.916" y2="186.469"/> +    <polygon style="fill: #a020f0" points="510.75,192.706 512.147,181.613 514.916,186.469 520.463,187.168 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" points="510.75,192.706 512.147,181.613 514.916,186.469 520.463,187.168 "/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x1="550.072" y1="133.787" x2="510.618" y2="275.089"/> +    <polygon style="fill: #a020f0" points="508.601,282.312 506.475,271.336 510.618,275.089 516.106,274.025 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" points="508.601,282.312 506.475,271.336 510.618,275.089 516.106,274.025 "/> +  </g> +</svg> diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia b/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia new file mode 100644 index 00000000000..0cd50a7bda8 --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia @@ -0,0 +1,1152 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> +  <dia:diagramdata> +    <dia:attribute name="background"> +      <dia:color val="#ffffff"/> +    </dia:attribute> +    <dia:attribute name="pagebreak"> +      <dia:color val="#000099"/> +    </dia:attribute> +    <dia:attribute name="paper"> +      <dia:composite type="paper"> +        <dia:attribute name="name"> +          <dia:string>#A4#</dia:string> +        </dia:attribute> +        <dia:attribute name="tmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="bmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="lmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="rmargin"> +          <dia:real val="2.8222000598907471"/> +        </dia:attribute> +        <dia:attribute name="is_portrait"> +          <dia:boolean val="false"/> +        </dia:attribute> +        <dia:attribute name="scaling"> +          <dia:real val="0.49000000953674316"/> +        </dia:attribute> +        <dia:attribute name="fitto"> +          <dia:boolean val="false"/> +        </dia:attribute> +      </dia:composite> +    </dia:attribute> +    <dia:attribute name="grid"> +      <dia:composite type="grid"> +        <dia:attribute name="width_x"> +          <dia:real val="1"/> +        </dia:attribute> +        <dia:attribute name="width_y"> +          <dia:real val="1"/> +        </dia:attribute> +        <dia:attribute name="visible_x"> +          <dia:int val="1"/> +        </dia:attribute> +        <dia:attribute name="visible_y"> +          <dia:int val="1"/> +        </dia:attribute> +        <dia:composite type="color"/> +      </dia:composite> +    </dia:attribute> +    <dia:attribute name="color"> +      <dia:color val="#d8e5e5"/> +    </dia:attribute> +    <dia:attribute name="guides"> +      <dia:composite type="guides"> +        <dia:attribute name="hguides"/> +        <dia:attribute name="vguides"/> +      </dia:composite> +    </dia:attribute> +  </dia:diagramdata> +  <dia:layer name="Background" visible="true" active="true"> +    <dia:object type="Standard - Box" version="0" id="O0"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-0.4,6.5"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-0.45,6.45;39.95,22.9"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-0.4,6.5"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="40.299999999999997"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="16.349999999999998"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="false"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O1"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.225,9.45"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.175,9.4;8.225,14.7"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="0.225,9.45"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="7.9499999999999975"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="5.1999999999999975"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a52a2a"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O2"> +      <dia:attribute name="obj_pos"> +        <dia:point val="2.475,10.2"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="2.425,10.15;7.225,14.1"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="2.475,10.2"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="4.6999999999999975"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.8499999999999979"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#0000ff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O3"> +      <dia:attribute name="obj_pos"> +        <dia:point val="3,11.2"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="3,10.605;5.8775,12.9525"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink +crop +selection#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="3,11.2"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#0000ff"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O4"> +      <dia:attribute name="obj_pos"> +        <dia:point val="1.475,7.9"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="1.475,7.305;1.475,8.0525"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>##</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="1.475,7.9"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O5"> +      <dia:attribute name="obj_pos"> +        <dia:point val="0.426918,7.89569"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="0.426918,7.30069;3.90942,8.84819"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink media +bus format#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="0.426918,7.89569"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#a52a2a"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O6"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.6822,9.28251"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="16.6322,9.23251;24.9922,17.9564"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="16.6822,9.28251"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="8.2600228398861297"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="8.6238900617957164"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#00ff00"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O7"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.6822,17.9064"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="2.41365,13.9886;16.7436,17.9678"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="16.6822,17.9064"/> +        <dia:point val="2.475,14.05"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O6" connection="5"/> +        <dia:connection handle="1" to="O2" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O8"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.6822,9.28251"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="2.42188,9.22939;16.7353,10.2531"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="16.6822,9.28251"/> +        <dia:point val="2.475,10.2"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O6" connection="0"/> +        <dia:connection handle="1" to="O2" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O9"> +      <dia:attribute name="obj_pos"> +        <dia:point val="24.9422,17.9064"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.11553,13.9905;25.0017,17.9659"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="24.9422,17.9064"/> +        <dia:point val="7.175,14.05"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O6" connection="7"/> +        <dia:connection handle="1" to="O2" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O10"> +      <dia:attribute name="obj_pos"> +        <dia:point val="24.9422,9.28251"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="7.12249,9.23;24.9947,10.2525"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="24.9422,9.28251"/> +        <dia:point val="7.175,10.2"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O6" connection="2"/> +        <dia:connection handle="1" to="O2" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O11"> +      <dia:attribute name="obj_pos"> +        <dia:point val="16.7352,7.47209"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="16.7352,6.87709;22.5602,8.42459"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#sink compose +selection (scaling)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="16.7352,7.47209"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#00ff00"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O12"> +      <dia:attribute name="obj_pos"> +        <dia:point val="19.1161,9.97825"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="19.0661,9.92825;24.1754,13.6009"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="19.1161,9.97825"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.009308462554376"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.5726155970598077"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O13"> +      <dia:attribute name="obj_pos"> +        <dia:point val="27.1661,7.47209"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="27.1661,6.87709;30.0436,9.22459"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#source +crop +selection#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="27.1661,7.47209"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#a020f0"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O14"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.575,7.8564"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="34.575,7.2614;38.8975,8.8089"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#source media +bus format#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="34.575,7.8564"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#8b6914"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O15"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.5244,11.2917"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="34.4744,11.2417;39.5837,14.9143"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="34.5244,11.2917"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.009308462554376"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.5726155970598077"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#8b6914"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O16"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.5244,14.8643"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="19.062,13.4968;34.5785,14.9184"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.5244,14.8643"/> +        <dia:point val="19.1161,13.5509"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O15" connection="5"/> +        <dia:connection handle="1" to="O12" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O17"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.5244,11.2917"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="19.062,9.92418;34.5785,11.3458"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.5244,11.2917"/> +        <dia:point val="19.1161,9.97825"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O15" connection="0"/> +        <dia:connection handle="1" to="O12" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O18"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.5337,14.8643"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.0713,13.4968;39.5878,14.9184"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="39.5337,14.8643"/> +        <dia:point val="24.1254,13.5509"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O15" connection="7"/> +        <dia:connection handle="1" to="O12" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O19"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.5337,11.2917"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.0713,9.92418;39.5878,11.3458"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="39.5337,11.2917"/> +        <dia:point val="24.1254,9.97825"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O15" connection="2"/> +        <dia:connection handle="1" to="O12" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O20"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.98,12.0742"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="39.93,12.0242;40.88,12.9742"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="39.98,12.0742"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O21"> +      <dia:attribute name="obj_pos"> +        <dia:point val="40.83,12.4992"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="40.78,12.1388;49.2453,12.8624"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="40.83,12.4992"/> +        <dia:point val="49.1335,12.5007"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O20" connection="3"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O22"> +      <dia:attribute name="obj_pos"> +        <dia:point val="42.0954,11.99"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="42.0954,11.395;46.7404,12.1425"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 1 (source)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="42.0954,11.99"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O23"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-1.44491,11.6506"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-1.49491,11.6006;-0.54491,12.5506"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="-1.44491,11.6506"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O24"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-9.61991,12.09"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-9.67,11.7149;-1.33311,12.4385"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="-9.61991,12.09"/> +        <dia:point val="-1.44491,12.0756"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O23" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O25"> +      <dia:attribute name="obj_pos"> +        <dia:point val="-7.39291,11.49"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="-7.39291,10.895;-3.58791,11.6425"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 0 (sink)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="-7.39291,11.49"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O26"> +      <dia:attribute name="obj_pos"> +        <dia:point val="19.4911,13.8333"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="19.4411,13.7833;24.5504,17.4559"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="19.4911,13.8333"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.009308462554376"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.5726155970598077"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="false"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Box" version="0" id="O27"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.4994,17.2967"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="34.4494,17.2467;39.5587,20.9193"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="34.4994,17.2967"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="5.009308462554376"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="3.5726155970598077"/> +      </dia:attribute> +      <dia:attribute name="border_width"> +        <dia:real val="0.10000000149011612"/> +      </dia:attribute> +      <dia:attribute name="border_color"> +        <dia:color val="#8b6914"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O28"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.4994,20.8693"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="19.4311,17.3459;34.5594,20.9293"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.4994,20.8693"/> +        <dia:point val="19.4911,17.4059"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O27" connection="5"/> +        <dia:connection handle="1" to="O26" connection="5"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O29"> +      <dia:attribute name="obj_pos"> +        <dia:point val="34.4994,17.2967"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="19.4311,13.7733;34.5594,17.3567"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="34.4994,17.2967"/> +        <dia:point val="19.4911,13.8333"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O27" connection="0"/> +        <dia:connection handle="1" to="O26" connection="0"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O30"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.5087,20.8693"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.4404,17.3459;39.5687,20.9293"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="39.5087,20.8693"/> +        <dia:point val="24.5004,17.4059"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O27" connection="7"/> +        <dia:connection handle="1" to="O26" connection="7"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O31"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.5087,17.2967"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.4404,13.7733;39.5687,17.3567"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="39.5087,17.2967"/> +        <dia:point val="24.5004,13.8333"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#e60505"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="4"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O27" connection="2"/> +        <dia:connection handle="1" to="O26" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Geometric - Perfect Circle" version="1" id="O32"> +      <dia:attribute name="obj_pos"> +        <dia:point val="39.855,18.7792"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="39.805,18.7292;40.755,19.6792"/> +      </dia:attribute> +      <dia:attribute name="meta"> +        <dia:composite type="dict"/> +      </dia:attribute> +      <dia:attribute name="elem_corner"> +        <dia:point val="39.855,18.7792"/> +      </dia:attribute> +      <dia:attribute name="elem_width"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="elem_height"> +        <dia:real val="0.84999999999999787"/> +      </dia:attribute> +      <dia:attribute name="line_width"> +        <dia:real val="0.10000000000000001"/> +      </dia:attribute> +      <dia:attribute name="line_colour"> +        <dia:color val="#000000"/> +      </dia:attribute> +      <dia:attribute name="fill_colour"> +        <dia:color val="#ffffff"/> +      </dia:attribute> +      <dia:attribute name="show_background"> +        <dia:boolean val="true"/> +      </dia:attribute> +      <dia:attribute name="line_style"> +        <dia:enum val="0"/> +        <dia:real val="1"/> +      </dia:attribute> +      <dia:attribute name="flip_horizontal"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="flip_vertical"> +        <dia:boolean val="false"/> +      </dia:attribute> +      <dia:attribute name="subscale"> +        <dia:real val="1"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O33"> +      <dia:attribute name="obj_pos"> +        <dia:point val="40.705,19.2042"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="40.655,18.8438;49.1203,19.5674"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="40.705,19.2042"/> +        <dia:point val="49.0085,19.2057"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="0" to="O32" connection="3"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Text" version="1" id="O34"> +      <dia:attribute name="obj_pos"> +        <dia:point val="41.9704,18.695"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="41.9704,18.1;46.6154,18.8475"/> +      </dia:attribute> +      <dia:attribute name="text"> +        <dia:composite type="text"> +          <dia:attribute name="string"> +            <dia:string>#pad 2 (source)#</dia:string> +          </dia:attribute> +          <dia:attribute name="font"> +            <dia:font family="sans" style="0" name="Helvetica"/> +          </dia:attribute> +          <dia:attribute name="height"> +            <dia:real val="0.80000000000000004"/> +          </dia:attribute> +          <dia:attribute name="pos"> +            <dia:point val="41.9704,18.695"/> +          </dia:attribute> +          <dia:attribute name="color"> +            <dia:color val="#000000"/> +          </dia:attribute> +          <dia:attribute name="alignment"> +            <dia:enum val="0"/> +          </dia:attribute> +        </dia:composite> +      </dia:attribute> +      <dia:attribute name="valign"> +        <dia:enum val="3"/> +      </dia:attribute> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O35"> +      <dia:attribute name="obj_pos"> +        <dia:point val="27.3,9.55"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.0146,9.49376;27.3562,10.255"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="27.3,9.55"/> +        <dia:point val="24.1254,9.97825"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O12" connection="2"/> +      </dia:connections> +    </dia:object> +    <dia:object type="Standard - Line" version="0" id="O36"> +      <dia:attribute name="obj_pos"> +        <dia:point val="27.3454,9.53624"/> +      </dia:attribute> +      <dia:attribute name="obj_bb"> +        <dia:rectangle val="24.4311,9.46695;27.4147,13.9265"/> +      </dia:attribute> +      <dia:attribute name="conn_endpoints"> +        <dia:point val="27.3454,9.53624"/> +        <dia:point val="24.5004,13.8333"/> +      </dia:attribute> +      <dia:attribute name="numcp"> +        <dia:int val="1"/> +      </dia:attribute> +      <dia:attribute name="line_color"> +        <dia:color val="#a020f0"/> +      </dia:attribute> +      <dia:attribute name="end_arrow"> +        <dia:enum val="22"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_length"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:attribute name="end_arrow_width"> +        <dia:real val="0.5"/> +      </dia:attribute> +      <dia:connections> +        <dia:connection handle="1" to="O26" connection="2"/> +      </dia:connections> +    </dia:object> +  </dia:layer> +</dia:diagram> diff --git a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg b/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg new file mode 100644 index 00000000000..2340c0f8bc9 --- /dev/null +++ b/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd"> +<svg width="59cm" height="17cm" viewBox="-194 128 1179 330" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +  <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="-8" y="130" width="806" height="327"/> +  <g> +    <rect style="fill: #ffffff" x="4.5" y="189" width="159" height="104"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a52a2a" x="4.5" y="189" width="159" height="104"/> +  </g> +  <g> +    <rect style="fill: #ffffff" x="49.5" y="204" width="94" height="77"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #0000ff" x="49.5" y="204" width="94" height="77"/> +  </g> +  <text style="fill: #0000ff;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="60" y="224"> +    <tspan x="60" y="224">sink</tspan> +    <tspan x="60" y="240">crop</tspan> +    <tspan x="60" y="256">selection</tspan> +  </text> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="29.5" y="158"> +    <tspan x="29.5" y="158"></tspan> +  </text> +  <text style="fill: #a52a2a;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="8.53836" y="157.914"> +    <tspan x="8.53836" y="157.914">sink media</tspan> +    <tspan x="8.53836" y="173.914">bus format</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="333.644" y="185.65" width="165.2" height="172.478"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #00ff00" x="333.644" y="185.65" width="165.2" height="172.478"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="333.644" y1="358.128" x2="49.5" y2="281"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="333.644" y1="185.65" x2="49.5" y2="204"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="498.844" y1="358.128" x2="143.5" y2="281"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="498.844" y1="185.65" x2="143.5" y2="204"/> +  <text style="fill: #00ff00;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="334.704" y="149.442"> +    <tspan x="334.704" y="149.442">sink compose</tspan> +    <tspan x="334.704" y="165.442">selection (scaling)</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="382.322" y="199.565" width="100.186" height="71.4523"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x="382.322" y="199.565" width="100.186" height="71.4523"/> +  </g> +  <text style="fill: #a020f0;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="543.322" y="149.442"> +    <tspan x="543.322" y="149.442">source</tspan> +    <tspan x="543.322" y="165.442">crop</tspan> +    <tspan x="543.322" y="181.442">selection</tspan> +  </text> +  <text style="fill: #8b6914;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="691.5" y="157.128"> +    <tspan x="691.5" y="157.128">source media</tspan> +    <tspan x="691.5" y="173.128">bus format</tspan> +  </text> +  <g> +    <rect style="fill: #ffffff" x="690.488" y="225.834" width="100.186" height="71.4523"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #8b6914" x="690.488" y="225.834" width="100.186" height="71.4523"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="690.488" y1="297.286" x2="382.322" y2="271.018"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="690.488" y1="225.834" x2="382.322" y2="199.565"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="790.674" y1="297.286" x2="482.508" y2="271.018"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="790.674" y1="225.834" x2="482.508" y2="199.565"/> +  <g> +    <ellipse style="fill: #ffffff" cx="808.1" cy="249.984" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="808.1" cy="249.984" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="808.1" cy="249.984" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="816.6" y1="249.984" x2="972.934" y2="250.012"/> +    <polygon style="fill: #000000" points="980.434,250.014 970.433,255.012 972.934,250.012 970.435,245.012 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="980.434,250.014 970.433,255.012 972.934,250.012 970.435,245.012 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="841.908" y="239.8"> +    <tspan x="841.908" y="239.8">pad 1 (source)</tspan> +  </text> +  <g> +    <ellipse style="fill: #ffffff" cx="-20.3982" cy="241.512" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-20.3982" cy="241.512" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="-20.3982" cy="241.512" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="-192.398" y1="241.8" x2="-38.6343" y2="241.529"/> +    <polygon style="fill: #000000" points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="-31.1343,241.516 -41.1254,246.534 -38.6343,241.529 -41.1431,236.534 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="-147.858" y="229.8"> +    <tspan x="-147.858" y="229.8">pad 0 (sink)</tspan> +  </text> +  <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x="389.822" y="276.666" width="100.186" height="71.4523"/> +  <g> +    <rect style="fill: #ffffff" x="689.988" y="345.934" width="100.186" height="71.4523"/> +    <rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #8b6914" x="689.988" y="345.934" width="100.186" height="71.4523"/> +  </g> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="689.988" y1="417.386" x2="389.822" y2="348.118"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="689.988" y1="345.934" x2="389.822" y2="276.666"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="790.174" y1="417.386" x2="490.008" y2="348.118"/> +  <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #e60505" x1="790.174" y1="345.934" x2="490.008" y2="276.666"/> +  <g> +    <ellipse style="fill: #ffffff" cx="805.6" cy="384.084" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="805.6" cy="384.084" rx="8.5" ry="8.5"/> +    <ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="805.6" cy="384.084" rx="8.5" ry="8.5"/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="814.1" y1="384.084" x2="970.434" y2="384.112"/> +    <polygon style="fill: #000000" points="977.934,384.114 967.933,389.112 970.434,384.112 967.935,379.112 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="977.934,384.114 967.933,389.112 970.434,384.112 967.935,379.112 "/> +  </g> +  <text style="fill: #000000;text-anchor:start;font-size:12.8;font-family:sanserif;font-style:normal;font-weight:normal" x="839.408" y="373.9"> +    <tspan x="839.408" y="373.9">pad 2 (source)</tspan> +  </text> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x1="546" y1="191" x2="492.157" y2="198.263"/> +    <polygon style="fill: #a020f0" points="484.724,199.266 493.966,192.974 492.157,198.263 495.303,202.884 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" points="484.724,199.266 493.966,192.974 492.157,198.263 495.303,202.884 "/> +  </g> +  <g> +    <line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" x1="546.908" y1="190.725" x2="495.383" y2="268.548"/> +    <polygon style="fill: #a020f0" points="491.242,274.802 492.594,263.703 495.383,268.548 500.932,269.224 "/> +    <polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #a020f0" points="491.242,274.802 492.594,263.703 495.383,268.548 500.932,269.224 "/> +  </g> +</svg> diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml new file mode 100644 index 00000000000..b445161b912 --- /dev/null +++ b/Documentation/DocBook/media/v4l/v4l2.xml @@ -0,0 +1,682 @@ + <partinfo> +    <authorgroup> +      <author> +	<firstname>Michael</firstname> +	<surname>Schimek</surname> +	<othername role="mi">H</othername> +	<affiliation> +	  <address> +	    <email>mschimek@gmx.at</email> +	  </address> +	</affiliation> +      </author> + +      <author> +	<firstname>Bill</firstname> +	<surname>Dirks</surname> +	<!-- Commented until Bill opts in to be spammed. +	<affiliation> +	  <address> +	    <email>bill@thedirks.org</email> +	  </address> +	</affiliation> --> +	<contrib>Original author of the V4L2 API and +documentation.</contrib> +      </author> + +      <author> +	<firstname>Hans</firstname> +	<surname>Verkuil</surname> +	<contrib>Designed and documented the VIDIOC_LOG_STATUS ioctl, +the extended control ioctls, major parts of the sliced VBI API, the +MPEG encoder and decoder APIs and the DV Timings API.</contrib> +	<affiliation> +	  <address> +	    <email>hverkuil@xs4all.nl</email> +	  </address> +	</affiliation> +      </author> + +      <author> +	<firstname>Martin</firstname> +	<surname>Rubli</surname> +	<!-- +	<affiliation> +	  <address> +	    <email>martin_rubli@logitech.com</email> +	  </address> +	</affiliation> --> +	<contrib>Designed and documented the VIDIOC_ENUM_FRAMESIZES +and VIDIOC_ENUM_FRAMEINTERVALS ioctls.</contrib> +      </author> + +      <author> +	<firstname>Andy</firstname> +	<surname>Walls</surname> +	<contrib>Documented the fielded V4L2_MPEG_STREAM_VBI_FMT_IVTV +MPEG stream embedded, sliced VBI data format in this specification. +</contrib> +	<affiliation> +	  <address> +	    <email>awalls@md.metrocast.net</email> +	  </address> +	</affiliation> +      </author> + +      <author> +	<firstname>Mauro</firstname> +	<surname>Carvalho Chehab</surname> +	<contrib>Documented libv4l, designed and added v4l2grab example, +Remote Controller chapter.</contrib> +	<affiliation> +	  <address> +	    <email>m.chehab@samsung.com</email> +	  </address> +	</affiliation> +      </author> + +      <author> +	<firstname>Muralidharan</firstname> +	<surname>Karicheri</surname> +	<contrib>Documented the Digital Video timings API.</contrib> +	<affiliation> +	  <address> +	    <email>m-karicheri2@ti.com</email> +	  </address> +	</affiliation> +      </author> + +      <author> +	<firstname>Pawel</firstname> +	<surname>Osciak</surname> +	<contrib>Designed and documented the multi-planar API.</contrib> +	<affiliation> +	  <address> +	    <email>pawel AT osciak.com</email> +	  </address> +	</affiliation> +      </author> + +      <author> +	<firstname>Sakari</firstname> +	<surname>Ailus</surname> +	<contrib>Subdev selections API.</contrib> +	<affiliation> +	  <address> +	    <email>sakari.ailus@iki.fi</email> +	  </address> +	</affiliation> +      </author> +      <author> +	<firstname>Antti</firstname> +	<surname>Palosaari</surname> +	<contrib>SDR API.</contrib> +	<affiliation> +	  <address> +	    <email>crope@iki.fi</email> +	  </address> +	</affiliation> +      </author> +    </authorgroup> + +    <copyright> +      <year>1999</year> +      <year>2000</year> +      <year>2001</year> +      <year>2002</year> +      <year>2003</year> +      <year>2004</year> +      <year>2005</year> +      <year>2006</year> +      <year>2007</year> +      <year>2008</year> +      <year>2009</year> +      <year>2010</year> +      <year>2011</year> +      <year>2012</year> +      <year>2013</year> +      <year>2014</year> +      <holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin +Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab, +	Pawel Osciak</holder> +    </copyright> +    <legalnotice> +    <para>Except when explicitly stated as GPL, programming examples within +	    this part can be used and distributed without restrictions.</para> +    </legalnotice> +    <revhistory> +      <!-- Put document revisions here, newest first. --> +      <!-- API revisions (changes and additions of defines, enums, +structs, ioctls) must be noted in more detail in the history chapter +(compat.xml), along with the possible impact on existing drivers and +applications. --> + +      <revision> +	<revnumber>3.15</revnumber> +	<date>2014-02-03</date> +	<authorinitials>hv, ap</authorinitials> +	<revremark>Update several sections of "Common API Elements": "Opening and Closing Devices" +"Querying Capabilities", "Application Priority", "Video Inputs and Outputs", "Audio Inputs and Outputs" +"Tuners and Modulators", "Video Standards" and "Digital Video (DV) Timings". Added SDR API. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.14</revnumber> +	<date>2013-11-25</date> +	<authorinitials>rr</authorinitials> +	<revremark>Set width and height as unsigned on v4l2_rect. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.11</revnumber> +	<date>2013-05-26</date> +	<authorinitials>hv</authorinitials> +	<revremark>Remove obsolete VIDIOC_DBG_G_CHIP_IDENT ioctl. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.10</revnumber> +	<date>2013-03-25</date> +	<authorinitials>hv</authorinitials> +	<revremark>Remove obsolete and unused DV_PRESET ioctls: +	VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_QUERY_DV_PRESET and +	VIDIOC_ENUM_DV_PRESET. Remove the related v4l2_input/output capability +	flags V4L2_IN_CAP_PRESETS and V4L2_OUT_CAP_PRESETS. Added VIDIOC_DBG_G_CHIP_INFO. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.9</revnumber> +	<date>2012-12-03</date> +	<authorinitials>sa, sn</authorinitials> +	<revremark>Added timestamp types to v4l2_buffer. +	Added V4L2_EVENT_CTRL_CH_RANGE control event changes flag. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.6</revnumber> +	<date>2012-07-02</date> +	<authorinitials>hv</authorinitials> +	<revremark>Added VIDIOC_ENUM_FREQ_BANDS. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.5</revnumber> +	<date>2012-05-07</date> +	<authorinitials>sa, sn, hv</authorinitials> +	<revremark>Added V4L2_CTRL_TYPE_INTEGER_MENU and V4L2 subdev +	    selections API. Improved the description of V4L2_CID_COLORFX +	    control, added V4L2_CID_COLORFX_CBCR control. +	    Added camera controls V4L2_CID_AUTO_EXPOSURE_BIAS, +	    V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE, V4L2_CID_IMAGE_STABILIZATION, +	    V4L2_CID_ISO_SENSITIVITY, V4L2_CID_ISO_SENSITIVITY_AUTO, +	    V4L2_CID_EXPOSURE_METERING, V4L2_CID_SCENE_MODE, +	    V4L2_CID_3A_LOCK, V4L2_CID_AUTO_FOCUS_START, +	    V4L2_CID_AUTO_FOCUS_STOP, V4L2_CID_AUTO_FOCUS_STATUS +	    and V4L2_CID_AUTO_FOCUS_RANGE. +	    Added VIDIOC_ENUM_DV_TIMINGS, VIDIOC_QUERY_DV_TIMINGS and +	    VIDIOC_DV_TIMINGS_CAP. +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.4</revnumber> +	<date>2012-01-25</date> +	<authorinitials>sn</authorinitials> +	<revremark>Added <link linkend="jpeg-controls">JPEG compression +	    control class.</link> +	</revremark> +      </revision> + +      <revision> +	<revnumber>3.3</revnumber> +	<date>2012-01-11</date> +	<authorinitials>hv</authorinitials> +	<revremark>Added device_caps field to struct v4l2_capabilities.</revremark> +      </revision> + +      <revision> +	<revnumber>3.2</revnumber> +	<date>2011-08-26</date> +	<authorinitials>hv</authorinitials> +	<revremark>Added V4L2_CTRL_FLAG_VOLATILE.</revremark> +      </revision> + +      <revision> +	<revnumber>3.1</revnumber> +	<date>2011-06-27</date> +	<authorinitials>mcc, po, hv</authorinitials> +	<revremark>Documented that VIDIOC_QUERYCAP now returns a per-subsystem version instead of a per-driver one. +		   Standardize an error code for invalid ioctl. +		   Added V4L2_CTRL_TYPE_BITMASK.</revremark> +      </revision> + +      <revision> +	<revnumber>2.6.39</revnumber> +	<date>2011-03-01</date> +	<authorinitials>mcc, po</authorinitials> +	<revremark>Removed VIDIOC_*_OLD from videodev2.h header and update it to reflect latest changes. Added the <link linkend="planar-apis">multi-planar API</link>.</revremark> +      </revision> + +      <revision> +	<revnumber>2.6.37</revnumber> +	<date>2010-08-06</date> +	<authorinitials>hv</authorinitials> +	<revremark>Removed obsolete vtx (videotext) API.</revremark> +      </revision> + +      <revision> +	<revnumber>2.6.33</revnumber> +	<date>2009-12-03</date> +	<authorinitials>mk</authorinitials> +	<revremark>Added documentation for the Digital Video timings API.</revremark> +      </revision> + +      <revision> +	<revnumber>2.6.32</revnumber> +	<date>2009-08-31</date> +	<authorinitials>mcc</authorinitials> +	<revremark>Now, revisions will match the kernel version where +the V4L2 API changes will be used by the Linux Kernel. +Also added Remote Controller chapter.</revremark> +      </revision> + +      <revision> +	<revnumber>0.29</revnumber> +	<date>2009-08-26</date> +	<authorinitials>ev</authorinitials> +	<revremark>Added documentation for string controls and for FM Transmitter controls.</revremark> +      </revision> + +      <revision> +	<revnumber>0.28</revnumber> +	<date>2009-08-26</date> +	<authorinitials>gl</authorinitials> +	<revremark>Added V4L2_CID_BAND_STOP_FILTER documentation.</revremark> +      </revision> + +      <revision> +	<revnumber>0.27</revnumber> +	<date>2009-08-15</date> +	<authorinitials>mcc</authorinitials> +	<revremark>Added libv4l and Remote Controller documentation; +added v4l2grab and keytable application examples.</revremark> +      </revision> + +      <revision> +	<revnumber>0.26</revnumber> +	<date>2009-07-23</date> +	<authorinitials>hv</authorinitials> +	<revremark>Finalized the RDS capture API. Added modulator and RDS encoder +capabilities. Added support for string controls.</revremark> +      </revision> + +      <revision> +	<revnumber>0.25</revnumber> +	<date>2009-01-18</date> +	<authorinitials>hv</authorinitials> +	<revremark>Added pixel formats VYUY, NV16 and NV61, and changed +the debug ioctls VIDIOC_DBG_G/S_REGISTER and VIDIOC_DBG_G_CHIP_IDENT. +Added camera controls V4L2_CID_ZOOM_ABSOLUTE, V4L2_CID_ZOOM_RELATIVE, +V4L2_CID_ZOOM_CONTINUOUS and V4L2_CID_PRIVACY.</revremark> +      </revision> + +      <revision> +	<revnumber>0.24</revnumber> +	<date>2008-03-04</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Added pixel formats Y16 and SBGGR16, new controls +and a camera controls class. Removed VIDIOC_G/S_MPEGCOMP.</revremark> +      </revision> + +      <revision> +	<revnumber>0.23</revnumber> +	<date>2007-08-30</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Fixed a typo in VIDIOC_DBG_G/S_REGISTER. +Clarified the byte order of packed pixel formats.</revremark> +      </revision> + +      <revision> +	<revnumber>0.22</revnumber> +	<date>2007-08-29</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Added the Video Output Overlay interface, new MPEG +controls, V4L2_FIELD_INTERLACED_TB and V4L2_FIELD_INTERLACED_BT, +VIDIOC_DBG_G/S_REGISTER, VIDIOC_(TRY_)ENCODER_CMD, +VIDIOC_G_CHIP_IDENT, VIDIOC_G_ENC_INDEX, new pixel formats. +Clarifications in the cropping chapter, about RGB pixel formats, the +mmap(), poll(), select(), read() and write() functions. Typographical +fixes.</revremark> +      </revision> + +      <revision> +	<revnumber>0.21</revnumber> +	<date>2006-12-19</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Fixed a link in the VIDIOC_G_EXT_CTRLS section.</revremark> +      </revision> + +      <revision> +	<revnumber>0.20</revnumber> +	<date>2006-11-24</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Clarified the purpose of the audioset field in +struct v4l2_input and v4l2_output.</revremark> +      </revision> + +      <revision> +	<revnumber>0.19</revnumber> +	<date>2006-10-19</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Documented V4L2_PIX_FMT_RGB444.</revremark> +      </revision> + +      <revision> +	<revnumber>0.18</revnumber> +	<date>2006-10-18</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Added the description of extended controls by Hans +Verkuil. Linked V4L2_PIX_FMT_MPEG to V4L2_CID_MPEG_STREAM_TYPE.</revremark> +      </revision> + +      <revision> +	<revnumber>0.17</revnumber> +	<date>2006-10-12</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Corrected V4L2_PIX_FMT_HM12 description.</revremark> +      </revision> + +      <revision> +	<revnumber>0.16</revnumber> +	<date>2006-10-08</date> +	<authorinitials>mhs</authorinitials> +	<revremark>VIDIOC_ENUM_FRAMESIZES and +VIDIOC_ENUM_FRAMEINTERVALS are now part of the API.</revremark> +      </revision> + +      <revision> +	<revnumber>0.15</revnumber> +	<date>2006-09-23</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Cleaned up the bibliography, added BT.653 and +BT.1119. capture.c/start_capturing() for user pointer I/O did not +initialize the buffer index. Documented the V4L MPEG and MJPEG +VID_TYPEs and V4L2_PIX_FMT_SBGGR8. Updated the list of reserved pixel +formats. See the history chapter for API changes.</revremark> +      </revision> + +      <revision> +	<revnumber>0.14</revnumber> +	<date>2006-09-14</date> +	<authorinitials>mr</authorinitials> +	<revremark>Added VIDIOC_ENUM_FRAMESIZES and +VIDIOC_ENUM_FRAMEINTERVALS proposal for frame format enumeration of +digital devices.</revremark> +      </revision> + +      <revision> +	<revnumber>0.13</revnumber> +	<date>2006-04-07</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Corrected the description of struct v4l2_window +clips. New V4L2_STD_ and V4L2_TUNER_MODE_LANG1_LANG2 +defines.</revremark> +      </revision> + +      <revision> +	<revnumber>0.12</revnumber> +	<date>2006-02-03</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Corrected the description of struct +v4l2_captureparm and v4l2_outputparm.</revremark> +      </revision> + +      <revision> +	<revnumber>0.11</revnumber> +	<date>2006-01-27</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Improved the description of struct +v4l2_tuner.</revremark> +      </revision> + +      <revision> +	<revnumber>0.10</revnumber> +	<date>2006-01-10</date> +	<authorinitials>mhs</authorinitials> +	<revremark>VIDIOC_G_INPUT and VIDIOC_S_PARM +clarifications.</revremark> +      </revision> + +      <revision> +	<revnumber>0.9</revnumber> +	<date>2005-11-27</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Improved the 525 line numbering diagram. Hans +Verkuil and I rewrote the sliced VBI section. He also contributed a +VIDIOC_LOG_STATUS page. Fixed VIDIOC_S_STD call in the video standard +selection example. Various updates.</revremark> +      </revision> + +      <revision> +	<revnumber>0.8</revnumber> +	<date>2004-10-04</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Somehow a piece of junk slipped into the capture +example, removed.</revremark> +      </revision> + +      <revision> +	<revnumber>0.7</revnumber> +	<date>2004-09-19</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Fixed video standard selection, control +enumeration, downscaling and aspect example. Added read and user +pointer i/o to video capture example.</revremark> +      </revision> + +      <revision> +	<revnumber>0.6</revnumber> +	<date>2004-08-01</date> +	<authorinitials>mhs</authorinitials> +	<revremark>v4l2_buffer changes, added video capture example, +various corrections.</revremark> +      </revision> + +      <revision> +	<revnumber>0.5</revnumber> +	<date>2003-11-05</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Pixel format erratum.</revremark> +      </revision> + +      <revision> +	<revnumber>0.4</revnumber> +	<date>2003-09-17</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Corrected source and Makefile to generate a PDF. +SGML fixes. Added latest API changes. Closed gaps in the history +chapter.</revremark> +      </revision> + +      <revision> +	<revnumber>0.3</revnumber> +	<date>2003-02-05</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Another draft, more corrections.</revremark> +      </revision> + +      <revision> +	<revnumber>0.2</revnumber> +	<date>2003-01-15</date> +	<authorinitials>mhs</authorinitials> +	<revremark>Second draft, with corrections pointed out by Gerd +Knorr.</revremark> +      </revision> + +      <revision> +	<revnumber>0.1</revnumber> +	<date>2002-12-01</date> +	<authorinitials>mhs</authorinitials> +	<revremark>First draft, based on documentation by Bill Dirks +and discussions on the V4L mailing list.</revremark> +      </revision> +    </revhistory> +</partinfo> + +<title>Video for Linux Two API Specification</title> + <subtitle>Revision 3.14</subtitle> + +  <chapter id="common"> +    &sub-common; +  </chapter> + +  <chapter id="pixfmt"> +    &sub-pixfmt; +  </chapter> + +  <chapter id="io"> +    &sub-io; +  </chapter> + +  <chapter id="devices"> +    <title>Interfaces</title> + +    <section id="capture"> &sub-dev-capture; </section> +    <section id="overlay"> &sub-dev-overlay; </section> +    <section id="output"> &sub-dev-output; </section> +    <section id="osd"> &sub-dev-osd; </section> +    <section id="codec"> &sub-dev-codec; </section> +    <section id="effect"> &sub-dev-effect; </section> +    <section id="raw-vbi"> &sub-dev-raw-vbi; </section> +    <section id="sliced"> &sub-dev-sliced-vbi; </section> +    <section id="ttx"> &sub-dev-teletext; </section> +    <section id="radio"> &sub-dev-radio; </section> +    <section id="rds"> &sub-dev-rds; </section> +    <section id="sdr"> &sub-dev-sdr; </section> +    <section id="event"> &sub-dev-event; </section> +    <section id="subdev"> &sub-dev-subdev; </section> +  </chapter> + +  <chapter id="driver"> +	  &sub-driver; +  </chapter> + +  <chapter id="libv4l"> +	  &sub-libv4l; +  </chapter> + +  <chapter id="compat"> +	  &sub-compat; +  </chapter> + +  <appendix id="user-func"> +  <title>Function Reference</title> + +    <!-- Keep this alphabetically sorted. --> + +    &sub-close; +    &sub-ioctl; +    <!-- All ioctls go here. --> +    &sub-create-bufs; +    &sub-cropcap; +    &sub-dbg-g-chip-info; +    &sub-dbg-g-register; +    &sub-decoder-cmd; +    &sub-dqevent; +    &sub-dv-timings-cap; +    &sub-encoder-cmd; +    &sub-enumaudio; +    &sub-enumaudioout; +    &sub-enum-dv-timings; +    &sub-enum-fmt; +    &sub-enum-framesizes; +    &sub-enum-frameintervals; +    &sub-enum-freq-bands; +    &sub-enuminput; +    &sub-enumoutput; +    &sub-enumstd; +    &sub-expbuf; +    &sub-g-audio; +    &sub-g-audioout; +    &sub-g-crop; +    &sub-g-ctrl; +    &sub-g-dv-timings; +    &sub-g-edid; +    &sub-g-enc-index; +    &sub-g-ext-ctrls; +    &sub-g-fbuf; +    &sub-g-fmt; +    &sub-g-frequency; +    &sub-g-input; +    &sub-g-jpegcomp; +    &sub-g-modulator; +    &sub-g-output; +    &sub-g-parm; +    &sub-g-priority; +    &sub-g-selection; +    &sub-g-sliced-vbi-cap; +    &sub-g-std; +    &sub-g-tuner; +    &sub-log-status; +    &sub-overlay; +    &sub-prepare-buf; +    &sub-qbuf; +    &sub-querybuf; +    &sub-querycap; +    &sub-queryctrl; +    &sub-query-dv-timings; +    &sub-querystd; +    &sub-reqbufs; +    &sub-s-hw-freq-seek; +    &sub-streamon; +    &sub-subdev-enum-frame-interval; +    &sub-subdev-enum-frame-size; +    &sub-subdev-enum-mbus-code; +    &sub-subdev-g-crop; +    &sub-subdev-g-fmt; +    &sub-subdev-g-frame-interval; +    &sub-subdev-g-selection; +    &sub-subscribe-event; +    <!-- End of ioctls. --> +    &sub-mmap; +    &sub-munmap; +    &sub-open; +    &sub-poll; +    &sub-read; +    &sub-select; +    &sub-write; +  </appendix> + +  <appendix> +    <title>Common definitions for V4L2 and V4L2 subdev interfaces</title> +      &sub-selections-common; +  </appendix> + +  <appendix id="videodev"> +    <title>Video For Linux Two Header File</title> +    &sub-videodev2-h; +  </appendix> + +  <appendix id="capture-example"> +    <title>Video Capture Example</title> +    &sub-capture-c; +  </appendix> + +  <appendix id="v4l2grab-example"> +    <title>Video Grabber example using libv4l</title> +    <para>This program demonstrates how to grab V4L2 images in ppm format by +using libv4l handlers. The advantage is that this grabber can potentially work +with any V4L2 driver.</para> +    &sub-v4l2grab-c; +  </appendix> + +  &sub-media-indices; + +  &sub-biblio; + diff --git a/Documentation/DocBook/media/v4l/v4l2grab.c.xml b/Documentation/DocBook/media/v4l/v4l2grab.c.xml new file mode 100644 index 00000000000..bed12e40be2 --- /dev/null +++ b/Documentation/DocBook/media/v4l/v4l2grab.c.xml @@ -0,0 +1,164 @@ +<programlisting> +/* V4L2 video picture grabber +   Copyright (C) 2009 Mauro Carvalho Chehab <mchehab@infradead.org> + +   This program is free software; you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation version 2 of the License. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <errno.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/mman.h> +#include <linux/videodev2.h> +#include "../libv4l/include/libv4l2.h" + +#define CLEAR(x) memset(&(x), 0, sizeof(x)) + +struct buffer { +        void   *start; +        size_t length; +}; + +static void xioctl(int fh, int request, void *arg) +{ +        int r; + +        do { +                r = v4l2_ioctl(fh, request, arg); +        } while (r == -1 && ((errno == EINTR) || (errno == EAGAIN))); + +        if (r == -1) { +                fprintf(stderr, "error %d, %s\n", errno, strerror(errno)); +                exit(EXIT_FAILURE); +        } +} + +int main(int argc, char **argv) +{ +        struct <link linkend="v4l2-format">v4l2_format</link>              fmt; +        struct <link linkend="v4l2-buffer">v4l2_buffer</link>              buf; +        struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link>      req; +        enum <link linkend="v4l2-buf-type">v4l2_buf_type</link>              type; +        fd_set                          fds; +        struct timeval                  tv; +        int                             r, fd = -1; +        unsigned int                    i, n_buffers; +        char                            *dev_name = "/dev/video0"; +        char                            out_name[256]; +        FILE                            *fout; +        struct buffer                   *buffers; + +        fd = v4l2_open(dev_name, O_RDWR | O_NONBLOCK, 0); +        if (fd < 0) { +                perror("Cannot open device"); +                exit(EXIT_FAILURE); +        } + +        CLEAR(fmt); +        fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +        fmt.fmt.pix.width       = 640; +        fmt.fmt.pix.height      = 480; +        fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24; +        fmt.fmt.pix.field       = V4L2_FIELD_INTERLACED; +        xioctl(fd, VIDIOC_S_FMT, &fmt); +        if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24) { +                printf("Libv4l didn't accept RGB24 format. Can't proceed.\n"); +                exit(EXIT_FAILURE); +        } +        if ((fmt.fmt.pix.width != 640) || (fmt.fmt.pix.height != 480)) +                printf("Warning: driver is sending image at %dx%d\n", +                        fmt.fmt.pix.width, fmt.fmt.pix.height); + +        CLEAR(req); +        req.count = 2; +        req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +        req.memory = V4L2_MEMORY_MMAP; +        xioctl(fd, VIDIOC_REQBUFS, &req); + +        buffers = calloc(req.count, sizeof(*buffers)); +        for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { +                CLEAR(buf); + +                buf.type        = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                buf.memory      = V4L2_MEMORY_MMAP; +                buf.index       = n_buffers; + +                xioctl(fd, VIDIOC_QUERYBUF, &buf); + +                buffers[n_buffers].length = buf.length; +                buffers[n_buffers].start = v4l2_mmap(NULL, buf.length, +                              PROT_READ | PROT_WRITE, MAP_SHARED, +                              fd, buf.m.offset); + +                if (MAP_FAILED == buffers[n_buffers].start) { +                        perror("mmap"); +                        exit(EXIT_FAILURE); +                } +        } + +        for (i = 0; i < n_buffers; ++i) { +                CLEAR(buf); +                buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                buf.memory = V4L2_MEMORY_MMAP; +                buf.index = i; +                xioctl(fd, VIDIOC_QBUF, &buf); +        } +        type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + +        xioctl(fd, VIDIOC_STREAMON, &type); +        for (i = 0; i < 20; i++) { +                do { +                        FD_ZERO(&fds); +                        FD_SET(fd, &fds); + +                        /* Timeout. */ +                        tv.tv_sec = 2; +                        tv.tv_usec = 0; + +                        r = select(fd + 1, &fds, NULL, NULL, &tv); +                } while ((r == -1 && (errno = EINTR))); +                if (r == -1) { +                        perror("select"); +                        return errno; +                } + +                CLEAR(buf); +                buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +                buf.memory = V4L2_MEMORY_MMAP; +                xioctl(fd, VIDIOC_DQBUF, &buf); + +                sprintf(out_name, "out%03d.ppm", i); +                fout = fopen(out_name, "w"); +                if (!fout) { +                        perror("Cannot open image"); +                        exit(EXIT_FAILURE); +                } +                fprintf(fout, "P6\n%d %d 255\n", +                        fmt.fmt.pix.width, fmt.fmt.pix.height); +                fwrite(buffers[buf.index].start, buf.bytesused, 1, fout); +                fclose(fout); + +                xioctl(fd, VIDIOC_QBUF, &buf); +        } + +        type = V4L2_BUF_TYPE_VIDEO_CAPTURE; +        xioctl(fd, VIDIOC_STREAMOFF, &type); +        for (i = 0; i < n_buffers; ++i) +                v4l2_munmap(buffers[i].start, buffers[i].length); +        v4l2_close(fd); + +        return 0; +} +</programlisting> diff --git a/Documentation/DocBook/media/v4l/vbi_525.pdf b/Documentation/DocBook/media/v4l/vbi_525.pdf Binary files differnew file mode 100644 index 00000000000..9e72c25b208 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vbi_525.pdf diff --git a/Documentation/DocBook/media/v4l/vbi_625.pdf b/Documentation/DocBook/media/v4l/vbi_625.pdf Binary files differnew file mode 100644 index 00000000000..765235e33a4 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vbi_625.pdf diff --git a/Documentation/DocBook/media/v4l/vbi_hsync.pdf b/Documentation/DocBook/media/v4l/vbi_hsync.pdf Binary files differnew file mode 100644 index 00000000000..200b668189b --- /dev/null +++ b/Documentation/DocBook/media/v4l/vbi_hsync.pdf diff --git a/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml b/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml new file mode 100644 index 00000000000..9b700a5f4df --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml @@ -0,0 +1,165 @@ +<refentry id="vidioc-create-bufs"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_CREATE_BUFS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_CREATE_BUFS</refname> +    <refpurpose>Create buffers for Memory Mapped or User Pointer or DMA Buffer +    I/O</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_create_buffers *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_CREATE_BUFS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>This ioctl is used to create buffers for <link linkend="mmap">memory +mapped</link> or <link linkend="userp">user pointer</link> or <link +linkend="dmabuf">DMA buffer</link> I/O. It can be used as an alternative or in +addition to the <constant>VIDIOC_REQBUFS</constant> ioctl, when a tighter +control over buffers is required. This ioctl can be called multiple times to +create buffers of different sizes.</para> + +    <para>To allocate the device buffers applications must initialize the +relevant fields of the <structname>v4l2_create_buffers</structname> structure. +The <structfield>count</structfield> field must be set to the number of +requested buffers, the <structfield>memory</structfield> field specifies the +requested I/O method and the <structfield>reserved</structfield> array must be +zeroed.</para> + +    <para>The <structfield>format</structfield> field specifies the image format +that the buffers must be able to handle. The application has to fill in this +&v4l2-format;. Usually this will be done using the +<constant>VIDIOC_TRY_FMT</constant> or <constant>VIDIOC_G_FMT</constant> ioctl() +to ensure that the requested format is supported by the driver. Unsupported +formats will result in an error.</para> + +    <para>The buffers created by this ioctl will have as minimum size the size +defined by the <structfield>format.pix.sizeimage</structfield> field. If the +<structfield>format.pix.sizeimage</structfield> field is less than the minimum +required for the given format, then <structfield>sizeimage</structfield> will be +increased by the driver to that minimum to allocate the buffers. If it is +larger, then the value will be used as-is. The same applies to the +<structfield>sizeimage</structfield> field of the +<structname>v4l2_plane_pix_format</structname> structure in the case of +multiplanar formats.</para> + +    <para>When the ioctl is called with a pointer to this structure the driver +will attempt to allocate up to the requested number of buffers and store the +actual number allocated and the starting index in the +<structfield>count</structfield> and the <structfield>index</structfield> fields +respectively. On return <structfield>count</structfield> can be smaller than +the number requested. The driver may also increase buffer sizes if required, +however, it will not update <structfield>sizeimage</structfield> field values. +The user has to use <constant>VIDIOC_QUERYBUF</constant> to retrieve that +information.</para> + +    <table pgwide="1" frame="none" id="v4l2-create-buffers"> +      <title>struct <structname>v4l2_create_buffers</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>The starting buffer index, returned by the driver.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>count</structfield></entry> +	    <entry>The number of buffers requested or granted. If count == 0, then +	    <constant>VIDIOC_CREATE_BUFS</constant> will set <structfield>index</structfield> +	    to the current number of created buffers, and it will check the validity of +	    <structfield>memory</structfield> and <structfield>format.type</structfield>. +	    If those are invalid -1 is returned and errno is set to &EINVAL;, +	    otherwise <constant>VIDIOC_CREATE_BUFS</constant> returns 0. It will +	    never set errno to &EBUSY; in this particular case.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>memory</structfield></entry> +	    <entry>Applications set this field to +<constant>V4L2_MEMORY_MMAP</constant>, +<constant>V4L2_MEMORY_DMABUF</constant> or +<constant>V4L2_MEMORY_USERPTR</constant>. See <xref linkend="v4l2-memory" +/></entry> +	  </row> +	  <row> +	    <entry>&v4l2-format;</entry> +	    <entry><structfield>format</structfield></entry> +	    <entry>Filled in by the application, preserved by the driver.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[8]</entry> +	    <entry>A place holder for future extensions.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>ENOMEM</errorcode></term> +	<listitem> +	  <para>No memory to allocate buffers for <link linkend="mmap">memory +mapped</link> I/O.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The buffer type (<structfield>format.type</structfield> field), +requested I/O method (<structfield>memory</structfield>) or format +(<structfield>format</structfield> field) is not valid.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-cropcap.xml b/Documentation/DocBook/media/v4l/vidioc-cropcap.xml new file mode 100644 index 00000000000..1f5ed64cd75 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-cropcap.xml @@ -0,0 +1,163 @@ +<refentry id="vidioc-cropcap"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_CROPCAP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_CROPCAP</refname> +    <refpurpose>Information about the video cropping and scaling abilities</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_cropcap +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_CROPCAP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Applications use this function to query the cropping +limits, the pixel aspect of images and to calculate scale factors. +They set the <structfield>type</structfield> field of a v4l2_cropcap +structure to the respective buffer (stream) type and call the +<constant>VIDIOC_CROPCAP</constant> ioctl with a pointer to this +structure. Drivers fill the rest of the structure. The results are +constant except when switching the video standard. Remember this +switch can occur implicit when switching the video input or +output.</para> + +    <para>This ioctl must be implemented for video capture or output devices that +support cropping and/or scaling and/or have non-square pixels, and for overlay devices.</para> + +    <table pgwide="1" frame="none" id="v4l2-cropcap"> +      <title>struct <structname>v4l2_cropcap</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the data stream, set by the application. +Only these types are valid here: +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and +<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>. See <xref linkend="v4l2-buf-type" />.</entry> +	  </row> +	  <row> +	    <entry>struct <link linkend="v4l2-rect-crop">v4l2_rect</link></entry> +	    <entry><structfield>bounds</structfield></entry> +	    <entry>Defines the window within capturing or output is +possible, this may exclude for example the horizontal and vertical +blanking areas. The cropping rectangle cannot exceed these limits. +Width and height are defined in pixels, the driver writer is free to +choose origin and units of the coordinate system in the analog +domain.</entry> +	  </row> +	  <row> +	    <entry>struct <link linkend="v4l2-rect-crop">v4l2_rect</link></entry> +	    <entry><structfield>defrect</structfield></entry> +	    <entry>Default cropping rectangle, it shall cover the +"whole picture". Assuming pixel aspect 1/1 this could be for example a +640 × 480 rectangle for NTSC, a +768 × 576 rectangle for PAL and SECAM centered over +the active picture area. The same co-ordinate system as for +	    <structfield>bounds</structfield> is used.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>pixelaspect</structfield></entry> +	    <entry><para>This is the pixel aspect (y / x) when no +scaling is applied, the ratio of the actual sampling +frequency and the frequency required to get square +pixels.</para><para>When cropping coordinates refer to square pixels, +the driver sets <structfield>pixelaspect</structfield> to 1/1. Other +common values are 54/59 for PAL and SECAM, 11/10 for NTSC sampled +according to [<xref linkend="itu601" />].</para></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- NB this table is duplicated in the overlay chapter. --> + +    <table pgwide="1" frame="none" id="v4l2-rect-crop"> +      <title>struct <structname>v4l2_rect</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>left</structfield></entry> +	    <entry>Horizontal offset of the top, left corner of the +rectangle, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>top</structfield></entry> +	    <entry>Vertical offset of the top, left corner of the +rectangle, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry>Width of the rectangle, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry>Height of the rectangle, in pixels.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-cropcap; <structfield>type</structfield> is +invalid.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml b/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml new file mode 100644 index 00000000000..4c4603c135f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml @@ -0,0 +1,207 @@ +<refentry id="vidioc-dbg-g-chip-info"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_DBG_G_CHIP_INFO</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_DBG_G_CHIP_INFO</refname> +    <refpurpose>Identify the chips on a TV card</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_dbg_chip_info +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_DBG_G_CHIP_INFO</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> + +      <para>This is an <link +linkend="experimental">experimental</link> interface and may change in +the future.</para> +    </note> + +    <para>For driver debugging purposes this ioctl allows test +applications to query the driver about the chips present on the TV +card. Regular applications must not use it. When you found a chip +specific bug, please contact the linux-media mailing list (&v4l-ml;) +so it can be fixed.</para> + +    <para>Additionally the Linux kernel must be compiled with the +<constant>CONFIG_VIDEO_ADV_DEBUG</constant> option to enable this ioctl.</para> + +    <para>To query the driver applications must initialize the +<structfield>match.type</structfield> and +<structfield>match.addr</structfield> or <structfield>match.name</structfield> +fields of a &v4l2-dbg-chip-info; +and call <constant>VIDIOC_DBG_G_CHIP_INFO</constant> with a pointer to +this structure. On success the driver stores information about the +selected chip in the <structfield>name</structfield> and +<structfield>flags</structfield> fields.</para> + +    <para>When <structfield>match.type</structfield> is +<constant>V4L2_CHIP_MATCH_BRIDGE</constant>, +<structfield>match.addr</structfield> selects the nth bridge 'chip' +on the TV card. You can enumerate all chips by starting at zero and +incrementing <structfield>match.addr</structfield> by one until +<constant>VIDIOC_DBG_G_CHIP_INFO</constant> fails with an &EINVAL;. +The number zero always selects the bridge chip itself, ⪚ the chip +connected to the PCI or USB bus. Non-zero numbers identify specific +parts of the bridge chip such as an AC97 register block.</para> + +    <para>When <structfield>match.type</structfield> is +<constant>V4L2_CHIP_MATCH_SUBDEV</constant>, +<structfield>match.addr</structfield> selects the nth sub-device. This +allows you to enumerate over all sub-devices.</para> + +    <para>On success, the <structfield>name</structfield> field will +contain a chip name and the <structfield>flags</structfield> field will +contain <constant>V4L2_CHIP_FL_READABLE</constant> if the driver supports +reading registers from the device or <constant>V4L2_CHIP_FL_WRITABLE</constant> +if the driver supports writing registers to the device.</para> + +    <para>We recommended the <application>v4l2-dbg</application> +utility over calling this ioctl directly. It is available from the +LinuxTV v4l-dvb repository; see <ulink +url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for +access instructions.</para> + +    <!-- Note for convenience vidioc-dbg-g-register.sgml +	 contains a duplicate of this table. --> +    <table pgwide="1" frame="none" id="name-v4l2-dbg-match"> +      <title>struct <structname>v4l2_dbg_match</structname></title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>See <xref linkend="name-chip-match-types" /> for a list of +possible types.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry>(anonymous)</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>addr</structfield></entry> +	    <entry>Match a chip by this number, interpreted according +to the <structfield>type</structfield> field.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>char</entry> +	    <entry><structfield>name[32]</structfield></entry> +	    <entry>Match a chip by this name, interpreted according +to the <structfield>type</structfield> field. Currently unused.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-dbg-chip-info"> +      <title>struct <structname>v4l2_dbg_chip_info</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>struct v4l2_dbg_match</entry> +	    <entry><structfield>match</structfield></entry> +	    <entry>How to match the chip, see <xref linkend="name-v4l2-dbg-match" />.</entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>name[32]</structfield></entry> +	    <entry>The name of the chip.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Set by the driver. If <constant>V4L2_CHIP_FL_READABLE</constant> +is set, then the driver supports reading registers from the device. If +<constant>V4L2_CHIP_FL_WRITABLE</constant> is set, then it supports writing registers.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved[8]</structfield></entry> +	    <entry>Reserved fields, both application and driver must set these to 0.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- Note for convenience vidioc-dbg-g-register.sgml +	 contains a duplicate of this table. --> +    <table pgwide="1" frame="none" id="name-chip-match-types"> +      <title>Chip Match Types</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CHIP_MATCH_BRIDGE</constant></entry> +	    <entry>0</entry> +	    <entry>Match the nth chip on the card, zero for the +	    bridge chip. Does not match sub-devices.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry> +	    <entry>4</entry> +	    <entry>Match the nth sub-device.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <structfield>match_type</structfield> is invalid or +no device could be matched.</para> +	</listitem> +      </varlistentry> +     </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml b/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml new file mode 100644 index 00000000000..3d038e75d12 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml @@ -0,0 +1,227 @@ +<refentry id="vidioc-dbg-g-register"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_DBG_G_REGISTER</refname> +    <refname>VIDIOC_DBG_S_REGISTER</refname> +    <refpurpose>Read or write hardware registers</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_dbg_register *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_dbg_register +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> + +      <para>This is an <link linkend="experimental">experimental</link> +interface and may change in the future.</para> +    </note> + +    <para>For driver debugging purposes these ioctls allow test +applications to access hardware registers directly. Regular +applications must not use them.</para> + +    <para>Since writing or even reading registers can jeopardize the +system security, its stability and damage the hardware, both ioctls +require superuser privileges. Additionally the Linux kernel must be +compiled with the <constant>CONFIG_VIDEO_ADV_DEBUG</constant> option +to enable these ioctls.</para> + +    <para>To write a register applications must initialize all fields +of a &v4l2-dbg-register; except for <structfield>size</structfield> and call +<constant>VIDIOC_DBG_S_REGISTER</constant> with a pointer to this +structure. The <structfield>match.type</structfield> and +<structfield>match.addr</structfield> or <structfield>match.name</structfield> +fields select a chip on the TV +card, the <structfield>reg</structfield> field specifies a register +number and the <structfield>val</structfield> field the value to be +written into the register.</para> + +    <para>To read a register applications must initialize the +<structfield>match.type</structfield>, +<structfield>match.addr</structfield> or <structfield>match.name</structfield> and +<structfield>reg</structfield> fields, and call +<constant>VIDIOC_DBG_G_REGISTER</constant> with a pointer to this +structure. On success the driver stores the register value in the +<structfield>val</structfield> field and the size (in bytes) of the +value in <structfield>size</structfield>.</para> + +    <para>When <structfield>match.type</structfield> is +<constant>V4L2_CHIP_MATCH_BRIDGE</constant>, +<structfield>match.addr</structfield> selects the nth non-sub-device chip +on the TV card.  The number zero always selects the host chip, ⪚ the +chip connected to the PCI or USB bus. You can find out which chips are +present with the &VIDIOC-DBG-G-CHIP-INFO; ioctl.</para> + +    <para>When <structfield>match.type</structfield> is +<constant>V4L2_CHIP_MATCH_SUBDEV</constant>, +<structfield>match.addr</structfield> selects the nth sub-device.</para> + +    <para>These ioctls are optional, not all drivers may support them. +However when a driver supports these ioctls it must also support +&VIDIOC-DBG-G-CHIP-INFO;. Conversely it may support +<constant>VIDIOC_DBG_G_CHIP_INFO</constant> but not these ioctls.</para> + +    <para><constant>VIDIOC_DBG_G_REGISTER</constant> and +<constant>VIDIOC_DBG_S_REGISTER</constant> were introduced in Linux +2.6.21, but their API was changed to the one described here in kernel 2.6.29.</para> + +    <para>We recommended the <application>v4l2-dbg</application> +utility over calling these ioctls directly. It is available from the +LinuxTV v4l-dvb repository; see <ulink +url="http://linuxtv.org/repo/">http://linuxtv.org/repo/</ulink> for +access instructions.</para> + +    <!-- Note for convenience vidioc-dbg-g-chip-info.sgml +	 contains a duplicate of this table. --> +    <table pgwide="1" frame="none" id="v4l2-dbg-match"> +      <title>struct <structname>v4l2_dbg_match</structname></title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>See <xref linkend="chip-match-types" /> for a list of +possible types.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry>(anonymous)</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>addr</structfield></entry> +	    <entry>Match a chip by this number, interpreted according +to the <structfield>type</structfield> field.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>char</entry> +	    <entry><structfield>name[32]</structfield></entry> +	    <entry>Match a chip by this name, interpreted according +to the <structfield>type</structfield> field. Currently unused.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + + +    <table pgwide="1" frame="none" id="v4l2-dbg-register"> +      <title>struct <structname>v4l2_dbg_register</structname></title> +      <tgroup cols="4"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c4" /> +	<tbody valign="top"> +	  <row> +	    <entry>struct v4l2_dbg_match</entry> +	    <entry><structfield>match</structfield></entry> +	    <entry>How to match the chip, see <xref linkend="v4l2-dbg-match" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>size</structfield></entry> +	    <entry>The register size in bytes.</entry> +	  </row> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>reg</structfield></entry> +	    <entry>A register number.</entry> +	  </row> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>val</structfield></entry> +	    <entry>The value read from, or to be written into the +register.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- Note for convenience vidioc-dbg-g-chip-info.sgml +	 contains a duplicate of this table. --> +    <table pgwide="1" frame="none" id="chip-match-types"> +      <title>Chip Match Types</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CHIP_MATCH_BRIDGE</constant></entry> +	    <entry>0</entry> +	    <entry>Match the nth chip on the card, zero for the +	    bridge chip. Does not match sub-devices.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry> +	    <entry>4</entry> +	    <entry>Match the nth sub-device.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EPERM</errorcode></term> +	<listitem> +	  <para>Insufficient permissions. Root privileges are required +to execute these ioctls.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml b/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml new file mode 100644 index 00000000000..9215627b04c --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml @@ -0,0 +1,249 @@ +<refentry id="vidioc-decoder-cmd"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_DECODER_CMD</refname> +    <refname>VIDIOC_TRY_DECODER_CMD</refname> +    <refpurpose>Execute an decoder command</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_decoder_cmd *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>These ioctls control an audio/video (usually MPEG-) decoder. +<constant>VIDIOC_DECODER_CMD</constant> sends a command to the +decoder, <constant>VIDIOC_TRY_DECODER_CMD</constant> can be used to +try a command without actually executing it. To send a command applications +must initialize all fields of a &v4l2-decoder-cmd; and call +<constant>VIDIOC_DECODER_CMD</constant> or <constant>VIDIOC_TRY_DECODER_CMD</constant> +with a pointer to this structure.</para> + +    <para>The <structfield>cmd</structfield> field must contain the +command code. Some commands use the <structfield>flags</structfield> field for +additional information. +</para> + +    <para>A <function>write</function>() or &VIDIOC-STREAMON; call sends an implicit +START command to the decoder if it has not been started yet. +</para> + +    <para>A <function>close</function>() or &VIDIOC-STREAMOFF; call of a streaming +file descriptor sends an implicit immediate STOP command to the decoder, and all +buffered data is discarded.</para> + +    <para>These ioctls are optional, not all drivers may support +them. They were introduced in Linux 3.3.</para> + +    <table pgwide="1" frame="none" id="v4l2-decoder-cmd"> +      <title>struct <structname>v4l2_decoder_cmd</structname></title> +      <tgroup cols="5"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>cmd</structfield></entry> +            <entry></entry> +            <entry></entry> +	    <entry>The decoder command, see <xref linkend="decoder-cmds" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +            <entry></entry> +            <entry></entry> +	    <entry>Flags to go with the command. If no flags are defined for +this command, drivers and applications must set this field to zero.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry>(anonymous)</entry> +            <entry></entry> +	    <entry></entry> +            <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct</entry> +            <entry><structfield>start</structfield></entry> +            <entry></entry> +            <entry>Structure containing additional data for the +<constant>V4L2_DEC_CMD_START</constant> command.</entry> +	  </row> +	  <row> +            <entry></entry> +            <entry></entry> +	    <entry>__s32</entry> +	    <entry><structfield>speed</structfield></entry> +            <entry>Playback speed and direction. The playback speed is defined as +<structfield>speed</structfield>/1000 of the normal speed. So 1000 is normal playback. +Negative numbers denote reverse playback, so -1000 does reverse playback at normal +speed. Speeds -1, 0 and 1 have special meanings: speed 0 is shorthand for 1000 +(normal playback). A speed of 1 steps just one frame forward, a speed of -1 steps +just one frame back. +	    </entry> +	  </row> +	  <row> +            <entry></entry> +            <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>format</structfield></entry> +            <entry>Format restrictions. This field is set by the driver, not the +application. Possible values are <constant>V4L2_DEC_START_FMT_NONE</constant> if +there are no format restrictions or <constant>V4L2_DEC_START_FMT_GOP</constant> +if the decoder operates on full GOPs (<wordasword>Group Of Pictures</wordasword>). +This is usually the case for reverse playback: the decoder needs full GOPs, which +it can then play in reverse order. So to implement reverse playback the application +must feed the decoder the last GOP in the video file, then the GOP before that, etc. etc. +	    </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct</entry> +            <entry><structfield>stop</structfield></entry> +            <entry></entry> +            <entry>Structure containing additional data for the +<constant>V4L2_DEC_CMD_STOP</constant> command.</entry> +	  </row> +	  <row> +            <entry></entry> +            <entry></entry> +	    <entry>__u64</entry> +	    <entry><structfield>pts</structfield></entry> +            <entry>Stop playback at this <structfield>pts</structfield> or immediately +if the playback is already past that timestamp. Leave to 0 if you want to stop after the +last frame was decoded. +	    </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>struct</entry> +            <entry><structfield>raw</structfield></entry> +            <entry></entry> +            <entry></entry> +	  </row> +	  <row> +            <entry></entry> +            <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>data</structfield>[16]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="decoder-cmds"> +      <title>Decoder Commands</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_DEC_CMD_START</constant></entry> +	    <entry>0</entry> +	    <entry>Start the decoder. When the decoder is already +running or paused, this command will just change the playback speed. +That means that calling <constant>V4L2_DEC_CMD_START</constant> when +the decoder was paused will <emphasis>not</emphasis> resume the decoder. +You have to explicitly call <constant>V4L2_DEC_CMD_RESUME</constant> for that. +This command has one flag: +<constant>V4L2_DEC_CMD_START_MUTE_AUDIO</constant>. If set, then audio will +be muted when playing back at a non-standard speed. +            </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_DEC_CMD_STOP</constant></entry> +	    <entry>1</entry> +	    <entry>Stop the decoder. When the decoder is already stopped, +this command does nothing. This command has two flags: +if <constant>V4L2_DEC_CMD_STOP_TO_BLACK</constant> is set, then the decoder will +set the picture to black after it stopped decoding. Otherwise the last image will +repeat. If <constant>V4L2_DEC_CMD_STOP_IMMEDIATELY</constant> is set, then the decoder +stops immediately (ignoring the <structfield>pts</structfield> value), otherwise it +will keep decoding until timestamp >= pts or until the last of the pending data from +its internal buffers was decoded. +</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_DEC_CMD_PAUSE</constant></entry> +	    <entry>2</entry> +	    <entry>Pause the decoder. When the decoder has not been +started yet, the driver will return an &EPERM;. When the decoder is +already paused, this command does nothing. This command has one flag: +if <constant>V4L2_DEC_CMD_PAUSE_TO_BLACK</constant> is set, then set the +decoder output to black when paused. +</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_DEC_CMD_RESUME</constant></entry> +	    <entry>3</entry> +	    <entry>Resume decoding after a PAUSE command. When the +decoder has not been started yet, the driver will return an &EPERM;. +When the decoder is already running, this command does nothing. No +flags are defined for this command.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <structfield>cmd</structfield> field is invalid.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EPERM</errorcode></term> +	<listitem> +	  <para>The application sent a PAUSE or RESUME command when +the decoder was not running.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-dqevent.xml b/Documentation/DocBook/media/v4l/vidioc-dqevent.xml new file mode 100644 index 00000000000..820f86e8744 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-dqevent.xml @@ -0,0 +1,310 @@ +<refentry id="vidioc-dqevent"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_DQEVENT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_DQEVENT</refname> +    <refpurpose>Dequeue event</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_event +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_DQEVENT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Dequeue an event from a video device. No input is required +    for this ioctl. All the fields of the &v4l2-event; structure are +    filled by the driver. The file handle will also receive exceptions +    which the application may get by e.g. using the select system +    call.</para> + +    <table frame="none" pgwide="1" id="v4l2-event"> +      <title>struct <structname>v4l2_event</structname></title> +      <tgroup cols="4"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +            <entry></entry> +	    <entry>Type of the event.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield>u</structfield></entry> +            <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-event-vsync;</entry> +            <entry><structfield>vsync</structfield></entry> +	    <entry>Event data for event V4L2_EVENT_VSYNC. +            </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-event-ctrl;</entry> +            <entry><structfield>ctrl</structfield></entry> +	    <entry>Event data for event V4L2_EVENT_CTRL. +            </entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-event-frame-sync;</entry> +            <entry><structfield>frame_sync</structfield></entry> +	    <entry>Event data for event V4L2_EVENT_FRAME_SYNC.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u8</entry> +            <entry><structfield>data</structfield>[64]</entry> +	    <entry>Event data. Defined by the event type. The union +            should be used to define easily accessible type for +            events.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pending</structfield></entry> +            <entry></entry> +	    <entry>Number of pending events excluding this one.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>sequence</structfield></entry> +            <entry></entry> +	    <entry>Event sequence number. The sequence number is +	    incremented for every subscribed event that takes place. +	    If sequence numbers are not contiguous it means that +	    events have been lost. +	    </entry> +	  </row> +	  <row> +	    <entry>struct timespec</entry> +	    <entry><structfield>timestamp</structfield></entry> +            <entry></entry> +	    <entry>Event timestamp.</entry> +	  </row> +	  <row> +	    <entry>u32</entry> +	    <entry><structfield>id</structfield></entry> +            <entry></entry> +	    <entry>The ID associated with the event source. If the event does not +		have an associated ID (this depends on the event type), then this +		is 0.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[8]</entry> +            <entry></entry> +	    <entry>Reserved for future extensions. Drivers must set +	    the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-event-vsync"> +      <title>struct <structname>v4l2_event_vsync</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>field</structfield></entry> +	    <entry>The upcoming field. See &v4l2-field;.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-event-ctrl"> +      <title>struct <structname>v4l2_event_ctrl</structname></title> +      <tgroup cols="4"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>changes</structfield></entry> +	    <entry></entry> +	    <entry>A bitmask that tells what has changed. See <xref linkend="changes-flags" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>The type of the control. See &v4l2-ctrl-type;.</entry> +	  </row> +	  <row> +	    <entry>union (anonymous)</entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__s32</entry> +	    <entry><structfield>value</structfield></entry> +	    <entry>The 32-bit value of the control for 32-bit control types. +		This is 0 for string controls since the value of a string +		cannot be passed using &VIDIOC-DQEVENT;.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__s64</entry> +	    <entry><structfield>value64</structfield></entry> +	    <entry>The 64-bit value of the control for 64-bit control types.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry></entry> +	    <entry>The control flags. See <xref linkend="control-flags" />.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>minimum</structfield></entry> +	    <entry></entry> +	    <entry>The minimum value of the control. See &v4l2-queryctrl;.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>maximum</structfield></entry> +	    <entry></entry> +	    <entry>The maximum value of the control. See &v4l2-queryctrl;.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>step</structfield></entry> +	    <entry></entry> +	    <entry>The step value of the control. See &v4l2-queryctrl;.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>default_value</structfield></entry> +	    <entry></entry> +	    <entry>The default value value of the control. See &v4l2-queryctrl;.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-event-frame-sync"> +      <title>struct <structname>v4l2_event_frame_sync</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>frame_sequence</structfield></entry> +	    <entry> +	      The sequence number of the frame being received. +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="v4l2-event-src-change"> +      <title>struct <structname>v4l2_event_src_change</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>changes</structfield></entry> +	    <entry> +	      A bitmask that tells what has changed. See <xref linkend="src-changes-flags" />. +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="changes-flags"> +      <title>Changes</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_EVENT_CTRL_CH_VALUE</constant></entry> +	    <entry>0x0001</entry> +	    <entry>This control event was triggered because the value of the control +		changed. Special case: if a button control is pressed, then this +		event is sent as well, even though there is not explicit value +		associated with a button control.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_CTRL_CH_FLAGS</constant></entry> +	    <entry>0x0002</entry> +	    <entry>This control event was triggered because the control flags +		changed.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_CTRL_CH_RANGE</constant></entry> +	    <entry>0x0004</entry> +	    <entry>This control event was triggered because the minimum, +	    maximum, step or the default value of the control changed.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="src-changes-flags"> +      <title>Source Changes</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_EVENT_SRC_CH_RESOLUTION</constant></entry> +	    <entry>0x0001</entry> +	    <entry>This event gets triggered when a resolution change is +	    detected at an input. This can come from an input connector or +	    from a video decoder. +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml b/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml new file mode 100644 index 00000000000..28a8c1e1c70 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml @@ -0,0 +1,222 @@ +<refentry id="vidioc-dv-timings-cap"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_DV_TIMINGS_CAP, VIDIOC_SUBDEV_DV_TIMINGS_CAP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_DV_TIMINGS_CAP</refname> +    <refname>VIDIOC_SUBDEV_DV_TIMINGS_CAP</refname> +    <refpurpose>The capabilities of the Digital Video receiver/transmitter</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_dv_timings_cap *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_DV_TIMINGS_CAP, VIDIOC_SUBDEV_DV_TIMINGS_CAP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>To query the capabilities of the DV receiver/transmitter applications +can call the <constant>VIDIOC_DV_TIMINGS_CAP</constant> ioctl on a video node +and the driver will fill in the structure. Note that drivers may return +different values after switching the video input or output.</para> + +    <para>When implemented by the driver DV capabilities of subdevices can be +queried by calling the <constant>VIDIOC_SUBDEV_DV_TIMINGS_CAP</constant> ioctl +directly on a subdevice node. The capabilities are specific to inputs (for DV +receivers) or outputs (for DV transmitters), applications must specify the +desired pad number in the &v4l2-dv-timings-cap; <structfield>pad</structfield> +field. Attempts to query capabilities on a pad that doesn't support them will +return an &EINVAL;.</para> + +    <table pgwide="1" frame="none" id="v4l2-bt-timings-cap"> +      <title>struct <structname>v4l2_bt_timings_cap</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>min_width</structfield></entry> +	    <entry>Minimum width of the active video in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>max_width</structfield></entry> +	    <entry>Maximum width of the active video in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>min_height</structfield></entry> +	    <entry>Minimum height of the active video in lines.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>max_height</structfield></entry> +	    <entry>Maximum height of the active video in lines.</entry> +	  </row> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>min_pixelclock</structfield></entry> +	    <entry>Minimum pixelclock frequency in Hz.</entry> +	  </row> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>max_pixelclock</structfield></entry> +	    <entry>Maximum pixelclock frequency in Hz.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>standards</structfield></entry> +	    <entry>The video standard(s) supported by the hardware. +	    See <xref linkend="dv-bt-standards"/> for a list of standards.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capabilities</structfield></entry> +	    <entry>Several flags giving more information about the capabilities. +	    See <xref linkend="dv-bt-cap-capabilities"/> for a description of the flags. +	    </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[16]</entry> +	    <entry>Reserved for future extensions. Drivers must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-dv-timings-cap"> +      <title>struct <structname>v4l2_dv_timings_cap</structname></title> +      <tgroup cols="4"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of DV timings as listed in <xref linkend="dv-timing-types"/>.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API. This field +	    is only used when operating on a subdevice node. When operating on a +	    video node applications must set this field to zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. Drivers must set the array to zero.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield></structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-bt-timings-cap;</entry> +	    <entry><structfield>bt</structfield></entry> +	    <entry>BT.656/1120 timings capabilities of the hardware.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>raw_data</structfield>[32]</entry> +	    <entry></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="dv-bt-cap-capabilities"> +      <title>DV BT Timing capabilities</title> +      <tgroup cols="2"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>Flag</entry> +	    <entry>Description</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_CAP_INTERLACED</entry> +	    <entry>Interlaced formats are supported. +	    </entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_CAP_PROGRESSIVE</entry> +	    <entry>Progressive formats are supported. +	    </entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_CAP_REDUCED_BLANKING</entry> +	    <entry>CVT/GTF specific: the timings can make use of reduced blanking (CVT) +or the 'Secondary GTF' curve (GTF). +	    </entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_CAP_CUSTOM</entry> +	    <entry>Can support non-standard timings, i.e. timings not belonging to the +standards set in the <structfield>standards</structfield> field. +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> + +<!-- +Local Variables: +mode: sgml +sgml-parent-document: "v4l2.sgml" +indent-tabs-mode: nil +End: +--> diff --git a/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml b/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml new file mode 100644 index 00000000000..0619ca5d2d3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml @@ -0,0 +1,189 @@ +<refentry id="vidioc-encoder-cmd"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENCODER_CMD</refname> +    <refname>VIDIOC_TRY_ENCODER_CMD</refname> +    <refpurpose>Execute an encoder command</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_encoder_cmd *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>These ioctls control an audio/video (usually MPEG-) encoder. +<constant>VIDIOC_ENCODER_CMD</constant> sends a command to the +encoder, <constant>VIDIOC_TRY_ENCODER_CMD</constant> can be used to +try a command without actually executing it.</para> + +    <para>To send a command applications must initialize all fields of a +    &v4l2-encoder-cmd; and call +    <constant>VIDIOC_ENCODER_CMD</constant> or +    <constant>VIDIOC_TRY_ENCODER_CMD</constant> with a pointer to this +    structure.</para> + +    <para>The <structfield>cmd</structfield> field must contain the +command code. The <structfield>flags</structfield> field is currently +only used by the STOP command and contains one bit: If the +<constant>V4L2_ENC_CMD_STOP_AT_GOP_END</constant> flag is set, +encoding will continue until the end of the current <wordasword>Group +Of Pictures</wordasword>, otherwise it will stop immediately.</para> + +    <para>A <function>read</function>() or &VIDIOC-STREAMON; call sends an implicit +START command to the encoder if it has not been started yet. After a STOP command, +<function>read</function>() calls will read the remaining data +buffered by the driver. When the buffer is empty, +<function>read</function>() will return zero and the next +<function>read</function>() call will restart the encoder.</para> + +    <para>A <function>close</function>() or &VIDIOC-STREAMOFF; call of a streaming +file descriptor sends an implicit immediate STOP to the encoder, and all buffered +data is discarded.</para> + +    <para>These ioctls are optional, not all drivers may support +them. They were introduced in Linux 2.6.21.</para> + +    <table pgwide="1" frame="none" id="v4l2-encoder-cmd"> +      <title>struct <structname>v4l2_encoder_cmd</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>cmd</structfield></entry> +	    <entry>The encoder command, see <xref linkend="encoder-cmds" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Flags to go with the command, see <xref +		linkend="encoder-flags" />. If no flags are defined for +this command, drivers and applications must set this field to +zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>data</structfield>[8]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="encoder-cmds"> +      <title>Encoder Commands</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_ENC_CMD_START</constant></entry> +	    <entry>0</entry> +	    <entry>Start the encoder. When the encoder is already +running or paused, this command does nothing. No flags are defined for +this command.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_ENC_CMD_STOP</constant></entry> +	    <entry>1</entry> +	    <entry>Stop the encoder. When the +<constant>V4L2_ENC_CMD_STOP_AT_GOP_END</constant> flag is set, +encoding will continue until the end of the current <wordasword>Group +Of Pictures</wordasword>, otherwise encoding will stop immediately. +When the encoder is already stopped, this command does +nothing.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_ENC_CMD_PAUSE</constant></entry> +	    <entry>2</entry> +	    <entry>Pause the encoder. When the encoder has not been +started yet, the driver will return an &EPERM;. When the encoder is +already paused, this command does nothing. No flags are defined for +this command.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_ENC_CMD_RESUME</constant></entry> +	    <entry>3</entry> +	    <entry>Resume encoding after a PAUSE command. When the +encoder has not been started yet, the driver will return an &EPERM;. +When the encoder is already running, this command does nothing. No +flags are defined for this command.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="encoder-flags"> +      <title>Encoder Command Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_ENC_CMD_STOP_AT_GOP_END</constant></entry> +	    <entry>0x0001</entry> +	    <entry>Stop encoding at the end of the current <wordasword>Group Of +Pictures</wordasword>, rather than immediately.</entry> +	  </row> +       </tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <structfield>cmd</structfield> field is invalid.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EPERM</errorcode></term> +	<listitem> +	  <para>The application sent a PAUSE or RESUME command when +the encoder was not running.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml b/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml new file mode 100644 index 00000000000..b9fdfeacdbc --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml @@ -0,0 +1,141 @@ +<refentry id="vidioc-enum-dv-timings"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUM_DV_TIMINGS, VIDIOC_SUBDEV_ENUM_DV_TIMINGS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUM_DV_TIMINGS</refname> +    <refname>VIDIOC_SUBDEV_ENUM_DV_TIMINGS</refname> +    <refpurpose>Enumerate supported Digital Video timings</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_enum_dv_timings *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUM_DV_TIMINGS, VIDIOC_SUBDEV_ENUM_DV_TIMINGS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>While some DV receivers or transmitters support a wide range of timings, others +support only a limited number of timings. With this ioctl applications can enumerate a list +of known supported timings. Call &VIDIOC-DV-TIMINGS-CAP; to check if it also supports other +standards or even custom timings that are not in this list.</para> + +    <para>To query the available timings, applications initialize the +<structfield>index</structfield> field and zero the reserved array of &v4l2-enum-dv-timings; +and call the <constant>VIDIOC_ENUM_DV_TIMINGS</constant> ioctl on a video node with a +pointer to this structure. Drivers fill the rest of the structure or return an +&EINVAL; when the index is out of bounds. To enumerate all supported DV timings, +applications shall begin at index zero, incrementing by one until the +driver returns <errorcode>EINVAL</errorcode>. Note that drivers may enumerate a +different set of DV timings after switching the video input or +output.</para> + +    <para>When implemented by the driver DV timings of subdevices can be queried +by calling the <constant>VIDIOC_SUBDEV_ENUM_DV_TIMINGS</constant> ioctl directly +on a subdevice node. The DV timings are specific to inputs (for DV receivers) or +outputs (for DV transmitters), applications must specify the desired pad number +in the &v4l2-enum-dv-timings; <structfield>pad</structfield> field. Attempts to +enumerate timings on a pad that doesn't support them will return an &EINVAL;.</para> + +    <table pgwide="1" frame="none" id="v4l2-enum-dv-timings"> +      <title>struct <structname>v4l2_enum_dv_timings</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the DV timings, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API. This field +	    is only used when operating on a subdevice node. When operating on a +	    video node applications must set this field to zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. Drivers and applications must +	    set the array to zero.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-dv-timings;</entry> +	    <entry><structfield>timings</structfield></entry> +	    <entry>The timings.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-enum-dv-timings; <structfield>index</structfield> +is out of bounds or the <structfield>pad</structfield> number is invalid.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>Digital video presets are not supported for this input or output.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> + +<!-- +Local Variables: +mode: sgml +sgml-parent-document: "v4l2.sgml" +indent-tabs-mode: nil +End: +--> diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml new file mode 100644 index 00000000000..f8dfeed34fc --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml @@ -0,0 +1,159 @@ +<refentry id="vidioc-enum-fmt"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUM_FMT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUM_FMT</refname> +    <refpurpose>Enumerate image formats</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_fmtdesc +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUM_FMT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To enumerate image formats applications initialize the +<structfield>type</structfield> and <structfield>index</structfield> +field of &v4l2-fmtdesc; and call the +<constant>VIDIOC_ENUM_FMT</constant> ioctl with a pointer to this +structure. Drivers fill the rest of the structure or return an +&EINVAL;. All formats are enumerable by beginning at index zero and +incrementing by one until <errorcode>EINVAL</errorcode> is +returned.</para> + +    <para>Note that after switching input or output the list of enumerated image +formats may be different.</para> + +    <table pgwide="1" frame="none" id="v4l2-fmtdesc"> +      <title>struct <structname>v4l2_fmtdesc</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the format in the enumeration, set by +the application. This is in no way related to the <structfield> +pixelformat</structfield> field.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the data stream, set by the application. +Only these types are valid here: +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and +<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>. See <xref linkend="v4l2-buf-type" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>See <xref linkend="fmtdesc-flags" /></entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>description</structfield>[32]</entry> +	    <entry>Description of the format, a NUL-terminated ASCII +string. This information is intended for the user, for example: "YUV +4:2:2".</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pixelformat</structfield></entry> +	    <entry>The image format identifier. This is a +four character code as computed by the v4l2_fourcc() +macro:</entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para><programlisting id="v4l2-fourcc"> +#define v4l2_fourcc(a,b,c,d) (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24)) +</programlisting></para><para>Several image formats are already +defined by this specification in <xref linkend="pixfmt" />. Note these +codes are not the same as those used in the Windows world.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry>Reserved for future extensions. Drivers must set +the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="fmtdesc-flags"> +      <title>Image Format Description Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_FMT_FLAG_COMPRESSED</constant></entry> +	    <entry>0x0001</entry> +	    <entry>This is a compressed format.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FMT_FLAG_EMULATED</constant></entry> +	    <entry>0x0002</entry> +	    <entry>This format is not native to the device but emulated +through software (usually libv4l2), where possible try to use a native format +instead for better performance.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-fmtdesc; <structfield>type</structfield> +is not supported or the <structfield>index</structfield> is out of +bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml b/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml new file mode 100644 index 00000000000..5fd72c4c33e --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml @@ -0,0 +1,259 @@ +<refentry id="vidioc-enum-frameintervals"> + +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUM_FRAMEINTERVALS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUM_FRAMEINTERVALS</refname> +    <refpurpose>Enumerate frame intervals</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_frmivalenum *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUM_FRAMEINTERVALS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para>Pointer to a &v4l2-frmivalenum; structure that +contains a pixel format and size and receives a frame interval.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>This ioctl allows applications to enumerate all frame +intervals that the device supports for the given pixel format and +frame size.</para> +    <para>The supported pixel formats and frame sizes can be obtained +by using the &VIDIOC-ENUM-FMT; and &VIDIOC-ENUM-FRAMESIZES; +functions.</para> +    <para>The return value and the content of the +<structfield>v4l2_frmivalenum.type</structfield> field depend on the +type of frame intervals the device supports. Here are the semantics of +the function for the different cases:</para> +    <itemizedlist> +      <listitem> +	<para><emphasis role="bold">Discrete:</emphasis> The function +returns success if the given index value (zero-based) is valid. The +application should increase the index by one for each call until +<constant>EINVAL</constant> is returned. The `v4l2_frmivalenum.type` +field is set to `V4L2_FRMIVAL_TYPE_DISCRETE` by the driver. Of the +union only the `discrete` member is valid.</para> +      </listitem> +      <listitem> +	<para><emphasis role="bold">Step-wise:</emphasis> The function +returns success if the given index value is zero and +<constant>EINVAL</constant> for any other index value. The +<structfield>v4l2_frmivalenum.type</structfield> field is set to +<constant>V4L2_FRMIVAL_TYPE_STEPWISE</constant> by the driver. Of the +union only the <structfield>stepwise</structfield> member is +valid.</para> +      </listitem> +      <listitem> +	<para><emphasis role="bold">Continuous:</emphasis> This is a +special case of the step-wise type above. The function returns success +if the given index value is zero and <constant>EINVAL</constant> for +any other index value. The +<structfield>v4l2_frmivalenum.type</structfield> field is set to +<constant>V4L2_FRMIVAL_TYPE_CONTINUOUS</constant> by the driver. Of +the union only the <structfield>stepwise</structfield> member is valid +and the <structfield>step</structfield> value is set to 1.</para> +      </listitem> +    </itemizedlist> + +    <para>When the application calls the function with index zero, it +must check the <structfield>type</structfield> field to determine the +type of frame interval enumeration the device supports. Only for the +<constant>V4L2_FRMIVAL_TYPE_DISCRETE</constant> type does it make +sense to increase the index value to receive more frame +intervals.</para> +    <para>Note that the order in which the frame intervals are +returned has no special meaning. In particular does it not say +anything about potential default frame intervals.</para> +    <para>Applications can assume that the enumeration data does not +change without any interaction from the application itself. This means +that the enumeration data is consistent if the application does not +perform any other ioctl calls while it runs the frame interval +enumeration.</para> +  </refsect1> + +  <refsect1> +    <title>Notes</title> + +    <itemizedlist> +      <listitem> +	<para><emphasis role="bold">Frame intervals and frame +rates:</emphasis> The V4L2 API uses frame intervals instead of frame +rates. Given the frame interval the frame rate can be computed as +follows:<screen>frame_rate = 1 / frame_interval</screen></para> +      </listitem> +    </itemizedlist> + +  </refsect1> + +  <refsect1> +    <title>Structs</title> + +    <para>In the structs below, <emphasis>IN</emphasis> denotes a +value that has to be filled in by the application, +<emphasis>OUT</emphasis> denotes values that the driver fills in. The +application should zero out all members except for the +<emphasis>IN</emphasis> fields.</para> + +    <table pgwide="1" frame="none" id="v4l2-frmival-stepwise"> +      <title>struct <structname>v4l2_frmival_stepwise</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>min</structfield></entry> +	    <entry>Minimum frame interval [s].</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>max</structfield></entry> +	    <entry>Maximum frame interval [s].</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>step</structfield></entry> +	    <entry>Frame interval step size [s].</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-frmivalenum"> +      <title>struct <structname>v4l2_frmivalenum</structname></title> +      <tgroup cols="4"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry></entry> +	    <entry>IN: Index of the given frame interval in the +enumeration.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pixel_format</structfield></entry> +	    <entry></entry> +	    <entry>IN: Pixel format for which the frame intervals are +enumerated.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry></entry> +	    <entry>IN: Frame width for which the frame intervals are +enumerated.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry></entry> +	    <entry>IN: Frame height for which the frame intervals are +enumerated.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>OUT: Frame interval type the device supports.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>OUT: Frame interval with the given index.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>discrete</structfield></entry> +	    <entry>Frame interval [s].</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-frmival-stepwise;</entry> +	    <entry><structfield>stepwise</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved[2]</structfield></entry> +	    <entry></entry> +	    <entry>Reserved space for future use.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    <title>Enums</title> + +    <table pgwide="1" frame="none" id="v4l2-frmivaltypes"> +      <title>enum <structname>v4l2_frmivaltypes</structname></title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_FRMIVAL_TYPE_DISCRETE</constant></entry> +	    <entry>1</entry> +	    <entry>Discrete frame interval.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FRMIVAL_TYPE_CONTINUOUS</constant></entry> +	    <entry>2</entry> +	    <entry>Continuous frame interval.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FRMIVAL_TYPE_STEPWISE</constant></entry> +	    <entry>3</entry> +	    <entry>Step-wise defined frame interval.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> + +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml b/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml new file mode 100644 index 00000000000..a78454b5abc --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml @@ -0,0 +1,264 @@ +<refentry id="vidioc-enum-framesizes"> + +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUM_FRAMESIZES</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUM_FRAMESIZES</refname> +    <refpurpose>Enumerate frame sizes</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_frmsizeenum *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUM_FRAMESIZES</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para>Pointer to a &v4l2-frmsizeenum; that contains an index +and pixel format and receives a frame width and height.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>This ioctl allows applications to enumerate all frame sizes +(&ie; width and height in pixels) that the device supports for the +given pixel format.</para> +    <para>The supported pixel formats can be obtained by using the +&VIDIOC-ENUM-FMT; function.</para> +    <para>The return value and the content of the +<structfield>v4l2_frmsizeenum.type</structfield> field depend on the +type of frame sizes the device supports. Here are the semantics of the +function for the different cases:</para> + +    <itemizedlist> +      <listitem> +	<para><emphasis role="bold">Discrete:</emphasis> The function +returns success if the given index value (zero-based) is valid. The +application should increase the index by one for each call until +<constant>EINVAL</constant> is returned. The +<structfield>v4l2_frmsizeenum.type</structfield> field is set to +<constant>V4L2_FRMSIZE_TYPE_DISCRETE</constant> by the driver. Of the +union only the <structfield>discrete</structfield> member is +valid.</para> +      </listitem> +      <listitem> +	<para><emphasis role="bold">Step-wise:</emphasis> The function +returns success if the given index value is zero and +<constant>EINVAL</constant> for any other index value. The +<structfield>v4l2_frmsizeenum.type</structfield> field is set to +<constant>V4L2_FRMSIZE_TYPE_STEPWISE</constant> by the driver. Of the +union only the <structfield>stepwise</structfield> member is +valid.</para> +      </listitem> +      <listitem> +	<para><emphasis role="bold">Continuous:</emphasis> This is a +special case of the step-wise type above. The function returns success +if the given index value is zero and <constant>EINVAL</constant> for +any other index value. The +<structfield>v4l2_frmsizeenum.type</structfield> field is set to +<constant>V4L2_FRMSIZE_TYPE_CONTINUOUS</constant> by the driver. Of +the union only the <structfield>stepwise</structfield> member is valid +and the <structfield>step_width</structfield> and +<structfield>step_height</structfield> values are set to 1.</para> +      </listitem> +    </itemizedlist> + +    <para>When the application calls the function with index zero, it +must check the <structfield>type</structfield> field to determine the +type of frame size enumeration the device supports. Only for the +<constant>V4L2_FRMSIZE_TYPE_DISCRETE</constant> type does it make +sense to increase the index value to receive more frame sizes.</para> +    <para>Note that the order in which the frame sizes are returned +has no special meaning. In particular does it not say anything about +potential default format sizes.</para> +    <para>Applications can assume that the enumeration data does not +change without any interaction from the application itself. This means +that the enumeration data is consistent if the application does not +perform any other ioctl calls while it runs the frame size +enumeration.</para> +  </refsect1> + +  <refsect1> +    <title>Structs</title> + +    <para>In the structs below, <emphasis>IN</emphasis> denotes a +value that has to be filled in by the application, +<emphasis>OUT</emphasis> denotes values that the driver fills in. The +application should zero out all members except for the +<emphasis>IN</emphasis> fields.</para> + +    <table pgwide="1" frame="none" id="v4l2-frmsize-discrete"> +      <title>struct <structname>v4l2_frmsize_discrete</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry>Width of the frame [pixel].</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry>Height of the frame [pixel].</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-frmsize-stepwise"> +      <title>struct <structname>v4l2_frmsize_stepwise</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>min_width</structfield></entry> +	    <entry>Minimum frame width [pixel].</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>max_width</structfield></entry> +	    <entry>Maximum frame width [pixel].</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>step_width</structfield></entry> +	    <entry>Frame width step size [pixel].</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>min_height</structfield></entry> +	    <entry>Minimum frame height [pixel].</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>max_height</structfield></entry> +	    <entry>Maximum frame height [pixel].</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>step_height</structfield></entry> +	    <entry>Frame height step size [pixel].</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-frmsizeenum"> +      <title>struct <structname>v4l2_frmsizeenum</structname></title> +      <tgroup cols="4"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry></entry> +	    <entry>IN: Index of the given frame size in the enumeration.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pixel_format</structfield></entry> +	    <entry></entry> +	    <entry>IN: Pixel format for which the frame sizes are enumerated.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>OUT: Frame size type the device supports.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>OUT: Frame size with the given index.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-frmsize-discrete;</entry> +	    <entry><structfield>discrete</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-frmsize-stepwise;</entry> +	    <entry><structfield>stepwise</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved[2]</structfield></entry> +	    <entry></entry> +	    <entry>Reserved space for future use.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    <title>Enums</title> + +    <table pgwide="1" frame="none" id="v4l2-frmsizetypes"> +      <title>enum <structname>v4l2_frmsizetypes</structname></title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_FRMSIZE_TYPE_DISCRETE</constant></entry> +	    <entry>1</entry> +	    <entry>Discrete frame size.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FRMSIZE_TYPE_CONTINUOUS</constant></entry> +	    <entry>2</entry> +	    <entry>Continuous frame size.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FRMSIZE_TYPE_STEPWISE</constant></entry> +	    <entry>3</entry> +	    <entry>Step-wise defined frame size.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml b/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml new file mode 100644 index 00000000000..4e8ea65f728 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml @@ -0,0 +1,181 @@ +<refentry id="vidioc-enum-freq-bands"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUM_FREQ_BANDS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUM_FREQ_BANDS</refname> +    <refpurpose>Enumerate supported frequency bands</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_frequency_band +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUM_FREQ_BANDS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>Enumerates the frequency bands that a tuner or modulator supports. +To do this applications initialize the <structfield>tuner</structfield>, +<structfield>type</structfield> and <structfield>index</structfield> fields, +and zero out the <structfield>reserved</structfield> array of a &v4l2-frequency-band; and +call the <constant>VIDIOC_ENUM_FREQ_BANDS</constant> ioctl with a pointer +to this structure.</para> + +    <para>This ioctl is supported if the <constant>V4L2_TUNER_CAP_FREQ_BANDS</constant> capability +    of the corresponding tuner/modulator is set.</para> + +    <table pgwide="1" frame="none" id="v4l2-frequency-band"> +      <title>struct <structname>v4l2_frequency_band</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>tuner</structfield></entry> +	    <entry>The tuner or modulator index number. This is the +same value as in the &v4l2-input; <structfield>tuner</structfield> +field and the &v4l2-tuner; <structfield>index</structfield> field, or +the &v4l2-output; <structfield>modulator</structfield> field and the +&v4l2-modulator; <structfield>index</structfield> field.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>The tuner type. This is the same value as in the +&v4l2-tuner; <structfield>type</structfield> field. The type must be set +to <constant>V4L2_TUNER_RADIO</constant> for <filename>/dev/radioX</filename> +device nodes, and to <constant>V4L2_TUNER_ANALOG_TV</constant> +for all others. Set this field to <constant>V4L2_TUNER_RADIO</constant> for +modulators (currently only radio modulators are supported). +See <xref linkend="v4l2-tuner-type" /></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Identifies the frequency band, set by the application.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry spanname="hspan">The tuner/modulator capability flags for +this frequency band, see <xref linkend="tuner-capability" />. The <constant>V4L2_TUNER_CAP_LOW</constant> +or <constant>V4L2_TUNER_CAP_1HZ</constant> capability must be the same for all frequency bands of the selected tuner/modulator. +So either all bands have that capability set, or none of them have that capability.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangelow</structfield></entry> +	    <entry spanname="hspan">The lowest tunable frequency in +units of 62.5 kHz, or if the <structfield>capability</structfield> +flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz, for this frequency band. A 1 Hz unit is used when the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangehigh</structfield></entry> +	    <entry spanname="hspan">The highest tunable frequency in +units of 62.5 kHz, or if the <structfield>capability</structfield> +flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz, for this frequency band. A 1 Hz unit is used when the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>modulation</structfield></entry> +	    <entry spanname="hspan">The supported modulation systems of this frequency band. +	    See <xref linkend="band-modulation" />. Note that currently only one +	    modulation system per frequency band is supported. More work will need to +	    be done if multiple modulation systems are possible. Contact the +	    linux-media mailing list (&v4l-ml;) if you need that functionality.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[9]</entry> +	    <entry>Reserved for future extensions. Applications and drivers +	    must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="band-modulation"> +      <title>Band Modulation Systems</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_BAND_MODULATION_VSB</constant></entry> +	    <entry>0x02</entry> +	    <entry>Vestigial Sideband modulation, used for analog TV.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BAND_MODULATION_FM</constant></entry> +	    <entry>0x04</entry> +	    <entry>Frequency Modulation, commonly used for analog radio.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_BAND_MODULATION_AM</constant></entry> +	    <entry>0x08</entry> +	    <entry>Amplitude Modulation, commonly used for analog radio.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <structfield>tuner</structfield> or <structfield>index</structfield> +is out of bounds or the <structfield>type</structfield> field is wrong.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml b/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml new file mode 100644 index 00000000000..ea816ab2e49 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml @@ -0,0 +1,76 @@ +<refentry id="vidioc-enumaudio"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUMAUDIO</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUMAUDIO</refname> +    <refpurpose>Enumerate audio inputs</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_audio *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUMAUDIO</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of an audio input applications +initialize the <structfield>index</structfield> field and zero out the +<structfield>reserved</structfield> array of a &v4l2-audio; +and call the <constant>VIDIOC_ENUMAUDIO</constant> ioctl with a pointer +to this structure. Drivers fill the rest of the structure or return an +&EINVAL; when the index is out of bounds. To enumerate all audio +inputs applications shall begin at index zero, incrementing by one +until the driver returns <errorcode>EINVAL</errorcode>.</para> + +    <para>See <xref linkend="vidioc-g-audio" /> for a description of +&v4l2-audio;.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The number of the audio input is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml b/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml new file mode 100644 index 00000000000..2e87cedb0d3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml @@ -0,0 +1,79 @@ +<refentry id="vidioc-enumaudioout"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUMAUDOUT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUMAUDOUT</refname> +    <refpurpose>Enumerate audio outputs</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_audioout *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUMAUDOUT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of an audio output applications +initialize the <structfield>index</structfield> field and zero out the +<structfield>reserved</structfield> array of a &v4l2-audioout; and +call the <constant>VIDIOC_G_AUDOUT</constant> ioctl with a pointer +to this structure. Drivers fill the rest of the structure or return an +&EINVAL; when the index is out of bounds. To enumerate all audio +outputs applications shall begin at index zero, incrementing by one +until the driver returns <errorcode>EINVAL</errorcode>.</para> + +    <para>Note connectors on a TV card to loop back the received audio +signal to a sound card are not audio outputs in this sense.</para> + +    <para>See <xref linkend="vidioc-g-audioout" /> for a description of +&v4l2-audioout;.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The number of the audio output is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enuminput.xml b/Documentation/DocBook/media/v4l/vidioc-enuminput.xml new file mode 100644 index 00000000000..493a39a8ef2 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enuminput.xml @@ -0,0 +1,308 @@ +<refentry id="vidioc-enuminput"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUMINPUT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUMINPUT</refname> +    <refpurpose>Enumerate video inputs</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_input +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUMINPUT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of a video input applications +initialize the <structfield>index</structfield> field of &v4l2-input; +and call the <constant>VIDIOC_ENUMINPUT</constant> ioctl with a +pointer to this structure. Drivers fill the rest of the structure or +return an &EINVAL; when the index is out of bounds. To enumerate all +inputs applications shall begin at index zero, incrementing by one +until the driver returns <errorcode>EINVAL</errorcode>.</para> + +    <table frame="none" pgwide="1" id="v4l2-input"> +      <title>struct <structname>v4l2_input</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Identifies the input, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the video input, a NUL-terminated ASCII +string, for example: "Vin (Composite 2)". This information is intended +for the user, preferably the connector label on the device itself.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the input, see <xref +		linkend="input-type" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>audioset</structfield></entry> +	    <entry><para>Drivers can enumerate up to 32 video and +audio inputs. This field shows which audio inputs were selectable as +audio source if this was the currently selected video input. It is a +bit mask. The LSB corresponds to audio input 0, the MSB to input 31. +Any number of bits can be set, or none.</para><para>When the driver +does not enumerate audio inputs no bits must be set. Applications +shall not interpret this as lack of audio support. Some drivers +automatically select audio sources and do not enumerate them since +there is no choice anyway.</para><para>For details on audio inputs and +how to select the current input see <xref +		  linkend="audio" />.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>tuner</structfield></entry> +	    <entry>Capture devices can have zero or more tuners (RF +demodulators). When the <structfield>type</structfield> is set to +<constant>V4L2_INPUT_TYPE_TUNER</constant> this is an RF connector and +this field identifies the tuner. It corresponds to +&v4l2-tuner; field <structfield>index</structfield>. For details on +tuners see <xref linkend="tuner" />.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-std-id;</entry> +	    <entry><structfield>std</structfield></entry> +	    <entry>Every video input supports one or more different +video standards. This field is a set of all supported standards. For +details on video standards and how to switch see <xref +linkend="standard" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>status</structfield></entry> +	    <entry>This field provides status information about the +input. See <xref linkend="input-status" /> for flags. +With the exception of the sensor orientation bits <structfield>status</structfield> is only valid when this is the +current input.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capabilities</structfield></entry> +	    <entry>This field provides capabilities for the +input. See <xref linkend="input-capabilities" /> for flags.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[3]</entry> +	    <entry>Reserved for future extensions. Drivers must set +the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="input-type"> +      <title>Input Types</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_INPUT_TYPE_TUNER</constant></entry> +	    <entry>1</entry> +	    <entry>This input uses a tuner (RF demodulator).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_INPUT_TYPE_CAMERA</constant></entry> +	    <entry>2</entry> +	    <entry>Analog baseband input, for example CVBS / +Composite Video, S-Video, RGB.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- Status flags based on proposal by Mark McClelland, +video4linux-list@redhat.com on 18 Oct 2002, subject "Re: [V4L] Re: +v4l2 api". "Why are some of them inverted? So that the driver doesn't +have to lie about the status in cases where it can't tell one way or +the other. Plus, a status of zero would generally mean that everything +is OK." --> + +    <table frame="none" pgwide="1" id="input-status"> +      <title>Input Status Flags</title> +      <tgroup cols="3"> +	<colspec colname="c1" /> +	<colspec colname="c2" align="center" /> +	<colspec colname="c3" /> +	<spanspec namest="c1" nameend="c3" spanname="hspan" +	  align="left" /> +	<tbody valign="top"> +	  <row> +	    <entry spanname="hspan">General</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_POWER</constant></entry> +	    <entry>0x00000001</entry> +	    <entry>Attached device is off.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_SIGNAL</constant></entry> +	    <entry>0x00000002</entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_COLOR</constant></entry> +	    <entry>0x00000004</entry> +	    <entry>The hardware supports color decoding, but does not +detect color modulation in the signal.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan">Sensor Orientation</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_HFLIP</constant></entry> +	    <entry>0x00000010</entry> +	    <entry>The input is connected to a device that produces a signal +that is flipped horizontally and does not correct this before passing the +signal to userspace.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_VFLIP</constant></entry> +	    <entry>0x00000020</entry> +	    <entry>The input is connected to a device that produces a signal +that is flipped vertically and does not correct this before passing the +signal to userspace. Note that a 180 degree rotation is the same as HFLIP | VFLIP</entry> +	  </row> +	  <row> +	    <entry spanname="hspan">Analog Video</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_H_LOCK</constant></entry> +	    <entry>0x00000100</entry> +	    <entry>No horizontal sync lock.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_COLOR_KILL</constant></entry> +	    <entry>0x00000200</entry> +	    <entry>A color killer circuit automatically disables color +decoding when it detects no color modulation. When this flag is set +the color killer is enabled <emphasis>and</emphasis> has shut off +color decoding.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan">Digital Video</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_SYNC</constant></entry> +	    <entry>0x00010000</entry> +	    <entry>No synchronization lock.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_EQU</constant></entry> +	    <entry>0x00020000</entry> +	    <entry>No equalizer lock.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_CARRIER</constant></entry> +	    <entry>0x00040000</entry> +	    <entry>Carrier recovery failed.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan">VCR and Set-Top Box</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_MACROVISION</constant></entry> +	    <entry>0x01000000</entry> +	    <entry>Macrovision is an analog copy prevention system +mangling the video signal to confuse video recorders. When this +flag is set Macrovision has been detected.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_NO_ACCESS</constant></entry> +	    <entry>0x02000000</entry> +	    <entry>Conditional access denied.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_ST_VTR</constant></entry> +	    <entry>0x04000000</entry> +	    <entry>VTR time constant. [?]</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- Capability flags based on video timings RFC by Muralidharan +Karicheri, titled RFC (v1.2): V4L - Support for video timings at the +input/output interface to linux-media@vger.kernel.org on 19 Oct 2009. +	--> +    <table frame="none" pgwide="1" id="input-capabilities"> +      <title>Input capabilities</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_IN_CAP_DV_TIMINGS</constant></entry> +	    <entry>0x00000002</entry> +	    <entry>This input supports setting video timings by using VIDIOC_S_DV_TIMINGS.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_IN_CAP_STD</constant></entry> +	    <entry>0x00000004</entry> +	    <entry>This input supports setting the TV standard by using VIDIOC_S_STD.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-input; <structfield>index</structfield> is +out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml b/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml new file mode 100644 index 00000000000..2654e097df3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml @@ -0,0 +1,193 @@ +<refentry id="vidioc-enumoutput"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUMOUTPUT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUMOUTPUT</refname> +    <refpurpose>Enumerate video outputs</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_output *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUMOUTPUT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of a video outputs applications +initialize the <structfield>index</structfield> field of &v4l2-output; +and call the <constant>VIDIOC_ENUMOUTPUT</constant> ioctl with a +pointer to this structure. Drivers fill the rest of the structure or +return an &EINVAL; when the index is out of bounds. To enumerate all +outputs applications shall begin at index zero, incrementing by one +until the driver returns <errorcode>EINVAL</errorcode>.</para> + +    <table frame="none" pgwide="1" id="v4l2-output"> +      <title>struct <structname>v4l2_output</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Identifies the output, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the video output, a NUL-terminated ASCII +string, for example: "Vout". This information is intended for the +user, preferably the connector label on the device itself.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the output, see <xref +		linkend="output-type" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>audioset</structfield></entry> +	    <entry><para>Drivers can enumerate up to 32 video and +audio outputs. This field shows which audio outputs were +selectable as the current output if this was the currently selected +video output. It is a bit mask. The LSB corresponds to audio output 0, +the MSB to output 31. Any number of bits can be set, or +none.</para><para>When the driver does not enumerate audio outputs no +bits must be set. Applications shall not interpret this as lack of +audio support. Drivers may automatically select audio outputs without +enumerating them.</para><para>For details on audio outputs and how to +select the current output see <xref linkend="audio" />.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>modulator</structfield></entry> +	    <entry>Output devices can have zero or more RF modulators. +When the <structfield>type</structfield> is +<constant>V4L2_OUTPUT_TYPE_MODULATOR</constant> this is an RF +connector and this field identifies the modulator. It corresponds to +&v4l2-modulator; field <structfield>index</structfield>. For details +on modulators see <xref linkend="tuner" />.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-std-id;</entry> +	    <entry><structfield>std</structfield></entry> +	    <entry>Every video output supports one or more different +video standards. This field is a set of all supported standards. For +details on video standards and how to switch see <xref +		linkend="standard" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capabilities</structfield></entry> +	    <entry>This field provides capabilities for the +output. See <xref linkend="output-capabilities" /> for flags.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[3]</entry> +	    <entry>Reserved for future extensions. Drivers must set +the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="output-type"> +      <title>Output Type</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_OUTPUT_TYPE_MODULATOR</constant></entry> +	    <entry>1</entry> +	    <entry>This output is an analog TV modulator.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_OUTPUT_TYPE_ANALOG</constant></entry> +	    <entry>2</entry> +	    <entry>Analog baseband output, for example Composite / +CVBS, S-Video, RGB.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY</constant></entry> +	    <entry>3</entry> +	    <entry>[?]</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- Capabilities flags based on video timings RFC by Muralidharan +Karicheri, titled RFC (v1.2): V4L - Support for video timings at the +input/output interface to linux-media@vger.kernel.org on 19 Oct 2009. +	--> +    <table frame="none" pgwide="1" id="output-capabilities"> +      <title>Output capabilities</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_OUT_CAP_DV_TIMINGS</constant></entry> +	    <entry>0x00000002</entry> +	    <entry>This output supports setting video timings by using VIDIOC_S_DV_TIMINGS.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_OUT_CAP_STD</constant></entry> +	    <entry>0x00000004</entry> +	    <entry>This output supports setting the TV standard by using VIDIOC_S_STD.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-output; <structfield>index</structfield> +is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-enumstd.xml b/Documentation/DocBook/media/v4l/vidioc-enumstd.xml new file mode 100644 index 00000000000..8065099401d --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-enumstd.xml @@ -0,0 +1,389 @@ +<refentry id="vidioc-enumstd"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_ENUMSTD</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_ENUMSTD</refname> +    <refpurpose>Enumerate supported video standards</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_standard *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_ENUMSTD</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of a video standard, +especially a custom (driver defined) one, applications initialize the +<structfield>index</structfield> field of &v4l2-standard; and call the +<constant>VIDIOC_ENUMSTD</constant> ioctl with a pointer to this +structure. Drivers fill the rest of the structure or return an +&EINVAL; when the index is out of bounds. To enumerate all standards +applications shall begin  at index zero, incrementing by one until the +driver returns <errorcode>EINVAL</errorcode>. Drivers may enumerate a +different set of standards after switching the video input or +output.<footnote> +	<para>The supported standards may overlap and we need an +unambiguous set to find the current standard returned by +<constant>VIDIOC_G_STD</constant>.</para> +      </footnote></para> + +    <table pgwide="1" frame="none" id="v4l2-standard"> +      <title>struct <structname>v4l2_standard</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the video standard, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-std-id;</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>The bits in this field identify the standard as +one of the common standards listed in <xref linkend="v4l2-std-id" />, +or if bits 32 to 63 are set as custom standards. Multiple bits can be +set if the hardware does not distinguish between these standards, +however separate indices do not indicate the opposite. The +<structfield>id</structfield> must be unique. No other enumerated +<structname>v4l2_standard</structname> structure, for this input or +output anyway, can contain the same set of bits.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[24]</entry> +	    <entry>Name of the standard, a NUL-terminated ASCII +string, for example: "PAL-B/G", "NTSC Japan". This information is +intended for the user.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>frameperiod</structfield></entry> +	    <entry>The frame period (not field period) is numerator +/ denominator. For example M/NTSC has a frame period of 1001 / +30000 seconds.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>framelines</structfield></entry> +	    <entry>Total lines per frame including blanking, +e. g. 625 for B/PAL.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry>Reserved for future extensions. Drivers must set +the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-fract"> +      <title>struct <structname>v4l2_fract</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>numerator</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>denominator</structfield></entry> +	    <entry></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-std-id"> +      <title>typedef <structname>v4l2_std_id</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>v4l2_std_id</structfield></entry> +	    <entry>This type is a set, each bit representing another +video standard as listed below and in <xref +linkend="video-standards" />. The 32 most significant bits are reserved +for custom (driver defined) video standards.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <para><programlisting> +#define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001) +#define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002) +#define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004) +#define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008) +#define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010) +#define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020) +#define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040) +#define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080) + +#define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100) +#define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200) +#define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400) +#define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800) +</programlisting></para><para><constant>V4L2_STD_PAL_60</constant> is +a hybrid standard with 525 lines, 60 Hz refresh rate, and PAL color +modulation with a 4.43 MHz color subcarrier. Some PAL video recorders +can play back NTSC tapes in this mode for display on a 50/60 Hz agnostic +PAL TV.</para><para><programlisting> +#define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000) +#define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000) +#define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000) +</programlisting></para><para><constant>V4L2_STD_NTSC_443</constant> +is a hybrid standard with 525 lines, 60 Hz refresh rate, and NTSC +color modulation with a 4.43 MHz color +subcarrier.</para><para><programlisting> +#define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000) + +#define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000) +#define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000) +#define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000) +#define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000) +#define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000) +#define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000) +#define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000) +#define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000) + +/* ATSC/HDTV */ +#define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000) +#define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000) +</programlisting></para><para><!-- ATSC proposal by Mark McClelland, +video4linux-list@redhat.com on 17 Oct 2002 +--><constant>V4L2_STD_ATSC_8_VSB</constant> and +<constant>V4L2_STD_ATSC_16_VSB</constant> are U.S. terrestrial digital +TV standards. Presently the V4L2 API does not support digital TV. See +also the Linux DVB API at <ulink +url="http://linuxtv.org">http://linuxtv.org</ulink>.</para> +<para><programlisting> +#define V4L2_STD_PAL_BG         (V4L2_STD_PAL_B         |\ +				 V4L2_STD_PAL_B1        |\ +				 V4L2_STD_PAL_G) +#define V4L2_STD_B              (V4L2_STD_PAL_B         |\ +				 V4L2_STD_PAL_B1        |\ +				 V4L2_STD_SECAM_B) +#define V4L2_STD_GH             (V4L2_STD_PAL_G         |\ +				 V4L2_STD_PAL_H         |\ +				 V4L2_STD_SECAM_G       |\ +				 V4L2_STD_SECAM_H) +#define V4L2_STD_PAL_DK         (V4L2_STD_PAL_D         |\ +				 V4L2_STD_PAL_D1        |\ +				 V4L2_STD_PAL_K) +#define V4L2_STD_PAL            (V4L2_STD_PAL_BG        |\ +				 V4L2_STD_PAL_DK        |\ +				 V4L2_STD_PAL_H         |\ +				 V4L2_STD_PAL_I) +#define V4L2_STD_NTSC           (V4L2_STD_NTSC_M        |\ +				 V4L2_STD_NTSC_M_JP     |\ +				 V4L2_STD_NTSC_M_KR) +#define V4L2_STD_MN             (V4L2_STD_PAL_M         |\ +				 V4L2_STD_PAL_N         |\ +				 V4L2_STD_PAL_Nc        |\ +				 V4L2_STD_NTSC) +#define V4L2_STD_SECAM_DK       (V4L2_STD_SECAM_D       |\ +				 V4L2_STD_SECAM_K       |\ +				 V4L2_STD_SECAM_K1) +#define V4L2_STD_DK             (V4L2_STD_PAL_DK        |\ +				 V4L2_STD_SECAM_DK) + +#define V4L2_STD_SECAM          (V4L2_STD_SECAM_B       |\ +				 V4L2_STD_SECAM_G       |\ +				 V4L2_STD_SECAM_H       |\ +				 V4L2_STD_SECAM_DK      |\ +				 V4L2_STD_SECAM_L       |\ +				 V4L2_STD_SECAM_LC) + +#define V4L2_STD_525_60         (V4L2_STD_PAL_M         |\ +				 V4L2_STD_PAL_60        |\ +				 V4L2_STD_NTSC          |\ +				 V4L2_STD_NTSC_443) +#define V4L2_STD_625_50         (V4L2_STD_PAL           |\ +				 V4L2_STD_PAL_N         |\ +				 V4L2_STD_PAL_Nc        |\ +				 V4L2_STD_SECAM) + +#define V4L2_STD_UNKNOWN        0 +#define V4L2_STD_ALL            (V4L2_STD_525_60        |\ +				 V4L2_STD_625_50) +</programlisting></para> + +    <table pgwide="1" id="video-standards" orient="land"> +      <title>Video Standards (based on [<xref linkend="itu470" />])</title> +      <tgroup cols="12" colsep="1" rowsep="1" align="center"> +	<colspec colname="c1" align="left" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<colspec colname="c5" /> +	<colspec colnum="7" colname="c7" /> +	<colspec colnum="9" colname="c9" /> +	<colspec colnum="12" colname="c12" /> +	<spanspec namest="c2" nameend="c3" spanname="m" align="center" /> +	<spanspec namest="c4" nameend="c12" spanname="x" align="center" /> +	<spanspec namest="c5" nameend="c7" spanname="b" align="center" /> +	<spanspec namest="c9" nameend="c12" spanname="s" align="center" /> +	<thead> +	  <row> +	    <entry>Characteristics</entry> +	    <entry><para>M/NTSC<footnote><para>Japan uses a standard +similar to M/NTSC +(V4L2_STD_NTSC_M_JP).</para></footnote></para></entry> +	    <entry>M/PAL</entry> +	    <entry><para>N/PAL<footnote><para> The values in +brackets apply to the combination N/PAL a.k.a. +N<subscript>C</subscript> used in Argentina +(V4L2_STD_PAL_Nc).</para></footnote></para></entry> +	    <entry align="center">B, B1, G/PAL</entry> +	    <entry align="center">D, D1, K/PAL</entry> +	    <entry align="center">H/PAL</entry> +	    <entry align="center">I/PAL</entry> +	    <entry align="center">B, G/SECAM</entry> +	    <entry align="center">D, K/SECAM</entry> +	    <entry align="center">K1/SECAM</entry> +	    <entry align="center">L/SECAM</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry>Frame lines</entry> +	    <entry spanname="m">525</entry> +	    <entry spanname="x">625</entry> +	  </row> +	  <row> +	    <entry>Frame period (s)</entry> +	    <entry spanname="m">1001/30000</entry> +	    <entry spanname="x">1/25</entry> +	  </row> +	  <row> +	    <entry>Chrominance sub-carrier frequency (Hz)</entry> +	    <entry>3579545 ± 10</entry> +	    <entry>3579611.49 ± 10</entry> +	    <entry>4433618.75 ± 5 (3582056.25 +± 5)</entry> +	    <entry spanname="b">4433618.75 ± 5</entry> +	    <entry>4433618.75 ± 1</entry> +	    <entry spanname="s">f<subscript>OR</subscript> = +4406250 ± 2000, f<subscript>OB</subscript> = 4250000 +± 2000</entry> +	  </row> +	  <row> +	    <entry>Nominal radio-frequency channel bandwidth +(MHz)</entry> +	    <entry>6</entry> +	    <entry>6</entry> +	    <entry>6</entry> +	    <entry>B: 7; B1, G: 8</entry> +	    <entry>8</entry> +	    <entry>8</entry> +	    <entry>8</entry> +	    <entry>8</entry> +	    <entry>8</entry> +	    <entry>8</entry> +	    <entry>8</entry> +	  </row> +	  <row> +	    <entry>Sound carrier relative to vision carrier +(MHz)</entry> +	    <entry>+ 4.5</entry> +	    <entry>+ 4.5</entry> +	    <entry>+ 4.5</entry> +	    <entry><para>+ 5.5 ± 0.001 +<footnote><para>In the Federal Republic of Germany, Austria, Italy, +the Netherlands, Slovakia and Switzerland a system of two sound +carriers is used, the frequency of the second carrier being +242.1875 kHz above the frequency of the first sound carrier. For +stereophonic sound transmissions a similar system is used in +Australia.</para></footnote> <footnote><para>New Zealand uses a sound +carrier displaced 5.4996 ± 0.0005 MHz from the vision +carrier.</para></footnote> <footnote><para>In Denmark, Finland, New +Zealand, Sweden and Spain a system of two sound carriers is used. In +Iceland, Norway and Poland the same system is being introduced. The +second carrier is 5.85 MHz above the vision carrier and is DQPSK +modulated with 728 kbit/s sound and data multiplex. (NICAM +system)</para></footnote> <footnote><para>In the United Kingdom, a +system of two sound carriers is used. The second sound carrier is +6.552 MHz above the vision carrier and is DQPSK modulated with a +728 kbit/s sound and data multiplex able to carry two sound +channels. (NICAM system)</para></footnote></para></entry> +	    <entry>+ 6.5 ± 0.001</entry> +	    <entry>+ 5.5</entry> +	    <entry>+ 5.9996 ± 0.0005</entry> +	    <entry>+ 5.5 ± 0.001</entry> +	    <entry>+ 6.5 ± 0.001</entry> +	    <entry>+ 6.5</entry> +	    <entry><para>+ 6.5 <footnote><para>In France, a +digital carrier 5.85 MHz away from the vision carrier may be used in +addition to the main sound carrier. It is modulated in differentially +encoded QPSK with a 728 kbit/s sound and data multiplexer capable of +carrying two sound channels. (NICAM +system)</para></footnote></para></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-standard; <structfield>index</structfield> +is out of bounds.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>Standard video timings are not supported for this input or output.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml new file mode 100644 index 00000000000..4165e7bfa4f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml @@ -0,0 +1,210 @@ +<refentry id="vidioc-expbuf"> + +  <refmeta> +    <refentrytitle>ioctl VIDIOC_EXPBUF</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_EXPBUF</refname> +    <refpurpose>Export a buffer as a DMABUF file descriptor.</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_exportbuffer *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_EXPBUF</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +<para>This ioctl is an extension to the <link linkend="mmap">memory +mapping</link> I/O method, therefore it is available only for +<constant>V4L2_MEMORY_MMAP</constant> buffers.  It can be used to export a +buffer as a DMABUF file at any time after buffers have been allocated with the +&VIDIOC-REQBUFS; ioctl.</para> + +<para> To export a buffer, applications fill &v4l2-exportbuffer;.  The +<structfield> type </structfield> field is set to the same buffer type as was +previously used with  &v4l2-requestbuffers;<structfield> type </structfield>. +Applications must also set the <structfield> index </structfield> field. Valid +index numbers range from zero to the number of buffers allocated with +&VIDIOC-REQBUFS; (&v4l2-requestbuffers;<structfield> count </structfield>) +minus one.  For the multi-planar API, applications set the <structfield> plane +</structfield> field to the index of the plane to be exported. Valid planes +range from zero to the maximal number of valid planes for the currently active +format. For the single-planar API, applications must set <structfield> plane +</structfield> to zero.  Additional flags may be posted in the <structfield> +flags </structfield> field.  Refer to a manual for open() for details. +Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, and O_RDWR are supported.  All +other fields must be set to zero. +In the case of multi-planar API, every plane is exported separately using +multiple <constant> VIDIOC_EXPBUF </constant> calls. </para> + +<para> After calling <constant>VIDIOC_EXPBUF</constant> the <structfield> fd +</structfield> field will be set by a driver.  This is a DMABUF file +descriptor. The application may pass it to other DMABUF-aware devices. Refer to +<link linkend="dmabuf">DMABUF importing</link> for details about importing +DMABUF files into V4L2 nodes. It is recommended to close a DMABUF file when it +is no longer used to allow the associated memory to be reclaimed. </para> +  </refsect1> + +  <refsect1> +    <title>Examples</title> + +    <example> +      <title>Exporting a buffer.</title> +      <programlisting> +int buffer_export(int v4lfd, &v4l2-buf-type; bt, int index, int *dmafd) +{ +	&v4l2-exportbuffer; expbuf; + +	memset(&expbuf, 0, sizeof(expbuf)); +	expbuf.type = bt; +	expbuf.index = index; +	if (ioctl(v4lfd, &VIDIOC-EXPBUF;, &expbuf) == -1) { +		perror("VIDIOC_EXPBUF"); +		return -1; +	} + +	*dmafd = expbuf.fd; + +	return 0; +} +      </programlisting> +    </example> + +    <example> +      <title>Exporting a buffer using the multi-planar API.</title> +      <programlisting> +int buffer_export_mp(int v4lfd, &v4l2-buf-type; bt, int index, +	int dmafd[], int n_planes) +{ +	int i; + +	for (i = 0; i < n_planes; ++i) { +		&v4l2-exportbuffer; expbuf; + +		memset(&expbuf, 0, sizeof(expbuf)); +		expbuf.type = bt; +		expbuf.index = index; +		expbuf.plane = i; +		if (ioctl(v4lfd, &VIDIOC-EXPBUF;, &expbuf) == -1) { +			perror("VIDIOC_EXPBUF"); +			while (i) +				close(dmafd[--i]); +			return -1; +		} +		dmafd[i] = expbuf.fd; +	} + +	return 0; +} +      </programlisting> +    </example> + +    <table pgwide="1" frame="none" id="v4l2-exportbuffer"> +      <title>struct <structname>v4l2_exportbuffer</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the buffer, same as &v4l2-format; +<structfield>type</structfield> or &v4l2-requestbuffers; +<structfield>type</structfield>, set by the application. See <xref +linkend="v4l2-buf-type" /></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the buffer, set by the application. This field is +only used for <link linkend="mmap">memory mapping</link> I/O and can range from +zero to the number of buffers allocated with the &VIDIOC-REQBUFS; and/or +&VIDIOC-CREATE-BUFS; ioctls. </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>plane</structfield></entry> +	    <entry>Index of the plane to be exported when using the +multi-planar API. Otherwise this value must be set to zero. </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Flags for the newly created file, currently only <constant> +O_CLOEXEC </constant>, <constant>O_RDONLY</constant>, <constant>O_WRONLY +</constant>, and <constant>O_RDWR</constant> are supported, refer to the manual +of open() for more details.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>fd</structfield></entry> +	    <entry>The DMABUF file descriptor associated with a buffer. Set by +		the driver.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved[11]</structfield></entry> +	    <entry>Reserved field for future use. Must be set to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> + +  <refsect1> +    &return-value; +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>A queue is not in MMAP mode or DMABUF exporting is not +supported or <structfield> flags </structfield> or <structfield> type +</structfield> or <structfield> index </structfield> or <structfield> plane +</structfield> fields are invalid.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-audio.xml b/Documentation/DocBook/media/v4l/vidioc-g-audio.xml new file mode 100644 index 00000000000..d7bb9b3738f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-audio.xml @@ -0,0 +1,172 @@ +<refentry id="vidioc-g-audio"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_AUDIO, VIDIOC_S_AUDIO</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_AUDIO</refname> +    <refname>VIDIOC_S_AUDIO</refname> +    <refpurpose>Query or select the current audio input and its +attributes</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_audio *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_audio *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_AUDIO, VIDIOC_S_AUDIO</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the current audio input applications zero out the +<structfield>reserved</structfield> array of a &v4l2-audio; +and call the <constant>VIDIOC_G_AUDIO</constant> ioctl with a pointer +to this structure. Drivers fill the rest of the structure or return an +&EINVAL; when the device has no audio inputs, or none which combine +with the current video input.</para> + +    <para>Audio inputs have one writable property, the audio mode. To +select the current audio input <emphasis>and</emphasis> change the +audio mode, applications initialize the +<structfield>index</structfield> and <structfield>mode</structfield> +fields, and the +<structfield>reserved</structfield> array of a +<structname>v4l2_audio</structname> structure and call the +<constant>VIDIOC_S_AUDIO</constant> ioctl. Drivers may switch to a +different audio mode if the request cannot be satisfied. However, this +is a write-only ioctl, it does not return the actual new audio +mode.</para> + +    <table pgwide="1" frame="none" id="v4l2-audio"> +      <title>struct <structname>v4l2_audio</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Identifies the audio input, set by the +driver or application.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the audio input, a NUL-terminated ASCII +string, for example: "Line In". This information is intended for the +user, preferably the connector label on the device itself.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry>Audio capability flags, see <xref +		linkend="audio-capability" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>mode</structfield></entry> +	    <entry>Audio mode flags set by drivers and applications (on +	    <constant>VIDIOC_S_AUDIO</constant> ioctl), see <xref linkend="audio-mode" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="audio-capability"> +      <title>Audio Capability Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_AUDCAP_STEREO</constant></entry> +	    <entry>0x00001</entry> +	    <entry>This is a stereo input. The flag is intended to +automatically disable stereo recording etc. when the signal is always +monaural. The API provides no means to detect if stereo is +<emphasis>received</emphasis>, unless the audio input belongs to a +tuner.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_AUDCAP_AVL</constant></entry> +	    <entry>0x00002</entry> +	    <entry>Automatic Volume Level mode is supported.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="audio-mode"> +      <title>Audio Mode Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_AUDMODE_AVL</constant></entry> +	    <entry>0x00001</entry> +	    <entry>AVL mode is on.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>No audio inputs combine with the current video input, +or the number of the selected audio input is out of bounds or it does +not combine.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml b/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml new file mode 100644 index 00000000000..200a2704a97 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml @@ -0,0 +1,138 @@ +<refentry id="vidioc-g-audioout"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_AUDOUT, VIDIOC_S_AUDOUT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_AUDOUT</refname> +    <refname>VIDIOC_S_AUDOUT</refname> +    <refpurpose>Query or select the current audio output</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_audioout *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_audioout *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_AUDOUT, VIDIOC_S_AUDOUT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the current audio output applications zero out the +<structfield>reserved</structfield> array of a &v4l2-audioout; and +call the <constant>VIDIOC_G_AUDOUT</constant> ioctl with a pointer +to this structure. Drivers fill the rest of the structure or return an +&EINVAL; when the device has no audio inputs, or none which combine +with the current video output.</para> + +    <para>Audio outputs have no writable properties. Nevertheless, to +select the current audio output applications can initialize the +<structfield>index</structfield> field and +<structfield>reserved</structfield> array (which in the future may +contain writable properties) of a +<structname>v4l2_audioout</structname> structure and call the +<constant>VIDIOC_S_AUDOUT</constant> ioctl. Drivers switch to the +requested output or return the &EINVAL; when the index is out of +bounds. This is a write-only ioctl, it does not return the current +audio output attributes as <constant>VIDIOC_G_AUDOUT</constant> +does.</para> + +    <para>Note connectors on a TV card to loop back the received audio +signal to a sound card are not audio outputs in this sense.</para> + +    <table pgwide="1" frame="none" id="v4l2-audioout"> +      <title>struct <structname>v4l2_audioout</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Identifies the audio output, set by the +driver or application.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the audio output, a NUL-terminated ASCII +string, for example: "Line Out". This information is intended for the +user, preferably the connector label on the device itself.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry>Audio capability flags, none defined yet. Drivers +must set this field to zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>mode</structfield></entry> +	    <entry>Audio mode, none defined yet. Drivers and +applications (on <constant>VIDIOC_S_AUDOUT</constant>) must set this +field to zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>No audio outputs combine with the current video +output, or the number of the selected audio output is out of bounds or +it does not combine.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-crop.xml b/Documentation/DocBook/media/v4l/vidioc-g-crop.xml new file mode 100644 index 00000000000..75c6a93de3c --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-crop.xml @@ -0,0 +1,124 @@ +<refentry id="vidioc-g-crop"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_CROP, VIDIOC_S_CROP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_CROP</refname> +    <refname>VIDIOC_S_CROP</refname> +    <refpurpose>Get or set the current cropping rectangle</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_crop *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_crop *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_CROP, VIDIOC_S_CROP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the cropping rectangle size and position +applications set the <structfield>type</structfield> field of a +<structname>v4l2_crop</structname> structure to the respective buffer +(stream) type and call the <constant>VIDIOC_G_CROP</constant> ioctl +with a pointer to this structure. The driver fills the rest of the +structure or returns the &EINVAL; if cropping is not supported.</para> + +    <para>To change the cropping rectangle applications initialize the +<structfield>type</structfield> and &v4l2-rect; substructure named +<structfield>c</structfield> of a v4l2_crop structure and call the +<constant>VIDIOC_S_CROP</constant> ioctl with a pointer to this +structure.</para> + +    <para>The driver first adjusts the requested dimensions against +hardware limits, &ie; the bounds given by the capture/output window, +and it rounds to the closest possible values of horizontal and +vertical offset, width and height. In particular the driver must round +the vertical offset of the cropping rectangle to frame lines modulo +two, such that the field order cannot be confused.</para> + +    <para>Second the driver adjusts the image size (the opposite +rectangle of the scaling process, source or target depending on the +data direction) to the closest size possible while maintaining the +current horizontal and vertical scaling factor.</para> + +    <para>Finally the driver programs the hardware with the actual +cropping and image parameters. <constant>VIDIOC_S_CROP</constant> is a +write-only ioctl, it does not return the actual parameters. To query +them applications must call <constant>VIDIOC_G_CROP</constant> and +&VIDIOC-G-FMT;. When the parameters are unsuitable the application may +modify the cropping or image parameters and repeat the cycle until +satisfactory parameters have been negotiated.</para> + +    <para>When cropping is not supported then no parameters are +changed and <constant>VIDIOC_S_CROP</constant> returns the +&EINVAL;.</para> + +    <table pgwide="1" frame="none" id="v4l2-crop"> +      <title>struct <structname>v4l2_crop</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the data stream, set by the application. +Only these types are valid here: <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> and +<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>. See <xref linkend="v4l2-buf-type" />.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-rect;</entry> +	    <entry><structfield>c</structfield></entry> +	    <entry>Cropping rectangle. The same co-ordinate system as +for &v4l2-cropcap; <structfield>bounds</structfield> is used.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml b/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml new file mode 100644 index 00000000000..ee2820d6ca6 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml @@ -0,0 +1,133 @@ +<refentry id="vidioc-g-ctrl"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_CTRL, VIDIOC_S_CTRL</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_CTRL</refname> +    <refname>VIDIOC_S_CTRL</refname> +    <refpurpose>Get or set the value of a control</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_control +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_CTRL, VIDIOC_S_CTRL</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To get the current value of a control applications +initialize the <structfield>id</structfield> field of a struct +<structname>v4l2_control</structname> and call the +<constant>VIDIOC_G_CTRL</constant> ioctl with a pointer to this +structure. To change the value of a control applications initialize +the <structfield>id</structfield> and <structfield>value</structfield> +fields of a struct <structname>v4l2_control</structname> and call the +<constant>VIDIOC_S_CTRL</constant> ioctl.</para> + +    <para>When the <structfield>id</structfield> is invalid drivers +return an &EINVAL;. When the <structfield>value</structfield> is out +of bounds drivers can choose to take the closest valid value or return +an &ERANGE;, whatever seems more appropriate. However, +<constant>VIDIOC_S_CTRL</constant> is a write-only ioctl, it does not +return the actual new value. If the <structfield>value</structfield> +is inappropriate for the control (e.g. if it refers to an unsupported +menu index of a menu control), then &EINVAL; is returned as well.</para> + +    <para>These ioctls work only with user controls. For other +control classes the &VIDIOC-G-EXT-CTRLS;, &VIDIOC-S-EXT-CTRLS; or +&VIDIOC-TRY-EXT-CTRLS; must be used.</para> + +    <table pgwide="1" frame="none" id="v4l2-control"> +      <title>struct <structname>v4l2_control</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>Identifies the control, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>value</structfield></entry> +	    <entry>New value or current value.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-control; <structfield>id</structfield> is +invalid or the <structfield>value</structfield> is inappropriate for +the given control (i.e. if a menu item is selected that is not supported +by the driver according to &VIDIOC-QUERYMENU;).</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ERANGE</errorcode></term> +	<listitem> +	  <para>The &v4l2-control; <structfield>value</structfield> +is out of bounds.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The control is temporarily not changeable, possibly +because another applications took over control of the device function +this control belongs to.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EACCES</errorcode></term> +	<listitem> +	  <para>Attempt to set a read-only control or to get a +	  write-only control.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml b/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml new file mode 100644 index 00000000000..c4336577ff0 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml @@ -0,0 +1,331 @@ +<refentry id="vidioc-g-dv-timings"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_DV_TIMINGS, VIDIOC_S_DV_TIMINGS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_DV_TIMINGS</refname> +    <refname>VIDIOC_S_DV_TIMINGS</refname> +    <refpurpose>Get or set DV timings for input or output</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_dv_timings *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_DV_TIMINGS, VIDIOC_S_DV_TIMINGS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> +    <para>To set DV timings for the input or output, applications use the +<constant>VIDIOC_S_DV_TIMINGS</constant> ioctl and to get the current timings, +applications use the <constant>VIDIOC_G_DV_TIMINGS</constant> ioctl. The detailed timing +information is filled in using the structure &v4l2-dv-timings;. These ioctls take +a pointer to the &v4l2-dv-timings; structure as argument. If the ioctl is not supported +or the timing values are not correct, the driver returns &EINVAL;.</para> +<para>The <filename>linux/v4l2-dv-timings.h</filename> header can be used to get the +timings of the formats in the <xref linkend="cea861" /> and <xref linkend="vesadmt" /> +standards. If the current input or output does not support DV timings (e.g. if +&VIDIOC-ENUMINPUT; does not set the <constant>V4L2_IN_CAP_DV_TIMINGS</constant> flag), then +&ENODATA; is returned.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>This ioctl is not supported, or the +<constant>VIDIOC_S_DV_TIMINGS</constant> parameter was unsuitable.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>Digital video timings are not supported for this input or output.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The device is busy and therefore can not change the timings.</para> +	</listitem> +      </varlistentry> +    </variablelist> + +    <table pgwide="1" frame="none" id="v4l2-bt-timings"> +      <title>struct <structname>v4l2_bt_timings</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry>Width of the active video in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry>Height of the active video frame in lines. So for interlaced formats the +	    height of the active video in each field is <structfield>height</structfield>/2.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>interlaced</structfield></entry> +	    <entry>Progressive (0) or interlaced (1)</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>polarities</structfield></entry> +	    <entry>This is a bit mask that defines polarities of sync signals. +bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_HSYNC_POS_POL) is for horizontal sync polarity. If the bit is set +(1) it is positive polarity and if is cleared (0), it is negative polarity.</entry> +	  </row> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>pixelclock</structfield></entry> +	    <entry>Pixel clock in Hz. Ex. 74.25MHz->74250000</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>hfrontporch</structfield></entry> +	    <entry>Horizontal front porch in pixels</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>hsync</structfield></entry> +	    <entry>Horizontal sync length in pixels</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>hbackporch</structfield></entry> +	    <entry>Horizontal back porch in pixels</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>vfrontporch</structfield></entry> +	    <entry>Vertical front porch in lines. For interlaced formats this refers to the +	    odd field (aka field 1).</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>vsync</structfield></entry> +	    <entry>Vertical sync length in lines. For interlaced formats this refers to the +	    odd field (aka field 1).</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>vbackporch</structfield></entry> +	    <entry>Vertical back porch in lines. For interlaced formats this refers to the +	    odd field (aka field 1).</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>il_vfrontporch</structfield></entry> +	    <entry>Vertical front porch in lines for the even field (aka field 2) of +	    interlaced field formats. Must be 0 for progressive formats.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>il_vsync</structfield></entry> +	    <entry>Vertical sync length in lines for the even field (aka field 2) of +	    interlaced field formats. Must be 0 for progressive formats.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>il_vbackporch</structfield></entry> +	    <entry>Vertical back porch in lines for the even field (aka field 2) of +	    interlaced field formats. Must be 0 for progressive formats.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>standards</structfield></entry> +	    <entry>The video standard(s) this format belongs to. This will be filled in by +	    the driver. Applications must set this to 0. See <xref linkend="dv-bt-standards"/> +	    for a list of standards.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Several flags giving more information about the format. +	    See <xref linkend="dv-bt-flags"/> for a description of the flags. +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-dv-timings"> +      <title>struct <structname>v4l2_dv_timings</structname></title> +      <tgroup cols="4"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>Type of DV timings as listed in <xref linkend="dv-timing-types"/>.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield></structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-bt-timings;</entry> +	    <entry><structfield>bt</structfield></entry> +	    <entry>Timings defined by BT.656/1120 specifications</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[32]</entry> +	    <entry></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="dv-timing-types"> +      <title>DV Timing types</title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>Timing type</entry> +	    <entry>value</entry> +	    <entry>Description</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_656_1120</entry> +	    <entry>0</entry> +	    <entry>BT.656/1120 timings</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +    <table pgwide="1" frame="none" id="dv-bt-standards"> +      <title>DV BT Timing standards</title> +      <tgroup cols="2"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>Timing standard</entry> +	    <entry>Description</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_STD_CEA861</entry> +	    <entry>The timings follow the CEA-861 Digital TV Profile standard</entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_STD_DMT</entry> +	    <entry>The timings follow the VESA Discrete Monitor Timings standard</entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_STD_CVT</entry> +	    <entry>The timings follow the VESA Coordinated Video Timings standard</entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_BT_STD_GTF</entry> +	    <entry>The timings follow the VESA Generalized Timings Formula standard</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +    <table pgwide="1" frame="none" id="dv-bt-flags"> +      <title>DV BT Timing flags</title> +      <tgroup cols="2"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>Flag</entry> +	    <entry>Description</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_FL_REDUCED_BLANKING</entry> +	    <entry>CVT/GTF specific: the timings use reduced blanking (CVT) or the 'Secondary +GTF' curve (GTF). In both cases the horizontal and/or vertical blanking +intervals are reduced, allowing a higher resolution over the same +bandwidth. This is a read-only flag, applications must not set this. +	    </entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_FL_CAN_REDUCE_FPS</entry> +	    <entry>CEA-861 specific: set for CEA-861 formats with a framerate that is a multiple +of six. These formats can be optionally played at 1 / 1.001 speed to +be compatible with 60 Hz based standards such as NTSC and PAL-M that use a framerate of +29.97 frames per second. If the transmitter can't generate such frequencies, then the +flag will also be cleared. This is a read-only flag, applications must not set this. +	    </entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_FL_REDUCED_FPS</entry> +	    <entry>CEA-861 specific: only valid for video transmitters, the flag is cleared +by receivers. It is also only valid for formats with the V4L2_DV_FL_CAN_REDUCE_FPS flag +set, for other formats the flag will be cleared by the driver. + +If the application sets this flag, then the pixelclock used to set up the transmitter is +divided by 1.001 to make it compatible with NTSC framerates. If the transmitter +can't generate such frequencies, then the flag will also be cleared. +	    </entry> +	  </row> +	  <row> +	    <entry>V4L2_DV_FL_HALF_LINE</entry> +	    <entry>Specific to interlaced formats: if set, then field 1 (aka the odd field) +is really one half-line longer and field 2 (aka the even field) is really one half-line +shorter, so each field has exactly the same number of half-lines. Whether half-lines can be +detected or used depends on the hardware. +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-edid.xml b/Documentation/DocBook/media/v4l/vidioc-g-edid.xml new file mode 100644 index 00000000000..ce4563b8713 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-edid.xml @@ -0,0 +1,162 @@ +<refentry id="vidioc-g-edid"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_EDID, VIDIOC_S_EDID</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_EDID</refname> +    <refname>VIDIOC_S_EDID</refname> +    <refpurpose>Get or set the EDID of a video receiver/transmitter</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_edid *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_edid *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_EDID, VIDIOC_S_EDID</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> +    <para>These ioctls can be used to get or set an EDID associated with an input +    from a receiver or an output of a transmitter device. They can be +    used with subdevice nodes (/dev/v4l-subdevX) or with video nodes (/dev/videoX).</para> + +    <para>When used with video nodes the <structfield>pad</structfield> field represents the +    input (for video capture devices) or output (for video output devices) index as +    is returned by &VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; respectively. When used +    with subdevice nodes the <structfield>pad</structfield> field represents the +    input or output pad of the subdevice. If there is no EDID support for the given +    <structfield>pad</structfield> value, then the &EINVAL; will be returned.</para> + +    <para>To get the EDID data the application has to fill in the <structfield>pad</structfield>, +    <structfield>start_block</structfield>, <structfield>blocks</structfield> and <structfield>edid</structfield> +    fields and call <constant>VIDIOC_G_EDID</constant>. The current EDID from block +    <structfield>start_block</structfield> and of size <structfield>blocks</structfield> +    will be placed in the memory <structfield>edid</structfield> points to. The <structfield>edid</structfield> +    pointer must point to memory at least <structfield>blocks</structfield> * 128 bytes +    large (the size of one block is 128 bytes).</para> + +    <para>If there are fewer blocks than specified, then the driver will set <structfield>blocks</structfield> +    to the actual number of blocks. If there are no EDID blocks available at all, then the error code +    ENODATA is set.</para> + +    <para>If blocks have to be retrieved from the sink, then this call will block until they +    have been read.</para> + +    <para>To set the EDID blocks of a receiver the application has to fill in the <structfield>pad</structfield>, +    <structfield>blocks</structfield> and <structfield>edid</structfield> fields and set +    <structfield>start_block</structfield> to 0. It is not possible to set part of an EDID, +    it is always all or nothing. Setting the EDID data is only valid for receivers as it makes +    no sense for a transmitter.</para> + +    <para>The driver assumes that the full EDID is passed in. If there are more EDID blocks than +    the hardware can handle then the EDID is not written, but instead the error code E2BIG is set +    and <structfield>blocks</structfield> is set to the maximum that the hardware supports. +    If <structfield>start_block</structfield> is any +    value other than 0 then the error code EINVAL is set.</para> + +    <para>To disable an EDID you set <structfield>blocks</structfield> to 0. Depending on the +    hardware this will drive the hotplug pin low and/or block the source from reading the EDID +    data in some way. In any case, the end result is the same: the EDID is no longer available. +    </para> + +    <table pgwide="1" frame="none" id="v4l2-edid"> +      <title>struct <structname>v4l2_edid</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad for which to get/set the EDID blocks. When used with a video device +	    node the pad represents the input or output index as returned by +	    &VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; respectively.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>start_block</structfield></entry> +	    <entry>Read the EDID from starting with this block. Must be 0 when setting +	    the EDID.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>blocks</structfield></entry> +	    <entry>The number of blocks to get or set. Must be less or equal to 256 (the +	    maximum number of blocks as defined by the standard). When you set the EDID and +	    <structfield>blocks</structfield> is 0, then the EDID is disabled or erased.</entry> +	  </row> +	  <row> +	    <entry>__u8 *</entry> +	    <entry><structfield>edid</structfield></entry> +	    <entry>Pointer to memory that contains the EDID. The minimum size is +	    <structfield>blocks</structfield> * 128.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[5]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>The EDID data is not available.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>E2BIG</errorcode></term> +	<listitem> +	  <para>The EDID data you provided is more than the hardware can handle.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml b/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml new file mode 100644 index 00000000000..be25029a16f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml @@ -0,0 +1,189 @@ +<refentry id="vidioc-g-enc-index"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_ENC_INDEX</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_ENC_INDEX</refname> +    <refpurpose>Get meta data about a compressed video stream</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_enc_idx *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_ENC_INDEX</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>The <constant>VIDIOC_G_ENC_INDEX</constant> ioctl provides +meta data about a compressed video stream the same or another +application currently reads from the driver, which is useful for +random access into the stream without decoding it.</para> + +    <para>To read the data applications must call +<constant>VIDIOC_G_ENC_INDEX</constant> with a pointer to a +&v4l2-enc-idx;. On success the driver fills the +<structfield>entry</structfield> array, stores the number of elements +written in the <structfield>entries</structfield> field, and +initializes the <structfield>entries_cap</structfield> field.</para> + +    <para>Each element of the <structfield>entry</structfield> array +contains meta data about one picture. A +<constant>VIDIOC_G_ENC_INDEX</constant> call reads up to +<constant>V4L2_ENC_IDX_ENTRIES</constant> entries from a driver +buffer, which can hold up to <structfield>entries_cap</structfield> +entries. This number can be lower or higher than +<constant>V4L2_ENC_IDX_ENTRIES</constant>, but not zero. When the +application fails to read the meta data in time the oldest entries +will be lost. When the buffer is empty or no capturing/encoding is in +progress, <structfield>entries</structfield> will be zero.</para> + +    <para>Currently this ioctl is only defined for MPEG-2 program +streams and video elementary streams.</para> + +    <table pgwide="1" frame="none" id="v4l2-enc-idx"> +      <title>struct <structname>v4l2_enc_idx</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>entries</structfield></entry> +	    <entry>The number of entries the driver stored in the +<structfield>entry</structfield> array.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>entries_cap</structfield></entry> +	    <entry>The number of entries the driver can +buffer. Must be greater than zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry spanname="hspan">Reserved for future extensions. +Drivers must set the array to zero.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-enc-idx-entry;</entry> +	    <entry><structfield>entry</structfield>[<constant>V4L2_ENC_IDX_ENTRIES</constant>]</entry> +	    <entry>Meta data about a compressed video stream. Each +element of the array corresponds to one picture, sorted in ascending +order by their <structfield>offset</structfield>.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-enc-idx-entry"> +      <title>struct <structname>v4l2_enc_idx_entry</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>offset</structfield></entry> +	    <entry>The offset in bytes from the beginning of the +compressed video stream to the beginning of this picture, that is a +<wordasword>PES packet header</wordasword> as defined in <xref +	    linkend="mpeg2part1" /> or a <wordasword>picture +header</wordasword> as defined in <xref linkend="mpeg2part2" />. When +the encoder is stopped, the driver resets the offset to zero.</entry> +	  </row> +	  <row> +	    <entry>__u64</entry> +	    <entry><structfield>pts</structfield></entry> +	    <entry>The 33 bit <wordasword>Presentation Time +Stamp</wordasword> of this picture as defined in <xref +		linkend="mpeg2part1" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>length</structfield></entry> +	    <entry>The length of this picture in bytes.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Flags containing the coding type of this picture, see <xref +		linkend="enc-idx-flags" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. +Drivers must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="enc-idx-flags"> +      <title>Index Entry Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_ENC_IDX_FRAME_I</constant></entry> +	    <entry>0x00</entry> +	    <entry>This is an Intra-coded picture.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_ENC_IDX_FRAME_P</constant></entry> +	    <entry>0x01</entry> +	    <entry>This is a Predictive-coded picture.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_ENC_IDX_FRAME_B</constant></entry> +	    <entry>0x02</entry> +	    <entry>This is a Bidirectionally predictive-coded +picture.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_ENC_IDX_FRAME_MASK</constant></entry> +	    <entry>0x0F</entry> +	    <entry><wordasword>AND</wordasword> the flags field with +this mask to obtain the picture coding type.</entry> +	  </row> +       </tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml new file mode 100644 index 00000000000..e9f6735c082 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml @@ -0,0 +1,392 @@ +<refentry id="vidioc-g-ext-ctrls"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, +VIDIOC_TRY_EXT_CTRLS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_EXT_CTRLS</refname> +    <refname>VIDIOC_S_EXT_CTRLS</refname> +    <refname>VIDIOC_TRY_EXT_CTRLS</refname> +    <refpurpose>Get or set the value of several controls, try control +values</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_ext_controls +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, +VIDIOC_TRY_EXT_CTRLS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>These ioctls allow the caller to get or set multiple +controls atomically. Control IDs are grouped into control classes (see +<xref linkend="ctrl-class" />) and all controls in the control array +must belong to the same control class.</para> + +    <para>Applications must always fill in the +<structfield>count</structfield>, +<structfield>ctrl_class</structfield>, +<structfield>controls</structfield> and +<structfield>reserved</structfield> fields of &v4l2-ext-controls;, and +initialize the &v4l2-ext-control; array pointed to by the +<structfield>controls</structfield> fields.</para> + +    <para>To get the current value of a set of controls applications +initialize the <structfield>id</structfield>, +<structfield>size</structfield> and <structfield>reserved2</structfield> fields +of each &v4l2-ext-control; and call the +<constant>VIDIOC_G_EXT_CTRLS</constant> ioctl. String controls controls +must also set the <structfield>string</structfield> field.</para> + +    <para>If the <structfield>size</structfield> is too small to +receive the control result (only relevant for pointer-type controls +like strings), then the driver will set <structfield>size</structfield> +to a valid value and return an &ENOSPC;. You should re-allocate the +string memory to this new size and try again. It is possible that the +same issue occurs again if the string has grown in the meantime. It is +recommended to call &VIDIOC-QUERYCTRL; first and use +<structfield>maximum</structfield>+1 as the new <structfield>size</structfield> +value. It is guaranteed that that is sufficient memory. +</para> + +    <para>To change the value of a set of controls applications +initialize the <structfield>id</structfield>, <structfield>size</structfield>, +<structfield>reserved2</structfield> and +<structfield>value/string</structfield> fields of each &v4l2-ext-control; and +call the <constant>VIDIOC_S_EXT_CTRLS</constant> ioctl. The controls +will only be set if <emphasis>all</emphasis> control values are +valid.</para> + +    <para>To check if a set of controls have correct values applications +initialize the <structfield>id</structfield>, <structfield>size</structfield>, +<structfield>reserved2</structfield> and +<structfield>value/string</structfield> fields of each &v4l2-ext-control; and +call the <constant>VIDIOC_TRY_EXT_CTRLS</constant> ioctl. It is up to +the driver whether wrong values are automatically adjusted to a valid +value or if an error is returned.</para> + +    <para>When the <structfield>id</structfield> or +<structfield>ctrl_class</structfield> is invalid drivers return an +&EINVAL;. When the value is out of bounds drivers can choose to take +the closest valid value or return an &ERANGE;, whatever seems more +appropriate. In the first case the new value is set in +&v4l2-ext-control;. If the new control value is inappropriate (e.g. the +given menu index is not supported by the menu control), then this will +also result in an &EINVAL; error.</para> + +    <para>The driver will only set/get these controls if all control +values are correct. This prevents the situation where only some of the +controls were set/get. Only low-level errors (⪚ a failed i2c +command) can still cause this situation.</para> + +    <table pgwide="1" frame="none" id="v4l2-ext-control"> +      <title>struct <structname>v4l2_ext_control</structname></title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry></entry> +	    <entry>Identifies the control, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>size</structfield></entry> +	    <entry></entry> +	    <entry>The total size in bytes of the payload of this +control. This is normally 0, but for pointer controls this should be +set to the size of the memory containing the payload, or that will +receive the payload. If <constant>VIDIOC_G_EXT_CTRLS</constant> finds +that this value is less than is required to store +the payload result, then it is set to a value large enough to store the +payload result and ENOSPC is returned. Note that for string controls +this <structfield>size</structfield> field should not be confused with the length of the string. +This field refers to the size of the memory that contains the string. +The actual <emphasis>length</emphasis> of the string may well be much smaller. +</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved2</structfield>[1]</entry> +	    <entry></entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry>(anonymous)</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__s32</entry> +	    <entry><structfield>value</structfield></entry> +	    <entry>New value or current value.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__s64</entry> +	    <entry><structfield>value64</structfield></entry> +	    <entry>New value or current value.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>char *</entry> +	    <entry><structfield>string</structfield></entry> +	    <entry>A pointer to a string.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-ext-controls"> +      <title>struct <structname>v4l2_ext_controls</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>ctrl_class</structfield></entry> +	    <entry>The control class to which all controls belong, see +<xref linkend="ctrl-class" />. Drivers that use a kernel framework for handling +controls will also accept a value of 0 here, meaning that the controls can +belong to any control class. Whether drivers support this can be tested by setting +<structfield>ctrl_class</structfield> to 0 and calling <constant>VIDIOC_TRY_EXT_CTRLS</constant> +with a <structfield>count</structfield> of 0. If that succeeds, then the driver +supports this feature.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>count</structfield></entry> +	    <entry>The number of controls in the controls array. May +also be zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>error_idx</structfield></entry> +	    <entry><para>Set by the driver in case of an error. If the error is +associated with a particular control, then <structfield>error_idx</structfield> +is set to the index of that control. If the error is not related to a specific +control, or the validation step failed (see below), then +<structfield>error_idx</structfield> is set to <structfield>count</structfield>. +The value is undefined if the ioctl returned 0 (success).</para> + +<para>Before controls are read from/written to hardware a validation step +takes place: this checks if all controls in the list are valid controls, +if no attempt is made to write to a read-only control or read from a write-only +control, and any other up-front checks that can be done without accessing the +hardware. The exact validations done during this step are driver dependent +since some checks might require hardware access for some devices, thus making +it impossible to do those checks up-front. However, drivers should make a +best-effort to do as many up-front checks as possible.</para> + +<para>This check is done to avoid leaving the hardware in an inconsistent state due +to easy-to-avoid problems. But it leads to another problem: the application needs to +know whether an error came from the validation step (meaning that the hardware +was not touched) or from an error during the actual reading from/writing to hardware.</para> + +<para>The, in hindsight quite poor, solution for that is to set <structfield>error_idx</structfield> +to <structfield>count</structfield> if the validation failed. This has the +unfortunate side-effect that it is not possible to see which control failed the +validation. If the validation was successful and the error happened while +accessing the hardware, then <structfield>error_idx</structfield> is less than +<structfield>count</structfield> and only the controls up to +<structfield>error_idx-1</structfield> were read or written correctly, and the +state of the remaining controls is undefined.</para> + +<para>Since <constant>VIDIOC_TRY_EXT_CTRLS</constant> does not access hardware +there is also no need to handle the validation step in this special way, +so <structfield>error_idx</structfield> will just be set to the control that +failed the validation step instead of to <structfield>count</structfield>. +This means that if <constant>VIDIOC_S_EXT_CTRLS</constant> fails with +<structfield>error_idx</structfield> set to <structfield>count</structfield>, +then you can call <constant>VIDIOC_TRY_EXT_CTRLS</constant> to try to discover +the actual control that failed the validation step. Unfortunately, there +is no <constant>TRY</constant> equivalent for <constant>VIDIOC_G_EXT_CTRLS</constant>. +</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-ext-control; *</entry> +	    <entry><structfield>controls</structfield></entry> +	    <entry>Pointer to an array of +<structfield>count</structfield> v4l2_ext_control structures. Ignored +if <structfield>count</structfield> equals zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="ctrl-class"> +      <title>Control classes</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_USER</constant></entry> +	    <entry>0x980000</entry> +	    <entry>The class containing user controls. These controls +are described in <xref linkend="control" />. All controls that can be set +using the &VIDIOC-S-CTRL; and &VIDIOC-G-CTRL; ioctl belong to this +class.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_MPEG</constant></entry> +	    <entry>0x990000</entry> +	    <entry>The class containing MPEG compression controls. +These controls are described in <xref +		linkend="mpeg-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_CAMERA</constant></entry> +	    <entry>0x9a0000</entry> +	    <entry>The class containing camera controls. +These controls are described in <xref +		linkend="camera-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_FM_TX</constant></entry> +	    <entry>0x9b0000</entry> +	    <entry>The class containing FM Transmitter (FM TX) controls. +These controls are described in <xref +		linkend="fm-tx-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_FLASH</constant></entry> +	    <entry>0x9c0000</entry> +	    <entry>The class containing flash device controls. +These controls are described in <xref +		linkend="flash-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_JPEG</constant></entry> +	    <entry>0x9d0000</entry> +	    <entry>The class containing JPEG compression controls. +These controls are described in <xref +		linkend="jpeg-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_IMAGE_SOURCE</constant></entry> +	    <entry>0x9e0000</entry> <entry>The class containing image +	    source controls. These controls are described in <xref +	    linkend="image-source-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_IMAGE_PROC</constant></entry> +	    <entry>0x9f0000</entry> <entry>The class containing image +	    processing controls. These controls are described in <xref +	    linkend="image-process-controls" />.</entry> +	  </row> + +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_FM_RX</constant></entry> +	    <entry>0xa10000</entry> +	    <entry>The class containing FM Receiver (FM RX) controls. +These controls are described in <xref +		linkend="fm-rx-controls" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_CLASS_RF_TUNER</constant></entry> +	    <entry>0xa20000</entry> +	    <entry>The class containing RF tuner controls. +These controls are described in <xref linkend="rf-tuner-controls" />.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-ext-control; <structfield>id</structfield> +is invalid, the &v4l2-ext-controls; +<structfield>ctrl_class</structfield> is invalid, or the &v4l2-ext-control; +<structfield>value</structfield> was inappropriate (e.g. the given menu +index is not supported by the driver). This error code is +also returned by the <constant>VIDIOC_S_EXT_CTRLS</constant> and +<constant>VIDIOC_TRY_EXT_CTRLS</constant> ioctls if two or more +control values are in conflict.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ERANGE</errorcode></term> +	<listitem> +	  <para>The &v4l2-ext-control; <structfield>value</structfield> +is out of bounds.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The control is temporarily not changeable, possibly +because another applications took over control of the device function +this control belongs to.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENOSPC</errorcode></term> +	<listitem> +	  <para>The space reserved for the control's payload is insufficient. +The field <structfield>size</structfield> is set to a value that is enough +to store the payload and this error code is returned.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EACCES</errorcode></term> +	<listitem> +	  <para>Attempt to try or set a read-only control or to get a +	  write-only control.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> + diff --git a/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml b/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml new file mode 100644 index 00000000000..7c63815e7af --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml @@ -0,0 +1,463 @@ +<refentry id="vidioc-g-fbuf"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_FBUF, VIDIOC_S_FBUF</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_FBUF</refname> +    <refname>VIDIOC_S_FBUF</refname> +    <refpurpose>Get or set frame buffer overlay parameters</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_framebuffer *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_framebuffer *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_FBUF, VIDIOC_S_FBUF</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Applications can use the <constant>VIDIOC_G_FBUF</constant> and +<constant>VIDIOC_S_FBUF</constant> ioctl to get and set the +framebuffer parameters for a <link linkend="overlay">Video +Overlay</link> or <link linkend="osd">Video Output Overlay</link> +(OSD). The type of overlay is implied by the device type (capture or +output device) and can be determined with the &VIDIOC-QUERYCAP; ioctl. +One <filename>/dev/videoN</filename> device must not support both +kinds of overlay.</para> + +    <para>The V4L2 API distinguishes destructive and non-destructive +overlays. A destructive overlay copies captured video images into the +video memory of a graphics card. A non-destructive overlay blends +video images into a VGA signal or graphics into a video signal. +<wordasword>Video Output Overlays</wordasword> are always +non-destructive.</para> + +    <para>To get the current parameters applications call the +<constant>VIDIOC_G_FBUF</constant> ioctl with a pointer to a +<structname>v4l2_framebuffer</structname> structure. The driver fills +all fields of the structure or returns an &EINVAL; when overlays are +not supported.</para> + +    <para>To set the parameters for a <wordasword>Video Output +Overlay</wordasword>, applications must initialize the +<structfield>flags</structfield> field of a struct +<structname>v4l2_framebuffer</structname>. Since the framebuffer is +implemented on the TV card all other parameters are determined by the +driver. When an application calls <constant>VIDIOC_S_FBUF</constant> +with a pointer to this structure, the driver prepares for the overlay +and returns the framebuffer parameters as +<constant>VIDIOC_G_FBUF</constant> does, or it returns an error +code.</para> + +    <para>To set the parameters for a <wordasword>non-destructive +Video Overlay</wordasword>, applications must initialize the +<structfield>flags</structfield> field, the +<structfield>fmt</structfield> substructure, and call +<constant>VIDIOC_S_FBUF</constant>. Again the driver prepares for the +overlay and returns the framebuffer parameters as +<constant>VIDIOC_G_FBUF</constant> does, or it returns an error +code.</para> + +    <para>For a <wordasword>destructive Video Overlay</wordasword> +applications must additionally provide a +<structfield>base</structfield> address. Setting up a DMA to a +random memory location can jeopardize the system security, its +stability or even damage the hardware, therefore only the superuser +can set the parameters for a destructive video overlay.</para> + +    <!-- NB v4l2_pix_format is also specified in pixfmt.sgml.--> + +    <table pgwide="1" frame="none" id="v4l2-framebuffer"> +      <title>struct <structname>v4l2_framebuffer</structname></title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry></entry> +	    <entry>Overlay capability flags set by the driver, see +<xref linkend="framebuffer-cap" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry></entry> +	    <entry>Overlay control flags set by application and +driver, see <xref linkend="framebuffer-flags" /></entry> +	  </row> +	  <row> +	    <entry>void *</entry> +	    <entry><structfield>base</structfield></entry> +	    <entry></entry> +	    <entry>Physical base address of the framebuffer, +that is the address of the pixel in the top left corner of the +framebuffer.<footnote><para>A physical base address may not suit all +platforms. GK notes in theory we should pass something like PCI device ++ memory region + offset instead. If you encounter problems please +discuss on the linux-media mailing list: &v4l-ml;.</para></footnote></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>This field is irrelevant to +<wordasword>non-destructive Video Overlays</wordasword>. For +<wordasword>destructive Video Overlays</wordasword> applications must +provide a base address. The driver may accept only base addresses +which are a multiple of two, four or eight bytes. For +<wordasword>Video Output Overlays</wordasword> the driver must return +a valid base address, so applications can find the corresponding Linux +framebuffer device (see <xref linkend="osd" />).</entry> +	  </row> +	  <row> +	    <entry>&v4l2-pix-format;</entry> +	    <entry><structfield>fmt</structfield></entry> +	    <entry></entry> +	    <entry>Layout of the frame buffer. The +<structname>v4l2_pix_format</structname> structure is defined in <xref +linkend="pixfmt" />, for clarification the fields and acceptable values +	    are listed below:</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry>Width of the frame buffer in pixels.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry>Height of the frame buffer in pixels.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>pixelformat</structfield></entry> +	    <entry>The pixel format of the +framebuffer.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>For <wordasword>non-destructive Video +Overlays</wordasword> this field only defines a format for the +&v4l2-window; <structfield>chromakey</structfield> field.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>For <wordasword>destructive Video +Overlays</wordasword> applications must initialize this field. For +<wordasword>Video Output Overlays</wordasword> the driver must return +a valid format.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	    <entry>Usually this is an RGB format (for example +<link linkend="V4L2-PIX-FMT-RGB565"><constant>V4L2_PIX_FMT_RGB565</constant></link>) +but YUV formats (only packed YUV formats when chroma keying is used, +not including <constant>V4L2_PIX_FMT_YUYV</constant> and +<constant>V4L2_PIX_FMT_UYVY</constant>) and the +<constant>V4L2_PIX_FMT_PAL8</constant> format are also permitted. The +behavior of the driver when an application requests a compressed +format is undefined. See <xref linkend="pixfmt" /> for information on +pixel formats.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-field;</entry> +	    <entry><structfield>field</structfield></entry> +	    <entry>Drivers and applications shall ignore this field. +If applicable, the field order is selected with the &VIDIOC-S-FMT; +ioctl, using the <structfield>field</structfield> field of +&v4l2-window;.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>bytesperline</structfield></entry> +	    <entry>Distance in bytes between the leftmost pixels in +two adjacent lines.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para>This field is irrelevant to +<wordasword>non-destructive Video +Overlays</wordasword>.</para><para>For <wordasword>destructive Video +Overlays</wordasword> both applications and drivers can set this field +to request padding bytes at the end of each line. Drivers however may +ignore the requested value, returning <structfield>width</structfield> +times bytes-per-pixel or a larger value required by the hardware. That +implies applications can just set this field to zero to get a +reasonable default.</para><para>For <wordasword>Video Output +Overlays</wordasword> the driver must return a valid +value.</para><para>Video hardware may access padding bytes, therefore +they must reside in accessible memory. Consider for example the case +where padding bytes after the last line of an image cross a system +page boundary. Capture devices may write padding bytes, the value is +undefined. Output devices ignore the contents of padding +bytes.</para><para>When the image format is planar the +<structfield>bytesperline</structfield> value applies to the largest +plane and is divided by the same factor as the +<structfield>width</structfield> field for any smaller planes. For +example the Cb and Cr planes of a YUV 4:2:0 image have half as many +padding bytes following each line as the Y plane. To avoid ambiguities +drivers must return a <structfield>bytesperline</structfield> value +rounded up to a multiple of the scale factor.</para></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>sizeimage</structfield></entry> +	    <entry><para>This field is irrelevant to +<wordasword>non-destructive Video Overlays</wordasword>. For +<wordasword>destructive Video Overlays</wordasword> applications must +initialize this field. For <wordasword>Video Output +Overlays</wordasword> the driver must return a valid +format.</para><para>Together with <structfield>base</structfield> it +defines the framebuffer memory accessible by the +driver.</para></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-colorspace;</entry> +	    <entry><structfield>colorspace</structfield></entry> +	    <entry>This information supplements the +<structfield>pixelformat</structfield> and must be set by the driver, +see <xref linkend="colorspaces" />.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u32</entry> +	    <entry><structfield>priv</structfield></entry> +	    <entry>Reserved for additional information about custom +(driver defined) formats. When not used drivers and applications must +set this field to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="framebuffer-cap"> +      <title>Frame Buffer Capability Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_EXTERNOVERLAY</constant></entry> +	    <entry>0x0001</entry> +	    <entry>The device is capable of non-destructive overlays. +When the driver clears this flag, only destructive overlays are +supported. There are no drivers yet which support both destructive and +non-destructive overlays. Video Output Overlays are in practice always +non-destructive.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_CHROMAKEY</constant></entry> +	    <entry>0x0002</entry> +	    <entry>The device supports clipping by chroma-keying the +images. That is, image pixels replace pixels in the VGA or video +signal only where the latter assume a certain color. Chroma-keying +makes no sense for destructive overlays.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_LIST_CLIPPING</constant></entry> +	    <entry>0x0004</entry> +	    <entry>The device supports clipping using a list of clip +rectangles.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_BITMAP_CLIPPING</constant></entry> +	    <entry>0x0008</entry> +	    <entry>The device supports clipping using a bit mask.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_LOCAL_ALPHA</constant></entry> +	    <entry>0x0010</entry> +	    <entry>The device supports clipping/blending using the +alpha channel of the framebuffer or VGA signal. Alpha blending makes +no sense for destructive overlays.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_GLOBAL_ALPHA</constant></entry> +	    <entry>0x0020</entry> +	    <entry>The device supports alpha blending using a global +alpha value. Alpha blending makes no sense for destructive overlays.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_LOCAL_INV_ALPHA</constant></entry> +	    <entry>0x0040</entry> +	    <entry>The device supports clipping/blending using the +inverted alpha channel of the framebuffer or VGA signal. Alpha +blending makes no sense for destructive overlays.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_CAP_SRC_CHROMAKEY</constant></entry> +	    <entry>0x0080</entry> +	    <entry>The device supports Source Chroma-keying. Video pixels +with the chroma-key colors are replaced by framebuffer pixels, which is exactly opposite of +<constant>V4L2_FBUF_CAP_CHROMAKEY</constant></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="framebuffer-flags"> +      <title>Frame Buffer Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_PRIMARY</constant></entry> +	    <entry>0x0001</entry> +	    <entry>The framebuffer is the primary graphics surface. +In other words, the overlay is destructive. This flag is typically set by any +driver that doesn't have the <constant>V4L2_FBUF_CAP_EXTERNOVERLAY</constant> +capability and it is cleared otherwise.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_OVERLAY</constant></entry> +	    <entry>0x0002</entry> +	    <entry>If this flag is set for a video capture device, then the +driver will set the initial overlay size to cover the full framebuffer size, +otherwise the existing overlay size (as set by &VIDIOC-S-FMT;) will be used. + +Only one video capture driver (bttv) supports this flag. The use of this flag +for capture devices is deprecated. There is no way to detect which drivers +support this flag, so the only reliable method of setting the overlay size is +through &VIDIOC-S-FMT;. + +If this flag is set for a video output device, then the video output overlay +window is relative to the top-left corner of the framebuffer and restricted +to the size of the framebuffer. If it is cleared, then the video output +overlay window is relative to the video output display. +            </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_CHROMAKEY</constant></entry> +	    <entry>0x0004</entry> +	    <entry>Use chroma-keying. The chroma-key color is +determined by the <structfield>chromakey</structfield> field of +&v4l2-window; and negotiated with the &VIDIOC-S-FMT; ioctl, see <xref +		linkend="overlay" /> +and +	    <xref linkend="osd" />.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan">There are no flags to enable +clipping using a list of clip rectangles or a bitmap. These methods +are negotiated with the &VIDIOC-S-FMT; ioctl, see <xref +		linkend="overlay" /> and <xref linkend="osd" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_LOCAL_ALPHA</constant></entry> +	    <entry>0x0008</entry> +	    <entry>Use the alpha channel of the framebuffer to clip or +blend framebuffer pixels with video images. The blend +function is: output = framebuffer pixel * alpha + video pixel * (1 - +alpha). The actual alpha depth depends on the framebuffer pixel +format.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_GLOBAL_ALPHA</constant></entry> +	    <entry>0x0010</entry> +	    <entry>Use a global alpha value to blend the framebuffer +with video images. The blend function is: output = (framebuffer pixel +* alpha + video pixel * (255 - alpha)) / 255. The alpha value is +determined by the <structfield>global_alpha</structfield> field of +&v4l2-window; and negotiated with the &VIDIOC-S-FMT; ioctl, see <xref +		linkend="overlay" /> +and <xref linkend="osd" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_LOCAL_INV_ALPHA</constant></entry> +	    <entry>0x0020</entry> +	    <entry>Like +<constant>V4L2_FBUF_FLAG_LOCAL_ALPHA</constant>, use the alpha channel +of the framebuffer to clip or blend framebuffer pixels with video +images, but with an inverted alpha value. The blend function is: +output = framebuffer pixel * (1 - alpha) + video pixel * alpha. The +actual alpha depth depends on the framebuffer pixel format.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_FBUF_FLAG_SRC_CHROMAKEY</constant></entry> +	    <entry>0x0040</entry> +	    <entry>Use source chroma-keying. The source chroma-key color is +determined by the <structfield>chromakey</structfield> field of +&v4l2-window; and negotiated with the &VIDIOC-S-FMT; ioctl, see <xref +linkend="overlay" /> and <xref linkend="osd" />. +Both chroma-keying are mutual exclusive to each other, so same +<structfield>chromakey</structfield> field of &v4l2-window; is being used.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EPERM</errorcode></term> +	<listitem> +	  <para><constant>VIDIOC_S_FBUF</constant> can only be called +by a privileged user to negotiate the parameters for a destructive +overlay.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <constant>VIDIOC_S_FBUF</constant> parameters are unsuitable.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml new file mode 100644 index 00000000000..4fe19a7a9a3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml @@ -0,0 +1,204 @@ +<refentry id="vidioc-g-fmt"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, +VIDIOC_TRY_FMT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_FMT</refname> +    <refname>VIDIOC_S_FMT</refname> +    <refname>VIDIOC_TRY_FMT</refname> +    <refpurpose>Get or set the data format, try a format</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_format +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>These ioctls are used to negotiate the format of data +(typically image format) exchanged between driver and +application.</para> + +    <para>To query the current parameters applications set the +<structfield>type</structfield> field of a struct +<structname>v4l2_format</structname> to the respective buffer (stream) +type. For example video capture devices use +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>. When the application +calls the <constant>VIDIOC_G_FMT</constant> ioctl with a pointer to +this structure the driver fills the respective member of the +<structfield>fmt</structfield> union. In case of video capture devices +that is either the &v4l2-pix-format; <structfield>pix</structfield> or +the &v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member. +When the requested buffer type is not supported drivers return an +&EINVAL;.</para> + +    <para>To change the current format parameters applications +initialize the <structfield>type</structfield> field and all +fields of the respective <structfield>fmt</structfield> +union member. For details see the documentation of the various devices +types in <xref linkend="devices" />. Good practice is to query the +current parameters first, and to +modify only those parameters not suitable for the application. When +the application calls the <constant>VIDIOC_S_FMT</constant> ioctl +with a pointer to a <structname>v4l2_format</structname> structure +the driver checks +and adjusts the parameters against hardware abilities. Drivers +should not return an error code unless the <structfield>type</structfield> field is invalid, this is +a mechanism to fathom device capabilities and to approach parameters +acceptable for both the application and driver. On success the driver +may program the hardware, allocate resources and generally prepare for +data exchange. +Finally the <constant>VIDIOC_S_FMT</constant> ioctl returns the +current format parameters as <constant>VIDIOC_G_FMT</constant> does. +Very simple, inflexible devices may even ignore all input and always +return the default parameters. However all V4L2 devices exchanging +data with the application must implement the +<constant>VIDIOC_G_FMT</constant> and +<constant>VIDIOC_S_FMT</constant> ioctl. When the requested buffer +type is not supported drivers return an &EINVAL; on a +<constant>VIDIOC_S_FMT</constant> attempt. When I/O is already in +progress or the resource is not available for other reasons drivers +return the &EBUSY;.</para> + +    <para>The <constant>VIDIOC_TRY_FMT</constant> ioctl is equivalent +to <constant>VIDIOC_S_FMT</constant> with one exception: it does not +change driver state. It can also be called at any time, never +returning <errorcode>EBUSY</errorcode>. This function is provided to +negotiate parameters, to learn about hardware limitations, without +disabling I/O or possibly time consuming hardware preparations. +Although strongly recommended drivers are not required to implement +this ioctl.</para> + +    <para>The format as returned by <constant>VIDIOC_TRY_FMT</constant> +must be identical to what <constant>VIDIOC_S_FMT</constant> returns for +the same input or output.</para> + +    <table pgwide="1" frame="none" id="v4l2-format"> +      <title>struct <structname>v4l2_format</structname></title> +      <tgroup cols="4"> +	<colspec colname="c1" /> +	<colspec colname="c2" /> +	<colspec colname="c3" /> +	<colspec colname="c4" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>Type of the data stream, see <xref +		linkend="v4l2-buf-type" />.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield>fmt</structfield></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-pix-format;</entry> +	    <entry><structfield>pix</structfield></entry> +	    <entry>Definition of an image format, see <xref +		linkend="pixfmt" />, used by video capture and output +devices.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-pix-format-mplane;</entry> +	    <entry><structfield>pix_mp</structfield></entry> +	    <entry>Definition of an image format, see <xref +		linkend="pixfmt" />, used by video capture and output +devices that support the <link linkend="planar-apis">multi-planar +version of the API</link>.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-window;</entry> +	    <entry><structfield>win</structfield></entry> +	    <entry>Definition of an overlaid image, see <xref +	    linkend="overlay" />, used by video overlay devices.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-vbi-format;</entry> +	    <entry><structfield>vbi</structfield></entry> +	    <entry>Raw VBI capture or output parameters. This is +discussed in more detail in <xref linkend="raw-vbi" />. Used by raw VBI +capture and output devices.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-sliced-vbi-format;</entry> +	    <entry><structfield>sliced</structfield></entry> +	    <entry>Sliced VBI capture or output parameters. See +<xref linkend="sliced" /> for details. Used by sliced VBI +capture and output devices.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-sdr-format;</entry> +	    <entry><structfield>sdr</structfield></entry> +	    <entry>Definition of a data format, see +<xref linkend="pixfmt" />, used by SDR capture devices.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u8</entry> +	    <entry><structfield>raw_data</structfield>[200]</entry> +	    <entry>Place holder for future extensions.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-format; <structfield>type</structfield> +field is invalid or the requested buffer type not supported.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml b/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml new file mode 100644 index 00000000000..d1034fb61d1 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml @@ -0,0 +1,148 @@ +<refentry id="vidioc-g-frequency"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_FREQUENCY, VIDIOC_S_FREQUENCY</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_FREQUENCY</refname> +    <refname>VIDIOC_S_FREQUENCY</refname> +    <refpurpose>Get or set tuner or modulator radio +frequency</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_frequency +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_frequency +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_FREQUENCY, VIDIOC_S_FREQUENCY</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To get the current tuner or modulator radio frequency +applications set the <structfield>tuner</structfield> field of a +&v4l2-frequency; to the respective tuner or modulator number (only +input devices have tuners, only output devices have modulators), zero +out the <structfield>reserved</structfield> array and +call the <constant>VIDIOC_G_FREQUENCY</constant> ioctl with a pointer +to this structure. The driver stores the current frequency in the +<structfield>frequency</structfield> field.</para> + +    <para>To change the current tuner or modulator radio frequency +applications initialize the <structfield>tuner</structfield>, +<structfield>type</structfield> and +<structfield>frequency</structfield> fields, and the +<structfield>reserved</structfield> array of a &v4l2-frequency; and +call the <constant>VIDIOC_S_FREQUENCY</constant> ioctl with a pointer +to this structure. When the requested frequency is not possible the +driver assumes the closest possible value. However +<constant>VIDIOC_S_FREQUENCY</constant> is a write-only ioctl, it does +not return the actual new frequency.</para> + +    <table pgwide="1" frame="none" id="v4l2-frequency"> +      <title>struct <structname>v4l2_frequency</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>tuner</structfield></entry> +	    <entry>The tuner or modulator index number. This is the +same value as in the &v4l2-input; <structfield>tuner</structfield> +field and the &v4l2-tuner; <structfield>index</structfield> field, or +the &v4l2-output; <structfield>modulator</structfield> field and the +&v4l2-modulator; <structfield>index</structfield> field.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>The tuner type. This is the same value as in the +&v4l2-tuner; <structfield>type</structfield> field. The type must be set +to <constant>V4L2_TUNER_RADIO</constant> for <filename>/dev/radioX</filename> +device nodes, and to <constant>V4L2_TUNER_ANALOG_TV</constant> +for all others. Set this field to <constant>V4L2_TUNER_RADIO</constant> for +modulators (currently only radio modulators are supported). +See <xref linkend="v4l2-tuner-type" /></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>frequency</structfield></entry> +	    <entry>Tuning frequency in units of 62.5 kHz, or if the +&v4l2-tuner; or &v4l2-modulator; <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz. A 1 Hz unit is used when the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[8]</entry> +	    <entry>Reserved for future extensions. Drivers and +	    applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <structfield>tuner</structfield> index is out of +bounds or the value in the <structfield>type</structfield> field is +wrong.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>A hardware seek is in progress.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-input.xml b/Documentation/DocBook/media/v4l/vidioc-g-input.xml new file mode 100644 index 00000000000..1d43065090d --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-input.xml @@ -0,0 +1,83 @@ +<refentry id="vidioc-g-input"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_INPUT, VIDIOC_S_INPUT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_INPUT</refname> +    <refname>VIDIOC_S_INPUT</refname> +    <refpurpose>Query or select the current video input</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>int *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_INPUT, VIDIOC_S_INPUT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the current video input applications call the +<constant>VIDIOC_G_INPUT</constant> ioctl with a pointer to an integer +where the driver stores the number of the input, as in the +&v4l2-input; <structfield>index</structfield> field. This ioctl will +fail only when there are no video inputs, returning +<errorcode>EINVAL</errorcode>.</para> + +    <para>To select a video input applications store the number of the +desired input in an integer and call the +<constant>VIDIOC_S_INPUT</constant> ioctl with a pointer to this +integer. Side effects are possible. For example inputs may support +different video standards, so the driver may implicitly switch the +current standard. Because of these possible side effects applications +must select an input before querying or negotiating any other parameters.</para> + +    <para>Information about video inputs is available using the +&VIDIOC-ENUMINPUT; ioctl.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The number of the video input is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml b/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml new file mode 100644 index 00000000000..098ff483802 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml @@ -0,0 +1,175 @@ +<refentry id="vidioc-g-jpegcomp"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_JPEGCOMP</refname> +    <refname>VIDIOC_S_JPEGCOMP</refname> +    <refpurpose></refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>v4l2_jpegcompression *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const v4l2_jpegcompression *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>These ioctls are <emphasis role="bold">deprecated</emphasis>. +    New drivers and applications should use <link linkend="jpeg-controls"> +    JPEG class controls</link> for image quality and JPEG markers control. +    </para> + +    <para>[to do]</para> + +    <para>Ronald Bultje elaborates:</para> + +    <!-- See video4linux-list@redhat.com on 16 Oct 2002, subject +"Re: [V4L] Re: v4l2 api / Zoran v4l2_jpegcompression" --> + +    <para>APP is some application-specific information. The +application can set it itself, and it'll be stored in the JPEG-encoded +fields (eg; interlacing information for in an AVI or so). COM is the +same, but it's comments, like 'encoded by me' or so.</para> + +    <para>jpeg_markers describes whether the huffman tables, +quantization tables and the restart interval information (all +JPEG-specific stuff) should be stored in the JPEG-encoded fields. +These define how the JPEG field is encoded. If you omit them, +applications assume you've used standard encoding. You usually do want +to add them.</para> + +    <!-- NB VIDIOC_S_JPEGCOMP is w/o. --> + +    <table pgwide="1" frame="none" id="v4l2-jpegcompression"> +      <title>struct <structname>v4l2_jpegcompression</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>int</entry> +	    <entry><structfield>quality</structfield></entry> +	    <entry>Deprecated. If <link linkend="jpeg-quality-control"><constant> +	    V4L2_CID_JPEG_COMPRESSION_QUALITY</constant></link> control is exposed +	    by a driver applications should use it instead and ignore this field. +	    </entry> +	  </row> +	  <row> +	    <entry>int</entry> +	    <entry><structfield>APPn</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>int</entry> +	    <entry><structfield>APP_len</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>APP_data</structfield>[60]</entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>int</entry> +	    <entry><structfield>COM_len</structfield></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>char</entry> +	    <entry><structfield>COM_data</structfield>[60]</entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>jpeg_markers</structfield></entry> +	    <entry>See <xref linkend="jpeg-markers"/>. Deprecated. +	    If <link linkend="jpeg-active-marker-control"><constant> +	    V4L2_CID_JPEG_ACTIVE_MARKER</constant></link> control +	    is exposed by a driver applications should use it instead +	    and ignore this field.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="jpeg-markers"> +      <title>JPEG Markers Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_JPEG_MARKER_DHT</constant></entry> +	    <entry>(1<<3)</entry> +	    <entry>Define Huffman Tables</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_JPEG_MARKER_DQT</constant></entry> +	    <entry>(1<<4)</entry> +	    <entry>Define Quantization Tables</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_JPEG_MARKER_DRI</constant></entry> +	    <entry>(1<<5)</entry> +	    <entry>Define Restart Interval</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_JPEG_MARKER_COM</constant></entry> +	    <entry>(1<<6)</entry> +	    <entry>Comment segment</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_JPEG_MARKER_APP</constant></entry> +	    <entry>(1<<7)</entry> +	    <entry>App segment, driver will always use APP0</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml b/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml new file mode 100644 index 00000000000..7068b599a00 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml @@ -0,0 +1,240 @@ +<refentry id="vidioc-g-modulator"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_MODULATOR, VIDIOC_S_MODULATOR</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_MODULATOR</refname> +    <refname>VIDIOC_S_MODULATOR</refname> +    <refpurpose>Get or set modulator attributes</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_modulator +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_modulator +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_MODULATOR, VIDIOC_S_MODULATOR</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of a modulator applications initialize +the <structfield>index</structfield> field and zero out the +<structfield>reserved</structfield> array of a &v4l2-modulator; and +call the <constant>VIDIOC_G_MODULATOR</constant> ioctl with a pointer +to this structure. Drivers fill the rest of the structure or return an +&EINVAL; when the index is out of bounds. To enumerate all modulators +applications shall begin at index zero, incrementing by one until the +driver returns <errorcode>EINVAL</errorcode>.</para> + +    <para>Modulators have two writable properties, an audio +modulation set and the radio frequency. To change the modulated audio +subprograms, applications initialize the <structfield>index +</structfield> and <structfield>txsubchans</structfield> fields and the +<structfield>reserved</structfield> array and call the +<constant>VIDIOC_S_MODULATOR</constant> ioctl. Drivers may choose a +different audio modulation if the request cannot be satisfied. However +this is a write-only ioctl, it does not return the actual audio +modulation selected.</para> + +    <para>To change the radio frequency the &VIDIOC-S-FREQUENCY; ioctl +is available.</para> + +    <table pgwide="1" frame="none" id="v4l2-modulator"> +      <title>struct <structname>v4l2_modulator</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Identifies the modulator, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the modulator, a NUL-terminated ASCII +string. This information is intended for the user.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry>Modulator capability flags. No flags are defined +for this field, the tuner flags in &v4l2-tuner; +are used accordingly. The audio flags indicate the ability +to encode audio subprograms. They will <emphasis>not</emphasis> +change for example with the current video standard.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangelow</structfield></entry> +	    <entry>The lowest tunable frequency in units of 62.5 +KHz, or if the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz, or if the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangehigh</structfield></entry> +	    <entry>The highest tunable frequency in units of 62.5 +KHz, or if the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz, or if the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>txsubchans</structfield></entry> +	    <entry>With this field applications can determine how +audio sub-carriers shall be modulated. It contains a set of flags as +defined in <xref linkend="modulator-txsubchans" />. Note the tuner +<structfield>rxsubchans</structfield> flags are reused, but the +semantics are different. Video output devices are assumed to have an +analog or PCM audio input with 1-3 channels. The +<structfield>txsubchans</structfield> flags select one or more +channels for modulation, together with some audio subprogram +indicator, for example a stereo pilot tone.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="modulator-txsubchans"> +      <title>Modulator Audio Transmission Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_MONO</constant></entry> +	    <entry>0x0001</entry> +	    <entry>Modulate channel 1 as mono audio, when the input +has more channels, a down-mix of channel 1 and 2. This flag does not +combine with <constant>V4L2_TUNER_SUB_STEREO</constant> or +<constant>V4L2_TUNER_SUB_LANG1</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_STEREO</constant></entry> +	    <entry>0x0002</entry> +	    <entry>Modulate channel 1 and 2 as left and right +channel of a stereo audio signal. When the input has only one channel +or two channels and <constant>V4L2_TUNER_SUB_SAP</constant> is also +set, channel 1 is encoded as left and right channel. This flag does +not combine with <constant>V4L2_TUNER_SUB_MONO</constant> or +<constant>V4L2_TUNER_SUB_LANG1</constant>. When the driver does not +support stereo audio it shall fall back to mono.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_LANG1</constant></entry> +	    <entry>0x0008</entry> +	    <entry>Modulate channel 1 and 2 as primary and secondary +language of a bilingual audio signal. When the input has only one +channel it is used for both languages. It is not possible to encode +the primary or secondary language only. This flag does not combine +with <constant>V4L2_TUNER_SUB_MONO</constant>, +<constant>V4L2_TUNER_SUB_STEREO</constant> or +<constant>V4L2_TUNER_SUB_SAP</constant>. If the hardware does not +support the respective audio matrix, or the current video standard +does not permit bilingual audio the +<constant>VIDIOC_S_MODULATOR</constant> ioctl shall return an &EINVAL; +and the driver shall fall back to mono or stereo mode.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_LANG2</constant></entry> +	    <entry>0x0004</entry> +	    <entry>Same effect as +<constant>V4L2_TUNER_SUB_SAP</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_SAP</constant></entry> +	    <entry>0x0004</entry> +	    <entry>When combined with <constant>V4L2_TUNER_SUB_MONO +</constant> the first channel is encoded as mono audio, the last +channel as Second Audio Program. When the input has only one channel +it is used for both audio tracks. When the input has three channels +the mono track is a down-mix of channel 1 and 2. When combined with +<constant>V4L2_TUNER_SUB_STEREO</constant> channel 1 and 2 are +encoded as left and right stereo audio, channel 3 as Second Audio +Program. When the input has only two channels, the first is encoded as +left and right channel and the second as SAP. When the input has only +one channel it is used for all audio tracks. It is not possible to +encode a Second Audio Program only. This flag must combine with +<constant>V4L2_TUNER_SUB_MONO</constant> or +<constant>V4L2_TUNER_SUB_STEREO</constant>. If the hardware does not +support the respective audio matrix, or the current video standard +does not permit SAP the <constant>VIDIOC_S_MODULATOR</constant> ioctl +shall return an &EINVAL; and driver shall fall back to mono or stereo +mode.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_RDS</constant></entry> +	    <entry>0x0010</entry> +	    <entry>Enable the RDS encoder for a radio FM transmitter.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-modulator; +<structfield>index</structfield> is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-output.xml b/Documentation/DocBook/media/v4l/vidioc-g-output.xml new file mode 100644 index 00000000000..4533068ecb8 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-output.xml @@ -0,0 +1,85 @@ +<refentry id="vidioc-g-output"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_OUTPUT, VIDIOC_S_OUTPUT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_OUTPUT</refname> +    <refname>VIDIOC_S_OUTPUT</refname> +    <refpurpose>Query or select the current video output</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>int *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_OUTPUT, VIDIOC_S_OUTPUT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the current video output applications call the +<constant>VIDIOC_G_OUTPUT</constant> ioctl with a pointer to an integer +where the driver stores the number of the output, as in the +&v4l2-output; <structfield>index</structfield> field. This ioctl +will fail only when there are no video outputs, returning the +&EINVAL;.</para> + +    <para>To select a video output applications store the number of the +desired output in an integer and call the +<constant>VIDIOC_S_OUTPUT</constant> ioctl with a pointer to this integer. +Side effects are possible. For example outputs may support different +video standards, so the driver may implicitly switch the current +standard. +standard. Because of these possible side effects applications +must select an output before querying or negotiating any other parameters.</para> + +    <para>Information about video outputs is available using the +&VIDIOC-ENUMOUTPUT; ioctl.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The number of the video output is out of bounds, or +there are no video outputs at all.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-parm.xml b/Documentation/DocBook/media/v4l/vidioc-g-parm.xml new file mode 100644 index 00000000000..f4e28e7d475 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-parm.xml @@ -0,0 +1,314 @@ +<refentry id="vidioc-g-parm"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_PARM, VIDIOC_S_PARM</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_PARM</refname> +    <refname>VIDIOC_S_PARM</refname> +    <refpurpose>Get or set streaming parameters</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>v4l2_streamparm *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_PARM, VIDIOC_S_PARM</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>The current video standard determines a nominal number of +frames per second. If less than this number of frames is to be +captured or output, applications can request frame skipping or +duplicating on the driver side. This is especially useful when using +the <function>read()</function> or <function>write()</function>, which +are not augmented by timestamps or sequence counters, and to avoid +unnecessary data copying.</para> + +    <para>Further these ioctls can be used to determine the number of +buffers used internally by a driver in read/write mode. For +implications see the section discussing the &func-read; +function.</para> + +    <para>To get and set the streaming parameters applications call +the <constant>VIDIOC_G_PARM</constant> and +<constant>VIDIOC_S_PARM</constant> ioctl, respectively. They take a +pointer to a struct <structname>v4l2_streamparm</structname> which +contains a union holding separate parameters for input and output +devices.</para> + +    <table pgwide="1" frame="none" id="v4l2-streamparm"> +      <title>struct <structname>v4l2_streamparm</structname></title> +      <tgroup cols="4"> +	&cs-ustr; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry></entry> +	    <entry>The buffer (stream) type, same as &v4l2-format; +<structfield>type</structfield>, set by the application. See <xref +	    linkend="v4l2-buf-type" /></entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry><structfield>parm</structfield></entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-captureparm;</entry> +	    <entry><structfield>capture</structfield></entry> +	    <entry>Parameters for capture devices, used when +<structfield>type</structfield> is +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>&v4l2-outputparm;</entry> +	    <entry><structfield>output</structfield></entry> +	    <entry>Parameters for output devices, used when +<structfield>type</structfield> is +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u8</entry> +	    <entry><structfield>raw_data</structfield>[200]</entry> +	    <entry>A place holder for future extensions.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-captureparm"> +      <title>struct <structname>v4l2_captureparm</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry>See <xref linkend="parm-caps" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capturemode</structfield></entry> +	    <entry>Set by drivers and applications, see <xref linkend="parm-flags" />.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>timeperframe</structfield></entry> +	    <entry><para>This is the desired period between +successive frames captured by the driver, in seconds. The +field is intended to skip frames on the driver side, saving I/O +bandwidth.</para><para>Applications store here the desired frame +period, drivers return the actual frame period, which must be greater +or equal to the nominal frame period determined by the current video +standard (&v4l2-standard; <structfield>frameperiod</structfield> +field). Changing the video standard (also implicitly by switching the +video input) may reset this parameter to the nominal frame period. To +reset manually applications can just set this field to +zero.</para><para>Drivers support this function only when they set the +<constant>V4L2_CAP_TIMEPERFRAME</constant> flag in the +<structfield>capability</structfield> field.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>extendedmode</structfield></entry> +	    <entry>Custom (driver specific) streaming parameters. When +unused, applications and drivers must set this field to zero. +Applications using this field should check the driver name and +version, see <xref linkend="querycap" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>readbuffers</structfield></entry> +	    <entry>Applications set this field to the desired number +of buffers used internally by the driver in &func-read; mode. Drivers +return the actual number of buffers. When an application requests zero +buffers, drivers should just return the current setting rather than +the minimum or an error code. For details see <xref +		linkend="rw" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-outputparm"> +      <title>struct <structname>v4l2_outputparm</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry>See <xref linkend="parm-caps" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>outputmode</structfield></entry> +	    <entry>Set by drivers and applications, see <xref +	    linkend="parm-flags" />.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>timeperframe</structfield></entry> +	    <entry>This is the desired period between +successive frames output by the driver, in seconds.</entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para>The field is intended to +repeat frames on the driver side in &func-write; mode (in streaming +mode timestamps can be used to throttle the output), saving I/O +bandwidth.</para><para>Applications store here the desired frame +period, drivers return the actual frame period, which must be greater +or equal to the nominal frame period determined by the current video +standard (&v4l2-standard; <structfield>frameperiod</structfield> +field). Changing the video standard (also implicitly by switching the +video output) may reset this parameter to the nominal frame period. To +reset manually applications can just set this field to +zero.</para><para>Drivers support this function only when they set the +<constant>V4L2_CAP_TIMEPERFRAME</constant> flag in the +<structfield>capability</structfield> field.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>extendedmode</structfield></entry> +	    <entry>Custom (driver specific) streaming parameters. When +unused, applications and drivers must set this field to zero. +Applications using this field should check the driver name and +version, see <xref linkend="querycap" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>writebuffers</structfield></entry> +	    <entry>Applications set this field to the desired number +of buffers used internally by the driver in +<function>write()</function> mode. Drivers return the actual number of +buffers. When an application requests zero buffers, drivers should +just return the current setting rather than the minimum or an error +code. For details see <xref linkend="rw" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="parm-caps"> +      <title>Streaming Parameters Capabilites</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CAP_TIMEPERFRAME</constant></entry> +	    <entry>0x1000</entry> +	    <entry>The frame skipping/repeating controlled by the +<structfield>timeperframe</structfield> field is supported.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="parm-flags"> +      <title>Capture Parameters Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_MODE_HIGHQUALITY</constant></entry> +	    <entry>0x0001</entry> +	    <entry><para>High quality imaging mode. High quality mode +is intended for still imaging applications. The idea is to get the +best possible image quality that the hardware can deliver. It is not +defined how the driver writer may achieve that; it will depend on the +hardware and the ingenuity of the driver writer. High quality mode is +a different mode from the the regular motion video capture modes. In +high quality mode:<itemizedlist> +		  <listitem> +		    <para>The driver may be able to capture higher +resolutions than for motion capture.</para> +		  </listitem> +		  <listitem> +		    <para>The driver may support fewer pixel formats +than motion capture (eg; true color).</para> +		  </listitem> +		  <listitem> +		    <para>The driver may capture and arithmetically +combine multiple successive fields or frames to remove color edge +artifacts and reduce the noise in the video data. +</para> +		  </listitem> +		  <listitem> +		    <para>The driver may capture images in slices like +a scanner in order to handle larger format images than would otherwise +be possible. </para> +		  </listitem> +		  <listitem> +		    <para>An image capture operation may be +significantly slower than motion capture. </para> +		  </listitem> +		  <listitem> +		    <para>Moving objects in the image might have +excessive motion blur. </para> +		  </listitem> +		  <listitem> +		    <para>Capture might only work through the +<function>read()</function> call.</para> +		  </listitem> +		</itemizedlist></para></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-priority.xml b/Documentation/DocBook/media/v4l/vidioc-g-priority.xml new file mode 100644 index 00000000000..6a81b4fe953 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-priority.xml @@ -0,0 +1,135 @@ +<refentry id="vidioc-g-priority"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_PRIORITY, VIDIOC_S_PRIORITY</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_PRIORITY</refname> +    <refname>VIDIOC_S_PRIORITY</refname> +    <refpurpose>Query or request the access priority associated with a +file descriptor</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>enum v4l2_priority *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const enum v4l2_priority *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_PRIORITY, VIDIOC_S_PRIORITY</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para>Pointer to an enum v4l2_priority type.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the current access priority +applications call the <constant>VIDIOC_G_PRIORITY</constant> ioctl +with a pointer to an enum v4l2_priority variable where the driver stores +the current priority.</para> + +    <para>To request an access priority applications store the +desired priority in an enum v4l2_priority variable and call +<constant>VIDIOC_S_PRIORITY</constant> ioctl with a pointer to this +variable.</para> + +    <table frame="none" pgwide="1" id="v4l2-priority"> +      <title>enum v4l2_priority</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_PRIORITY_UNSET</constant></entry> +	    <entry>0</entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_PRIORITY_BACKGROUND</constant></entry> +	    <entry>1</entry> +	    <entry>Lowest priority, usually applications running in +background, for example monitoring VBI transmissions. A proxy +application running in user space will be necessary if multiple +applications want to read from a device at this priority.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_PRIORITY_INTERACTIVE</constant></entry> +	    <entry>2</entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_PRIORITY_DEFAULT</constant></entry> +	    <entry>2</entry> +	    <entry>Medium priority, usually applications started and +interactively controlled by the user. For example TV viewers, Teletext +browsers, or just "panel" applications to change the channel or video +controls. This is the default priority unless an application requests +another.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_PRIORITY_RECORD</constant></entry> +	    <entry>3</entry> +	    <entry>Highest priority. Only one file descriptor can have +this priority, it blocks any other fd from changing device properties. +Usually applications which must not be interrupted, like video +recording.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The requested priority value is invalid.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>Another application already requested higher +priority.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-selection.xml b/Documentation/DocBook/media/v4l/vidioc-g-selection.xml new file mode 100644 index 00000000000..b11ec75e21a --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-selection.xml @@ -0,0 +1,241 @@ +<refentry id="vidioc-g-selection"> + +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_SELECTION, VIDIOC_S_SELECTION</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_SELECTION</refname> +    <refname>VIDIOC_S_SELECTION</refname> +    <refpurpose>Get or set one of the selection rectangles</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_selection *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_SELECTION, VIDIOC_S_SELECTION</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>The ioctls are used to query and configure selection rectangles.</para> + +<para> To query the cropping (composing) rectangle set &v4l2-selection; +<structfield> type </structfield> field to the respective buffer type. +Do not use multiplanar buffers.  Use <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE +</constant> instead of <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE +</constant>.  Use <constant> V4L2_BUF_TYPE_VIDEO_OUTPUT </constant> instead of +<constant> V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE </constant>.  The next step is +setting the value of &v4l2-selection; <structfield>target</structfield> field +to <constant> V4L2_SEL_TGT_CROP </constant> (<constant> +V4L2_SEL_TGT_COMPOSE </constant>).  Please refer to table <xref +linkend="v4l2-selections-common" /> or <xref linkend="selection-api" /> for additional +targets.  The <structfield>flags</structfield> and <structfield>reserved +</structfield> fields of &v4l2-selection; are ignored and they must be filled +with zeros.  The driver fills the rest of the structure or +returns &EINVAL; if incorrect buffer type or target was used. If cropping +(composing) is not supported then the active rectangle is not mutable and it is +always equal to the bounds rectangle.  Finally, the &v4l2-rect; +<structfield>r</structfield> rectangle is filled with the current cropping +(composing) coordinates. The coordinates are expressed in driver-dependent +units. The only exception are rectangles for images in raw formats, whose +coordinates are always expressed in pixels.  </para> + +<para> To change the cropping (composing) rectangle set the &v4l2-selection; +<structfield>type</structfield> field to the respective buffer type.  Do not +use multiplanar buffers.  Use <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE +</constant> instead of <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE +</constant>.  Use <constant> V4L2_BUF_TYPE_VIDEO_OUTPUT </constant> instead of +<constant> V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE </constant>.  The next step is +setting the value of &v4l2-selection; <structfield>target</structfield> to +<constant>V4L2_SEL_TGT_CROP</constant> (<constant> +V4L2_SEL_TGT_COMPOSE </constant>). Please refer to table <xref +linkend="v4l2-selections-common" /> or <xref linkend="selection-api" /> for additional +targets.  The &v4l2-rect; <structfield>r</structfield> rectangle need to be +set to the desired active area. Field &v4l2-selection; <structfield> reserved +</structfield> is ignored and must be filled with zeros.  The driver may adjust +coordinates of the requested rectangle. An application may +introduce constraints to control rounding behaviour. The &v4l2-selection; +<structfield>flags</structfield> field must be set to one of the following: + +<itemizedlist> +  <listitem> +<para><constant>0</constant> - The driver can adjust the rectangle size freely +and shall choose a crop/compose rectangle as close as possible to the requested +one.</para> +  </listitem> +  <listitem> +<para><constant>V4L2_SEL_FLAG_GE</constant> - The driver is not allowed to +shrink the rectangle.  The original rectangle must lay inside the adjusted +one.</para> +  </listitem> +  <listitem> +<para><constant>V4L2_SEL_FLAG_LE</constant> - The driver is not allowed to +enlarge the rectangle.  The adjusted rectangle must lay inside the original +one.</para> +  </listitem> +  <listitem> +<para><constant>V4L2_SEL_FLAG_GE | V4L2_SEL_FLAG_LE</constant> - The driver +must choose the size exactly the same as in the requested rectangle.</para> +  </listitem> +</itemizedlist> + +Please refer to <xref linkend="sel-const-adjust" />. + +</para> + +<para> The driver may have to adjusts the requested dimensions against hardware +limits and other parts as the pipeline, i.e. the bounds given by the +capture/output window or TV display. The closest possible values of horizontal +and vertical offset and sizes are chosen according to following priority: + +<orderedlist> +  <listitem> +    <para>Satisfy constraints from &v4l2-selection; <structfield>flags</structfield>.</para> +  </listitem> +  <listitem> +    <para>Adjust width, height, left, and top to hardware limits and alignments.</para> +  </listitem> +  <listitem> +    <para>Keep center of adjusted rectangle as close as possible to the original one.</para> +  </listitem> +  <listitem> +    <para>Keep width and height as close as possible to original ones.</para> +  </listitem> +  <listitem> +    <para>Keep horizontal and vertical offset as close as possible to original ones.</para> +  </listitem> +</orderedlist> + +On success the &v4l2-rect; <structfield>r</structfield> field contains +the adjusted rectangle. When the parameters are unsuitable the application may +modify the cropping (composing) or image parameters and repeat the cycle until +satisfactory parameters have been negotiated. If constraints flags have to be +violated at then ERANGE is returned. The error indicates that <emphasis> there +exist no rectangle </emphasis> that satisfies the constraints.</para> + +  <para>Selection targets and flags are documented in <xref +  linkend="v4l2-selections-common"/>.</para> + +    <para> +      <figure id="sel-const-adjust"> +	<title>Size adjustments with constraint flags.</title> +	<mediaobject> +	  <imageobject> +	    <imagedata fileref="constraints.png" format="PNG" /> +	  </imageobject> +	  <textobject> +	    <phrase>Behaviour of rectangle adjustment for different constraint +            flags.</phrase> +	  </textobject> +	</mediaobject> +      </figure> +    </para> + +  <para> +    <table pgwide="1" frame="none" id="v4l2-selection"> +      <title>struct <structname>v4l2_selection</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the buffer (from &v4l2-buf-type;).</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>target</structfield></entry> +            <entry>Used to select between <link linkend="v4l2-selections-common"> cropping +	    and composing rectangles</link>.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +            <entry>Flags controlling the selection rectangle adjustments, refer to +	    <link linkend="v4l2-selection-flags">selection flags</link>.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-rect;</entry> +	    <entry><structfield>r</structfield></entry> +	    <entry>The selection rectangle.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved[9]</structfield></entry> +	    <entry>Reserved fields for future use.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </para> +  </refsect1> + +  <refsect1> +    &return-value; +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>Given buffer type <structfield>type</structfield> or +the selection target <structfield>target</structfield> is not supported, +or the <structfield>flags</structfield> argument is not valid.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ERANGE</errorcode></term> +	<listitem> +	  <para>It is not possible to adjust &v4l2-rect; <structfield> +r</structfield> rectangle to satisfy all contraints given in the +<structfield>flags</structfield> argument.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>It is not possible to apply change of the selection rectangle +at the moment. Usually because streaming is in progress.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml b/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml new file mode 100644 index 00000000000..bd015d1563f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml @@ -0,0 +1,255 @@ +<refentry id="vidioc-g-sliced-vbi-cap"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_SLICED_VBI_CAP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_SLICED_VBI_CAP</refname> +    <refpurpose>Query sliced VBI capabilities</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_sliced_vbi_cap *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_SLICED_VBI_CAP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To find out which data services are supported by a sliced +VBI capture or output device, applications initialize the +<structfield>type</structfield> field of a &v4l2-sliced-vbi-cap;, +clear the <structfield>reserved</structfield> array and +call the <constant>VIDIOC_G_SLICED_VBI_CAP</constant> ioctl. The +driver fills in the remaining fields or returns an &EINVAL; if the +sliced VBI API is unsupported or <structfield>type</structfield> +is invalid.</para> + +    <para>Note the <structfield>type</structfield> field was added, +and the ioctl changed from read-only to write-read, in Linux 2.6.19.</para> + +    <table pgwide="1" frame="none" id="v4l2-sliced-vbi-cap"> +      <title>struct <structname>v4l2_sliced_vbi_cap</structname></title> +      <tgroup cols="5"> +	<colspec colname="c1" colwidth="3*" /> +	<colspec colname="c2" colwidth="3*" /> +	<colspec colname="c3" colwidth="2*" /> +	<colspec colname="c4" colwidth="2*" /> +	<colspec colname="c5" colwidth="2*" /> +	<spanspec spanname="hspan" namest="c3" nameend="c5" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u16</entry> +	    <entry><structfield>service_set</structfield></entry> +	    <entry spanname="hspan">A set of all data services +supported by the driver. Equal to the union of all elements of the +<structfield>service_lines </structfield> array.</entry> +	  </row> +	  <row> +	    <entry>__u16</entry> +	    <entry><structfield>service_lines</structfield>[2][24]</entry> +	    <entry spanname="hspan">Each element of this array +contains a set of data services the hardware can look for or insert +into a particular scan line. Data services are defined in <xref +		linkend="vbi-services" />. Array indices map to ITU-R +line numbers (see also <xref +		linkend="vbi-525" /> and <xref +linkend="vbi-625" />) as follows:</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry>Element</entry> +	    <entry>525 line systems</entry> +	    <entry>625 line systems</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[0][1]</entry> +	    <entry align="center">1</entry> +	    <entry align="center">1</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[0][23]</entry> +	    <entry align="center">23</entry> +	    <entry align="center">23</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[1][1]</entry> +	    <entry align="center">264</entry> +	    <entry align="center">314</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><structfield>service_lines</structfield>[1][23]</entry> +	    <entry align="center">286</entry> +	    <entry align="center">336</entry> +	  </row> +	  <row> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry spanname="hspan">The number of VBI lines the +hardware can capture or output per frame, or the number of services it +can identify on a given line may be limited. For example on PAL line +16 the hardware may be able to look for a VPS or Teletext signal, but +not both at the same time. Applications can learn about these limits +using the &VIDIOC-S-FMT; ioctl as described in <xref +		linkend="sliced" />.</entry> +	  </row> +	  <row> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry spanname="hspan">Drivers must set +<structfield>service_lines</structfield>[0][0] and +<structfield>service_lines</structfield>[1][0] to zero.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the data stream, see <xref +		  linkend="v4l2-buf-type" />. Should be +<constant>V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant> or +<constant>V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant>.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[3]</entry> +	    <entry spanname="hspan">This array is reserved for future +extensions. Applications and drivers must set it to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <!-- See also dev-sliced-vbi.sgml --> +    <table pgwide="1" frame="none" id="vbi-services"> +      <title>Sliced VBI services</title> +      <tgroup cols="5"> +	<colspec colname="c1" colwidth="2*" /> +	<colspec colname="c2" colwidth="1*" /> +	<colspec colname="c3" colwidth="1*" /> +	<colspec colname="c4" colwidth="2*" /> +	<colspec colname="c5" colwidth="2*" /> +	<spanspec spanname='rlp' namest='c3' nameend='c5' /> +	<thead> +	  <row> +	    <entry>Symbol</entry> +	    <entry>Value</entry> +	    <entry>Reference</entry> +	    <entry>Lines, usually</entry> +	    <entry>Payload</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_SLICED_TELETEXT_B</constant> (Teletext +System B)</entry> +	    <entry>0x0001</entry> +	    <entry><xref linkend="ets300706" />, <xref linkend="itu653" /></entry> +	    <entry>PAL/SECAM line 7-22, 320-335 (second field 7-22)</entry> +	    <entry>Last 42 of the 45 byte Teletext packet, that is +without clock run-in and framing code, lsb first transmitted.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_VPS</constant></entry> +	    <entry>0x0400</entry> +	    <entry><xref linkend="ets300231" /></entry> +	    <entry>PAL line 16</entry> +	    <entry>Byte number 3 to 15 according to Figure 9 of +ETS 300 231, lsb first transmitted.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_CAPTION_525</constant></entry> +	    <entry>0x1000</entry> +	    <entry><xref linkend="eia608" /></entry> +	    <entry>NTSC line 21, 284 (second field 21)</entry> +	    <entry>Two bytes in transmission order, including parity +bit, lsb first transmitted.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_WSS_625</constant></entry> +	    <entry>0x4000</entry> +	    <entry><xref linkend="en300294" />, <xref linkend="itu1119" /></entry> +	    <entry>PAL/SECAM line 23</entry> +	    <entry><screen> +Byte        0                 1 +     msb         lsb  msb           lsb +Bit  7 6 5 4 3 2 1 0  x x 13 12 11 10 9 +</screen></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_VBI_525</constant></entry> +	    <entry>0x1000</entry> +	    <entry spanname="rlp">Set of services applicable to 525 +line systems.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_SLICED_VBI_625</constant></entry> +	    <entry>0x4401</entry> +	    <entry spanname="rlp">Set of services applicable to 625 +line systems.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The value in the <structfield>type</structfield> field is +wrong.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-std.xml b/Documentation/DocBook/media/v4l/vidioc-g-std.xml new file mode 100644 index 00000000000..4a898417de2 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-std.xml @@ -0,0 +1,98 @@ +<refentry id="vidioc-g-std"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_STD, VIDIOC_S_STD</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_STD</refname> +    <refname>VIDIOC_S_STD</refname> +    <refpurpose>Query or select the video standard of the current input</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>v4l2_std_id +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const v4l2_std_id +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_STD, VIDIOC_S_STD</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query and select the current video standard applications +use the <constant>VIDIOC_G_STD</constant> and <constant>VIDIOC_S_STD</constant> ioctls which take a pointer to a +&v4l2-std-id; type as argument. <constant>VIDIOC_G_STD</constant> can +return a single flag or a set of flags as in &v4l2-standard; field +<structfield>id</structfield>. The flags must be unambiguous such +that they appear in only one enumerated <structname>v4l2_standard</structname> structure.</para> + +    <para><constant>VIDIOC_S_STD</constant> accepts one or more +flags, being a write-only ioctl it does not return the actual new standard as +<constant>VIDIOC_G_STD</constant> does. When no flags are given or +the current input does not support the requested standard the driver +returns an &EINVAL;. When the standard set is ambiguous drivers may +return <errorcode>EINVAL</errorcode> or choose any of the requested +standards. If the current input or output does not support standard video timings (e.g. if +&VIDIOC-ENUMINPUT; does not set the <constant>V4L2_IN_CAP_STD</constant> flag), then +&ENODATA; is returned.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <constant>VIDIOC_S_STD</constant> parameter was unsuitable.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>Standard video timings are not supported for this input or output.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml b/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml new file mode 100644 index 00000000000..b0d865933da --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml @@ -0,0 +1,578 @@ +<refentry id="vidioc-g-tuner"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_G_TUNER, VIDIOC_S_TUNER</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_G_TUNER</refname> +    <refname>VIDIOC_S_TUNER</refname> +    <refpurpose>Get or set tuner attributes</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_tuner +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_tuner +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_G_TUNER, VIDIOC_S_TUNER</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of a tuner applications initialize the +<structfield>index</structfield> field and zero out the +<structfield>reserved</structfield> array of a &v4l2-tuner; and call the +<constant>VIDIOC_G_TUNER</constant> ioctl with a pointer to this +structure. Drivers fill the rest of the structure or return an +&EINVAL; when the index is out of bounds. To enumerate all tuners +applications shall begin at index zero, incrementing by one until the +driver returns <errorcode>EINVAL</errorcode>.</para> + +    <para>Tuners have two writable properties, the audio mode and +the radio frequency. To change the audio mode, applications initialize +the <structfield>index</structfield>, +<structfield>audmode</structfield> and +<structfield>reserved</structfield> fields and call the +<constant>VIDIOC_S_TUNER</constant> ioctl. This will +<emphasis>not</emphasis> change the current tuner, which is determined +by the current video input. Drivers may choose a different audio mode +if the requested mode is invalid or unsupported. Since this is a +<!-- FIXME -->write-only ioctl, it does not return the actually +selected audio mode.</para> + +    <para>To change the radio frequency the &VIDIOC-S-FREQUENCY; ioctl +is available.</para> + +    <table pgwide="1" frame="none" id="v4l2-tuner"> +      <title>struct <structname>v4l2_tuner</structname></title> +      <tgroup cols="3"> +	<colspec colname="c1" colwidth="1*" /> +	<colspec colname="c2" colwidth="1*" /> +	<colspec colname="c3" colwidth="1*" /> +	<colspec colname="c4" colwidth="1*" /> +	<spanspec spanname="hspan" namest="c3" nameend="c4" /> +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry spanname="hspan">Identifies the tuner, set by the +application.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry spanname="hspan"><para>Name of the tuner, a +NUL-terminated ASCII string. This information is intended for the +user.<!-- FIXME Video inputs already have a name, the purpose of this +field is not quite clear.--></para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry spanname="hspan">Type of the tuner, see <xref +		linkend="v4l2-tuner-type" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capability</structfield></entry> +	    <entry spanname="hspan"><para>Tuner capability flags, see +<xref linkend="tuner-capability" />. Audio flags indicate the ability +to decode audio subprograms. They will <emphasis>not</emphasis> +change, for example with the current video standard.</para><para>When +the structure refers to a radio tuner the +<constant>V4L2_TUNER_CAP_LANG1</constant>, +<constant>V4L2_TUNER_CAP_LANG2</constant> and +<constant>V4L2_TUNER_CAP_NORM</constant> flags can't be used.</para> +<para>If multiple frequency bands are supported, then +<structfield>capability</structfield> is the union of all +<structfield>capability</structfield> fields of each &v4l2-frequency-band;. +</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangelow</structfield></entry> +	    <entry spanname="hspan">The lowest tunable frequency in +units of 62.5 kHz, or if the <structfield>capability</structfield> +flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz, or if the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz. +If multiple frequency bands are supported, then +<structfield>rangelow</structfield> is the lowest frequency +of all the frequency bands.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangehigh</structfield></entry> +	    <entry spanname="hspan">The highest tunable frequency in +units of 62.5 kHz, or if the <structfield>capability</structfield> +flag <constant>V4L2_TUNER_CAP_LOW</constant> is set, in units of 62.5 +Hz, or if the <structfield>capability</structfield> flag +<constant>V4L2_TUNER_CAP_1HZ</constant> is set, in units of 1 Hz. +If multiple frequency bands are supported, then +<structfield>rangehigh</structfield> is the highest frequency +of all the frequency bands.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rxsubchans</structfield></entry> +	    <entry spanname="hspan"><para>Some tuners or audio +decoders can determine the received audio subprograms by analyzing +audio carriers, pilot tones or other indicators. To pass this +information drivers set flags defined in <xref +		  linkend="tuner-rxsubchans" /> in this field. For +example:</para></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><constant>V4L2_TUNER_SUB_MONO</constant></entry> +	    <entry>receiving mono audio</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><constant>STEREO | SAP</constant></entry> +	    <entry>receiving stereo audio and a secondary audio +program</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><constant>MONO | STEREO</constant></entry> +	    <entry>receiving mono or stereo audio, the hardware cannot +distinguish</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><constant>LANG1 | LANG2</constant></entry> +	    <entry>receiving bilingual audio</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry><constant>MONO | STEREO | LANG1 | LANG2</constant></entry> +	    <entry>receiving mono, stereo or bilingual +audio</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry></entry> +	    <entry spanname="hspan"><para>When the +<constant>V4L2_TUNER_CAP_STEREO</constant>, +<constant>_LANG1</constant>, <constant>_LANG2</constant> or +<constant>_SAP</constant> flag is cleared in the +<structfield>capability</structfield> field, the corresponding +<constant>V4L2_TUNER_SUB_</constant> flag must not be set +here.</para><para>This field is valid only if this is the tuner of the +current video input, or when the structure refers to a radio +tuner.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>audmode</structfield></entry> +	    <entry spanname="hspan"><para>The selected audio mode, see +<xref linkend="tuner-audmode" /> for valid values. The audio mode does +not affect audio subprogram detection, and like a <link +linkend="control">control</link> it does not automatically change +unless the requested mode is invalid or unsupported. See <xref +		  linkend="tuner-matrix" /> for possible results when +the selected and received audio programs do not +match.</para><para>Currently this is the only field of struct +<structname>v4l2_tuner</structname> applications can +change.</para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>signal</structfield></entry> +	    <entry spanname="hspan">The signal strength if known, ranging +from 0 to 65535. Higher values indicate a better signal.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>afc</structfield></entry> +	    <entry spanname="hspan">Automatic frequency control: When the +<structfield>afc</structfield> value is negative, the frequency is too +low, when positive too high.<!-- FIXME need example what to do when it never +settles at zero, &ie; range is what? --></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[4]</entry> +	    <entry spanname="hspan">Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-tuner-type"> +      <title>enum v4l2_tuner_type</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_TUNER_RADIO</constant></entry> +	    <entry>1</entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_ANALOG_TV</constant></entry> +	    <entry>2</entry> +	    <entry></entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="tuner-capability"> +      <title>Tuner and Modulator Capability Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_LOW</constant></entry> +	    <entry>0x0001</entry> +	    <entry>When set, tuning frequencies are expressed in units of +62.5 Hz instead of 62.5 kHz.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_NORM</constant></entry> +	    <entry>0x0002</entry> +	    <entry>This is a multi-standard tuner; the video standard +can or must be switched. (B/G PAL tuners for example are typically not +      considered multi-standard because the video standard is automatically +      determined from the frequency band.) The set of supported video +      standards is available from the &v4l2-input; pointing to this tuner, +      see the description of ioctl &VIDIOC-ENUMINPUT; for details. Only +      <constant>V4L2_TUNER_ANALOG_TV</constant> tuners can have this capability.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_HWSEEK_BOUNDED</constant></entry> +	    <entry>0x0004</entry> +	    <entry>If set, then this tuner supports the hardware seek functionality +	    where the seek stops when it reaches the end of the frequency range.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_HWSEEK_WRAP</constant></entry> +	    <entry>0x0008</entry> +	    <entry>If set, then this tuner supports the hardware seek functionality +	    where the seek wraps around when it reaches the end of the frequency range.</entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_STEREO</constant></entry> +	<entry>0x0010</entry> +	<entry>Stereo audio reception is supported.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_LANG1</constant></entry> +	    <entry>0x0040</entry> +	    <entry>Reception of the primary language of a bilingual +audio program is supported. Bilingual audio is a feature of +two-channel systems, transmitting the primary language monaural on the +main audio carrier and a secondary language monaural on a second +carrier. Only +      <constant>V4L2_TUNER_ANALOG_TV</constant> tuners can have this capability.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_LANG2</constant></entry> +	    <entry>0x0020</entry> +	    <entry>Reception of the secondary language of a bilingual +audio program is supported. Only +      <constant>V4L2_TUNER_ANALOG_TV</constant> tuners can have this capability.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_CAP_SAP</constant></entry> +	    <entry>0x0020</entry> +	    <entry><para>Reception of a secondary audio program is +supported. This is a feature of the BTSC system which accompanies the +NTSC video standard. Two audio carriers are available for mono or +stereo transmissions of a primary language, and an independent third +carrier for a monaural secondary language. Only +      <constant>V4L2_TUNER_ANALOG_TV</constant> tuners can have this capability.</para><para>Note the +<constant>V4L2_TUNER_CAP_LANG2</constant> and +<constant>V4L2_TUNER_CAP_SAP</constant> flags are synonyms. +<constant>V4L2_TUNER_CAP_SAP</constant> applies when the tuner +supports the <constant>V4L2_STD_NTSC_M</constant> video +standard.</para><!-- FIXME what if PAL+NTSC and Bi but not SAP? --></entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_RDS</constant></entry> +	<entry>0x0080</entry> +	<entry>RDS capture is supported. This capability is only valid for +radio tuners.</entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant></entry> +	<entry>0x0100</entry> +	<entry>The RDS data is passed as unparsed RDS blocks.</entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant></entry> +	<entry>0x0200</entry> +	<entry>The RDS data is parsed by the hardware and set via controls.</entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_FREQ_BANDS</constant></entry> +	<entry>0x0400</entry> +	<entry>The &VIDIOC-ENUM-FREQ-BANDS; ioctl can be used to enumerate +	the available frequency bands.</entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_HWSEEK_PROG_LIM</constant></entry> +	<entry>0x0800</entry> +	<entry>The range to search when using the hardware seek functionality +	is programmable, see &VIDIOC-S-HW-FREQ-SEEK; for details.</entry> +	  </row> +	  <row> +	<entry><constant>V4L2_TUNER_CAP_1HZ</constant></entry> +	<entry>0x1000</entry> +	<entry>When set, tuning frequencies are expressed in units of 1 Hz instead of 62.5 kHz.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="tuner-rxsubchans"> +      <title>Tuner Audio Reception Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_MONO</constant></entry> +	    <entry>0x0001</entry> +	    <entry>The tuner receives a mono audio signal.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_STEREO</constant></entry> +	    <entry>0x0002</entry> +	    <entry>The tuner receives a stereo audio signal.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_LANG1</constant></entry> +	    <entry>0x0008</entry> +	    <entry>The tuner receives the primary language of a +bilingual audio signal. Drivers must clear this flag when the current +video standard is <constant>V4L2_STD_NTSC_M</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_LANG2</constant></entry> +	    <entry>0x0004</entry> +	    <entry>The tuner receives the secondary language of a +bilingual audio signal (or a second audio program).</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_SAP</constant></entry> +	    <entry>0x0004</entry> +	    <entry>The tuner receives a Second Audio Program. Note the +<constant>V4L2_TUNER_SUB_LANG2</constant> and +<constant>V4L2_TUNER_SUB_SAP</constant> flags are synonyms. The +<constant>V4L2_TUNER_SUB_SAP</constant> flag applies when the +current video standard is <constant>V4L2_STD_NTSC_M</constant>.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_SUB_RDS</constant></entry> +	    <entry>0x0010</entry> +	    <entry>The tuner receives an RDS channel.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="tuner-audmode"> +      <title>Tuner Audio Modes</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_TUNER_MODE_MONO</constant></entry> +	    <entry>0</entry> +	    <entry>Play mono audio. When the tuner receives a stereo +signal this a down-mix of the left and right channel. When the tuner +receives a bilingual or SAP signal this mode selects the primary +language.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_MODE_STEREO</constant></entry> +	    <entry>1</entry> +	    <entry><para>Play stereo audio. When the tuner receives +bilingual audio it may play different languages on the left and right +channel or the primary language is played on both channels.</para><para>Playing +different languages in this mode is +deprecated. New drivers should do this only in +<constant>MODE_LANG1_LANG2</constant>.</para><para>When the tuner +receives no stereo signal or does not support stereo reception the +driver shall fall back to <constant>MODE_MONO</constant>.</para></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_MODE_LANG1</constant></entry> +	    <entry>3</entry> +	    <entry>Play the primary language, mono or stereo. Only +<constant>V4L2_TUNER_ANALOG_TV</constant> tuners support this +mode.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_MODE_LANG2</constant></entry> +	    <entry>2</entry> +	    <entry>Play the secondary language, mono. When the tuner +receives no bilingual audio or SAP, or their reception is not +supported the driver shall fall back to mono or stereo mode. Only +<constant>V4L2_TUNER_ANALOG_TV</constant> tuners support this +mode.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_MODE_SAP</constant></entry> +	    <entry>2</entry> +	    <entry>Play the Second Audio Program. When the tuner +receives no bilingual audio or SAP, or their reception is not +supported the driver shall fall back to mono or stereo mode. Only +<constant>V4L2_TUNER_ANALOG_TV</constant> tuners support this mode. +Note the <constant>V4L2_TUNER_MODE_LANG2</constant> and +<constant>V4L2_TUNER_MODE_SAP</constant> are synonyms.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_TUNER_MODE_LANG1_LANG2</constant></entry> +	    <entry>4</entry> +	    <entry>Play the primary language on the left channel, the +secondary language on the right channel. When the tuner receives no +bilingual audio or SAP, it shall fall back to +<constant>MODE_LANG1</constant> or <constant>MODE_MONO</constant>. +Only <constant>V4L2_TUNER_ANALOG_TV</constant> tuners support this +mode.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="all" id="tuner-matrix"> +      <title>Tuner Audio Matrix</title> +      <tgroup cols="6" align="center"> +	<colspec align="left" /> +	<colspec colname="c2" colwidth="1*" /> +	<colspec colwidth="1*" /> +	<colspec colwidth="1*" /> +	<colspec colnum="6" colname="c6" colwidth="1*" /> +	<spanspec namest="c2" nameend="c6" spanname="hspan" align="center" /> +	<thead> +	  <row> +	    <entry></entry> +	    <entry spanname="hspan">Selected +<constant>V4L2_TUNER_MODE_</constant></entry> +	  </row> +	  <row> +	    <entry>Received <constant>V4L2_TUNER_SUB_</constant></entry> +	    <entry><constant>MONO</constant></entry> +	    <entry><constant>STEREO</constant></entry> +	    <entry><constant>LANG1</constant></entry> +	    <entry><constant>LANG2 = SAP</constant></entry> +	    <entry><constant>LANG1_LANG2</constant><footnote><para>This +mode has been added in Linux 2.6.17 and may not be supported by older +drivers.</para></footnote></entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>MONO</constant></entry> +	    <entry>Mono</entry> +	    <entry>Mono/Mono</entry> +	    <entry>Mono</entry> +	    <entry>Mono</entry> +	    <entry>Mono/Mono</entry> +	  </row> +	  <row> +	    <entry><constant>MONO | SAP</constant></entry> +	    <entry>Mono</entry> +	    <entry>Mono/Mono</entry> +	    <entry>Mono</entry> +	    <entry>SAP</entry> +	    <entry>Mono/SAP (preferred) or Mono/Mono</entry> +	  </row> +	  <row> +	    <entry><constant>STEREO</constant></entry> +	    <entry>L+R</entry> +	    <entry>L/R</entry> +	    <entry>Stereo L/R (preferred) or Mono L+R</entry> +	    <entry>Stereo L/R (preferred) or Mono L+R</entry> +	    <entry>L/R (preferred) or L+R/L+R</entry> +	  </row> +	  <row> +	    <entry><constant>STEREO | SAP</constant></entry> +	    <entry>L+R</entry> +	    <entry>L/R</entry> +	    <entry>Stereo L/R (preferred) or Mono L+R</entry> +	    <entry>SAP</entry> +	    <entry>L+R/SAP (preferred) or L/R or L+R/L+R</entry> +	  </row> +	  <row> +	    <entry><constant>LANG1 | LANG2</constant></entry> +	    <entry>Language 1</entry> +	    <entry>Lang1/Lang2 (deprecated<footnote><para>Playback of +both languages in <constant>MODE_STEREO</constant> is deprecated. In +the future drivers should produce only the primary language in this +mode. Applications should request +<constant>MODE_LANG1_LANG2</constant> to record both languages or a +stereo signal.</para></footnote>) or +Lang1/Lang1</entry> +	    <entry>Language 1</entry> +	    <entry>Language 2</entry> +	    <entry>Lang1/Lang2 (preferred) or Lang1/Lang1</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-tuner; <structfield>index</structfield> is +out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-log-status.xml b/Documentation/DocBook/media/v4l/vidioc-log-status.xml new file mode 100644 index 00000000000..5ded7d35e27 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-log-status.xml @@ -0,0 +1,41 @@ +<refentry id="vidioc-log-status"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_LOG_STATUS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_LOG_STATUS</refname> +    <refpurpose>Log driver status information</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Description</title> + +    <para>As the video/audio devices become more complicated it +becomes harder to debug problems. When this ioctl is called the driver +will output the current device status to the kernel log. This is +particular useful when dealing with problems like no sound, no video +and incorrectly tuned channels. Also many modern devices autodetect +video and audio standards and this ioctl will report what the device +thinks what the standard is. Mismatches may give an indication where +the problem is.</para> + +    <para>This ioctl is optional and not all drivers support it. It +was introduced in Linux 2.6.15.</para> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-overlay.xml b/Documentation/DocBook/media/v4l/vidioc-overlay.xml new file mode 100644 index 00000000000..250a7de1877 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-overlay.xml @@ -0,0 +1,74 @@ +<refentry id="vidioc-overlay"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_OVERLAY</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_OVERLAY</refname> +    <refpurpose>Start or stop video overlay</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const int *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_OVERLAY</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>This ioctl is part of the <link linkend="overlay">video +    overlay</link> I/O method. Applications call +    <constant>VIDIOC_OVERLAY</constant> to start or stop the +    overlay. It takes a pointer to an integer which must be set to +    zero by the application to stop overlay, to one to start.</para> + +    <para>Drivers do not support &VIDIOC-STREAMON; or +&VIDIOC-STREAMOFF; with <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The overlay parameters have not been set up. See <xref +linkend="overlay" /> for the necessary steps.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml b/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml new file mode 100644 index 00000000000..fa7ad7e3322 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml @@ -0,0 +1,94 @@ +<refentry id="vidioc-prepare-buf"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_PREPARE_BUF</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_PREPARE_BUF</refname> +    <refpurpose>Prepare a buffer for I/O</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_buffer *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_PREPARE_BUF</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>Applications can optionally call the +<constant>VIDIOC_PREPARE_BUF</constant> ioctl to pass ownership of the buffer +to the driver before actually enqueuing it, using the +<constant>VIDIOC_QBUF</constant> ioctl, and to prepare it for future I/O. +Such preparations may include cache invalidation or cleaning. Performing them +in advance saves time during the actual I/O. In case such cache operations are +not required, the application can use one of +<constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant> and +<constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant> flags to skip the respective +step.</para> + +    <para>The <structname>v4l2_buffer</structname> structure is +specified in <xref linkend="buffer" />.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>File I/O is in progress.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The buffer <structfield>type</structfield> is not +supported, or the <structfield>index</structfield> is out of bounds, +or no buffers have been allocated yet, or the +<structfield>userptr</structfield> or +<structfield>length</structfield> are invalid.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-qbuf.xml b/Documentation/DocBook/media/v4l/vidioc-qbuf.xml new file mode 100644 index 00000000000..3504a7f2f38 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-qbuf.xml @@ -0,0 +1,192 @@ +<refentry id="vidioc-qbuf"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_QBUF, VIDIOC_DQBUF</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_QBUF</refname> +    <refname>VIDIOC_DQBUF</refname> +    <refpurpose>Exchange a buffer with the driver</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_buffer *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_QBUF, VIDIOC_DQBUF</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Applications call the <constant>VIDIOC_QBUF</constant> ioctl +to enqueue an empty (capturing) or filled (output) buffer in the +driver's incoming queue. The semantics depend on the selected I/O +method.</para> + +    <para>To enqueue a buffer applications set the <structfield>type</structfield> +field of a &v4l2-buffer; to the same buffer type as was previously used +with &v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers; +<structfield>type</structfield>. Applications must also set the +<structfield>index</structfield> field. Valid index numbers range from +zero to the number of buffers allocated with &VIDIOC-REQBUFS; +(&v4l2-requestbuffers; <structfield>count</structfield>) minus one. The +contents of the struct <structname>v4l2_buffer</structname> returned +by a &VIDIOC-QUERYBUF; ioctl will do as well. When the buffer is +intended for output (<structfield>type</structfield> is +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>, +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>, or +<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also +initialize the <structfield>bytesused</structfield>, +<structfield>field</structfield> and +<structfield>timestamp</structfield> fields, see <xref +linkend="buffer" /> for details. +Applications must also set <structfield>flags</structfield> to 0. +The <structfield>reserved2</structfield> and +<structfield>reserved</structfield> fields must be set to 0. When using +the <link linkend="planar-apis">multi-planar API</link>, the +<structfield>m.planes</structfield> field must contain a userspace pointer +to a filled-in array of &v4l2-plane; and the <structfield>length</structfield> +field must be set to the number of elements in that array. +</para> + +    <para>To enqueue a <link linkend="mmap">memory mapped</link> +buffer applications set the <structfield>memory</structfield> +field to <constant>V4L2_MEMORY_MMAP</constant>. When +<constant>VIDIOC_QBUF</constant> is called with a pointer to this +structure the driver sets the +<constant>V4L2_BUF_FLAG_MAPPED</constant> and +<constant>V4L2_BUF_FLAG_QUEUED</constant> flags and clears the +<constant>V4L2_BUF_FLAG_DONE</constant> flag in the +<structfield>flags</structfield> field, or it returns an +&EINVAL;.</para> + +    <para>To enqueue a <link linkend="userp">user pointer</link> +buffer applications set the <structfield>memory</structfield> +field to <constant>V4L2_MEMORY_USERPTR</constant>, the +<structfield>m.userptr</structfield> field to the address of the +buffer and <structfield>length</structfield> to its size. When the multi-planar +API is used, <structfield>m.userptr</structfield> and +<structfield>length</structfield> members of the passed array of &v4l2-plane; +have to be used instead. When <constant>VIDIOC_QBUF</constant> is called with +a pointer to this structure the driver sets the +<constant>V4L2_BUF_FLAG_QUEUED</constant> flag and clears the +<constant>V4L2_BUF_FLAG_MAPPED</constant> and +<constant>V4L2_BUF_FLAG_DONE</constant> flags in the +<structfield>flags</structfield> field, or it returns an error code. +This ioctl locks the memory pages of the buffer in physical memory, +they cannot be swapped out to disk. Buffers remain locked until +dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl is +called, or until the device is closed.</para> + +    <para>To enqueue a <link linkend="dmabuf">DMABUF</link> buffer applications +set the <structfield>memory</structfield> field to +<constant>V4L2_MEMORY_DMABUF</constant> and the <structfield>m.fd</structfield> +field to a file descriptor associated with a DMABUF buffer. When the +multi-planar API is used the <structfield>m.fd</structfield> fields of the +passed array of &v4l2-plane; have to be used instead. When +<constant>VIDIOC_QBUF</constant> is called with a pointer to this structure the +driver sets the <constant>V4L2_BUF_FLAG_QUEUED</constant> flag and clears the +<constant>V4L2_BUF_FLAG_MAPPED</constant> and +<constant>V4L2_BUF_FLAG_DONE</constant> flags in the +<structfield>flags</structfield> field, or it returns an error code.  This +ioctl locks the buffer. Locking a buffer means passing it to a driver for a +hardware access (usually DMA).  If an application accesses (reads/writes) a +locked buffer then the result is undefined.  Buffers remain locked until +dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl is called, or +until the device is closed.</para> + +    <para>Applications call the <constant>VIDIOC_DQBUF</constant> +ioctl to dequeue a filled (capturing) or displayed (output) buffer +from the driver's outgoing queue. They just set the +<structfield>type</structfield>, <structfield>memory</structfield> +and <structfield>reserved</structfield> +fields of a &v4l2-buffer; as above, when <constant>VIDIOC_DQBUF</constant> +is called with a pointer to this structure the driver fills the +remaining fields or returns an error code. The driver may also set +<constant>V4L2_BUF_FLAG_ERROR</constant> in the <structfield>flags</structfield> +field. It indicates a non-critical (recoverable) streaming error. In such case +the application may continue as normal, but should be aware that data in the +dequeued buffer might be corrupted. When using the multi-planar API, the +planes array must be passed in as well.</para> + +    <para>By default <constant>VIDIOC_DQBUF</constant> blocks when no +buffer is in the outgoing queue. When the +<constant>O_NONBLOCK</constant> flag was given to the &func-open; +function, <constant>VIDIOC_DQBUF</constant> returns immediately +with an &EAGAIN; when no buffer is available.</para> + +    <para>The <structname>v4l2_buffer</structname> structure is +specified in <xref linkend="buffer" />.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EAGAIN</errorcode></term> +	<listitem> +	  <para>Non-blocking I/O has been selected using +<constant>O_NONBLOCK</constant> and no buffer was in the outgoing +queue.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The buffer <structfield>type</structfield> is not +supported, or the <structfield>index</structfield> is out of bounds, +or no buffers have been allocated yet, or the +<structfield>userptr</structfield> or +<structfield>length</structfield> are invalid.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EIO</errorcode></term> +	<listitem> +	  <para><constant>VIDIOC_DQBUF</constant> failed due to an +internal error. Can also indicate temporary problems like signal +loss. Note the driver might dequeue an (empty) buffer despite +returning an error, or even stop capturing. Reusing such buffer may be unsafe +though and its details (e.g. <structfield>index</structfield>) may not be +returned either. It is recommended that drivers indicate recoverable errors +by setting the <constant>V4L2_BUF_FLAG_ERROR</constant> and returning 0 instead. +In that case the application should be able to safely reuse the buffer and +continue streaming. +	</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml b/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml new file mode 100644 index 00000000000..e185f149e0a --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml @@ -0,0 +1,110 @@ +<refentry id="vidioc-query-dv-timings"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_QUERY_DV_TIMINGS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_QUERY_DV_TIMINGS</refname> +    <refpurpose>Sense the DV preset received by the current +input</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_dv_timings *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +	<varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_QUERY_DV_TIMINGS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental"> experimental </link> +      interface and may change in the future.</para> +    </note> + +    <para>The hardware may be able to detect the current DV timings +automatically, similar to sensing the video standard. To do so, applications +call <constant>VIDIOC_QUERY_DV_TIMINGS</constant> with a pointer to a +&v4l2-dv-timings;. Once the hardware detects the timings, it will fill in the +timings structure. + +If the timings could not be detected because there was no signal, then +<errorcode>ENOLINK</errorcode> is returned. If a signal was detected, but +it was unstable and the receiver could not lock to the signal, then +<errorcode>ENOLCK</errorcode> is returned. If the receiver could lock to the signal, +but the format is unsupported (e.g. because the pixelclock is out of range +of the hardware capabilities), then the driver fills in whatever timings it +could find and returns <errorcode>ERANGE</errorcode>. In that case the application +can call &VIDIOC-DV-TIMINGS-CAP; to compare the found timings with the hardware's +capabilities in order to give more precise feedback to the user. +</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>Digital video timings are not supported for this input or output.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENOLINK</errorcode></term> +	<listitem> +	  <para>No timings could be detected because no signal was found. +</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENOLCK</errorcode></term> +	<listitem> +	  <para>The signal was unstable and the hardware could not lock on to it. +</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ERANGE</errorcode></term> +	<listitem> +	  <para>Timings were found, but they are out of range of the hardware +capabilities. +</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-querybuf.xml b/Documentation/DocBook/media/v4l/vidioc-querybuf.xml new file mode 100644 index 00000000000..a597155c052 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-querybuf.xml @@ -0,0 +1,105 @@ +<refentry id="vidioc-querybuf"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_QUERYBUF</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_QUERYBUF</refname> +    <refpurpose>Query the status of a buffer</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_buffer *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_QUERYBUF</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>This ioctl is part of the <link linkend="mmap">streaming +</link> I/O method. It can be used to query the status of a +buffer at any time after buffers have been allocated with the +&VIDIOC-REQBUFS; ioctl.</para> + +    <para>Applications set the <structfield>type</structfield> field +    of a &v4l2-buffer; to the same buffer type as was previously used with +&v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers; +<structfield>type</structfield>, and the <structfield>index</structfield> +    field. Valid index numbers range from zero +to the number of buffers allocated with &VIDIOC-REQBUFS; +    (&v4l2-requestbuffers; <structfield>count</structfield>) minus one. +The <structfield>reserved</structfield> field should to set to 0. +When using the <link linkend="planar-apis">multi-planar API</link>, the +<structfield>m.planes</structfield> field must contain a userspace pointer to an +array of &v4l2-plane; and the <structfield>length</structfield> field has +to be set to the number of elements in that array. +After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to +    this structure drivers return an error code or fill the rest of +the structure.</para> + +    <para>In the <structfield>flags</structfield> field the +<constant>V4L2_BUF_FLAG_MAPPED</constant>, +<constant>V4L2_BUF_FLAG_PREPARED</constant>, +<constant>V4L2_BUF_FLAG_QUEUED</constant> and +<constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The +<structfield>memory</structfield> field will be set to the current +I/O method. For the single-planar API, the <structfield>m.offset</structfield> +contains the offset of the buffer from the start of the device memory, +the <structfield>length</structfield> field its size. For the multi-planar API, +fields <structfield>m.mem_offset</structfield> and +<structfield>length</structfield> in the <structfield>m.planes</structfield> +array elements will be used instead and the <structfield>length</structfield> +field of &v4l2-buffer; is set to the number of filled-in array elements. +The driver may or may not set the remaining fields and flags, they are +meaningless in this context.</para> + +    <para>The <structname>v4l2_buffer</structname> structure is +    specified in <xref linkend="buffer" />.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The buffer <structfield>type</structfield> is not +supported, or the <structfield>index</structfield> is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-querycap.xml b/Documentation/DocBook/media/v4l/vidioc-querycap.xml new file mode 100644 index 00000000000..370d49d6fb6 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-querycap.xml @@ -0,0 +1,338 @@ +<refentry id="vidioc-querycap"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_QUERYCAP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_QUERYCAP</refname> +    <refpurpose>Query device capabilities</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_capability *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_QUERYCAP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>All V4L2 devices support the +<constant>VIDIOC_QUERYCAP</constant> ioctl. It is used to identify +kernel devices compatible with this specification and to obtain +information about driver and hardware capabilities. The ioctl takes a +pointer to a &v4l2-capability; which is filled by the driver. When the +driver is not compatible with this specification the ioctl returns an +&EINVAL;.</para> + +    <table pgwide="1" frame="none" id="v4l2-capability"> +      <title>struct <structname>v4l2_capability</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>driver</structfield>[16]</entry> +	    <entry><para>Name of the driver, a unique NUL-terminated +ASCII string. For example: "bttv". Driver specific applications can +use this information to verify the driver identity. It is also useful +to work around known bugs, or to identify drivers in error reports.</para> +<para>Storing strings in fixed sized arrays is bad +practice but unavoidable here. Drivers and applications should take +precautions to never read or write beyond the end of the array and to +make sure the strings are properly NUL-terminated.</para></entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>card</structfield>[32]</entry> +	    <entry>Name of the device, a NUL-terminated UTF-8 string. +For example: "Yoyodyne TV/FM". One driver may support different brands +or models of video hardware. This information is intended for users, +for example in a menu of available devices. Since multiple TV cards of +the same brand may be installed which are supported by the same +driver, this name should be combined with the character device file +name (⪚ <filename>/dev/video2</filename>) or the +<structfield>bus_info</structfield> string to avoid +ambiguities.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>bus_info</structfield>[32]</entry> +	    <entry>Location of the device in the system, a +NUL-terminated ASCII string. For example: "PCI:0000:05:06.0". This +information is intended for users, to distinguish multiple +identical devices. If no such information is available the field must +simply count the devices controlled by the driver ("platform:vivi-000"). +The bus_info must start with "PCI:" for PCI boards, "PCIe:" for PCI Express boards, +"usb-" for USB devices, "I2C:" for i2c devices, "ISA:" for ISA devices, +"parport" for parallel port devices and "platform:" for platform devices.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>version</structfield></entry> +	    <entry><para>Version number of the driver.</para> +<para>Starting on kernel 3.1, the version reported is provided per +V4L2 subsystem, following the same Kernel numberation scheme. However, it +should not always return the same version as the kernel, if, for example, +an stable or distribution-modified kernel uses the V4L2 stack from a +newer kernel.</para> +<para>The version number is formatted using the +<constant>KERNEL_VERSION()</constant> macro:</para></entry> +	  </row> +	  <row> +	    <entry spanname="hspan"><para> +<programlisting> +#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) + +__u32 version = KERNEL_VERSION(0, 8, 1); + +printf ("Version: %u.%u.%u\n", +	(version >> 16) & 0xFF, +	(version >> 8) & 0xFF, +	 version & 0xFF); +</programlisting></para></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>capabilities</structfield></entry> +	    <entry>Available capabilities of the physical device as a whole, see <xref +		linkend="device-capabilities" />. The same physical device can export +		multiple devices in /dev (e.g. /dev/videoX, /dev/vbiY and /dev/radioZ). +		The <structfield>capabilities</structfield> field should contain a union +		of all capabilities available around the several V4L2 devices exported +		to userspace. +		For all those devices the <structfield>capabilities</structfield> field +		returns the same set of	capabilities. This allows applications to open +		just one of the devices (typically the video device) and discover whether +		video, vbi and/or radio are also supported. +	    </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>device_caps</structfield></entry> +	    <entry>Device capabilities of the opened device, see <xref +		linkend="device-capabilities" />. Should contain the available capabilities +		of that specific device node. So, for example, <structfield>device_caps</structfield> +		of a radio device will only contain radio related capabilities and +		no video or vbi capabilities. This field is only set if the <structfield>capabilities</structfield> +		field contains the <constant>V4L2_CAP_DEVICE_CAPS</constant> capability. +		Only the <structfield>capabilities</structfield> field can have the +		<constant>V4L2_CAP_DEVICE_CAPS</constant> capability, <structfield>device_caps</structfield> +		will never set <constant>V4L2_CAP_DEVICE_CAPS</constant>. +	    </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[3]</entry> +	    <entry>Reserved for future extensions. Drivers must set +this array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="device-capabilities"> +      <title>Device Capabilities Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_CAPTURE</constant></entry> +	    <entry>0x00000001</entry> +	    <entry>The device supports the single-planar API through the <link +linkend="capture">Video Capture</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant></entry> +	    <entry>0x00001000</entry> +	    <entry>The device supports the +	    <link linkend="planar-apis">multi-planar API</link> through the +	    <link linkend="capture">Video Capture</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_OUTPUT</constant></entry> +	    <entry>0x00000002</entry> +	    <entry>The device supports the single-planar API through the <link +linkend="output">Video Output</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant></entry> +	    <entry>0x00002000</entry> +	    <entry>The device supports the +	    <link linkend="planar-apis">multi-planar API</link> through the +	    <link linkend="output">Video Output</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_M2M</constant></entry> +	    <entry>0x00004000</entry> +	    <entry>The device supports the single-planar API through the +	    Video Memory-To-Memory interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_M2M_MPLANE</constant></entry> +	    <entry>0x00008000</entry> +	    <entry>The device supports the +	    <link linkend="planar-apis">multi-planar API</link> through the +	    Video Memory-To-Memory  interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_OVERLAY</constant></entry> +	    <entry>0x00000004</entry> +	    <entry>The device supports the <link +linkend="overlay">Video Overlay</link> interface. A video overlay device +typically stores captured images directly in the video memory of a +graphics card, with hardware clipping and scaling.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VBI_CAPTURE</constant></entry> +	    <entry>0x00000010</entry> +	    <entry>The device supports the <link linkend="raw-vbi">Raw +VBI Capture</link> interface, providing Teletext and Closed Caption +data.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VBI_OUTPUT</constant></entry> +	    <entry>0x00000020</entry> +	    <entry>The device supports the <link linkend="raw-vbi">Raw VBI Output</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_SLICED_VBI_CAPTURE</constant></entry> +	    <entry>0x00000040</entry> +	    <entry>The device supports the <link linkend="sliced">Sliced VBI Capture</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_SLICED_VBI_OUTPUT</constant></entry> +	    <entry>0x00000080</entry> +	    <entry>The device supports the <link linkend="sliced">Sliced VBI Output</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_RDS_CAPTURE</constant></entry> +	    <entry>0x00000100</entry> +	    <entry>The device supports the <link linkend="rds">RDS</link> capture interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_VIDEO_OUTPUT_OVERLAY</constant></entry> +	    <entry>0x00000200</entry> +	    <entry>The device supports the <link linkend="osd">Video +Output Overlay</link> (OSD) interface. Unlike the <wordasword>Video +Overlay</wordasword> interface, this is a secondary function of video +output devices and overlays an image onto an outgoing video signal. +When the driver sets this flag, it must clear the +<constant>V4L2_CAP_VIDEO_OVERLAY</constant> flag and vice +versa.<footnote><para>The &v4l2-framebuffer; lacks an +&v4l2-buf-type; field, therefore the type of overlay is implied by the +driver capabilities.</para></footnote></entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_HW_FREQ_SEEK</constant></entry> +	    <entry>0x00000400</entry> +	    <entry>The device supports the &VIDIOC-S-HW-FREQ-SEEK; ioctl for +hardware frequency seeking.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_RDS_OUTPUT</constant></entry> +	    <entry>0x00000800</entry> +	    <entry>The device supports the <link linkend="rds">RDS</link> output interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_TUNER</constant></entry> +	    <entry>0x00010000</entry> +	    <entry>The device has some sort of tuner to +receive RF-modulated video signals. For more information about +tuner programming see +<xref linkend="tuner" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_AUDIO</constant></entry> +	    <entry>0x00020000</entry> +	    <entry>The device has audio inputs or outputs. It may or +may not support audio recording or playback, in PCM or compressed +formats. PCM audio support must be implemented as ALSA or OSS +interface. For more information on audio inputs and outputs see <xref +		linkend="audio" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_RADIO</constant></entry> +	    <entry>0x00040000</entry> +	    <entry>This is a radio receiver.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_MODULATOR</constant></entry> +	    <entry>0x00080000</entry> +	    <entry>The device has some sort of modulator to +emit RF-modulated video/audio signals. For more information about +modulator programming see +<xref linkend="tuner" />.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_SDR_CAPTURE</constant></entry> +	    <entry>0x00100000</entry> +	    <entry>The device supports the +<link linkend="sdr">SDR Capture</link> interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_READWRITE</constant></entry> +	    <entry>0x01000000</entry> +	    <entry>The device supports the <link +linkend="rw">read()</link> and/or <link linkend="rw">write()</link> +I/O methods.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_ASYNCIO</constant></entry> +	    <entry>0x02000000</entry> +	    <entry>The device supports the <link +linkend="async">asynchronous</link> I/O methods.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_STREAMING</constant></entry> +	    <entry>0x04000000</entry> +	    <entry>The device supports the <link +linkend="mmap">streaming</link> I/O method.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CAP_DEVICE_CAPS</constant></entry> +	    <entry>0x80000000</entry> +	    <entry>The driver fills the <structfield>device_caps</structfield> +	    field. This capability can only appear in the <structfield>capabilities</structfield> +	    field and never in the <structfield>device_caps</structfield> field.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml b/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml new file mode 100644 index 00000000000..e6645b99655 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml @@ -0,0 +1,480 @@ +<refentry id="vidioc-queryctrl"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_QUERYCTRL, VIDIOC_QUERYMENU</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_QUERYCTRL</refname> +    <refname>VIDIOC_QUERYMENU</refname> +    <refpurpose>Enumerate controls and menu control items</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_queryctrl *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_querymenu *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_QUERYCTRL, VIDIOC_QUERYMENU</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>To query the attributes of a control applications set the +<structfield>id</structfield> field of a &v4l2-queryctrl; and call the +<constant>VIDIOC_QUERYCTRL</constant> ioctl with a pointer to this +structure. The driver fills the rest of the structure or returns an +&EINVAL; when the <structfield>id</structfield> is invalid.</para> + +    <para>It is possible to enumerate controls by calling +<constant>VIDIOC_QUERYCTRL</constant> with successive +<structfield>id</structfield> values starting from +<constant>V4L2_CID_BASE</constant> up to and exclusive +<constant>V4L2_CID_BASE_LASTP1</constant>. Drivers may return +<errorcode>EINVAL</errorcode> if a control in this range is not +supported. Further applications can enumerate private controls, which +are not defined in this specification, by starting at +<constant>V4L2_CID_PRIVATE_BASE</constant> and incrementing +<structfield>id</structfield> until the driver returns +<errorcode>EINVAL</errorcode>.</para> + +    <para>In both cases, when the driver sets the +<constant>V4L2_CTRL_FLAG_DISABLED</constant> flag in the +<structfield>flags</structfield> field this control is permanently +disabled and should be ignored by the application.<footnote> +	<para><constant>V4L2_CTRL_FLAG_DISABLED</constant> was +intended for two purposes: Drivers can skip predefined controls not +supported by the hardware (although returning EINVAL would do as +well), or disable predefined and private controls after hardware +detection without the trouble of reordering control arrays and indices +(EINVAL cannot be used to skip private controls because it would +prematurely end the enumeration).</para></footnote></para> + +    <para>When the application ORs <structfield>id</structfield> with +<constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant> the driver returns the +next supported control, or <errorcode>EINVAL</errorcode> if there is +none. Drivers which do not support this flag yet always return +<errorcode>EINVAL</errorcode>.</para> + +    <para>Additional information is required for menu controls: the +names of the menu items. To query them applications set the +<structfield>id</structfield> and <structfield>index</structfield> +fields of &v4l2-querymenu; and call the +<constant>VIDIOC_QUERYMENU</constant> ioctl with a pointer to this +structure. The driver fills the rest of the structure or returns an +&EINVAL; when the <structfield>id</structfield> or +<structfield>index</structfield> is invalid. Menu items are enumerated +by calling <constant>VIDIOC_QUERYMENU</constant> with successive +<structfield>index</structfield> values from &v4l2-queryctrl; +<structfield>minimum</structfield> to +<structfield>maximum</structfield>, inclusive. Note that it is possible +for <constant>VIDIOC_QUERYMENU</constant> to return an &EINVAL; for some +indices between <structfield>minimum</structfield> and <structfield>maximum</structfield>. +In that case that particular menu item is not supported by this driver. Also note that +the <structfield>minimum</structfield> value is not necessarily 0.</para> + +    <para>See also the examples in <xref linkend="control" />.</para> + +    <table pgwide="1" frame="none" id="v4l2-queryctrl"> +      <title>struct <structname>v4l2_queryctrl</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>Identifies the control, set by the application. See +<xref linkend="control-id" /> for predefined IDs. When the ID is ORed +with V4L2_CTRL_FLAG_NEXT_CTRL the driver clears the flag and returns +the first control with a higher ID. Drivers which do not support this +flag yet always return an &EINVAL;.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of control, see <xref +		linkend="v4l2-ctrl-type" />.</entry> +	  </row> +	  <row> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the control, a NUL-terminated ASCII +string. This information is intended for the user.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>minimum</structfield></entry> +	    <entry>Minimum value, inclusive. This field gives a lower +bound for <constant>V4L2_CTRL_TYPE_INTEGER</constant> controls and the +lowest valid index for <constant>V4L2_CTRL_TYPE_MENU</constant> controls. +For <constant>V4L2_CTRL_TYPE_STRING</constant> controls the minimum value +gives the minimum length of the string. This length <emphasis>does not include the terminating +zero</emphasis>. It may not be valid for any other type of control, including +<constant>V4L2_CTRL_TYPE_INTEGER64</constant> controls. Note that this is a +signed value.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>maximum</structfield></entry> +	    <entry>Maximum value, inclusive. This field gives an upper +bound for <constant>V4L2_CTRL_TYPE_INTEGER</constant> controls and the +highest valid index for <constant>V4L2_CTRL_TYPE_MENU</constant> +controls. For <constant>V4L2_CTRL_TYPE_BITMASK</constant> controls it is the +set of usable bits. +For <constant>V4L2_CTRL_TYPE_STRING</constant> controls the maximum value +gives the maximum length of the string. This length <emphasis>does not include the terminating +zero</emphasis>. It may not be valid for any other type of control, including +<constant>V4L2_CTRL_TYPE_INTEGER64</constant> controls. Note that this is a +signed value.</entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>step</structfield></entry> +	    <entry><para>This field gives a step size for +<constant>V4L2_CTRL_TYPE_INTEGER</constant> controls. For +<constant>V4L2_CTRL_TYPE_STRING</constant> controls this field refers to +the string length that has to be a multiple of this step size. +It may not be valid for any other type of control, including +<constant>V4L2_CTRL_TYPE_INTEGER64</constant> +controls.</para><para>Generally drivers should not scale hardware +control values. It may be necessary for example when the +<structfield>name</structfield> or <structfield>id</structfield> imply +a particular unit and the hardware actually accepts only multiples of +said unit. If so, drivers must take care values are properly rounded +when scaling, such that errors will not accumulate on repeated +read-write cycles.</para><para>This field gives the smallest change of +an integer control actually affecting hardware. Often the information +is needed when the user can change controls by keyboard or GUI +buttons, rather than a slider. When for example a hardware register +accepts values 0-511 and the driver reports 0-65535, step should be +128.</para><para>Note that although signed, the step value is supposed to +be always positive.</para></entry> +	  </row> +	  <row> +	    <entry>__s32</entry> +	    <entry><structfield>default_value</structfield></entry> +	    <entry>The default value of a +<constant>V4L2_CTRL_TYPE_INTEGER</constant>, +<constant>_BOOLEAN</constant> or <constant>_MENU</constant> control. +Not valid for other types of controls. Drivers reset controls only +when the driver is loaded, not later, in particular not when the +func-open; is called.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Control flags, see <xref +		linkend="control-flags" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>Reserved for future extensions. Drivers must set +the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-querymenu"> +      <title>struct <structname>v4l2_querymenu</structname></title> +      <tgroup cols="4"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry></entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>Identifies the control, set by the application +from the respective &v4l2-queryctrl; +<structfield>id</structfield>.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry></entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Index of the menu item, starting at zero, set by +	    the application.</entry> +	  </row> +	  <row> +	    <entry>union</entry> +	    <entry></entry> +	    <entry></entry> +	    <entry></entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__u8</entry> +	    <entry><structfield>name</structfield>[32]</entry> +	    <entry>Name of the menu item, a NUL-terminated ASCII +string. This information is intended for the user. This field is valid +for <constant>V4L2_CTRL_FLAG_MENU</constant> type controls.</entry> +	  </row> +	  <row> +	    <entry></entry> +	    <entry>__s64</entry> +	    <entry><structfield>value</structfield></entry> +	    <entry> +              Value of the integer menu item. This field is valid for +              <constant>V4L2_CTRL_FLAG_INTEGER_MENU</constant> type +              controls. +            </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry></entry> +	    <entry><structfield>reserved</structfield></entry> +	    <entry>Reserved for future extensions. Drivers must set +the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-ctrl-type"> +      <title>enum v4l2_ctrl_type</title> +      <tgroup cols="5" align="left"> +	<colspec colwidth="30*" /> +	<colspec colwidth="5*" align="center" /> +	<colspec colwidth="5*" align="center" /> +	<colspec colwidth="5*" align="center" /> +	<colspec colwidth="55*" /> +	<thead> +	  <row> +	    <entry>Type</entry> +	    <entry><structfield>minimum</structfield></entry> +	    <entry><structfield>step</structfield></entry> +	    <entry><structfield>maximum</structfield></entry> +	    <entry>Description</entry> +	  </row> +	</thead> +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_INTEGER</constant></entry> +	    <entry>any</entry> +	    <entry>any</entry> +	    <entry>any</entry> +	    <entry>An integer-valued control ranging from minimum to +maximum inclusive. The step value indicates the increment between +values which are actually different on the hardware.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_BOOLEAN</constant></entry> +	    <entry>0</entry> +	    <entry>1</entry> +	    <entry>1</entry> +	    <entry>A boolean-valued control. Zero corresponds to +"disabled", and one means "enabled".</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_MENU</constant></entry> +	    <entry>≥ 0</entry> +	    <entry>1</entry> +	    <entry>N-1</entry> +	    <entry>The control has a menu of N choices. The names of +the menu items can be enumerated with the +<constant>VIDIOC_QUERYMENU</constant> ioctl.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_INTEGER_MENU</constant></entry> +	    <entry>≥ 0</entry> +	    <entry>1</entry> +	    <entry>N-1</entry> +	    <entry> +              The control has a menu of N choices. The values of the +              menu items can be enumerated with the +              <constant>VIDIOC_QUERYMENU</constant> ioctl. This is +              similar to <constant>V4L2_CTRL_TYPE_MENU</constant> +              except that instead of strings, the menu items are +              signed 64-bit integers. +            </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_BITMASK</constant></entry> +	    <entry>0</entry> +	    <entry>n/a</entry> +	    <entry>any</entry> +	    <entry>A bitmask field. The maximum value is the set of bits that can +be used, all other bits are to be 0. The maximum value is interpreted as a __u32, +allowing the use of bit 31 in the bitmask.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_BUTTON</constant></entry> +	    <entry>0</entry> +	    <entry>0</entry> +	    <entry>0</entry> +	    <entry>A control which performs an action when set. +Drivers must ignore the value passed with +<constant>VIDIOC_S_CTRL</constant> and return an &EINVAL; on a +<constant>VIDIOC_G_CTRL</constant> attempt.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_INTEGER64</constant></entry> +	    <entry>n/a</entry> +	    <entry>n/a</entry> +	    <entry>n/a</entry> +	    <entry>A 64-bit integer valued control. Minimum, maximum +and step size cannot be queried.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_STRING</constant></entry> +	    <entry>≥ 0</entry> +	    <entry>≥ 1</entry> +	    <entry>≥ 0</entry> +	    <entry>The minimum and maximum string lengths. The step size +means that the string must be (minimum + N * step) characters long for +N ≥ 0. These lengths do not include the terminating zero, so in order to +pass a string of length 8 to &VIDIOC-S-EXT-CTRLS; you need to set the +<structfield>size</structfield> field of &v4l2-ext-control; to 9. For &VIDIOC-G-EXT-CTRLS; you can +set the <structfield>size</structfield> field to <structfield>maximum</structfield> + 1. +Which character encoding is used will depend on the string control itself and +should be part of the control documentation.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_TYPE_CTRL_CLASS</constant></entry> +	    <entry>n/a</entry> +	    <entry>n/a</entry> +	    <entry>n/a</entry> +	    <entry>This is not a control. When +<constant>VIDIOC_QUERYCTRL</constant> is called with a control ID +equal to a control class code (see <xref linkend="ctrl-class" />) + 1, the +ioctl returns the name of the control class and this control type. +Older drivers which do not support this feature return an +&EINVAL;.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="control-flags"> +      <title>Control Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_DISABLED</constant></entry> +	    <entry>0x0001</entry> +	    <entry>This control is permanently disabled and should be +ignored by the application. Any attempt to change the control will +result in an &EINVAL;.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_GRABBED</constant></entry> +	    <entry>0x0002</entry> +	    <entry>This control is temporarily unchangeable, for +example because another application took over control of the +respective resource. Such controls may be displayed specially in a +user interface. Attempts to change the control may result in an +&EBUSY;.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_READ_ONLY</constant></entry> +	    <entry>0x0004</entry> +	    <entry>This control is permanently readable only. Any +attempt to change the control will result in an &EINVAL;.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_UPDATE</constant></entry> +	    <entry>0x0008</entry> +	    <entry>A hint that changing this control may affect the +value of other controls within the same control class. Applications +should update their user interface accordingly.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_INACTIVE</constant></entry> +	    <entry>0x0010</entry> +	    <entry>This control is not applicable to the current +configuration and should be displayed accordingly in a user interface. +For example the flag may be set on a MPEG audio level 2 bitrate +control when MPEG audio encoding level 1 was selected with another +control.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_SLIDER</constant></entry> +	    <entry>0x0020</entry> +	    <entry>A hint that this control is best represented as a +slider-like element in a user interface.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_WRITE_ONLY</constant></entry> +	    <entry>0x0040</entry> +	    <entry>This control is permanently writable only. Any +attempt to read the control will result in an &EACCES; error code. This +flag is typically present for relative controls or action controls where +writing a value will cause the device to carry out a given action +(⪚ motor control) but no meaningful value can be returned.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_CTRL_FLAG_VOLATILE</constant></entry> +	    <entry>0x0080</entry> +	    <entry>This control is volatile, which means that the value of the control +changes continuously. A typical example would be the current gain value if the device +is in auto-gain mode. In such a case the hardware calculates the gain value based on +the lighting conditions which can change over time. Note that setting a new value for +a volatile control will have no effect. The new value will just be ignored.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-queryctrl; <structfield>id</structfield> +is invalid. The &v4l2-querymenu; <structfield>id</structfield> is +invalid or <structfield>index</structfield> is out of range (less than +<structfield>minimum</structfield> or greater than <structfield>maximum</structfield>) +or this particular menu item is not supported by the driver.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EACCES</errorcode></term> +	<listitem> +	  <para>An attempt was made to read a write-only control.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-querystd.xml b/Documentation/DocBook/media/v4l/vidioc-querystd.xml new file mode 100644 index 00000000000..22234854218 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-querystd.xml @@ -0,0 +1,75 @@ +<refentry id="vidioc-querystd"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_QUERYSTD</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_QUERYSTD</refname> +    <refpurpose>Sense the video standard received by the current +input</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>v4l2_std_id *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +	<varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_QUERYSTD</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>The hardware may be able to detect the current video +standard automatically. To do so, applications call <constant> +VIDIOC_QUERYSTD</constant> with a pointer to a &v4l2-std-id; type. The +driver stores here a set of candidates, this can be a single flag or a +set of supported standards if for example the hardware can only +distinguish between 50 and 60 Hz systems. If no signal was detected, +then the driver will return V4L2_STD_UNKNOWN. When detection is not +possible or fails, the set must contain all standards supported by the +current video input or output.</para> + +  </refsect1> + +  <refsect1> +    &return-value; +    <variablelist> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>Standard video timings are not supported for this input or output.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml b/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml new file mode 100644 index 00000000000..78a06a9a5ec --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml @@ -0,0 +1,137 @@ +<refentry id="vidioc-reqbufs"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_REQBUFS</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_REQBUFS</refname> +    <refpurpose>Initiate Memory Mapping or User Pointer I/O</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_requestbuffers *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_REQBUFS</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +<para>This ioctl is used to initiate <link linkend="mmap">memory mapped</link>, +<link linkend="userp">user pointer</link> or <link +linkend="dmabuf">DMABUF</link> based I/O.  Memory mapped buffers are located in +device memory and must be allocated with this ioctl before they can be mapped +into the application's address space. User buffers are allocated by +applications themselves, and this ioctl is merely used to switch the driver +into user pointer I/O mode and to setup some internal structures. +Similarly, DMABUF buffers are allocated by applications through a device +driver, and this ioctl only configures the driver into DMABUF I/O mode without +performing any direct allocation.</para> + +    <para>To allocate device buffers applications initialize all fields of the +<structname>v4l2_requestbuffers</structname> structure.  They set the +<structfield>type</structfield> field to the respective stream or buffer type, +the <structfield>count</structfield> field to the desired number of buffers, +<structfield>memory</structfield> must be set to the requested I/O method and +the <structfield>reserved</structfield> array must be zeroed. When the ioctl is +called with a pointer to this structure the driver will attempt to allocate the +requested number of buffers and it stores the actual number allocated in the +<structfield>count</structfield> field. It can be smaller than the number +requested, even zero, when the driver runs out of free memory. A larger number +is also possible when the driver requires more buffers to function correctly. +For example video output requires at least two buffers, one displayed and one +filled by the application.</para> +    <para>When the I/O method is not supported the ioctl +returns an &EINVAL;.</para> + +    <para>Applications can call <constant>VIDIOC_REQBUFS</constant> +again to change the number of buffers, however this cannot succeed +when any buffers are still mapped. A <structfield>count</structfield> +value of zero frees all buffers, after aborting or finishing any DMA +in progress, an implicit &VIDIOC-STREAMOFF;. <!-- mhs: I see no +reason why munmap()ping one or even all buffers must imply +streamoff.--></para> + +    <table pgwide="1" frame="none" id="v4l2-requestbuffers"> +      <title>struct <structname>v4l2_requestbuffers</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>count</structfield></entry> +	    <entry>The number of buffers requested or granted.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the stream or buffers, this is the same +as the &v4l2-format; <structfield>type</structfield> field. See <xref +		linkend="v4l2-buf-type" /> for valid values.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>memory</structfield></entry> +	    <entry>Applications set this field to +<constant>V4L2_MEMORY_MMAP</constant>, +<constant>V4L2_MEMORY_DMABUF</constant> or +<constant>V4L2_MEMORY_USERPTR</constant>. See <xref linkend="v4l2-memory" +/>.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[2]</entry> +	    <entry>A place holder for future extensions. This array should +be zeroed by applications.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The buffer type (<structfield>type</structfield> field) or the +requested I/O method (<structfield>memory</structfield>) is not +supported.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml b/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml new file mode 100644 index 00000000000..a5fc4c4880f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml @@ -0,0 +1,188 @@ +<refentry id="vidioc-s-hw-freq-seek"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_S_HW_FREQ_SEEK</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_S_HW_FREQ_SEEK</refname> +    <refpurpose>Perform a hardware frequency seek</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_hw_freq_seek +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_S_HW_FREQ_SEEK</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Start a hardware frequency seek from the current frequency. +To do this applications initialize the <structfield>tuner</structfield>, +<structfield>type</structfield>, <structfield>seek_upward</structfield>, +<structfield>wrap_around</structfield>, <structfield>spacing</structfield>, +<structfield>rangelow</structfield> and <structfield>rangehigh</structfield> +fields, and zero out the <structfield>reserved</structfield> array of a +&v4l2-hw-freq-seek; and call the <constant>VIDIOC_S_HW_FREQ_SEEK</constant> +ioctl with a pointer to this structure.</para> + +    <para>The <structfield>rangelow</structfield> and +<structfield>rangehigh</structfield> fields can be set to a non-zero value to +tell the driver to search a specific band. If the &v4l2-tuner; +<structfield>capability</structfield> field has the +<constant>V4L2_TUNER_CAP_HWSEEK_PROG_LIM</constant> flag set, these values +must fall within one of the bands returned by &VIDIOC-ENUM-FREQ-BANDS;. If +the <constant>V4L2_TUNER_CAP_HWSEEK_PROG_LIM</constant> flag is not set, +then these values must exactly match those of one of the bands returned by +&VIDIOC-ENUM-FREQ-BANDS;. If the current frequency of the tuner does not fall +within the selected band it will be clamped to fit in the band before the +seek is started.</para> + +    <para>If an error is returned, then the original frequency will +    be restored.</para> + +    <para>This ioctl is supported if the <constant>V4L2_CAP_HW_FREQ_SEEK</constant> capability is set.</para> + +    <para>If this ioctl is called from a non-blocking filehandle, then &EAGAIN; is +    returned and no seek takes place.</para> + +    <table pgwide="1" frame="none" id="v4l2-hw-freq-seek"> +      <title>struct <structname>v4l2_hw_freq_seek</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>tuner</structfield></entry> +	    <entry>The tuner index number. This is the +same value as in the &v4l2-input; <structfield>tuner</structfield> +field and the &v4l2-tuner; <structfield>index</structfield> field.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>The tuner type. This is the same value as in the +&v4l2-tuner; <structfield>type</structfield> field. See <xref +	    linkend="v4l2-tuner-type" /></entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>seek_upward</structfield></entry> +	    <entry>If non-zero, seek upward from the current frequency, else seek downward.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>wrap_around</structfield></entry> +	    <entry>If non-zero, wrap around when at the end of the frequency range, else stop seeking. +	    The &v4l2-tuner; <structfield>capability</structfield> field will tell you what the +	    hardware supports. +	    </entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>spacing</structfield></entry> +	    <entry>If non-zero, defines the hardware seek resolution in Hz. The driver selects the nearest value that is supported by the device. If spacing is zero a reasonable default value is used.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangelow</structfield></entry> +	    <entry>If non-zero, the lowest tunable frequency of the band to +search in units of 62.5 kHz, or if the &v4l2-tuner; +<structfield>capability</structfield> field has the +<constant>V4L2_TUNER_CAP_LOW</constant> flag set, in units of 62.5 Hz or if the &v4l2-tuner; +<structfield>capability</structfield> field has the +<constant>V4L2_TUNER_CAP_1HZ</constant> flag set, in units of 1 Hz. +If <structfield>rangelow</structfield> is zero a reasonable default value +is used.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>rangehigh</structfield></entry> +	    <entry>If non-zero, the highest tunable frequency of the band to +search in units of 62.5 kHz, or if the &v4l2-tuner; +<structfield>capability</structfield> field has the +<constant>V4L2_TUNER_CAP_LOW</constant> flag set, in units of 62.5 Hz or if the &v4l2-tuner; +<structfield>capability</structfield> field has the +<constant>V4L2_TUNER_CAP_1HZ</constant> flag set, in units of 1 Hz. +If <structfield>rangehigh</structfield> is zero a reasonable default value +is used.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[5]</entry> +	    <entry>Reserved for future extensions. Applications +	    must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The <structfield>tuner</structfield> index is out of +bounds, the <structfield>wrap_around</structfield> value is not supported or +one of the values in the <structfield>type</structfield>, +<structfield>rangelow</structfield> or <structfield>rangehigh</structfield> +fields is wrong.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EAGAIN</errorcode></term> +	<listitem> +	  <para>Attempted to call <constant>VIDIOC_S_HW_FREQ_SEEK</constant> +	  with the filehandle in non-blocking mode.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>ENODATA</errorcode></term> +	<listitem> +	  <para>The hardware seek found no channels.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>Another hardware seek is already in progress.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-streamon.xml b/Documentation/DocBook/media/v4l/vidioc-streamon.xml new file mode 100644 index 00000000000..df2c63d07ba --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-streamon.xml @@ -0,0 +1,128 @@ +<refentry id="vidioc-streamon"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_STREAMON, VIDIOC_STREAMOFF</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_STREAMON</refname> +    <refname>VIDIOC_STREAMOFF</refname> +    <refpurpose>Start or stop streaming I/O</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const int *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_STREAMON, VIDIOC_STREAMOFF</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>The <constant>VIDIOC_STREAMON</constant> and +<constant>VIDIOC_STREAMOFF</constant> ioctl start and stop the capture +or output process during streaming (<link linkend="mmap">memory +mapping</link>, <link linkend="userp">user pointer</link> or +<link linkend="dmabuf">DMABUF</link>) I/O.</para> + +    <para>Capture hardware is disabled and no input +buffers are filled (if there are any empty buffers in the incoming +queue) until <constant>VIDIOC_STREAMON</constant> has been called. +Output hardware is disabled and no video signal is +produced until <constant>VIDIOC_STREAMON</constant> has been called. +The ioctl will succeed when at least one output buffer is in the +incoming queue.</para> + +    <para>Memory-to-memory devices will not start until +<constant>VIDIOC_STREAMON</constant> has been called for both the capture +and output stream types.</para> + +    <para>If <constant>VIDIOC_STREAMON</constant> fails then any already +queued buffers will remain queued.</para> + +    <para>The <constant>VIDIOC_STREAMOFF</constant> ioctl, apart of +aborting or finishing any DMA in progress, unlocks any user pointer +buffers locked in physical memory, and it removes all buffers from the +incoming and outgoing queues. That means all images captured but not +dequeued yet will be lost, likewise all images enqueued for output but +not transmitted yet. I/O returns to the same state as after calling +&VIDIOC-REQBUFS; and can be restarted accordingly.</para> + +    <para>If buffers have been queued with &VIDIOC-QBUF; and +<constant>VIDIOC_STREAMOFF</constant> is called without ever having +called <constant>VIDIOC_STREAMON</constant>, then those queued buffers +will also be removed from the incoming queue and all are returned to the +same state as after calling &VIDIOC-REQBUFS; and can be restarted +accordingly.</para> + +    <para>Both ioctls take a pointer to an integer, the desired buffer or +stream type. This is the same as &v4l2-requestbuffers; +<structfield>type</structfield>.</para> + +    <para>If <constant>VIDIOC_STREAMON</constant> is called when streaming +is already in progress, or if <constant>VIDIOC_STREAMOFF</constant> is called +when streaming is already stopped, then 0 is returned. Nothing happens in the +case of <constant>VIDIOC_STREAMON</constant>, but <constant>VIDIOC_STREAMOFF</constant> +will return queued buffers to their starting state as mentioned above.</para> + +    <para>Note that applications can be preempted for unknown periods right +before or after the <constant>VIDIOC_STREAMON</constant> or +<constant>VIDIOC_STREAMOFF</constant> calls, there is no notion of +starting or stopping "now". Buffer timestamps can be used to +synchronize with other events.</para> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The buffer <structfield>type</structfield> is not supported, +	  or no buffers have been allocated (memory mapping) or enqueued +	  (output) yet.</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EPIPE</errorcode></term> +	<listitem> +	  <para>The driver implements <link +	  linkend="pad-level-formats">pad-level format configuration</link> and +	  the pipeline configuration is invalid. +	  </para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml new file mode 100644 index 00000000000..2f8f4f0a023 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml @@ -0,0 +1,152 @@ +<refentry id="vidioc-subdev-enum-frame-interval"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refname> +    <refpurpose>Enumerate frame intervals</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_frame_interval_enum * +	<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +    <para>This ioctl lets applications enumerate available frame intervals on a +    given sub-device pad. Frame intervals only makes sense for sub-devices that +    can control the frame period on their own. This includes, for instance, +    image sensors and TV tuners.</para> + +    <para>For the common use case of image sensors, the frame intervals +    available on the sub-device output pad depend on the frame format and size +    on the same pad. Applications must thus specify the desired format and size +    when enumerating frame intervals.</para> + +    <para>To enumerate frame intervals applications initialize the +    <structfield>index</structfield>, <structfield>pad</structfield>, +    <structfield>code</structfield>, <structfield>width</structfield> and +    <structfield>height</structfield> fields of +    &v4l2-subdev-frame-interval-enum; and call the +    <constant>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</constant> ioctl with a pointer +    to this structure. Drivers fill the rest of the structure or return +    an &EINVAL; if one of the input fields is invalid. All frame intervals are +    enumerable by beginning at index zero and incrementing by one until +    <errorcode>EINVAL</errorcode> is returned.</para> + +    <para>Available frame intervals may depend on the current 'try' formats +    at other pads of the sub-device, as well as on the current active links. See +    &VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para> + +    <para>Sub-devices that support the frame interval enumeration ioctl should +    implemented it on a single pad only. Its behaviour when supported on +    multiple pads of the same sub-device is not defined.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-frame-interval-enum"> +      <title>struct <structname>v4l2_subdev_frame_interval_enum</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the format in the enumeration, set by the +	    application.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>code</structfield></entry> +	    <entry>The media bus format code, as defined in +	    <xref linkend="v4l2-mbus-format" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>width</structfield></entry> +	    <entry>Frame width, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>height</structfield></entry> +	    <entry>Frame height, in pixels.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>interval</structfield></entry> +	    <entry>Period, in seconds, between consecutive video frames.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[9]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-frame-interval-enum; +	  <structfield>pad</structfield> references a non-existing pad, one of +	  the <structfield>code</structfield>, <structfield>width</structfield> +	  or <structfield>height</structfield> fields are invalid for the given +	  pad or the <structfield>index</structfield> field is out of bounds. +	  </para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml new file mode 100644 index 00000000000..79ce42b7c60 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml @@ -0,0 +1,154 @@ +<refentry id="vidioc-subdev-enum-frame-size"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refname> +    <refpurpose>Enumerate media bus frame sizes</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_frame_size_enum * +	<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +    <para>This ioctl allows applications to enumerate all frame sizes +    supported by a sub-device on the given pad for the given media bus format. +    Supported formats can be retrieved with the &VIDIOC-SUBDEV-ENUM-MBUS-CODE; +    ioctl.</para> + +    <para>To enumerate frame sizes applications initialize the +    <structfield>pad</structfield>, <structfield>code</structfield> and +    <structfield>index</structfield> fields of the +    &v4l2-subdev-mbus-code-enum; and call the +    <constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant> ioctl with a pointer to +    the structure. Drivers fill the minimum and maximum frame sizes or return +    an &EINVAL; if one of the input parameters is invalid.</para> + +    <para>Sub-devices that only support discrete frame sizes (such as most +    sensors) will return one or more frame sizes with identical minimum and +    maximum values.</para> + +    <para>Not all possible sizes in given [minimum, maximum] ranges need to be +    supported. For instance, a scaler that uses a fixed-point scaling ratio +    might not be able to produce every frame size between the minimum and +    maximum values. Applications must use the &VIDIOC-SUBDEV-S-FMT; ioctl to +    try the sub-device for an exact supported frame size.</para> + +    <para>Available frame sizes may depend on the current 'try' formats at other +    pads of the sub-device, as well as on the current active links and the +    current values of V4L2 controls. See &VIDIOC-SUBDEV-G-FMT; for more +    information about try formats.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-frame-size-enum"> +      <title>struct <structname>v4l2_subdev_frame_size_enum</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the format in the enumeration, set by the +	    application.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>code</structfield></entry> +	    <entry>The media bus format code, as defined in +	    <xref linkend="v4l2-mbus-format" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>min_width</structfield></entry> +	    <entry>Minimum frame width, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>max_width</structfield></entry> +	    <entry>Maximum frame width, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>min_height</structfield></entry> +	    <entry>Minimum frame height, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>max_height</structfield></entry> +	    <entry>Maximum frame height, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[9]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-frame-size-enum; <structfield>pad</structfield> +	  references a non-existing pad, the <structfield>code</structfield> is +	  invalid for the given pad or the <structfield>index</structfield> +	  field is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml new file mode 100644 index 00000000000..a6b3432449f --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml @@ -0,0 +1,119 @@ +<refentry id="vidioc-subdev-enum-mbus-code"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_MBUS_CODE</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_ENUM_MBUS_CODE</refname> +    <refpurpose>Enumerate media bus formats</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_mbus_code_enum * +	<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_ENUM_MBUS_CODE</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +    <para>To enumerate media bus formats available at a given sub-device pad +    applications initialize the <structfield>pad</structfield> and +    <structfield>index</structfield> fields of &v4l2-subdev-mbus-code-enum; and +    call the <constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant> ioctl with a +    pointer to this structure. Drivers fill the rest of the structure or return +    an &EINVAL; if either the <structfield>pad</structfield> or +    <structfield>index</structfield> are invalid. All media bus formats are +    enumerable by beginning at index zero and incrementing by one until +    <errorcode>EINVAL</errorcode> is returned.</para> + +    <para>Available media bus formats may depend on the current 'try' formats +    at other pads of the sub-device, as well as on the current active links. See +    &VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-mbus-code-enum"> +      <title>struct <structname>v4l2_subdev_mbus_code_enum</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>index</structfield></entry> +	    <entry>Number of the format in the enumeration, set by the +	    application.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>code</structfield></entry> +	    <entry>The media bus format code, as defined in +	    <xref linkend="v4l2-mbus-format" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[9]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-mbus-code-enum; <structfield>pad</structfield> +	  references a non-existing pad, or the <structfield>index</structfield> +	  field is out of bounds.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml new file mode 100644 index 00000000000..4cddd788c58 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml @@ -0,0 +1,158 @@ +<refentry id="vidioc-subdev-g-crop"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_G_CROP</refname> +    <refname>VIDIOC_SUBDEV_S_CROP</refname> +    <refpurpose>Get or set the crop rectangle on a subdev pad</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_crop *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>const struct v4l2_subdev_crop *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Obsolete</title> + +      <para>This is an <link linkend="obsolete">obsolete</link> +      interface and may be removed in the future. It is superseded by +      <link linkend="vidioc-subdev-g-selection">the selection +      API</link>.</para> +    </note> + +    <para>To retrieve the current crop rectangle applications set the +    <structfield>pad</structfield> field of a &v4l2-subdev-crop; to the +    desired pad number as reported by the media API and the +    <structfield>which</structfield> field to +    <constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. They then call the +    <constant>VIDIOC_SUBDEV_G_CROP</constant> ioctl with a pointer to this +    structure. The driver fills the members of the <structfield>rect</structfield> +    field or returns &EINVAL; if the input arguments are invalid, or if cropping +    is not supported on the given pad.</para> + +    <para>To change the current crop rectangle applications set both the +    <structfield>pad</structfield> and <structfield>which</structfield> fields +    and all members of the <structfield>rect</structfield> field. They then call +    the <constant>VIDIOC_SUBDEV_S_CROP</constant> ioctl with a pointer to this +    structure. The driver verifies the requested crop rectangle, adjusts it +    based on the hardware capabilities and configures the device. Upon return +    the &v4l2-subdev-crop; contains the current format as would be returned +    by a <constant>VIDIOC_SUBDEV_G_CROP</constant> call.</para> + +    <para>Applications can query the device capabilities by setting the +    <structfield>which</structfield> to +    <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' crop +    rectangles are not applied to the device by the driver, but are mangled +    exactly as active crop rectangles and stored in the sub-device file handle. +    Two applications querying the same sub-device would thus not interact with +    each other.</para> + +    <para>Drivers must not return an error solely because the requested crop +    rectangle doesn't match the device capabilities. They must instead modify +    the rectangle to match what the hardware can provide. The modified format +    should be as close as possible to the original request.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-crop"> +      <title>struct <structname>v4l2_subdev_crop</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media framework.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>which</structfield></entry> +	    <entry>Crop rectangle to get or set, from +	    &v4l2-subdev-format-whence;.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-rect;</entry> +	    <entry><structfield>rect</structfield></entry> +	    <entry>Crop rectangle boundaries, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[8]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The crop rectangle can't be changed because the pad is currently +	  busy. This can be caused, for instance, by an active video stream on +	  the pad. The ioctl must not be retried without performing another +	  action to fix the problem first. Only returned by +	  <constant>VIDIOC_SUBDEV_S_CROP</constant></para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-crop; <structfield>pad</structfield> +	  references a non-existing pad, the <structfield>which</structfield> +	  field references a non-existing format, or cropping is not supported +	  on the given subdev pad.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml new file mode 100644 index 00000000000..a67cde6f8c5 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml @@ -0,0 +1,183 @@ +<refentry id="vidioc-subdev-g-fmt"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_G_FMT</refname> +    <refname>VIDIOC_SUBDEV_S_FMT</refname> +    <refpurpose>Get or set the data format on a subdev pad</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_format *<parameter>argp</parameter> +	</paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +    <para>These ioctls are used to negotiate the frame format at specific +    subdev pads in the image pipeline.</para> + +    <para>To retrieve the current format applications set the +    <structfield>pad</structfield> field of a &v4l2-subdev-format; to the +    desired pad number as reported by the media API and the +    <structfield>which</structfield> field to +    <constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. When they call the +    <constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl with a pointer to this +    structure the driver fills the members of the <structfield>format</structfield> +    field.</para> + +    <para>To change the current format applications set both the +    <structfield>pad</structfield> and <structfield>which</structfield> fields +    and all members of the <structfield>format</structfield> field. When they +    call the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl with a pointer to this +    structure the driver verifies the requested format, adjusts it based on the +    hardware capabilities and configures the device. Upon return the +    &v4l2-subdev-format; contains the current format as would be returned by a +    <constant>VIDIOC_SUBDEV_G_FMT</constant> call.</para> + +    <para>Applications can query the device capabilities by setting the +    <structfield>which</structfield> to +    <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' formats are not +    applied to the device by the driver, but are changed exactly as active +    formats and stored in the sub-device file handle. Two applications querying +    the same sub-device would thus not interact with each other.</para> + +    <para>For instance, to try a format at the output pad of a sub-device, +    applications would first set the try format at the sub-device input with the +    <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl. They would then either +    retrieve the default format at the output pad with the +    <constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl, or set the desired output +    pad format with the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl and check +    the returned value.</para> + +    <para>Try formats do not depend on active formats, but can depend on the +    current links configuration or sub-device controls value. For instance, a +    low-pass noise filter might crop pixels at the frame boundaries, modifying +    its output frame size.</para> + +    <para>Drivers must not return an error solely because the requested format +    doesn't match the device capabilities. They must instead modify the format +    to match what the hardware can provide. The modified format should be as +    close as possible to the original request.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-format"> +      <title>struct <structname>v4l2_subdev_format</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>which</structfield></entry> +	    <entry>Format to modified, from &v4l2-subdev-format-whence;.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-mbus-framefmt;</entry> +	    <entry><structfield>format</structfield></entry> +	    <entry>Definition of an image format, see <xref +	    linkend="v4l2-mbus-framefmt" /> for details.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[8]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="v4l2-subdev-format-whence"> +      <title>enum <structname>v4l2_subdev_format_whence</structname></title> +      <tgroup cols="3"> +        &cs-def; +	<tbody valign="top"> +	  <row> +	    <entry>V4L2_SUBDEV_FORMAT_TRY</entry> +	    <entry>0</entry> +	    <entry>Try formats, used for querying device capabilities.</entry> +	  </row> +	  <row> +	    <entry>V4L2_SUBDEV_FORMAT_ACTIVE</entry> +	    <entry>1</entry> +	    <entry>Active formats, applied to the hardware.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The format can't be changed because the pad is currently busy. +	  This can be caused, for instance, by an active video stream on the +	  pad. The ioctl must not be retried without performing another action +	  to fix the problem first. Only returned by +	  <constant>VIDIOC_SUBDEV_S_FMT</constant></para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-format; <structfield>pad</structfield> +	  references a non-existing pad, or the <structfield>which</structfield> +	  field references a non-existing format.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +  <refsect1> +    &return-value; +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml new file mode 100644 index 00000000000..0bc3ea22d31 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml @@ -0,0 +1,141 @@ +<refentry id="vidioc-subdev-g-frame-interval"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_G_FRAME_INTERVAL</refname> +    <refname>VIDIOC_SUBDEV_S_FRAME_INTERVAL</refname> +    <refpurpose>Get or set the frame interval on a subdev pad</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_frame_interval *<parameter>argp</parameter> +	</paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +    <para>These ioctls are used to get and set the frame interval at specific +    subdev pads in the image pipeline. The frame interval only makes sense for +    sub-devices that can control the frame period on their own. This includes, +    for instance, image sensors and TV tuners. Sub-devices that don't support +    frame intervals must not implement these ioctls.</para> + +    <para>To retrieve the current frame interval applications set the +    <structfield>pad</structfield> field of a &v4l2-subdev-frame-interval; to +    the desired pad number as reported by the media controller API. When they +    call the <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> ioctl with a +    pointer to this structure the driver fills the members of the +    <structfield>interval</structfield> field.</para> + +    <para>To change the current frame interval applications set both the +    <structfield>pad</structfield> field and all members of the +    <structfield>interval</structfield> field. When they call the +    <constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant> ioctl with a pointer to +    this structure the driver verifies the requested interval, adjusts it based +    on the hardware capabilities and configures the device. Upon return the +    &v4l2-subdev-frame-interval; contains the current frame interval as would be +    returned by a <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> call. +    </para> + +    <para>Drivers must not return an error solely because the requested interval +    doesn't match the device capabilities. They must instead modify the interval +    to match what the hardware can provide. The modified interval should be as +    close as possible to the original request.</para> + +    <para>Sub-devices that support the frame interval ioctls should implement +    them on a single pad only. Their behaviour when supported on multiple pads +    of the same sub-device is not defined.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-frame-interval"> +      <title>struct <structname>v4l2_subdev_frame_interval</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media controller API.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-fract;</entry> +	    <entry><structfield>interval</structfield></entry> +	    <entry>Period, in seconds, between consecutive video frames.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[9]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The frame interval can't be changed because the pad is currently +	  busy. This can be caused, for instance, by an active video stream on +	  the pad. The ioctl must not be retried without performing another +	  action to fix the problem first. Only returned by +	  <constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-frame-interval; <structfield>pad</structfield> +	  references a non-existing pad, or the pad doesn't support frame +	  intervals.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml new file mode 100644 index 00000000000..1ba9e999af3 --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml @@ -0,0 +1,165 @@ +<refentry id="vidioc-subdev-g-selection"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBDEV_G_SELECTION</refname> +    <refname>VIDIOC_SUBDEV_S_SELECTION</refname> +    <refpurpose>Get or set selection rectangles on a subdev pad</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_subdev_selection *<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <note> +      <title>Experimental</title> +      <para>This is an <link linkend="experimental">experimental</link> +      interface and may change in the future.</para> +    </note> + +    <para>The selections are used to configure various image +    processing functionality performed by the subdevs which affect the +    image size. This currently includes cropping, scaling and +    composition.</para> + +    <para>The selection API replaces <link +    linkend="vidioc-subdev-g-crop">the old subdev crop API</link>. All +    the function of the crop API, and more, are supported by the +    selections API.</para> + +    <para>See <xref linkend="subdev"></xref> for +    more information on how each selection target affects the image +    processing pipeline inside the subdevice.</para> + +    <refsect2> +      <title>Types of selection targets</title> + +      <para>There are two types of selection targets: actual and bounds. The +      actual targets are the targets which configure the hardware. The BOUNDS +      target will return a rectangle that contain all possible actual +      rectangles.</para> +    </refsect2> + +    <refsect2> +      <title>Discovering supported features</title> + +      <para>To discover which targets are supported, the user can +      perform <constant>VIDIOC_SUBDEV_G_SELECTION</constant> on them. +      Any unsupported target will return +      <constant>EINVAL</constant>.</para> + +    <para>Selection targets and flags are documented in <xref +    linkend="v4l2-selections-common"/>.</para> + +    <table pgwide="1" frame="none" id="v4l2-subdev-selection"> +      <title>struct <structname>v4l2_subdev_selection</structname></title> +      <tgroup cols="3"> +        &cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>which</structfield></entry> +	    <entry>Active or try selection, from +	    &v4l2-subdev-format-whence;.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>pad</structfield></entry> +	    <entry>Pad number as reported by the media framework.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>target</structfield></entry> +	    <entry>Target selection rectangle. See +	    <xref linkend="v4l2-selections-common" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Flags. See +	    <xref linkend="v4l2-selection-flags" />.</entry> +	  </row> +	  <row> +	    <entry>&v4l2-rect;</entry> +	    <entry><structfield>rect</structfield></entry> +	    <entry>Selection rectangle, in pixels.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[8]</entry> +	    <entry>Reserved for future extensions. Applications and drivers must +	    set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> +    </refsect2> + +  </refsect1> + +  <refsect1> +    &return-value; + +    <variablelist> +      <varlistentry> +	<term><errorcode>EBUSY</errorcode></term> +	<listitem> +	  <para>The selection rectangle can't be changed because the +	  pad is currently busy. This can be caused, for instance, by +	  an active video stream on the pad. The ioctl must not be +	  retried without performing another action to fix the problem +	  first. Only returned by +	  <constant>VIDIOC_SUBDEV_S_SELECTION</constant></para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><errorcode>EINVAL</errorcode></term> +	<listitem> +	  <para>The &v4l2-subdev-selection; +	  <structfield>pad</structfield> references a non-existing +	  pad, the <structfield>which</structfield> field references a +	  non-existing format, or the selection target is not +	  supported on the given subdev pad.</para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> +</refentry> diff --git a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml new file mode 100644 index 00000000000..17efa870d4d --- /dev/null +++ b/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml @@ -0,0 +1,226 @@ +<refentry id="vidioc-subscribe-event"> +  <refmeta> +    <refentrytitle>ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT</refentrytitle> +    &manvol; +  </refmeta> + +  <refnamediv> +    <refname>VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT</refname> +    <refpurpose>Subscribe or unsubscribe event</refpurpose> +  </refnamediv> + +  <refsynopsisdiv> +    <funcsynopsis> +      <funcprototype> +	<funcdef>int <function>ioctl</function></funcdef> +	<paramdef>int <parameter>fd</parameter></paramdef> +	<paramdef>int <parameter>request</parameter></paramdef> +	<paramdef>struct v4l2_event_subscription +*<parameter>argp</parameter></paramdef> +      </funcprototype> +    </funcsynopsis> +  </refsynopsisdiv> + +  <refsect1> +    <title>Arguments</title> + +    <variablelist> +      <varlistentry> +	<term><parameter>fd</parameter></term> +	<listitem> +	  <para>&fd;</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>request</parameter></term> +	<listitem> +	  <para>VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT</para> +	</listitem> +      </varlistentry> +      <varlistentry> +	<term><parameter>argp</parameter></term> +	<listitem> +	  <para></para> +	</listitem> +      </varlistentry> +    </variablelist> +  </refsect1> + +  <refsect1> +    <title>Description</title> + +    <para>Subscribe or unsubscribe V4L2 event. Subscribed events are +    dequeued by using the &VIDIOC-DQEVENT; ioctl.</para> + +    <table frame="none" pgwide="1" id="v4l2-event-subscription"> +      <title>struct <structname>v4l2_event_subscription</structname></title> +      <tgroup cols="3"> +	&cs-str; +	<tbody valign="top"> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>type</structfield></entry> +	    <entry>Type of the event.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>id</structfield></entry> +	    <entry>ID of the event source. If there is no ID associated with +		the event source, then set this to 0. Whether or not an event +		needs an ID depends on the event type.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>flags</structfield></entry> +	    <entry>Event flags, see <xref linkend="event-flags" />.</entry> +	  </row> +	  <row> +	    <entry>__u32</entry> +	    <entry><structfield>reserved</structfield>[5]</entry> +	    <entry>Reserved for future extensions. Drivers and applications +	    must set the array to zero.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table frame="none" pgwide="1" id="event-type"> +      <title>Event Types</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_EVENT_ALL</constant></entry> +	    <entry>0</entry> +	    <entry>All events. V4L2_EVENT_ALL is valid only for +	    VIDIOC_UNSUBSCRIBE_EVENT for unsubscribing all events at once. +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_VSYNC</constant></entry> +	    <entry>1</entry> +	    <entry>This event is triggered on the vertical sync. +	    This event has a &v4l2-event-vsync; associated with it. +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_EOS</constant></entry> +	    <entry>2</entry> +	    <entry>This event is triggered when the end of a stream is reached. +	    This is typically used with MPEG decoders to report to the application +	    when the last of the MPEG stream has been decoded. +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_CTRL</constant></entry> +	    <entry>3</entry> +	    <entry><para>This event requires that the <structfield>id</structfield> +		matches the control ID from which you want to receive events. +		This event is triggered if the control's value changes, if a +		button control is pressed or if the control's flags change. +	    	This event has a &v4l2-event-ctrl; associated with it. This struct +		contains much of the same information as &v4l2-queryctrl; and +		&v4l2-control;.</para> + +		<para>If the event is generated due to a call to &VIDIOC-S-CTRL; or +		&VIDIOC-S-EXT-CTRLS;, then the event will <emphasis>not</emphasis> be sent to +		the file handle that called the ioctl function. This prevents +		nasty feedback loops. If you <emphasis>do</emphasis> want to get the +		event, then set the <constant>V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK</constant> +		flag. +		</para> + +		<para>This event type will ensure that no information is lost when +		more events are raised than there is room internally. In that +		case the &v4l2-event-ctrl; of the second-oldest event is kept, +		but the <structfield>changes</structfield> field of the +		second-oldest event is ORed with the <structfield>changes</structfield> +		field of the oldest event.</para> +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_FRAME_SYNC</constant></entry> +	    <entry>4</entry> +	    <entry> +	      <para>Triggered immediately when the reception of a +	      frame has begun. This event has a +	      &v4l2-event-frame-sync; associated with it.</para> + +	      <para>If the hardware needs to be stopped in the case of a +	      buffer underrun it might not be able to generate this event. +	      In such cases the <structfield>frame_sequence</structfield> +	      field in &v4l2-event-frame-sync; will not be incremented. This +	      causes two consecutive frame sequence numbers to have n times +	      frame interval in between them.</para> +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_SOURCE_CHANGE</constant></entry> +	    <entry>5</entry> +	    <entry> +	      <para>This event is triggered when a source parameter change is +	       detected during runtime by the video device. It can be a +	       runtime resolution change triggered by a video decoder or the +	       format change happening on an input connector. +	       This event requires that the <structfield>id</structfield> +	       matches the input index (when used with a video device node) +	       or the pad index (when used with a subdevice node) from which +	       you want to receive events.</para> + +              <para>This event has a &v4l2-event-src-change; associated +	      with it. The <structfield>changes</structfield> bitfield denotes +	      what has changed for the subscribed pad. If multiple events +	      occurred before application could dequeue them, then the changes +	      will have the ORed value of all the events generated.</para> +	    </entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_PRIVATE_START</constant></entry> +	    <entry>0x08000000</entry> +	    <entry>Base event number for driver-private events.</entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +    <table pgwide="1" frame="none" id="event-flags"> +      <title>Event Flags</title> +      <tgroup cols="3"> +	&cs-def; +	<tbody valign="top"> +	  <row> +	    <entry><constant>V4L2_EVENT_SUB_FL_SEND_INITIAL</constant></entry> +	    <entry>0x0001</entry> +	    <entry>When this event is subscribed an initial event will be sent +		containing the current status. This only makes sense for events +		that are triggered by a status change such as <constant>V4L2_EVENT_CTRL</constant>. +		Other events will ignore this flag.</entry> +	  </row> +	  <row> +	    <entry><constant>V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK</constant></entry> +	    <entry>0x0002</entry> +	    <entry><para>If set, then events directly caused by an ioctl will also be sent to +		the filehandle that called that ioctl. For example, changing a control using +		&VIDIOC-S-CTRL; will cause a V4L2_EVENT_CTRL to be sent back to that same +		filehandle. Normally such events are suppressed to prevent feedback loops +		where an application changes a control to a one value and then another, and +		then receives an event telling it that that control has changed to the first +		value.</para> + +		<para>Since it can't tell whether that event was caused by another application +		or by the &VIDIOC-S-CTRL; call it is hard to decide whether to set the +		control to the value in the event, or ignore it.</para> + +		<para>Think carefully when you set this flag so you won't get into situations +		like that.</para> +	    </entry> +	  </row> +	</tbody> +      </tgroup> +    </table> + +  </refsect1> +  <refsect1> +    &return-value; +  </refsect1> +</refentry>  | 
