diff options
Diffstat (limited to 'Documentation')
437 files changed, 6649 insertions, 66918 deletions
diff --git a/Documentation/ABI/testing/sysfs-class-pwm b/Documentation/ABI/testing/sysfs-class-pwm index c479d77b67c5..c20e61354561 100644 --- a/Documentation/ABI/testing/sysfs-class-pwm +++ b/Documentation/ABI/testing/sysfs-class-pwm @@ -77,3 +77,12 @@ Description: Enable/disable the PWM signal. 0 is disabled 1 is enabled + +What: /sys/class/pwm/pwmchipN/pwmX/capture +Date: June 2016 +KernelVersion: 4.8 +Contact: Lee Jones <lee.jones@linaro.org> +Description: + Capture information about a PWM signal. The output format is a + pair unsigned integers (period and duty cycle), separated by a + single space. diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt index 45ef3f279c3b..1d26eeb6b5f6 100644 --- a/Documentation/DMA-API.txt +++ b/Documentation/DMA-API.txt @@ -369,35 +369,32 @@ See also dma_map_single(). dma_addr_t dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) void dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) The four functions above are just like the counterpart functions without the _attrs suffixes, except that they pass an optional -struct dma_attrs*. - -struct dma_attrs encapsulates a set of "DMA attributes". For the -definition of struct dma_attrs see linux/dma-attrs.h. +dma_attrs. The interpretation of DMA attributes is architecture-specific, and each attribute should be documented in Documentation/DMA-attributes.txt. -If struct dma_attrs* is NULL, the semantics of each of these -functions is identical to those of the corresponding function +If dma_attrs are 0, the semantics of each of these functions +is identical to those of the corresponding function without the _attrs suffix. As a result dma_map_single_attrs() can generally replace dma_map_single(), etc. @@ -405,15 +402,15 @@ As an example of the use of the *_attrs functions, here's how you could pass an attribute DMA_ATTR_FOO when mapping memory for DMA: -#include <linux/dma-attrs.h> -/* DMA_ATTR_FOO should be defined in linux/dma-attrs.h and +#include <linux/dma-mapping.h> +/* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and * documented in Documentation/DMA-attributes.txt */ ... - DEFINE_DMA_ATTRS(attrs); - dma_set_attr(DMA_ATTR_FOO, &attrs); + unsigned long attr; + attr |= DMA_ATTR_FOO; .... - n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, &attr); + n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr); .... Architectures that care about DMA_ATTR_FOO would check for its @@ -422,12 +419,10 @@ routines, e.g.: void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, - struct dma_attrs *attrs) + unsigned long attrs) { .... - int foo = dma_get_attr(DMA_ATTR_FOO, attrs); - .... - if (foo) + if (attrs & DMA_ATTR_FOO) /* twizzle the frobnozzle */ .... diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt index e8cf9cf873b3..2d455a5cf671 100644 --- a/Documentation/DMA-attributes.txt +++ b/Documentation/DMA-attributes.txt @@ -2,7 +2,7 @@ ============== This document describes the semantics of the DMA attributes that are -defined in linux/dma-attrs.h. +defined in linux/dma-mapping.h. DMA_ATTR_WRITE_BARRIER ---------------------- diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 01bab5014a4a..64460a897f56 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile @@ -6,8 +6,6 @@ # To add a new book the only step required is to add the book to the # list of DOCBOOKS. -ifeq ($(IGNORE_DOCBOOKS),) - DOCBOOKS := z8530book.xml device-drivers.xml \ kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ writing_usb_driver.xml networking.xml \ @@ -16,10 +14,16 @@ DOCBOOKS := z8530book.xml device-drivers.xml \ genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ 80211.xml debugobjects.xml sh.xml regulator.xml \ alsa-driver-api.xml writing-an-alsa-driver.xml \ - tracepoint.xml gpu.xml media_api.xml w1.xml \ + tracepoint.xml w1.xml \ writing_musb_glue_layer.xml crypto-API.xml iio.xml -include Documentation/DocBook/media/Makefile +ifeq ($(DOCBOOKS),) + +# Skip DocBook build if the user explicitly requested no DOCBOOKS. +.DEFAULT: + @echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)." + +else ### # The build process is as follows (targets): @@ -49,7 +53,6 @@ pdfdocs: $(PDF) HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) htmldocs: $(HTML) $(call cmd,build_main_index) - $(call install_media_images) MAN := $(patsubst %.xml, %.9, $(BOOKS)) mandocs: $(MAN) @@ -217,19 +220,7 @@ silent_gen_xml = : -e "s/>/\\>/g"; \ echo "</programlisting>") > $@ -else - -# Needed, due to cleanmediadocs -include Documentation/DocBook/media/Makefile - -htmldocs: -pdfdocs: -psdocs: -xmldocs: -installmandocs: - -endif # IGNORE_DOCBOOKS - +endif # DOCBOOKS="" ### # Help targets as used by the top-level makefile @@ -246,7 +237,7 @@ dochelp: @echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml' @echo ' valid values for DOCBOOKS are: $(DOCBOOKS)' @echo - @echo " make IGNORE_DOCBOOKS=1 [target] Don't generate docs from Docbook" + @echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook" @echo ' This is useful to generate only the ReST docs (Sphinx)' @@ -269,7 +260,7 @@ clean-files := $(DOCBOOKS) \ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man -cleandocs: cleanmediadocs +cleandocs: $(Q)rm -f $(call objectify, $(clean-files)) $(Q)rm -rf $(call objectify, $(clean-dirs)) diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl index 99cdc05bbb7a..9c10030eb2be 100644 --- a/Documentation/DocBook/device-drivers.tmpl +++ b/Documentation/DocBook/device-drivers.tmpl @@ -161,6 +161,10 @@ X!Edrivers/base/interface.c !Iinclude/linux/fence.h !Edrivers/dma-buf/seqno-fence.c !Iinclude/linux/seqno-fence.h +!Edrivers/dma-buf/fence-array.c +!Iinclude/linux/fence-array.h +!Edrivers/dma-buf/reservation.c +!Iinclude/linux/reservation.h !Edrivers/dma-buf/sync_file.c !Iinclude/linux/sync_file.h </sect2> diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl deleted file mode 100644 index 7586bf75f62e..000000000000 --- a/Documentation/DocBook/gpu.tmpl +++ /dev/null @@ -1,3540 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" - "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> - -<book id="gpuDevelopersGuide"> - <bookinfo> - <title>Linux GPU Driver Developer's Guide</title> - - <authorgroup> - <author> - <firstname>Jesse</firstname> - <surname>Barnes</surname> - <contrib>Initial version</contrib> - <affiliation> - <orgname>Intel Corporation</orgname> - <address> - <email>jesse.barnes@intel.com</email> - </address> - </affiliation> - </author> - <author> - <firstname>Laurent</firstname> - <surname>Pinchart</surname> - <contrib>Driver internals</contrib> - <affiliation> - <orgname>Ideas on board SPRL</orgname> - <address> - <email>laurent.pinchart@ideasonboard.com</email> - </address> - </affiliation> - </author> - <author> - <firstname>Daniel</firstname> - <surname>Vetter</surname> - <contrib>Contributions all over the place</contrib> - <affiliation> - <orgname>Intel Corporation</orgname> - <address> - <email>daniel.vetter@ffwll.ch</email> - </address> - </affiliation> - </author> - <author> - <firstname>Lukas</firstname> - <surname>Wunner</surname> - <contrib>vga_switcheroo documentation</contrib> - <affiliation> - <address> - <email>lukas@wunner.de</email> - </address> - </affiliation> - </author> - </authorgroup> - - <copyright> - <year>2008-2009</year> - <year>2013-2014</year> - <holder>Intel Corporation</holder> - </copyright> - <copyright> - <year>2012</year> - <holder>Laurent Pinchart</holder> - </copyright> - <copyright> - <year>2015</year> - <holder>Lukas Wunner</holder> - </copyright> - - <legalnotice> - <para> - The contents of this file may be used under the terms of the GNU - General Public License version 2 (the "GPL") as distributed in - the kernel source COPYING file. - </para> - </legalnotice> - - <revhistory> - <!-- Put document revisions here, newest first. --> - <revision> - <revnumber>1.0</revnumber> - <date>2012-07-13</date> - <authorinitials>LP</authorinitials> - <revremark>Added extensive documentation about driver internals. - </revremark> - </revision> - <revision> - <revnumber>1.1</revnumber> - <date>2015-10-11</date> - <authorinitials>LW</authorinitials> - <revremark>Added vga_switcheroo documentation. - </revremark> - </revision> - </revhistory> - </bookinfo> - -<toc></toc> - -<part id="drmCore"> - <title>DRM Core</title> - <partintro> - <para> - This first part of the GPU Driver Developer's Guide documents core DRM - code, helper libraries for writing drivers and generic userspace - interfaces exposed by DRM drivers. - </para> - </partintro> - - <chapter id="drmIntroduction"> - <title>Introduction</title> - <para> - The Linux DRM layer contains code intended to support the needs - of complex graphics devices, usually containing programmable - pipelines well suited to 3D graphics acceleration. Graphics - drivers in the kernel may make use of DRM functions to make - tasks like memory management, interrupt handling and DMA easier, - and provide a uniform interface to applications. - </para> - <para> - A note on versions: this guide covers features found in the DRM - tree, including the TTM memory manager, output configuration and - mode setting, and the new vblank internals, in addition to all - the regular features found in current kernels. - </para> - <para> - [Insert diagram of typical DRM stack here] - </para> - <sect1> - <title>Style Guidelines</title> - <para> - For consistency this documentation uses American English. Abbreviations - are written as all-uppercase, for example: DRM, KMS, IOCTL, CRTC, and so - on. To aid in reading, documentations make full use of the markup - characters kerneldoc provides: @parameter for function parameters, @member - for structure members, &structure to reference structures and - function() for functions. These all get automatically hyperlinked if - kerneldoc for the referenced objects exists. When referencing entries in - function vtables please use ->vfunc(). Note that kerneldoc does - not support referencing struct members directly, so please add a reference - to the vtable struct somewhere in the same paragraph or at least section. - </para> - <para> - Except in special situations (to separate locked from unlocked variants) - locking requirements for functions aren't documented in the kerneldoc. - Instead locking should be check at runtime using e.g. - <code>WARN_ON(!mutex_is_locked(...));</code>. Since it's much easier to - ignore documentation than runtime noise this provides more value. And on - top of that runtime checks do need to be updated when the locking rules - change, increasing the chances that they're correct. Within the - documentation the locking rules should be explained in the relevant - structures: Either in the comment for the lock explaining what it - protects, or data fields need a note about which lock protects them, or - both. - </para> - <para> - Functions which have a non-<code>void</code> return value should have a - section called "Returns" explaining the expected return values in - different cases and their meanings. Currently there's no consensus whether - that section name should be all upper-case or not, and whether it should - end in a colon or not. Go with the file-local style. Other common section - names are "Notes" with information for dangerous or tricky corner cases, - and "FIXME" where the interface could be cleaned up. - </para> - </sect1> - </chapter> - - <!-- Internals --> - - <chapter id="drmInternals"> - <title>DRM Internals</title> - <para> - This chapter documents DRM internals relevant to driver authors - and developers working to add support for the latest features to - existing drivers. - </para> - <para> - First, we go over some typical driver initialization - requirements, like setting up command buffers, creating an - initial output configuration, and initializing core services. - Subsequent sections cover core internals in more detail, - providing implementation notes and examples. - </para> - <para> - The DRM layer provides several services to graphics drivers, - many of them driven by the application interfaces it provides - through libdrm, the library that wraps most of the DRM ioctls. - These include vblank event handling, memory - management, output management, framebuffer management, command - submission & fencing, suspend/resume support, and DMA - services. - </para> - - <!-- Internals: driver init --> - - <sect1> - <title>Driver Initialization</title> - <para> - At the core of every DRM driver is a <structname>drm_driver</structname> - structure. Drivers typically statically initialize a drm_driver structure, - and then pass it to <function>drm_dev_alloc()</function> to allocate a - device instance. After the device instance is fully initialized it can be - registered (which makes it accessible from userspace) using - <function>drm_dev_register()</function>. - </para> - <para> - The <structname>drm_driver</structname> structure contains static - information that describes the driver and features it supports, and - pointers to methods that the DRM core will call to implement the DRM API. - We will first go through the <structname>drm_driver</structname> static - information fields, and will then describe individual operations in - details as they get used in later sections. - </para> - <sect2> - <title>Driver Information</title> - <sect3> - <title>Driver Features</title> - <para> - Drivers inform the DRM core about their requirements and supported - features by setting appropriate flags in the - <structfield>driver_features</structfield> field. Since those flags - influence the DRM core behaviour since registration time, most of them - must be set to registering the <structname>drm_driver</structname> - instance. - </para> - <synopsis>u32 driver_features;</synopsis> - <variablelist> - <title>Driver Feature Flags</title> - <varlistentry> - <term>DRIVER_USE_AGP</term> - <listitem><para> - Driver uses AGP interface, the DRM core will manage AGP resources. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_REQUIRE_AGP</term> - <listitem><para> - Driver needs AGP interface to function. AGP initialization failure - will become a fatal error. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_PCI_DMA</term> - <listitem><para> - Driver is capable of PCI DMA, mapping of PCI DMA buffers to - userspace will be enabled. Deprecated. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_SG</term> - <listitem><para> - Driver can perform scatter/gather DMA, allocation and mapping of - scatter/gather buffers will be enabled. Deprecated. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_HAVE_DMA</term> - <listitem><para> - Driver supports DMA, the userspace DMA API will be supported. - Deprecated. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term> - <listitem><para> - DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler - managed by the DRM Core. The core will support simple IRQ handler - installation when the flag is set. The installation process is - described in <xref linkend="drm-irq-registration"/>.</para> - <para>DRIVER_IRQ_SHARED indicates whether the device & handler - support shared IRQs (note that this is required of PCI drivers). - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_GEM</term> - <listitem><para> - Driver use the GEM memory manager. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_MODESET</term> - <listitem><para> - Driver supports mode setting interfaces (KMS). - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_PRIME</term> - <listitem><para> - Driver implements DRM PRIME buffer sharing. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_RENDER</term> - <listitem><para> - Driver supports dedicated render nodes. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRIVER_ATOMIC</term> - <listitem><para> - Driver supports atomic properties. In this case the driver - must implement appropriate obj->atomic_get_property() vfuncs - for any modeset objects with driver specific properties. - </para></listitem> - </varlistentry> - </variablelist> - </sect3> - <sect3> - <title>Major, Minor and Patchlevel</title> - <synopsis>int major; -int minor; -int patchlevel;</synopsis> - <para> - The DRM core identifies driver versions by a major, minor and patch - level triplet. The information is printed to the kernel log at - initialization time and passed to userspace through the - DRM_IOCTL_VERSION ioctl. - </para> - <para> - The major and minor numbers are also used to verify the requested driver - API version passed to DRM_IOCTL_SET_VERSION. When the driver API changes - between minor versions, applications can call DRM_IOCTL_SET_VERSION to - select a specific version of the API. If the requested major isn't equal - to the driver major, or the requested minor is larger than the driver - minor, the DRM_IOCTL_SET_VERSION call will return an error. Otherwise - the driver's set_version() method will be called with the requested - version. - </para> - </sect3> - <sect3> - <title>Name, Description and Date</title> - <synopsis>char *name; -char *desc; -char *date;</synopsis> - <para> - The driver name is printed to the kernel log at initialization time, - used for IRQ registration and passed to userspace through - DRM_IOCTL_VERSION. - </para> - <para> - The driver description is a purely informative string passed to - userspace through the DRM_IOCTL_VERSION ioctl and otherwise unused by - the kernel. - </para> - <para> - The driver date, formatted as YYYYMMDD, is meant to identify the date of - the latest modification to the driver. However, as most drivers fail to - update it, its value is mostly useless. The DRM core prints it to the - kernel log at initialization time and passes it to userspace through the - DRM_IOCTL_VERSION ioctl. - </para> - </sect3> - </sect2> - <sect2> - <title>Device Instance and Driver Handling</title> -!Pdrivers/gpu/drm/drm_drv.c driver instance overview -!Edrivers/gpu/drm/drm_drv.c - </sect2> - <sect2> - <title>Driver Load</title> - <sect3 id="drm-irq-registration"> - <title>IRQ Registration</title> - <para> - The DRM core tries to facilitate IRQ handler registration and - unregistration by providing <function>drm_irq_install</function> and - <function>drm_irq_uninstall</function> functions. Those functions only - support a single interrupt per device, devices that use more than one - IRQs need to be handled manually. - </para> - <sect4> - <title>Managed IRQ Registration</title> - <para> - <function>drm_irq_install</function> starts by calling the - <methodname>irq_preinstall</methodname> driver operation. The operation - is optional and must make sure that the interrupt will not get fired by - clearing all pending interrupt flags or disabling the interrupt. - </para> - <para> - The passed-in IRQ will then be requested by a call to - <function>request_irq</function>. If the DRIVER_IRQ_SHARED driver - feature flag is set, a shared (IRQF_SHARED) IRQ handler will be - requested. - </para> - <para> - The IRQ handler function must be provided as the mandatory irq_handler - driver operation. It will get passed directly to - <function>request_irq</function> and thus has the same prototype as all - IRQ handlers. It will get called with a pointer to the DRM device as the - second argument. - </para> - <para> - Finally the function calls the optional - <methodname>irq_postinstall</methodname> driver operation. The operation - usually enables interrupts (excluding the vblank interrupt, which is - enabled separately), but drivers may choose to enable/disable interrupts - at a different time. - </para> - <para> - <function>drm_irq_uninstall</function> is similarly used to uninstall an - IRQ handler. It starts by waking up all processes waiting on a vblank - interrupt to make sure they don't hang, and then calls the optional - <methodname>irq_uninstall</methodname> driver operation. The operation - must disable all hardware interrupts. Finally the function frees the IRQ - by calling <function>free_irq</function>. - </para> - </sect4> - <sect4> - <title>Manual IRQ Registration</title> - <para> - Drivers that require multiple interrupt handlers can't use the managed - IRQ registration functions. In that case IRQs must be registered and - unregistered manually (usually with the <function>request_irq</function> - and <function>free_irq</function> functions, or their devm_* equivalent). - </para> - <para> - When manually registering IRQs, drivers must not set the DRIVER_HAVE_IRQ - driver feature flag, and must not provide the - <methodname>irq_handler</methodname> driver operation. They must set the - <structname>drm_device</structname> <structfield>irq_enabled</structfield> - field to 1 upon registration of the IRQs, and clear it to 0 after - unregistering the IRQs. - </para> - </sect4> - </sect3> - <sect3> - <title>Memory Manager Initialization</title> - <para> - Every DRM driver requires a memory manager which must be initialized at - load time. DRM currently contains two memory managers, the Translation - Table Manager (TTM) and the Graphics Execution Manager (GEM). - This document describes the use of the GEM memory manager only. See - <xref linkend="drm-memory-management"/> for details. - </para> - </sect3> - <sect3> - <title>Miscellaneous Device Configuration</title> - <para> - Another task that may be necessary for PCI devices during configuration - is mapping the video BIOS. On many devices, the VBIOS describes device - configuration, LCD panel timings (if any), and contains flags indicating - device state. Mapping the BIOS can be done using the pci_map_rom() call, - a convenience function that takes care of mapping the actual ROM, - whether it has been shadowed into memory (typically at address 0xc0000) - or exists on the PCI device in the ROM BAR. Note that after the ROM has - been mapped and any necessary information has been extracted, it should - be unmapped; on many devices, the ROM address decoder is shared with - other BARs, so leaving it mapped could cause undesired behaviour like - hangs or memory corruption. - <!--!Fdrivers/pci/rom.c pci_map_rom--> - </para> - </sect3> - </sect2> - <sect2> - <title>Bus-specific Device Registration and PCI Support</title> - <para> - A number of functions are provided to help with device registration. - The functions deal with PCI and platform devices respectively and are - only provided for historical reasons. These are all deprecated and - shouldn't be used in new drivers. Besides that there's a few - helpers for pci drivers. - </para> -!Edrivers/gpu/drm/drm_pci.c -!Edrivers/gpu/drm/drm_platform.c - </sect2> - </sect1> - - <!-- Internals: memory management --> - - <sect1 id="drm-memory-management"> - <title>Memory management</title> - <para> - Modern Linux systems require large amount of graphics memory to store - frame buffers, textures, vertices and other graphics-related data. Given - the very dynamic nature of many of that data, managing graphics memory - efficiently is thus crucial for the graphics stack and plays a central - role in the DRM infrastructure. - </para> - <para> - The DRM core includes two memory managers, namely Translation Table Maps - (TTM) and Graphics Execution Manager (GEM). TTM was the first DRM memory - manager to be developed and tried to be a one-size-fits-them all - solution. It provides a single userspace API to accommodate the need of - all hardware, supporting both Unified Memory Architecture (UMA) devices - and devices with dedicated video RAM (i.e. most discrete video cards). - This resulted in a large, complex piece of code that turned out to be - hard to use for driver development. - </para> - <para> - GEM started as an Intel-sponsored project in reaction to TTM's - complexity. Its design philosophy is completely different: instead of - providing a solution to every graphics memory-related problems, GEM - identified common code between drivers and created a support library to - share it. GEM has simpler initialization and execution requirements than - TTM, but has no video RAM management capabilities and is thus limited to - UMA devices. - </para> - <sect2> - <title>The Translation Table Manager (TTM)</title> - <para> - TTM design background and information belongs here. - </para> - <sect3> - <title>TTM initialization</title> - <warning><para>This section is outdated.</para></warning> - <para> - Drivers wishing to support TTM must fill out a drm_bo_driver - structure. The structure contains several fields with function - pointers for initializing the TTM, allocating and freeing memory, - waiting for command completion and fence synchronization, and memory - migration. See the radeon_ttm.c file for an example of usage. - </para> - <para> - The ttm_global_reference structure is made up of several fields: - </para> - <programlisting> - struct ttm_global_reference { - enum ttm_global_types global_type; - size_t size; - void *object; - int (*init) (struct ttm_global_reference *); - void (*release) (struct ttm_global_reference *); - }; - </programlisting> - <para> - There should be one global reference structure for your memory - manager as a whole, and there will be others for each object - created by the memory manager at runtime. Your global TTM should - have a type of TTM_GLOBAL_TTM_MEM. The size field for the global - object should be sizeof(struct ttm_mem_global), and the init and - release hooks should point at your driver-specific init and - release routines, which probably eventually call - ttm_mem_global_init and ttm_mem_global_release, respectively. - </para> - <para> - Once your global TTM accounting structure is set up and initialized - by calling ttm_global_item_ref() on it, - you need to create a buffer object TTM to - provide a pool for buffer object allocation by clients and the - kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO, - and its size should be sizeof(struct ttm_bo_global). Again, - driver-specific init and release functions may be provided, - likely eventually calling ttm_bo_global_init() and - ttm_bo_global_release(), respectively. Also, like the previous - object, ttm_global_item_ref() is used to create an initial reference - count for the TTM, which will call your initialization function. - </para> - </sect3> - </sect2> - <sect2 id="drm-gem"> - <title>The Graphics Execution Manager (GEM)</title> - <para> - The GEM design approach has resulted in a memory manager that doesn't - provide full coverage of all (or even all common) use cases in its - userspace or kernel API. GEM exposes a set of standard memory-related - operations to userspace and a set of helper functions to drivers, and let - drivers implement hardware-specific operations with their own private API. - </para> - <para> - The GEM userspace API is described in the - <ulink url="http://lwn.net/Articles/283798/"><citetitle>GEM - the Graphics - Execution Manager</citetitle></ulink> article on LWN. While slightly - outdated, the document provides a good overview of the GEM API principles. - Buffer allocation and read and write operations, described as part of the - common GEM API, are currently implemented using driver-specific ioctls. - </para> - <para> - GEM is data-agnostic. It manages abstract buffer objects without knowing - what individual buffers contain. APIs that require knowledge of buffer - contents or purpose, such as buffer allocation or synchronization - primitives, are thus outside of the scope of GEM and must be implemented - using driver-specific ioctls. - </para> - <para> - On a fundamental level, GEM involves several operations: - <itemizedlist> - <listitem>Memory allocation and freeing</listitem> - <listitem>Command execution</listitem> - <listitem>Aperture management at command execution time</listitem> - </itemizedlist> - Buffer object allocation is relatively straightforward and largely - provided by Linux's shmem layer, which provides memory to back each - object. - </para> - <para> - Device-specific operations, such as command execution, pinning, buffer - read & write, mapping, and domain ownership transfers are left to - driver-specific ioctls. - </para> - <sect3> - <title>GEM Initialization</title> - <para> - Drivers that use GEM must set the DRIVER_GEM bit in the struct - <structname>drm_driver</structname> - <structfield>driver_features</structfield> field. The DRM core will - then automatically initialize the GEM core before calling the - <methodname>load</methodname> operation. Behind the scene, this will - create a DRM Memory Manager object which provides an address space - pool for object allocation. - </para> - <para> - In a KMS configuration, drivers need to allocate and initialize a - command ring buffer following core GEM initialization if required by - the hardware. UMA devices usually have what is called a "stolen" - memory region, which provides space for the initial framebuffer and - large, contiguous memory regions required by the device. This space is - typically not managed by GEM, and must be initialized separately into - its own DRM MM object. - </para> - </sect3> - <sect3> - <title>GEM Objects Creation</title> - <para> - GEM splits creation of GEM objects and allocation of the memory that - backs them in two distinct operations. - </para> - <para> - GEM objects are represented by an instance of struct - <structname>drm_gem_object</structname>. Drivers usually need to extend - GEM objects with private information and thus create a driver-specific - GEM object structure type that embeds an instance of struct - <structname>drm_gem_object</structname>. - </para> - <para> - To create a GEM object, a driver allocates memory for an instance of its - specific GEM object type and initializes the embedded struct - <structname>drm_gem_object</structname> with a call to - <function>drm_gem_object_init</function>. The function takes a pointer to - the DRM device, a pointer to the GEM object and the buffer object size - in bytes. - </para> - <para> - GEM uses shmem to allocate anonymous pageable memory. - <function>drm_gem_object_init</function> will create an shmfs file of - the requested size and store it into the struct - <structname>drm_gem_object</structname> <structfield>filp</structfield> - field. The memory is used as either main storage for the object when the - graphics hardware uses system memory directly or as a backing store - otherwise. - </para> - <para> - Drivers are responsible for the actual physical pages allocation by - calling <function>shmem_read_mapping_page_gfp</function> for each page. - Note that they can decide to allocate pages when initializing the GEM - object, or to delay allocation until the memory is needed (for instance - when a page fault occurs as a result of a userspace memory access or - when the driver needs to start a DMA transfer involving the memory). - </para> - <para> - Anonymous pageable memory allocation is not always desired, for instance - when the hardware requires physically contiguous system memory as is - often the case in embedded devices. Drivers can create GEM objects with - no shmfs backing (called private GEM objects) by initializing them with - a call to <function>drm_gem_private_object_init</function> instead of - <function>drm_gem_object_init</function>. Storage for private GEM - objects must be managed by drivers. - </para> - </sect3> - <sect3> - <title>GEM Objects Lifetime</title> - <para> - All GEM objects are reference-counted by the GEM core. References can be - acquired and release by <function>calling drm_gem_object_reference</function> - and <function>drm_gem_object_unreference</function> respectively. The - caller must hold the <structname>drm_device</structname> - <structfield>struct_mutex</structfield> lock when calling - <function>drm_gem_object_reference</function>. As a convenience, GEM - provides <function>drm_gem_object_unreference_unlocked</function> - functions that can be called without holding the lock. - </para> - <para> - When the last reference to a GEM object is released the GEM core calls - the <structname>drm_driver</structname> - <methodname>gem_free_object</methodname> operation. That operation is - mandatory for GEM-enabled drivers and must free the GEM object and all - associated resources. - </para> - <para> - <synopsis>void (*gem_free_object) (struct drm_gem_object *obj);</synopsis> - Drivers are responsible for freeing all GEM object resources. This includes - the resources created by the GEM core, which need to be released with - <function>drm_gem_object_release</function>. - </para> - </sect3> - <sect3> - <title>GEM Objects Naming</title> - <para> - Communication between userspace and the kernel refers to GEM objects - using local handles, global names or, more recently, file descriptors. - All of those are 32-bit integer values; the usual Linux kernel limits - apply to the file descriptors. - </para> - <para> - GEM handles are local to a DRM file. Applications get a handle to a GEM - object through a driver-specific ioctl, and can use that handle to refer - to the GEM object in other standard or driver-specific ioctls. Closing a - DRM file handle frees all its GEM handles and dereferences the - associated GEM objects. - </para> - <para> - To create a handle for a GEM object drivers call - <function>drm_gem_handle_create</function>. The function takes a pointer - to the DRM file and the GEM object and returns a locally unique handle. - When the handle is no longer needed drivers delete it with a call to - <function>drm_gem_handle_delete</function>. Finally the GEM object - associated with a handle can be retrieved by a call to - <function>drm_gem_object_lookup</function>. - </para> - <para> - Handles don't take ownership of GEM objects, they only take a reference - to the object that will be dropped when the handle is destroyed. To - avoid leaking GEM objects, drivers must make sure they drop the - reference(s) they own (such as the initial reference taken at object - creation time) as appropriate, without any special consideration for the - handle. For example, in the particular case of combined GEM object and - handle creation in the implementation of the - <methodname>dumb_create</methodname> operation, drivers must drop the - initial reference to the GEM object before returning the handle. - </para> - <para> - GEM names are similar in purpose to handles but are not local to DRM - files. They can be passed between processes to reference a GEM object - globally. Names can't be used directly to refer to objects in the DRM - API, applications must convert handles to names and names to handles - using the DRM_IOCTL_GEM_FLINK and DRM_IOCTL_GEM_OPEN ioctls - respectively. The conversion is handled by the DRM core without any - driver-specific support. - </para> - <para> - GEM also supports buffer sharing with dma-buf file descriptors through - PRIME. GEM-based drivers must use the provided helpers functions to - implement the exporting and importing correctly. See <xref linkend="drm-prime-support" />. - Since sharing file descriptors is inherently more secure than the - easily guessable and global GEM names it is the preferred buffer - sharing mechanism. Sharing buffers through GEM names is only supported - for legacy userspace. Furthermore PRIME also allows cross-device - buffer sharing since it is based on dma-bufs. - </para> - </sect3> - <sect3 id="drm-gem-objects-mapping"> - <title>GEM Objects Mapping</title> - <para> - Because mapping operations are fairly heavyweight GEM favours - read/write-like access to buffers, implemented through driver-specific - ioctls, over mapping buffers to userspace. However, when random access - to the buffer is needed (to perform software rendering for instance), - direct access to the object can be more efficient. - </para> - <para> - The mmap system call can't be used directly to map GEM objects, as they - don't have their own file handle. Two alternative methods currently - co-exist to map GEM objects to userspace. The first method uses a - driver-specific ioctl to perform the mapping operation, calling - <function>do_mmap</function> under the hood. This is often considered - dubious, seems to be discouraged for new GEM-enabled drivers, and will - thus not be described here. - </para> - <para> - The second method uses the mmap system call on the DRM file handle. - <synopsis>void *mmap(void *addr, size_t length, int prot, int flags, int fd, - off_t offset);</synopsis> - DRM identifies the GEM object to be mapped by a fake offset passed - through the mmap offset argument. Prior to being mapped, a GEM object - must thus be associated with a fake offset. To do so, drivers must call - <function>drm_gem_create_mmap_offset</function> on the object. - </para> - <para> - Once allocated, the fake offset value - must be passed to the application in a driver-specific way and can then - be used as the mmap offset argument. - </para> - <para> - The GEM core provides a helper method <function>drm_gem_mmap</function> - to handle object mapping. The method can be set directly as the mmap - file operation handler. It will look up the GEM object based on the - offset value and set the VMA operations to the - <structname>drm_driver</structname> <structfield>gem_vm_ops</structfield> - field. Note that <function>drm_gem_mmap</function> doesn't map memory to - userspace, but relies on the driver-provided fault handler to map pages - individually. - </para> - <para> - To use <function>drm_gem_mmap</function>, drivers must fill the struct - <structname>drm_driver</structname> <structfield>gem_vm_ops</structfield> - field with a pointer to VM operations. - </para> - <para> - <synopsis>struct vm_operations_struct *gem_vm_ops - - struct vm_operations_struct { - void (*open)(struct vm_area_struct * area); - void (*close)(struct vm_area_struct * area); - int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); - };</synopsis> - </para> - <para> - The <methodname>open</methodname> and <methodname>close</methodname> - operations must update the GEM object reference count. Drivers can use - the <function>drm_gem_vm_open</function> and - <function>drm_gem_vm_close</function> helper functions directly as open - and close handlers. - </para> - <para> - The fault operation handler is responsible for mapping individual pages - to userspace when a page fault occurs. Depending on the memory - allocation scheme, drivers can allocate pages at fault time, or can - decide to allocate memory for the GEM object at the time the object is - created. - </para> - <para> - Drivers that want to map the GEM object upfront instead of handling page - faults can implement their own mmap file operation handler. - </para> - </sect3> - <sect3> - <title>Memory Coherency</title> - <para> - When mapped to the device or used in a command buffer, backing pages - for an object are flushed to memory and marked write combined so as to - be coherent with the GPU. Likewise, if the CPU accesses an object - after the GPU has finished rendering to the object, then the object - must be made coherent with the CPU's view of memory, usually involving - GPU cache flushing of various kinds. This core CPU<->GPU - coherency management is provided by a device-specific ioctl, which - evaluates an object's current domain and performs any necessary - flushing or synchronization to put the object into the desired - coherency domain (note that the object may be busy, i.e. an active - render target; in that case, setting the domain blocks the client and - waits for rendering to complete before performing any necessary - flushing operations). - </para> - </sect3> - <sect3> - <title>Command Execution</title> - <para> - Perhaps the most important GEM function for GPU devices is providing a - command execution interface to clients. Client programs construct - command buffers containing references to previously allocated memory - objects, and then submit them to GEM. At that point, GEM takes care to - bind all the objects into the GTT, execute the buffer, and provide - necessary synchronization between clients accessing the same buffers. - This often involves evicting some objects from the GTT and re-binding - others (a fairly expensive operation), and providing relocation - support which hides fixed GTT offsets from clients. Clients must take - care not to submit command buffers that reference more objects than - can fit in the GTT; otherwise, GEM will reject them and no rendering - will occur. Similarly, if several objects in the buffer require fence - registers to be allocated for correct rendering (e.g. 2D blits on - pre-965 chips), care must be taken not to require more fence registers - than are available to the client. Such resource management should be - abstracted from the client in libdrm. - </para> - </sect3> - </sect2> - <sect2> - <title>GEM Function Reference</title> -!Edrivers/gpu/drm/drm_gem.c -!Iinclude/drm/drm_gem.h - </sect2> - <sect2> - <title>VMA Offset Manager</title> -!Pdrivers/gpu/drm/drm_vma_manager.c vma offset manager -!Edrivers/gpu/drm/drm_vma_manager.c -!Iinclude/drm/drm_vma_manager.h - </sect2> - <sect2 id="drm-prime-support"> - <title>PRIME Buffer Sharing</title> - <para> - PRIME is the cross device buffer sharing framework in drm, originally - created for the OPTIMUS range of multi-gpu platforms. To userspace - PRIME buffers are dma-buf based file descriptors. - </para> - <sect3> - <title>Overview and Driver Interface</title> - <para> - Similar to GEM global names, PRIME file descriptors are - also used to share buffer objects across processes. They offer - additional security: as file descriptors must be explicitly sent over - UNIX domain sockets to be shared between applications, they can't be - guessed like the globally unique GEM names. - </para> - <para> - Drivers that support the PRIME - API must set the DRIVER_PRIME bit in the struct - <structname>drm_driver</structname> - <structfield>driver_features</structfield> field, and implement the - <methodname>prime_handle_to_fd</methodname> and - <methodname>prime_fd_to_handle</methodname> operations. - </para> - <para> - <synopsis>int (*prime_handle_to_fd)(struct drm_device *dev, - struct drm_file *file_priv, uint32_t handle, - uint32_t flags, int *prime_fd); -int (*prime_fd_to_handle)(struct drm_device *dev, - struct drm_file *file_priv, int prime_fd, - uint32_t *handle);</synopsis> - Those two operations convert a handle to a PRIME file descriptor and - vice versa. Drivers must use the kernel dma-buf buffer sharing framework - to manage the PRIME file descriptors. Similar to the mode setting - API PRIME is agnostic to the underlying buffer object manager, as - long as handles are 32bit unsigned integers. - </para> - <para> - While non-GEM drivers must implement the operations themselves, GEM - drivers must use the <function>drm_gem_prime_handle_to_fd</function> - and <function>drm_gem_prime_fd_to_handle</function> helper functions. - Those helpers rely on the driver - <methodname>gem_prime_export</methodname> and - <methodname>gem_prime_import</methodname> operations to create a dma-buf - instance from a GEM object (dma-buf exporter role) and to create a GEM - object from a dma-buf instance (dma-buf importer role). - </para> - <para> - <synopsis>struct dma_buf * (*gem_prime_export)(struct drm_device *dev, - struct drm_gem_object *obj, - int flags); -struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, - struct dma_buf *dma_buf);</synopsis> - These two operations are mandatory for GEM drivers that support - PRIME. - </para> - </sect3> - <sect3> - <title>PRIME Helper Functions</title> -!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers - </sect3> - </sect2> - <sect2> - <title>PRIME Function References</title> -!Edrivers/gpu/drm/drm_prime.c - </sect2> - <sect2> - <title>DRM MM Range Allocator</title> - <sect3> - <title>Overview</title> -!Pdrivers/gpu/drm/drm_mm.c Overview - </sect3> - <sect3> - <title>LRU Scan/Eviction Support</title> -!Pdrivers/gpu/drm/drm_mm.c lru scan roaster - </sect3> - </sect2> - <sect2> - <title>DRM MM Range Allocator Function References</title> -!Edrivers/gpu/drm/drm_mm.c -!Iinclude/drm/drm_mm.h - </sect2> - <sect2> - <title>CMA Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_gem_cma_helper.c cma helpers -!Edrivers/gpu/drm/drm_gem_cma_helper.c -!Iinclude/drm/drm_gem_cma_helper.h - </sect2> - </sect1> - - <!-- Internals: mode setting --> - - <sect1 id="drm-mode-setting"> - <title>Mode Setting</title> - <para> - Drivers must initialize the mode setting core by calling - <function>drm_mode_config_init</function> on the DRM device. The function - initializes the <structname>drm_device</structname> - <structfield>mode_config</structfield> field and never fails. Once done, - mode configuration must be setup by initializing the following fields. - </para> - <itemizedlist> - <listitem> - <synopsis>int min_width, min_height; -int max_width, max_height;</synopsis> - <para> - Minimum and maximum width and height of the frame buffers in pixel - units. - </para> - </listitem> - <listitem> - <synopsis>struct drm_mode_config_funcs *funcs;</synopsis> - <para>Mode setting functions.</para> - </listitem> - </itemizedlist> - <sect2> - <title>Display Modes Function Reference</title> -!Iinclude/drm/drm_modes.h -!Edrivers/gpu/drm/drm_modes.c - </sect2> - <sect2> - <title>Atomic Mode Setting Function Reference</title> -!Edrivers/gpu/drm/drm_atomic.c -!Idrivers/gpu/drm/drm_atomic.c - </sect2> - <sect2> - <title>Frame Buffer Abstraction</title> - <para> - Frame buffers are abstract memory objects that provide a source of - pixels to scanout to a CRTC. Applications explicitly request the - creation of frame buffers through the DRM_IOCTL_MODE_ADDFB(2) ioctls and - receive an opaque handle that can be passed to the KMS CRTC control, - plane configuration and page flip functions. - </para> - <para> - Frame buffers rely on the underneath memory manager for low-level memory - operations. When creating a frame buffer applications pass a memory - handle (or a list of memory handles for multi-planar formats) through - the <parameter>drm_mode_fb_cmd2</parameter> argument. For drivers using - GEM as their userspace buffer management interface this would be a GEM - handle. Drivers are however free to use their own backing storage object - handles, e.g. vmwgfx directly exposes special TTM handles to userspace - and so expects TTM handles in the create ioctl and not GEM handles. - </para> - <para> - The lifetime of a drm framebuffer is controlled with a reference count, - drivers can grab additional references with - <function>drm_framebuffer_reference</function>and drop them - again with <function>drm_framebuffer_unreference</function>. For - driver-private framebuffers for which the last reference is never - dropped (e.g. for the fbdev framebuffer when the struct - <structname>drm_framebuffer</structname> is embedded into the fbdev - helper struct) drivers can manually clean up a framebuffer at module - unload time with - <function>drm_framebuffer_unregister_private</function>. - </para> - </sect2> - <sect2> - <title>Dumb Buffer Objects</title> - <para> - The KMS API doesn't standardize backing storage object creation and - leaves it to driver-specific ioctls. Furthermore actually creating a - buffer object even for GEM-based drivers is done through a - driver-specific ioctl - GEM only has a common userspace interface for - sharing and destroying objects. While not an issue for full-fledged - graphics stacks that include device-specific userspace components (in - libdrm for instance), this limit makes DRM-based early boot graphics - unnecessarily complex. - </para> - <para> - Dumb objects partly alleviate the problem by providing a standard - API to create dumb buffers suitable for scanout, which can then be used - to create KMS frame buffers. - </para> - <para> - To support dumb objects drivers must implement the - <methodname>dumb_create</methodname>, - <methodname>dumb_destroy</methodname> and - <methodname>dumb_map_offset</methodname> operations. - </para> - <itemizedlist> - <listitem> - <synopsis>int (*dumb_create)(struct drm_file *file_priv, struct drm_device *dev, - struct drm_mode_create_dumb *args);</synopsis> - <para> - The <methodname>dumb_create</methodname> operation creates a driver - object (GEM or TTM handle) suitable for scanout based on the - width, height and depth from the struct - <structname>drm_mode_create_dumb</structname> argument. It fills the - argument's <structfield>handle</structfield>, - <structfield>pitch</structfield> and <structfield>size</structfield> - fields with a handle for the newly created object and its line - pitch and size in bytes. - </para> - </listitem> - <listitem> - <synopsis>int (*dumb_destroy)(struct drm_file *file_priv, struct drm_device *dev, - uint32_t handle);</synopsis> - <para> - The <methodname>dumb_destroy</methodname> operation destroys a dumb - object created by <methodname>dumb_create</methodname>. - </para> - </listitem> - <listitem> - <synopsis>int (*dumb_map_offset)(struct drm_file *file_priv, struct drm_device *dev, - uint32_t handle, uint64_t *offset);</synopsis> - <para> - The <methodname>dumb_map_offset</methodname> operation associates an - mmap fake offset with the object given by the handle and returns - it. Drivers must use the - <function>drm_gem_create_mmap_offset</function> function to - associate the fake offset as described in - <xref linkend="drm-gem-objects-mapping"/>. - </para> - </listitem> - </itemizedlist> - <para> - Note that dumb objects may not be used for gpu acceleration, as has been - attempted on some ARM embedded platforms. Such drivers really must have - a hardware-specific ioctl to allocate suitable buffer objects. - </para> - </sect2> - <sect2> - <title>Output Polling</title> - <synopsis>void (*output_poll_changed)(struct drm_device *dev);</synopsis> - <para> - This operation notifies the driver that the status of one or more - connectors has changed. Drivers that use the fb helper can just call the - <function>drm_fb_helper_hotplug_event</function> function to handle this - operation. - </para> - </sect2> - <sect2> - <title>Locking</title> - <para> - Beside some lookup structures with their own locking (which is hidden - behind the interface functions) most of the modeset state is protected - by the <code>dev-<mode_config.lock</code> mutex and additionally - per-crtc locks to allow cursor updates, pageflips and similar operations - to occur concurrently with background tasks like output detection. - Operations which cross domains like a full modeset always grab all - locks. Drivers there need to protect resources shared between crtcs with - additional locking. They also need to be careful to always grab the - relevant crtc locks if a modset functions touches crtc state, e.g. for - load detection (which does only grab the <code>mode_config.lock</code> - to allow concurrent screen updates on live crtcs). - </para> - </sect2> - </sect1> - - <!-- Internals: kms initialization and cleanup --> - - <sect1 id="drm-kms-init"> - <title>KMS Initialization and Cleanup</title> - <para> - A KMS device is abstracted and exposed as a set of planes, CRTCs, encoders - and connectors. KMS drivers must thus create and initialize all those - objects at load time after initializing mode setting. - </para> - <sect2> - <title>CRTCs (struct <structname>drm_crtc</structname>)</title> - <para> - A CRTC is an abstraction representing a part of the chip that contains a - pointer to a scanout buffer. Therefore, the number of CRTCs available - determines how many independent scanout buffers can be active at any - given time. The CRTC structure contains several fields to support this: - a pointer to some video memory (abstracted as a frame buffer object), a - display mode, and an (x, y) offset into the video memory to support - panning or configurations where one piece of video memory spans multiple - CRTCs. - </para> - <sect3> - <title>CRTC Initialization</title> - <para> - A KMS device must create and register at least one struct - <structname>drm_crtc</structname> instance. The instance is allocated - and zeroed by the driver, possibly as part of a larger structure, and - registered with a call to <function>drm_crtc_init</function> with a - pointer to CRTC functions. - </para> - </sect3> - </sect2> - <sect2> - <title>Planes (struct <structname>drm_plane</structname>)</title> - <para> - A plane represents an image source that can be blended with or overlayed - on top of a CRTC during the scanout process. Planes are associated with - a frame buffer to crop a portion of the image memory (source) and - optionally scale it to a destination size. The result is then blended - with or overlayed on top of a CRTC. - </para> - <para> - The DRM core recognizes three types of planes: - <itemizedlist> - <listitem> - DRM_PLANE_TYPE_PRIMARY represents a "main" plane for a CRTC. Primary - planes are the planes operated upon by CRTC modesetting and flipping - operations described in the page_flip hook in <structname>drm_crtc_funcs</structname>. - </listitem> - <listitem> - DRM_PLANE_TYPE_CURSOR represents a "cursor" plane for a CRTC. Cursor - planes are the planes operated upon by the DRM_IOCTL_MODE_CURSOR and - DRM_IOCTL_MODE_CURSOR2 ioctls. - </listitem> - <listitem> - DRM_PLANE_TYPE_OVERLAY represents all non-primary, non-cursor planes. - Some drivers refer to these types of planes as "sprites" internally. - </listitem> - </itemizedlist> - For compatibility with legacy userspace, only overlay planes are made - available to userspace by default. Userspace clients may set the - DRM_CLIENT_CAP_UNIVERSAL_PLANES client capability bit to indicate that - they wish to receive a universal plane list containing all plane types. - </para> - <sect3> - <title>Plane Initialization</title> - <para> - To create a plane, a KMS drivers allocates and - zeroes an instances of struct <structname>drm_plane</structname> - (possibly as part of a larger structure) and registers it with a call - to <function>drm_universal_plane_init</function>. The function takes a bitmask - of the CRTCs that can be associated with the plane, a pointer to the - plane functions, a list of format supported formats, and the type of - plane (primary, cursor, or overlay) being initialized. - </para> - <para> - Cursor and overlay planes are optional. All drivers should provide - one primary plane per CRTC (although this requirement may change in - the future); drivers that do not wish to provide special handling for - primary planes may make use of the helper functions described in - <xref linkend="drm-kms-planehelpers"/> to create and register a - primary plane with standard capabilities. - </para> - </sect3> - </sect2> - <sect2> - <title>Encoders (struct <structname>drm_encoder</structname>)</title> - <para> - An encoder takes pixel data from a CRTC and converts it to a format - suitable for any attached connectors. On some devices, it may be - possible to have a CRTC send data to more than one encoder. In that - case, both encoders would receive data from the same scanout buffer, - resulting in a "cloned" display configuration across the connectors - attached to each encoder. - </para> - <sect3> - <title>Encoder Initialization</title> - <para> - As for CRTCs, a KMS driver must create, initialize and register at - least one struct <structname>drm_encoder</structname> instance. The - instance is allocated and zeroed by the driver, possibly as part of a - larger structure. - </para> - <para> - Drivers must initialize the struct <structname>drm_encoder</structname> - <structfield>possible_crtcs</structfield> and - <structfield>possible_clones</structfield> fields before registering the - encoder. Both fields are bitmasks of respectively the CRTCs that the - encoder can be connected to, and sibling encoders candidate for cloning. - </para> - <para> - After being initialized, the encoder must be registered with a call to - <function>drm_encoder_init</function>. The function takes a pointer to - the encoder functions and an encoder type. Supported types are - <itemizedlist> - <listitem> - DRM_MODE_ENCODER_DAC for VGA and analog on DVI-I/DVI-A - </listitem> - <listitem> - DRM_MODE_ENCODER_TMDS for DVI, HDMI and (embedded) DisplayPort - </listitem> - <listitem> - DRM_MODE_ENCODER_LVDS for display panels - </listitem> - <listitem> - DRM_MODE_ENCODER_TVDAC for TV output (Composite, S-Video, Component, - SCART) - </listitem> - <listitem> - DRM_MODE_ENCODER_VIRTUAL for virtual machine displays - </listitem> - </itemizedlist> - </para> - <para> - Encoders must be attached to a CRTC to be used. DRM drivers leave - encoders unattached at initialization time. Applications (or the fbdev - compatibility layer when implemented) are responsible for attaching the - encoders they want to use to a CRTC. - </para> - </sect3> - </sect2> - <sect2> - <title>Connectors (struct <structname>drm_connector</structname>)</title> - <para> - A connector is the final destination for pixel data on a device, and - usually connects directly to an external display device like a monitor - or laptop panel. A connector can only be attached to one encoder at a - time. The connector is also the structure where information about the - attached display is kept, so it contains fields for display data, EDID - data, DPMS & connection status, and information about modes - supported on the attached displays. - </para> - <sect3> - <title>Connector Initialization</title> - <para> - Finally a KMS driver must create, initialize, register and attach at - least one struct <structname>drm_connector</structname> instance. The - instance is created as other KMS objects and initialized by setting the - following fields. - </para> - <variablelist> - <varlistentry> - <term><structfield>interlace_allowed</structfield></term> - <listitem><para> - Whether the connector can handle interlaced modes. - </para></listitem> - </varlistentry> - <varlistentry> - <term><structfield>doublescan_allowed</structfield></term> - <listitem><para> - Whether the connector can handle doublescan. - </para></listitem> - </varlistentry> - <varlistentry> - <term><structfield>display_info - </structfield></term> - <listitem><para> - Display information is filled from EDID information when a display - is detected. For non hot-pluggable displays such as flat panels in - embedded systems, the driver should initialize the - <structfield>display_info</structfield>.<structfield>width_mm</structfield> - and - <structfield>display_info</structfield>.<structfield>height_mm</structfield> - fields with the physical size of the display. - </para></listitem> - </varlistentry> - <varlistentry> - <term id="drm-kms-connector-polled"><structfield>polled</structfield></term> - <listitem><para> - Connector polling mode, a combination of - <variablelist> - <varlistentry> - <term>DRM_CONNECTOR_POLL_HPD</term> - <listitem><para> - The connector generates hotplug events and doesn't need to be - periodically polled. The CONNECT and DISCONNECT flags must not - be set together with the HPD flag. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRM_CONNECTOR_POLL_CONNECT</term> - <listitem><para> - Periodically poll the connector for connection. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRM_CONNECTOR_POLL_DISCONNECT</term> - <listitem><para> - Periodically poll the connector for disconnection. - </para></listitem> - </varlistentry> - </variablelist> - Set to 0 for connectors that don't support connection status - discovery. - </para></listitem> - </varlistentry> - </variablelist> - <para> - The connector is then registered with a call to - <function>drm_connector_init</function> with a pointer to the connector - functions and a connector type, and exposed through sysfs with a call to - <function>drm_connector_register</function>. - </para> - <para> - Supported connector types are - <itemizedlist> - <listitem>DRM_MODE_CONNECTOR_VGA</listitem> - <listitem>DRM_MODE_CONNECTOR_DVII</listitem> - <listitem>DRM_MODE_CONNECTOR_DVID</listitem> - <listitem>DRM_MODE_CONNECTOR_DVIA</listitem> - <listitem>DRM_MODE_CONNECTOR_Composite</listitem> - <listitem>DRM_MODE_CONNECTOR_SVIDEO</listitem> - <listitem>DRM_MODE_CONNECTOR_LVDS</listitem> - <listitem>DRM_MODE_CONNECTOR_Component</listitem> - <listitem>DRM_MODE_CONNECTOR_9PinDIN</listitem> - <listitem>DRM_MODE_CONNECTOR_DisplayPort</listitem> - <listitem>DRM_MODE_CONNECTOR_HDMIA</listitem> - <listitem>DRM_MODE_CONNECTOR_HDMIB</listitem> - <listitem>DRM_MODE_CONNECTOR_TV</listitem> - <listitem>DRM_MODE_CONNECTOR_eDP</listitem> - <listitem>DRM_MODE_CONNECTOR_VIRTUAL</listitem> - </itemizedlist> - </para> - <para> - Connectors must be attached to an encoder to be used. For devices that - map connectors to encoders 1:1, the connector should be attached at - initialization time with a call to - <function>drm_mode_connector_attach_encoder</function>. The driver must - also set the <structname>drm_connector</structname> - <structfield>encoder</structfield> field to point to the attached - encoder. - </para> - <para> - Finally, drivers must initialize the connectors state change detection - with a call to <function>drm_kms_helper_poll_init</function>. If at - least one connector is pollable but can't generate hotplug interrupts - (indicated by the DRM_CONNECTOR_POLL_CONNECT and - DRM_CONNECTOR_POLL_DISCONNECT connector flags), a delayed work will - automatically be queued to periodically poll for changes. Connectors - that can generate hotplug interrupts must be marked with the - DRM_CONNECTOR_POLL_HPD flag instead, and their interrupt handler must - call <function>drm_helper_hpd_irq_event</function>. The function will - queue a delayed work to check the state of all connectors, but no - periodic polling will be done. - </para> - </sect3> - <sect3> - <title>Connector Operations</title> - <note><para> - Unless otherwise state, all operations are mandatory. - </para></note> - <sect4> - <title>DPMS</title> - <synopsis>void (*dpms)(struct drm_connector *connector, int mode);</synopsis> - <para> - The DPMS operation sets the power state of a connector. The mode - argument is one of - <itemizedlist> - <listitem><para>DRM_MODE_DPMS_ON</para></listitem> - <listitem><para>DRM_MODE_DPMS_STANDBY</para></listitem> - <listitem><para>DRM_MODE_DPMS_SUSPEND</para></listitem> - <listitem><para>DRM_MODE_DPMS_OFF</para></listitem> - </itemizedlist> - </para> - <para> - In all but DPMS_ON mode the encoder to which the connector is attached - should put the display in low-power mode by driving its signals - appropriately. If more than one connector is attached to the encoder - care should be taken not to change the power state of other displays as - a side effect. Low-power mode should be propagated to the encoders and - CRTCs when all related connectors are put in low-power mode. - </para> - </sect4> - <sect4> - <title>Modes</title> - <synopsis>int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, - uint32_t max_height);</synopsis> - <para> - Fill the mode list with all supported modes for the connector. If the - <parameter>max_width</parameter> and <parameter>max_height</parameter> - arguments are non-zero, the implementation must ignore all modes wider - than <parameter>max_width</parameter> or higher than - <parameter>max_height</parameter>. - </para> - <para> - The connector must also fill in this operation its - <structfield>display_info</structfield> - <structfield>width_mm</structfield> and - <structfield>height_mm</structfield> fields with the connected display - physical size in millimeters. The fields should be set to 0 if the value - isn't known or is not applicable (for instance for projector devices). - </para> - </sect4> - <sect4> - <title>Connection Status</title> - <para> - The connection status is updated through polling or hotplug events when - supported (see <xref linkend="drm-kms-connector-polled"/>). The status - value is reported to userspace through ioctls and must not be used - inside the driver, as it only gets initialized by a call to - <function>drm_mode_getconnector</function> from userspace. - </para> - <synopsis>enum drm_connector_status (*detect)(struct drm_connector *connector, - bool force);</synopsis> - <para> - Check to see if anything is attached to the connector. The - <parameter>force</parameter> parameter is set to false whilst polling or - to true when checking the connector due to user request. - <parameter>force</parameter> can be used by the driver to avoid - expensive, destructive operations during automated probing. - </para> - <para> - Return connector_status_connected if something is connected to the - connector, connector_status_disconnected if nothing is connected and - connector_status_unknown if the connection state isn't known. - </para> - <para> - Drivers should only return connector_status_connected if the connection - status has really been probed as connected. Connectors that can't detect - the connection status, or failed connection status probes, should return - connector_status_unknown. - </para> - </sect4> - </sect3> - </sect2> - <sect2> - <title>Cleanup</title> - <para> - The DRM core manages its objects' lifetime. When an object is not needed - anymore the core calls its destroy function, which must clean up and - free every resource allocated for the object. Every - <function>drm_*_init</function> call must be matched with a - corresponding <function>drm_*_cleanup</function> call to cleanup CRTCs - (<function>drm_crtc_cleanup</function>), planes - (<function>drm_plane_cleanup</function>), encoders - (<function>drm_encoder_cleanup</function>) and connectors - (<function>drm_connector_cleanup</function>). Furthermore, connectors - that have been added to sysfs must be removed by a call to - <function>drm_connector_unregister</function> before calling - <function>drm_connector_cleanup</function>. - </para> - <para> - Connectors state change detection must be cleanup up with a call to - <function>drm_kms_helper_poll_fini</function>. - </para> - </sect2> - <sect2> - <title>Output discovery and initialization example</title> - <programlisting><![CDATA[ -void intel_crt_init(struct drm_device *dev) -{ - struct drm_connector *connector; - struct intel_output *intel_output; - - intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); - if (!intel_output) - return; - - connector = &intel_output->base; - drm_connector_init(dev, &intel_output->base, - &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); - - drm_encoder_init(dev, &intel_output->enc, &intel_crt_enc_funcs, - DRM_MODE_ENCODER_DAC); - - drm_mode_connector_attach_encoder(&intel_output->base, - &intel_output->enc); - - /* Set up the DDC bus. */ - intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A"); - if (!intel_output->ddc_bus) { - dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration " - "failed.\n"); - return; - } - - intel_output->type = INTEL_OUTPUT_ANALOG; - connector->interlace_allowed = 0; - connector->doublescan_allowed = 0; - - drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs); - drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); - - drm_connector_register(connector); -}]]></programlisting> - <para> - In the example above (taken from the i915 driver), a CRTC, connector and - encoder combination is created. A device-specific i2c bus is also - created for fetching EDID data and performing monitor detection. Once - the process is complete, the new connector is registered with sysfs to - make its properties available to applications. - </para> - </sect2> - <sect2> - <title>KMS API Functions</title> -!Edrivers/gpu/drm/drm_crtc.c - </sect2> - <sect2> - <title>KMS Data Structures</title> -!Iinclude/drm/drm_crtc.h - </sect2> - <sect2> - <title>KMS Locking</title> -!Pdrivers/gpu/drm/drm_modeset_lock.c kms locking -!Iinclude/drm/drm_modeset_lock.h -!Edrivers/gpu/drm/drm_modeset_lock.c - </sect2> - </sect1> - - <!-- Internals: kms helper functions --> - - <sect1> - <title>Mode Setting Helper Functions</title> - <para> - The plane, CRTC, encoder and connector functions provided by the drivers - implement the DRM API. They're called by the DRM core and ioctl handlers - to handle device state changes and configuration request. As implementing - those functions often requires logic not specific to drivers, mid-layer - helper functions are available to avoid duplicating boilerplate code. - </para> - <para> - The DRM core contains one mid-layer implementation. The mid-layer provides - implementations of several plane, CRTC, encoder and connector functions - (called from the top of the mid-layer) that pre-process requests and call - lower-level functions provided by the driver (at the bottom of the - mid-layer). For instance, the - <function>drm_crtc_helper_set_config</function> function can be used to - fill the struct <structname>drm_crtc_funcs</structname> - <structfield>set_config</structfield> field. When called, it will split - the <methodname>set_config</methodname> operation in smaller, simpler - operations and call the driver to handle them. - </para> - <para> - To use the mid-layer, drivers call <function>drm_crtc_helper_add</function>, - <function>drm_encoder_helper_add</function> and - <function>drm_connector_helper_add</function> functions to install their - mid-layer bottom operations handlers, and fill the - <structname>drm_crtc_funcs</structname>, - <structname>drm_encoder_funcs</structname> and - <structname>drm_connector_funcs</structname> structures with pointers to - the mid-layer top API functions. Installing the mid-layer bottom operation - handlers is best done right after registering the corresponding KMS object. - </para> - <para> - The mid-layer is not split between CRTC, encoder and connector operations. - To use it, a driver must provide bottom functions for all of the three KMS - entities. - </para> - <sect2> - <title>Atomic Modeset Helper Functions Reference</title> - <sect3> - <title>Overview</title> -!Pdrivers/gpu/drm/drm_atomic_helper.c overview - </sect3> - <sect3> - <title>Implementing Asynchronous Atomic Commit</title> -!Pdrivers/gpu/drm/drm_atomic_helper.c implementing async commit - </sect3> - <sect3> - <title>Atomic State Reset and Initialization</title> -!Pdrivers/gpu/drm/drm_atomic_helper.c atomic state reset and initialization - </sect3> -!Iinclude/drm/drm_atomic_helper.h -!Edrivers/gpu/drm/drm_atomic_helper.c - </sect2> - <sect2> - <title>Modeset Helper Reference for Common Vtables</title> -!Iinclude/drm/drm_modeset_helper_vtables.h -!Pinclude/drm/drm_modeset_helper_vtables.h overview - </sect2> - <sect2> - <title>Legacy CRTC/Modeset Helper Functions Reference</title> -!Edrivers/gpu/drm/drm_crtc_helper.c -!Pdrivers/gpu/drm/drm_crtc_helper.c overview - </sect2> - <sect2> - <title>Output Probing Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_probe_helper.c output probing helper overview -!Edrivers/gpu/drm/drm_probe_helper.c - </sect2> - <sect2> - <title>fbdev Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_fb_helper.c fbdev helpers -!Edrivers/gpu/drm/drm_fb_helper.c -!Iinclude/drm/drm_fb_helper.h - </sect2> - <sect2> - <title>Framebuffer CMA Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_fb_cma_helper.c framebuffer cma helper functions -!Edrivers/gpu/drm/drm_fb_cma_helper.c - </sect2> - <sect2> - <title>Display Port Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_dp_helper.c dp helpers -!Iinclude/drm/drm_dp_helper.h -!Edrivers/gpu/drm/drm_dp_helper.c - </sect2> - <sect2> - <title>Display Port Dual Mode Adaptor Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_dp_dual_mode_helper.c dp dual mode helpers -!Iinclude/drm/drm_dp_dual_mode_helper.h -!Edrivers/gpu/drm/drm_dp_dual_mode_helper.c - </sect2> - <sect2> - <title>Display Port MST Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_dp_mst_topology.c dp mst helper -!Iinclude/drm/drm_dp_mst_helper.h -!Edrivers/gpu/drm/drm_dp_mst_topology.c - </sect2> - <sect2> - <title>MIPI DSI Helper Functions Reference</title> -!Pdrivers/gpu/drm/drm_mipi_dsi.c dsi helpers -!Iinclude/drm/drm_mipi_dsi.h -!Edrivers/gpu/drm/drm_mipi_dsi.c - </sect2> - <sect2> - <title>EDID Helper Functions Reference</title> -!Edrivers/gpu/drm/drm_edid.c - </sect2> - <sect2> - <title>Rectangle Utilities Reference</title> -!Pinclude/drm/drm_rect.h rect utils -!Iinclude/drm/drm_rect.h -!Edrivers/gpu/drm/drm_rect.c - </sect2> - <sect2> - <title>Flip-work Helper Reference</title> -!Pinclude/drm/drm_flip_work.h flip utils -!Iinclude/drm/drm_flip_work.h -!Edrivers/gpu/drm/drm_flip_work.c - </sect2> - <sect2> - <title>HDMI Infoframes Helper Reference</title> - <para> - Strictly speaking this is not a DRM helper library but generally useable - by any driver interfacing with HDMI outputs like v4l or alsa drivers. - But it nicely fits into the overall topic of mode setting helper - libraries and hence is also included here. - </para> -!Iinclude/linux/hdmi.h -!Edrivers/video/hdmi.c - </sect2> - <sect2> - <title id="drm-kms-planehelpers">Plane Helper Reference</title> -!Edrivers/gpu/drm/drm_plane_helper.c -!Pdrivers/gpu/drm/drm_plane_helper.c overview - </sect2> - <sect2> - <title>Tile group</title> -!Pdrivers/gpu/drm/drm_crtc.c Tile group - </sect2> - <sect2> - <title>Bridges</title> - <sect3> - <title>Overview</title> -!Pdrivers/gpu/drm/drm_bridge.c overview - </sect3> - <sect3> - <title>Default bridge callback sequence</title> -!Pdrivers/gpu/drm/drm_bridge.c bridge callbacks - </sect3> -!Edrivers/gpu/drm/drm_bridge.c - </sect2> - <sect2> - <title>Panel Helper Reference</title> -!Iinclude/drm/drm_panel.h -!Edrivers/gpu/drm/drm_panel.c -!Pdrivers/gpu/drm/drm_panel.c drm panel - </sect2> - </sect1> - - <!-- Internals: kms properties --> - - <sect1 id="drm-kms-properties"> - <title>KMS Properties</title> - <para> - Drivers may need to expose additional parameters to applications than - those described in the previous sections. KMS supports attaching - properties to CRTCs, connectors and planes and offers a userspace API to - list, get and set the property values. - </para> - <para> - Properties are identified by a name that uniquely defines the property - purpose, and store an associated value. For all property types except blob - properties the value is a 64-bit unsigned integer. - </para> - <para> - KMS differentiates between properties and property instances. Drivers - first create properties and then create and associate individual instances - of those properties to objects. A property can be instantiated multiple - times and associated with different objects. Values are stored in property - instances, and all other property information are stored in the property - and shared between all instances of the property. - </para> - <para> - Every property is created with a type that influences how the KMS core - handles the property. Supported property types are - <variablelist> - <varlistentry> - <term>DRM_MODE_PROP_RANGE</term> - <listitem><para>Range properties report their minimum and maximum - admissible values. The KMS core verifies that values set by - application fit in that range.</para></listitem> - </varlistentry> - <varlistentry> - <term>DRM_MODE_PROP_ENUM</term> - <listitem><para>Enumerated properties take a numerical value that - ranges from 0 to the number of enumerated values defined by the - property minus one, and associate a free-formed string name to each - value. Applications can retrieve the list of defined value-name pairs - and use the numerical value to get and set property instance values. - </para></listitem> - </varlistentry> - <varlistentry> - <term>DRM_MODE_PROP_BITMASK</term> - <listitem><para>Bitmask properties are enumeration properties that - additionally restrict all enumerated values to the 0..63 range. - Bitmask property instance values combine one or more of the - enumerated bits defined by the property.</para></listitem> - </varlistentry> - <varlistentry> - <term>DRM_MODE_PROP_BLOB</term> - <listitem><para>Blob properties store a binary blob without any format - restriction. The binary blobs are created as KMS standalone objects, - and blob property instance values store the ID of their associated - blob object.</para> - <para>Blob properties are only used for the connector EDID property - and cannot be created by drivers.</para></listitem> - </varlistentry> - </variablelist> - </para> - <para> - To create a property drivers call one of the following functions depending - on the property type. All property creation functions take property flags - and name, as well as type-specific arguments. - <itemizedlist> - <listitem> - <synopsis>struct drm_property *drm_property_create_range(struct drm_device *dev, int flags, - const char *name, - uint64_t min, uint64_t max);</synopsis> - <para>Create a range property with the given minimum and maximum - values.</para> - </listitem> - <listitem> - <synopsis>struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags, - const char *name, - const struct drm_prop_enum_list *props, - int num_values);</synopsis> - <para>Create an enumerated property. The <parameter>props</parameter> - argument points to an array of <parameter>num_values</parameter> - value-name pairs.</para> - </listitem> - <listitem> - <synopsis>struct drm_property *drm_property_create_bitmask(struct drm_device *dev, - int flags, const char *name, - const struct drm_prop_enum_list *props, - int num_values);</synopsis> - <para>Create a bitmask property. The <parameter>props</parameter> - argument points to an array of <parameter>num_values</parameter> - value-name pairs.</para> - </listitem> - </itemizedlist> - </para> - <para> - Properties can additionally be created as immutable, in which case they - will be read-only for applications but can be modified by the driver. To - create an immutable property drivers must set the DRM_MODE_PROP_IMMUTABLE - flag at property creation time. - </para> - <para> - When no array of value-name pairs is readily available at property - creation time for enumerated or range properties, drivers can create - the property using the <function>drm_property_create</function> function - and manually add enumeration value-name pairs by calling the - <function>drm_property_add_enum</function> function. Care must be taken to - properly specify the property type through the <parameter>flags</parameter> - argument. - </para> - <para> - After creating properties drivers can attach property instances to CRTC, - connector and plane objects by calling the - <function>drm_object_attach_property</function>. The function takes a - pointer to the target object, a pointer to the previously created property - and an initial instance value. - </para> - <sect2> - <title>Existing KMS Properties</title> - <para> - The following table gives description of drm properties exposed by various - modules/drivers. - </para> - <table border="1" cellpadding="0" cellspacing="0"> - <tbody> - <tr style="font-weight: bold;"> - <td valign="top" >Owner Module/Drivers</td> - <td valign="top" >Group</td> - <td valign="top" >Property Name</td> - <td valign="top" >Type</td> - <td valign="top" >Property Values</td> - <td valign="top" >Object attached</td> - <td valign="top" >Description/Restrictions</td> - </tr> - <tr> - <td rowspan="42" valign="top" >DRM</td> - <td rowspan="2" valign="top" >Generic</td> - <td valign="top" >“rotation”</td> - <td valign="top" >BITMASK</td> - <td valign="top" >{ 0, "rotate-0" }, - { 1, "rotate-90" }, - { 2, "rotate-180" }, - { 3, "rotate-270" }, - { 4, "reflect-x" }, - { 5, "reflect-y" }</td> - <td valign="top" >CRTC, Plane</td> - <td valign="top" >rotate-(degrees) rotates the image by the specified amount in degrees - in counter clockwise direction. reflect-x and reflect-y reflects the - image along the specified axis prior to rotation</td> - </tr> - <tr> - <td valign="top" >“scaling mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "None", "Full", "Center", "Full aspect" }</td> - <td valign="top" >Connector</td> - <td valign="top" >Supported by: amdgpu, gma500, i915, nouveau and radeon.</td> - </tr> - <tr> - <td rowspan="5" valign="top" >Connector</td> - <td valign="top" >“EDID”</td> - <td valign="top" >BLOB | IMMUTABLE</td> - <td valign="top" >0</td> - <td valign="top" >Connector</td> - <td valign="top" >Contains id of edid blob ptr object.</td> - </tr> - <tr> - <td valign="top" >“DPMS”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ “On”, “Standby”, “Suspend”, “Off” }</td> - <td valign="top" >Connector</td> - <td valign="top" >Contains DPMS operation mode value.</td> - </tr> - <tr> - <td valign="top" >“PATH”</td> - <td valign="top" >BLOB | IMMUTABLE</td> - <td valign="top" >0</td> - <td valign="top" >Connector</td> - <td valign="top" >Contains topology path to a connector.</td> - </tr> - <tr> - <td valign="top" >“TILE”</td> - <td valign="top" >BLOB | IMMUTABLE</td> - <td valign="top" >0</td> - <td valign="top" >Connector</td> - <td valign="top" >Contains tiling information for a connector.</td> - </tr> - <tr> - <td valign="top" >“CRTC_ID”</td> - <td valign="top" >OBJECT</td> - <td valign="top" >DRM_MODE_OBJECT_CRTC</td> - <td valign="top" >Connector</td> - <td valign="top" >CRTC that connector is attached to (atomic)</td> - </tr> - <tr> - <td rowspan="11" valign="top" >Plane</td> - <td valign="top" >“type”</td> - <td valign="top" >ENUM | IMMUTABLE</td> - <td valign="top" >{ "Overlay", "Primary", "Cursor" }</td> - <td valign="top" >Plane</td> - <td valign="top" >Plane type</td> - </tr> - <tr> - <td valign="top" >“SRC_X”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout source x coordinate in 16.16 fixed point (atomic)</td> - </tr> - <tr> - <td valign="top" >“SRC_Y”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout source y coordinate in 16.16 fixed point (atomic)</td> - </tr> - <tr> - <td valign="top" >“SRC_W”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout source width in 16.16 fixed point (atomic)</td> - </tr> - <tr> - <td valign="top" >“SRC_H”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout source height in 16.16 fixed point (atomic)</td> - </tr> - <tr> - <td valign="top" >“CRTC_X”</td> - <td valign="top" >SIGNED_RANGE</td> - <td valign="top" >Min=INT_MIN, Max=INT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout CRTC (destination) x coordinate (atomic)</td> - </tr> - <tr> - <td valign="top" >“CRTC_Y”</td> - <td valign="top" >SIGNED_RANGE</td> - <td valign="top" >Min=INT_MIN, Max=INT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout CRTC (destination) y coordinate (atomic)</td> - </tr> - <tr> - <td valign="top" >“CRTC_W”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout CRTC (destination) width (atomic)</td> - </tr> - <tr> - <td valign="top" >“CRTC_H”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout CRTC (destination) height (atomic)</td> - </tr> - <tr> - <td valign="top" >“FB_ID”</td> - <td valign="top" >OBJECT</td> - <td valign="top" >DRM_MODE_OBJECT_FB</td> - <td valign="top" >Plane</td> - <td valign="top" >Scanout framebuffer (atomic)</td> - </tr> - <tr> - <td valign="top" >“CRTC_ID”</td> - <td valign="top" >OBJECT</td> - <td valign="top" >DRM_MODE_OBJECT_CRTC</td> - <td valign="top" >Plane</td> - <td valign="top" >CRTC that plane is attached to (atomic)</td> - </tr> - <tr> - <td rowspan="2" valign="top" >DVI-I</td> - <td valign="top" >“subconnector”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ “Unknown”, “DVI-D”, “DVI-A” }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“select subconnector”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ “Automatic”, “DVI-D”, “DVI-A” }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="13" valign="top" >TV</td> - <td valign="top" >“subconnector”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "Unknown", "Composite", "SVIDEO", "Component", "SCART" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“select subconnector”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "Automatic", "Composite", "SVIDEO", "Component", "SCART" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "NTSC_M", "NTSC_J", "NTSC_443", "PAL_B" } etc.</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“left margin”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“right margin”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“top margin”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“bottom margin”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“brightness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“contrast”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker reduction”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“overscan”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“saturation”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“hue”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="2" valign="top" >Virtual GPU</td> - <td valign="top" >“suggested X”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffffff</td> - <td valign="top" >Connector</td> - <td valign="top" >property to suggest an X offset for a connector</td> - </tr> - <tr> - <td valign="top" >“suggested Y”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffffff</td> - <td valign="top" >Connector</td> - <td valign="top" >property to suggest an Y offset for a connector</td> - </tr> - <tr> - <td rowspan="7" valign="top" >Optional</td> - <td valign="top" >"aspect ratio"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "None", "4:3", "16:9" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TDB</td> - </tr> - <tr> - <td valign="top" >“dirty”</td> - <td valign="top" >ENUM | IMMUTABLE</td> - <td valign="top" >{ "Off", "On", "Annotate" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“DEGAMMA_LUT”</td> - <td valign="top" >BLOB</td> - <td valign="top" >0</td> - <td valign="top" >CRTC</td> - <td valign="top" >DRM property to set the degamma lookup table - (LUT) mapping pixel data from the framebuffer before it is - given to the transformation matrix. The data is an interpreted - as an array of struct drm_color_lut elements. Hardware might - choose not to use the full precision of the LUT elements nor - use all the elements of the LUT (for example the hardware - might choose to interpolate between LUT[0] and LUT[4]). </td> - </tr> - <tr> - <td valign="top" >“DEGAMMA_LUT_SIZE”</td> - <td valign="top" >RANGE | IMMUTABLE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >CRTC</td> - <td valign="top" >DRM property to gives the size of the lookup - table to be set on the DEGAMMA_LUT property (the size depends - on the underlying hardware).</td> - </tr> - <tr> - <td valign="top" >“CTM”</td> - <td valign="top" >BLOB</td> - <td valign="top" >0</td> - <td valign="top" >CRTC</td> - <td valign="top" >DRM property to set the current - transformation matrix (CTM) apply to pixel data after the - lookup through the degamma LUT and before the lookup through - the gamma LUT. The data is an interpreted as a struct - drm_color_ctm.</td> - </tr> - <tr> - <td valign="top" >“GAMMA_LUT”</td> - <td valign="top" >BLOB</td> - <td valign="top" >0</td> - <td valign="top" >CRTC</td> - <td valign="top" >DRM property to set the gamma lookup table - (LUT) mapping pixel data after to the transformation matrix to - data sent to the connector. The data is an interpreted as an - array of struct drm_color_lut elements. Hardware might choose - not to use the full precision of the LUT elements nor use all - the elements of the LUT (for example the hardware might choose - to interpolate between LUT[0] and LUT[4]).</td> - </tr> - <tr> - <td valign="top" >“GAMMA_LUT_SIZE”</td> - <td valign="top" >RANGE | IMMUTABLE</td> - <td valign="top" >Min=0, Max=UINT_MAX</td> - <td valign="top" >CRTC</td> - <td valign="top" >DRM property to gives the size of the lookup - table to be set on the GAMMA_LUT property (the size depends on - the underlying hardware).</td> - </tr> - <tr> - <td rowspan="20" valign="top" >i915</td> - <td rowspan="2" valign="top" >Generic</td> - <td valign="top" >"Broadcast RGB"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "Automatic", "Full", "Limited 16:235" }</td> - <td valign="top" >Connector</td> - <td valign="top" >When this property is set to Limited 16:235 - and CTM is set, the hardware will be programmed with the - result of the multiplication of CTM by the limited range - matrix to ensure the pixels normaly in the range 0..1.0 are - remapped to the range 16/255..235/255.</td> - </tr> - <tr> - <td valign="top" >“audio”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "force-dvi", "off", "auto", "on" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="17" valign="top" >SDVO-TV</td> - <td valign="top" >“mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "NTSC_M", "NTSC_J", "NTSC_443", "PAL_B" } etc.</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"left_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"right_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"top_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"bottom_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“hpos”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“vpos”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“contrast”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“saturation”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“hue”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“sharpness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker_filter”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker_filter_adaptive”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker_filter_2d”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“tv_chroma_filter”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“tv_luma_filter”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“dot_crawl”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >SDVO-TV/LVDS</td> - <td valign="top" >“brightness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="2" valign="top" >CDV gma-500</td> - <td rowspan="2" valign="top" >Generic</td> - <td valign="top" >"Broadcast RGB"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ “Full”, “Limited 16:235” }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"Broadcast RGB"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ “off”, “auto”, “on” }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="19" valign="top" >Poulsbo</td> - <td rowspan="1" valign="top" >Generic</td> - <td valign="top" >“backlight”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=100</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="17" valign="top" >SDVO-TV</td> - <td valign="top" >“mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "NTSC_M", "NTSC_J", "NTSC_443", "PAL_B" } etc.</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"left_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"right_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"top_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"bottom_margin"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“hpos”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“vpos”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“contrast”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“saturation”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“hue”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“sharpness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker_filter”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker_filter_adaptive”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“flicker_filter_2d”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“tv_chroma_filter”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“tv_luma_filter”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“dot_crawl”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >SDVO-TV/LVDS</td> - <td valign="top" >“brightness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max= SDVO dependent</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="11" valign="top" >armada</td> - <td rowspan="2" valign="top" >CRTC</td> - <td valign="top" >"CSC_YUV"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "Auto" , "CCIR601", "CCIR709" }</td> - <td valign="top" >CRTC</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"CSC_RGB"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "Auto", "Computer system", "Studio" }</td> - <td valign="top" >CRTC</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="9" valign="top" >Overlay</td> - <td valign="top" >"colorkey"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"colorkey_min"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"colorkey_max"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"colorkey_val"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"colorkey_alpha"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0xffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"colorkey_mode"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "disabled", "Y component", "U component" - , "V component", "RGB", “R component", "G component", "B component" }</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"brightness"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=256 + 255</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"contrast"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0x7fff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"saturation"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0x7fff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="2" valign="top" >exynos</td> - <td valign="top" >CRTC</td> - <td valign="top" >“mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "normal", "blank" }</td> - <td valign="top" >CRTC</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >Overlay</td> - <td valign="top" >“zpos”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=MAX_PLANE-1</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="2" valign="top" >i2c/ch7006_drv</td> - <td valign="top" >Generic</td> - <td valign="top" >“scale”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=2</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="1" valign="top" >TV</td> - <td valign="top" >“mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "PAL", "PAL-M","PAL-N"}, ”PAL-Nc" - , "PAL-60", "NTSC-M", "NTSC-J" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="15" valign="top" >nouveau</td> - <td rowspan="6" valign="top" >NV10 Overlay</td> - <td valign="top" >"colorkey"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0x01ffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“contrast”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=8192-1</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“brightness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1024</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“hue”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=359</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“saturation”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=8192-1</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“iturbt_709”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="2" valign="top" >Nv04 Overlay</td> - <td valign="top" >“colorkey”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0x01ffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“brightness”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1024</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="7" valign="top" >Display</td> - <td valign="top" >“dithering mode”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "auto", "off", "on" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“dithering depth”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "auto", "off", "on", "static 2x2", "dynamic 2x2", "temporal" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“underscan”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "auto", "6 bpc", "8 bpc" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“underscan hborder”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=128</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“underscan vborder”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=128</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“vibrant hue”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=180</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >“color vibrance”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=200</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >omap</td> - <td valign="top" >Generic</td> - <td valign="top" >“zorder”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=3</td> - <td valign="top" >CRTC, Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >qxl</td> - <td valign="top" >Generic</td> - <td valign="top" >“hotplug_mode_update"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="9" valign="top" >radeon</td> - <td valign="top" >DVI-I</td> - <td valign="top" >“coherent”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >DAC enable load detect</td> - <td valign="top" >“load detection”</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=1</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >TV Standard</td> - <td valign="top" >"tv standard"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "ntsc", "pal", "pal-m", "pal-60", "ntsc-j" - , "scart-pal", "pal-cn", "secam" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >legacy TMDS PLL detect</td> - <td valign="top" >"tmds_pll"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "driver", "bios" }</td> - <td valign="top" >-</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="3" valign="top" >Underscan</td> - <td valign="top" >"underscan"</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "off", "on", "auto" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"underscan hborder"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=128</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"underscan vborder"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=128</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >Audio</td> - <td valign="top" >“audio”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "off", "on", "auto" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >FMT Dithering</td> - <td valign="top" >“dither”</td> - <td valign="top" >ENUM</td> - <td valign="top" >{ "off", "on" }</td> - <td valign="top" >Connector</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td rowspan="3" valign="top" >rcar-du</td> - <td rowspan="3" valign="top" >Generic</td> - <td valign="top" >"alpha"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=255</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"colorkey"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=0, Max=0x01ffffff</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - <tr> - <td valign="top" >"zpos"</td> - <td valign="top" >RANGE</td> - <td valign="top" >Min=1, Max=7</td> - <td valign="top" >Plane</td> - <td valign="top" >TBD</td> - </tr> - </tbody> - </table> - </sect2> - </sect1> - - <!-- Internals: vertical blanking --> - - <sect1 id="drm-vertical-blank"> - <title>Vertical Blanking</title> - <para> - Vertical blanking plays a major role in graphics rendering. To achieve - tear-free display, users must synchronize page flips and/or rendering to - vertical blanking. The DRM API offers ioctls to perform page flips - synchronized to vertical blanking and wait for vertical blanking. - </para> - <para> - The DRM core handles most of the vertical blanking management logic, which - involves filtering out spurious interrupts, keeping race-free blanking - counters, coping with counter wrap-around and resets and keeping use - counts. It relies on the driver to generate vertical blanking interrupts - and optionally provide a hardware vertical blanking counter. Drivers must - implement the following operations. - </para> - <itemizedlist> - <listitem> - <synopsis>int (*enable_vblank) (struct drm_device *dev, int crtc); -void (*disable_vblank) (struct drm_device *dev, int crtc);</synopsis> - <para> - Enable or disable vertical blanking interrupts for the given CRTC. - </para> - </listitem> - <listitem> - <synopsis>u32 (*get_vblank_counter) (struct drm_device *dev, int crtc);</synopsis> - <para> - Retrieve the value of the vertical blanking counter for the given - CRTC. If the hardware maintains a vertical blanking counter its value - should be returned. Otherwise drivers can use the - <function>drm_vblank_count</function> helper function to handle this - operation. - </para> - </listitem> - </itemizedlist> - <para> - Drivers must initialize the vertical blanking handling core with a call to - <function>drm_vblank_init</function> in their - <methodname>load</methodname> operation. The function will set the struct - <structname>drm_device</structname> - <structfield>vblank_disable_allowed</structfield> field to 0. This will - keep vertical blanking interrupts enabled permanently until the first mode - set operation, where <structfield>vblank_disable_allowed</structfield> is - set to 1. The reason behind this is not clear. Drivers can set the field - to 1 after <function>calling drm_vblank_init</function> to make vertical - blanking interrupts dynamically managed from the beginning. - </para> - <para> - Vertical blanking interrupts can be enabled by the DRM core or by drivers - themselves (for instance to handle page flipping operations). The DRM core - maintains a vertical blanking use count to ensure that the interrupts are - not disabled while a user still needs them. To increment the use count, - drivers call <function>drm_vblank_get</function>. Upon return vertical - blanking interrupts are guaranteed to be enabled. - </para> - <para> - To decrement the use count drivers call - <function>drm_vblank_put</function>. Only when the use count drops to zero - will the DRM core disable the vertical blanking interrupts after a delay - by scheduling a timer. The delay is accessible through the vblankoffdelay - module parameter or the <varname>drm_vblank_offdelay</varname> global - variable and expressed in milliseconds. Its default value is 5000 ms. - Zero means never disable, and a negative value means disable immediately. - Drivers may override the behaviour by setting the - <structname>drm_device</structname> - <structfield>vblank_disable_immediate</structfield> flag, which when set - causes vblank interrupts to be disabled immediately regardless of the - drm_vblank_offdelay value. The flag should only be set if there's a - properly working hardware vblank counter present. - </para> - <para> - When a vertical blanking interrupt occurs drivers only need to call the - <function>drm_handle_vblank</function> function to account for the - interrupt. - </para> - <para> - Resources allocated by <function>drm_vblank_init</function> must be freed - with a call to <function>drm_vblank_cleanup</function> in the driver - <methodname>unload</methodname> operation handler. - </para> - <sect2> - <title>Vertical Blanking and Interrupt Handling Functions Reference</title> -!Edrivers/gpu/drm/drm_irq.c -!Finclude/drm/drmP.h drm_crtc_vblank_waitqueue - </sect2> - </sect1> - - <!-- Internals: open/close, file operations and ioctls --> - - <sect1> - <title>Open/Close, File Operations and IOCTLs</title> - <sect2> - <title>Open and Close</title> - <synopsis>int (*firstopen) (struct drm_device *); -void (*lastclose) (struct drm_device *); -int (*open) (struct drm_device *, struct drm_file *); -void (*preclose) (struct drm_device *, struct drm_file *); -void (*postclose) (struct drm_device *, struct drm_file *);</synopsis> - <abstract>Open and close handlers. None of those methods are mandatory. - </abstract> - <para> - The <methodname>firstopen</methodname> method is called by the DRM core - for legacy UMS (User Mode Setting) drivers only when an application - opens a device that has no other opened file handle. UMS drivers can - implement it to acquire device resources. KMS drivers can't use the - method and must acquire resources in the <methodname>load</methodname> - method instead. - </para> - <para> - Similarly the <methodname>lastclose</methodname> method is called when - the last application holding a file handle opened on the device closes - it, for both UMS and KMS drivers. Additionally, the method is also - called at module unload time or, for hot-pluggable devices, when the - device is unplugged. The <methodname>firstopen</methodname> and - <methodname>lastclose</methodname> calls can thus be unbalanced. - </para> - <para> - The <methodname>open</methodname> method is called every time the device - is opened by an application. Drivers can allocate per-file private data - in this method and store them in the struct - <structname>drm_file</structname> <structfield>driver_priv</structfield> - field. Note that the <methodname>open</methodname> method is called - before <methodname>firstopen</methodname>. - </para> - <para> - The close operation is split into <methodname>preclose</methodname> and - <methodname>postclose</methodname> methods. Drivers must stop and - cleanup all per-file operations in the <methodname>preclose</methodname> - method. For instance pending vertical blanking and page flip events must - be cancelled. No per-file operation is allowed on the file handle after - returning from the <methodname>preclose</methodname> method. - </para> - <para> - Finally the <methodname>postclose</methodname> method is called as the - last step of the close operation, right before calling the - <methodname>lastclose</methodname> method if no other open file handle - exists for the device. Drivers that have allocated per-file private data - in the <methodname>open</methodname> method should free it here. - </para> - <para> - The <methodname>lastclose</methodname> method should restore CRTC and - plane properties to default value, so that a subsequent open of the - device will not inherit state from the previous user. It can also be - used to execute delayed power switching state changes, e.g. in - conjunction with the vga_switcheroo infrastructure (see - <xref linkend="vga_switcheroo"/>). Beyond that KMS drivers should not - do any further cleanup. Only legacy UMS drivers might need to clean up - device state so that the vga console or an independent fbdev driver - could take over. - </para> - </sect2> - <sect2> - <title>File Operations</title> -!Pdrivers/gpu/drm/drm_fops.c file operations -!Edrivers/gpu/drm/drm_fops.c - </sect2> - <sect2> - <title>IOCTLs</title> - <synopsis>struct drm_ioctl_desc *ioctls; -int num_ioctls;</synopsis> - <abstract>Driver-specific ioctls descriptors table.</abstract> - <para> - Driver-specific ioctls numbers start at DRM_COMMAND_BASE. The ioctls - descriptors table is indexed by the ioctl number offset from the base - value. Drivers can use the DRM_IOCTL_DEF_DRV() macro to initialize the - table entries. - </para> - <para> - <programlisting>DRM_IOCTL_DEF_DRV(ioctl, func, flags)</programlisting> - <para> - <parameter>ioctl</parameter> is the ioctl name. Drivers must define - the DRM_##ioctl and DRM_IOCTL_##ioctl macros to the ioctl number - offset from DRM_COMMAND_BASE and the ioctl number respectively. The - first macro is private to the device while the second must be exposed - to userspace in a public header. - </para> - <para> - <parameter>func</parameter> is a pointer to the ioctl handler function - compatible with the <type>drm_ioctl_t</type> type. - <programlisting>typedef int drm_ioctl_t(struct drm_device *dev, void *data, - struct drm_file *file_priv);</programlisting> - </para> - <para> - <parameter>flags</parameter> is a bitmask combination of the following - values. It restricts how the ioctl is allowed to be called. - <itemizedlist> - <listitem><para> - DRM_AUTH - Only authenticated callers allowed - </para></listitem> - <listitem><para> - DRM_MASTER - The ioctl can only be called on the master file - handle - </para></listitem> - <listitem><para> - DRM_ROOT_ONLY - Only callers with the SYSADMIN capability allowed - </para></listitem> - <listitem><para> - DRM_CONTROL_ALLOW - The ioctl can only be called on a control - device - </para></listitem> - <listitem><para> - DRM_UNLOCKED - The ioctl handler will be called without locking - the DRM global mutex. This is the enforced default for kms drivers - (i.e. using the DRIVER_MODESET flag) and hence shouldn't be used - any more for new drivers. - </para></listitem> - </itemizedlist> - </para> - </para> -!Edrivers/gpu/drm/drm_ioctl.c - </sect2> - </sect1> - <sect1> - <title>Legacy Support Code</title> - <para> - The section very briefly covers some of the old legacy support code which - is only used by old DRM drivers which have done a so-called shadow-attach - to the underlying device instead of registering as a real driver. This - also includes some of the old generic buffer management and command - submission code. Do not use any of this in new and modern drivers. - </para> - - <sect2> - <title>Legacy Suspend/Resume</title> - <para> - The DRM core provides some suspend/resume code, but drivers wanting full - suspend/resume support should provide save() and restore() functions. - These are called at suspend, hibernate, or resume time, and should perform - any state save or restore required by your device across suspend or - hibernate states. - </para> - <synopsis>int (*suspend) (struct drm_device *, pm_message_t state); - int (*resume) (struct drm_device *);</synopsis> - <para> - Those are legacy suspend and resume methods which - <emphasis>only</emphasis> work with the legacy shadow-attach driver - registration functions. New driver should use the power management - interface provided by their bus type (usually through - the struct <structname>device_driver</structname> dev_pm_ops) and set - these methods to NULL. - </para> - </sect2> - - <sect2> - <title>Legacy DMA Services</title> - <para> - This should cover how DMA mapping etc. is supported by the core. - These functions are deprecated and should not be used. - </para> - </sect2> - </sect1> - </chapter> - -<!-- TODO - -- Add a glossary -- Document the struct_mutex catch-all lock -- Document connector properties - -- Why is the load method optional? -- What are drivers supposed to set the initial display state to, and how? - Connector's DPMS states are not initialized and are thus equal to - DRM_MODE_DPMS_ON. The fbcon compatibility layer calls - drm_helper_disable_unused_functions(), which disables unused encoders and - CRTCs, but doesn't touch the connectors' DPMS state, and - drm_helper_connector_dpms() in reaction to fbdev blanking events. Do drivers - that don't implement (or just don't use) fbcon compatibility need to call - those functions themselves? -- KMS drivers must call drm_vblank_pre_modeset() and drm_vblank_post_modeset() - around mode setting. Should this be done in the DRM core? -- vblank_disable_allowed is set to 1 in the first drm_vblank_post_modeset() - call and never set back to 0. It seems to be safe to permanently set it to 1 - in drm_vblank_init() for KMS driver, and it might be safe for UMS drivers as - well. This should be investigated. -- crtc and connector .save and .restore operations are only used internally in - drivers, should they be removed from the core? -- encoder mid-layer .save and .restore operations are only used internally in - drivers, should they be removed from the core? -- encoder mid-layer .detect operation is only used internally in drivers, - should it be removed from the core? ---> - - <!-- External interfaces --> - - <chapter id="drmExternals"> - <title>Userland interfaces</title> - <para> - The DRM core exports several interfaces to applications, - generally intended to be used through corresponding libdrm - wrapper functions. In addition, drivers export device-specific - interfaces for use by userspace drivers & device-aware - applications through ioctls and sysfs files. - </para> - <para> - External interfaces include: memory mapping, context management, - DMA operations, AGP management, vblank control, fence - management, memory management, and output management. - </para> - <para> - Cover generic ioctls and sysfs layout here. We only need high-level - info, since man pages should cover the rest. - </para> - - <!-- External: render nodes --> - - <sect1> - <title>Render nodes</title> - <para> - DRM core provides multiple character-devices for user-space to use. - Depending on which device is opened, user-space can perform a different - set of operations (mainly ioctls). The primary node is always created - and called card<num>. Additionally, a currently - unused control node, called controlD<num> is also - created. The primary node provides all legacy operations and - historically was the only interface used by userspace. With KMS, the - control node was introduced. However, the planned KMS control interface - has never been written and so the control node stays unused to date. - </para> - <para> - With the increased use of offscreen renderers and GPGPU applications, - clients no longer require running compositors or graphics servers to - make use of a GPU. But the DRM API required unprivileged clients to - authenticate to a DRM-Master prior to getting GPU access. To avoid this - step and to grant clients GPU access without authenticating, render - nodes were introduced. Render nodes solely serve render clients, that - is, no modesetting or privileged ioctls can be issued on render nodes. - Only non-global rendering commands are allowed. If a driver supports - render nodes, it must advertise it via the DRIVER_RENDER - DRM driver capability. If not supported, the primary node must be used - for render clients together with the legacy drmAuth authentication - procedure. - </para> - <para> - If a driver advertises render node support, DRM core will create a - separate render node called renderD<num>. There will - be one render node per device. No ioctls except PRIME-related ioctls - will be allowed on this node. Especially GEM_OPEN will be - explicitly prohibited. Render nodes are designed to avoid the - buffer-leaks, which occur if clients guess the flink names or mmap - offsets on the legacy interface. Additionally to this basic interface, - drivers must mark their driver-dependent render-only ioctls as - DRM_RENDER_ALLOW so render clients can use them. Driver - authors must be careful not to allow any privileged ioctls on render - nodes. - </para> - <para> - With render nodes, user-space can now control access to the render node - via basic file-system access-modes. A running graphics server which - authenticates clients on the privileged primary/legacy node is no longer - required. Instead, a client can open the render node and is immediately - granted GPU access. Communication between clients (or servers) is done - via PRIME. FLINK from render node to legacy node is not supported. New - clients must not use the insecure FLINK interface. - </para> - <para> - Besides dropping all modeset/global ioctls, render nodes also drop the - DRM-Master concept. There is no reason to associate render clients with - a DRM-Master as they are independent of any graphics server. Besides, - they must work without any running master, anyway. - Drivers must be able to run without a master object if they support - render nodes. If, on the other hand, a driver requires shared state - between clients which is visible to user-space and accessible beyond - open-file boundaries, they cannot support render nodes. - </para> - </sect1> - - <!-- External: vblank handling --> - - <sect1> - <title>VBlank event handling</title> - <para> - The DRM core exposes two vertical blank related ioctls: - <variablelist> - <varlistentry> - <term>DRM_IOCTL_WAIT_VBLANK</term> - <listitem> - <para> - This takes a struct drm_wait_vblank structure as its argument, - and it is used to block or request a signal when a specified - vblank event occurs. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term>DRM_IOCTL_MODESET_CTL</term> - <listitem> - <para> - This was only used for user-mode-settind drivers around - modesetting changes to allow the kernel to update the vblank - interrupt after mode setting, since on many devices the vertical - blank counter is reset to 0 at some point during modeset. Modern - drivers should not call this any more since with kernel mode - setting it is a no-op. - </para> - </listitem> - </varlistentry> - </variablelist> - </para> - </sect1> - - </chapter> -</part> -<part id="drmDrivers"> - <title>DRM Drivers</title> - - <partintro> - <para> - This second part of the GPU Driver Developer's Guide documents driver - code, implementation details and also all the driver-specific userspace - interfaces. Especially since all hardware-acceleration interfaces to - userspace are driver specific for efficiency and other reasons these - interfaces can be rather substantial. Hence every driver has its own - chapter. - </para> - </partintro> - - <chapter id="drmI915"> - <title>drm/i915 Intel GFX Driver</title> - <para> - The drm/i915 driver supports all (with the exception of some very early - models) integrated GFX chipsets with both Intel display and rendering - blocks. This excludes a set of SoC platforms with an SGX rendering unit, - those have basic support through the gma500 drm driver. - </para> - <sect1> - <title>Core Driver Infrastructure</title> - <para> - This section covers core driver infrastructure used by both the display - and the GEM parts of the driver. - </para> - <sect2> - <title>Runtime Power Management</title> -!Pdrivers/gpu/drm/i915/intel_runtime_pm.c runtime pm -!Idrivers/gpu/drm/i915/intel_runtime_pm.c -!Idrivers/gpu/drm/i915/intel_uncore.c - </sect2> - <sect2> - <title>Interrupt Handling</title> -!Pdrivers/gpu/drm/i915/i915_irq.c interrupt handling -!Fdrivers/gpu/drm/i915/i915_irq.c intel_irq_init intel_irq_init_hw intel_hpd_init -!Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_disable_interrupts -!Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_enable_interrupts - </sect2> - <sect2> - <title>Intel GVT-g Guest Support(vGPU)</title> -!Pdrivers/gpu/drm/i915/i915_vgpu.c Intel GVT-g guest support -!Idrivers/gpu/drm/i915/i915_vgpu.c - </sect2> - </sect1> - <sect1> - <title>Display Hardware Handling</title> - <para> - This section covers everything related to the display hardware including - the mode setting infrastructure, plane, sprite and cursor handling and - display, output probing and related topics. - </para> - <sect2> - <title>Mode Setting Infrastructure</title> - <para> - The i915 driver is thus far the only DRM driver which doesn't use the - common DRM helper code to implement mode setting sequences. Thus it - has its own tailor-made infrastructure for executing a display - configuration change. - </para> - </sect2> - <sect2> - <title>Frontbuffer Tracking</title> -!Pdrivers/gpu/drm/i915/intel_frontbuffer.c frontbuffer tracking -!Idrivers/gpu/drm/i915/intel_frontbuffer.c -!Fdrivers/gpu/drm/i915/i915_gem.c i915_gem_track_fb - </sect2> - <sect2> - <title>Display FIFO Underrun Reporting</title> -!Pdrivers/gpu/drm/i915/intel_fifo_underrun.c fifo underrun handling -!Idrivers/gpu/drm/i915/intel_fifo_underrun.c - </sect2> - <sect2> - <title>Plane Configuration</title> - <para> - This section covers plane configuration and composition with the - primary plane, sprites, cursors and overlays. This includes the - infrastructure to do atomic vsync'ed updates of all this state and - also tightly coupled topics like watermark setup and computation, - framebuffer compression and panel self refresh. - </para> - </sect2> - <sect2> - <title>Atomic Plane Helpers</title> -!Pdrivers/gpu/drm/i915/intel_atomic_plane.c atomic plane helpers -!Idrivers/gpu/drm/i915/intel_atomic_plane.c - </sect2> - <sect2> - <title>Output Probing</title> - <para> - This section covers output probing and related infrastructure like the - hotplug interrupt storm detection and mitigation code. Note that the - i915 driver still uses most of the common DRM helper code for output - probing, so those sections fully apply. - </para> - </sect2> - <sect2> - <title>Hotplug</title> -!Pdrivers/gpu/drm/i915/intel_hotplug.c Hotplug -!Idrivers/gpu/drm/i915/intel_hotplug.c - </sect2> - <sect2> - <title>High Definition Audio</title> -!Pdrivers/gpu/drm/i915/intel_audio.c High Definition Audio over HDMI and Display Port -!Idrivers/gpu/drm/i915/intel_audio.c -!Iinclude/drm/i915_component.h - </sect2> - <sect2> - <title>Panel Self Refresh PSR (PSR/SRD)</title> -!Pdrivers/gpu/drm/i915/intel_psr.c Panel Self Refresh (PSR/SRD) -!Idrivers/gpu/drm/i915/intel_psr.c - </sect2> - <sect2> - <title>Frame Buffer Compression (FBC)</title> -!Pdrivers/gpu/drm/i915/intel_fbc.c Frame Buffer Compression (FBC) -!Idrivers/gpu/drm/i915/intel_fbc.c - </sect2> - <sect2> - <title>Display Refresh Rate Switching (DRRS)</title> -!Pdrivers/gpu/drm/i915/intel_dp.c Display Refresh Rate Switching (DRRS) -!Fdrivers/gpu/drm/i915/intel_dp.c intel_dp_set_drrs_state -!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_enable -!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_disable -!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_invalidate -!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_flush -!Fdrivers/gpu/drm/i915/intel_dp.c intel_dp_drrs_init - - </sect2> - <sect2> - <title>DPIO</title> -!Pdrivers/gpu/drm/i915/i915_reg.h DPIO - </sect2> - - <sect2> - <title>CSR firmware support for DMC</title> -!Pdrivers/gpu/drm/i915/intel_csr.c csr support for dmc -!Idrivers/gpu/drm/i915/intel_csr.c - </sect2> - <sect2> - <title>Video BIOS Table (VBT)</title> -!Pdrivers/gpu/drm/i915/intel_bios.c Video BIOS Table (VBT) -!Idrivers/gpu/drm/i915/intel_bios.c -!Idrivers/gpu/drm/i915/intel_vbt_defs.h - </sect2> - </sect1> - - <sect1> - <title>Memory Management and Command Submission</title> - <para> - This sections covers all things related to the GEM implementation in the - i915 driver. - </para> - <sect2> - <title>Batchbuffer Parsing</title> -!Pdrivers/gpu/drm/i915/i915_cmd_parser.c batch buffer command parser -!Idrivers/gpu/drm/i915/i915_cmd_parser.c - </sect2> - <sect2> - <title>Batchbuffer Pools</title> -!Pdrivers/gpu/drm/i915/i915_gem_batch_pool.c batch pool -!Idrivers/gpu/drm/i915/i915_gem_batch_pool.c - </sect2> - <sect2> - <title>Logical Rings, Logical Ring Contexts and Execlists</title> -!Pdrivers/gpu/drm/i915/intel_lrc.c Logical Rings, Logical Ring Contexts and Execlists -!Idrivers/gpu/drm/i915/intel_lrc.c - </sect2> - <sect2> - <title>Global GTT views</title> -!Pdrivers/gpu/drm/i915/i915_gem_gtt.c Global GTT views -!Idrivers/gpu/drm/i915/i915_gem_gtt.c - </sect2> - <sect2> - <title>GTT Fences and Swizzling</title> -!Idrivers/gpu/drm/i915/i915_gem_fence.c - <sect3> - <title>Global GTT Fence Handling</title> -!Pdrivers/gpu/drm/i915/i915_gem_fence.c fence register handling - </sect3> - <sect3> - <title>Hardware Tiling and Swizzling Details</title> -!Pdrivers/gpu/drm/i915/i915_gem_fence.c tiling swizzling details - </sect3> - </sect2> - <sect2> - <title>Object Tiling IOCTLs</title> -!Idrivers/gpu/drm/i915/i915_gem_tiling.c -!Pdrivers/gpu/drm/i915/i915_gem_tiling.c buffer object tiling - </sect2> - <sect2> - <title>Buffer Object Eviction</title> - <para> - This section documents the interface functions for evicting buffer - objects to make space available in the virtual gpu address spaces. - Note that this is mostly orthogonal to shrinking buffer objects - caches, which has the goal to make main memory (shared with the gpu - through the unified memory architecture) available. - </para> -!Idrivers/gpu/drm/i915/i915_gem_evict.c - </sect2> - <sect2> - <title>Buffer Object Memory Shrinking</title> - <para> - This section documents the interface function for shrinking memory - usage of buffer object caches. Shrinking is used to make main memory - available. Note that this is mostly orthogonal to evicting buffer - objects, which has the goal to make space in gpu virtual address - spaces. - </para> -!Idrivers/gpu/drm/i915/i915_gem_shrinker.c - </sect2> - </sect1> - <sect1> - <title>GuC</title> - <sect2> - <title>GuC-specific firmware loader</title> -!Pdrivers/gpu/drm/i915/intel_guc_loader.c GuC-specific firmware loader -!Idrivers/gpu/drm/i915/intel_guc_loader.c - </sect2> - <sect2> - <title>GuC-based command submission</title> -!Pdrivers/gpu/drm/i915/i915_guc_submission.c GuC-based command submission -!Idrivers/gpu/drm/i915/i915_guc_submission.c - </sect2> - <sect2> - <title>GuC Firmware Layout</title> -!Pdrivers/gpu/drm/i915/intel_guc_fwif.h GuC Firmware Layout - </sect2> - </sect1> - - <sect1> - <title> Tracing </title> - <para> - This sections covers all things related to the tracepoints implemented in - the i915 driver. - </para> - <sect2> - <title> i915_ppgtt_create and i915_ppgtt_release </title> -!Pdrivers/gpu/drm/i915/i915_trace.h i915_ppgtt_create and i915_ppgtt_release tracepoints - </sect2> - <sect2> - <title> i915_context_create and i915_context_free </title> -!Pdrivers/gpu/drm/i915/i915_trace.h i915_context_create and i915_context_free tracepoints - </sect2> - <sect2> - <title> switch_mm </title> -!Pdrivers/gpu/drm/i915/i915_trace.h switch_mm tracepoint - </sect2> - </sect1> - - </chapter> -!Cdrivers/gpu/drm/i915/i915_irq.c -</part> - -<part id="vga_switcheroo"> - <title>vga_switcheroo</title> - <partintro> -!Pdrivers/gpu/vga/vga_switcheroo.c Overview - </partintro> - - <chapter id="modes_of_use"> - <title>Modes of Use</title> - <sect1> - <title>Manual switching and manual power control</title> -!Pdrivers/gpu/vga/vga_switcheroo.c Manual switching and manual power control - </sect1> - <sect1> - <title>Driver power control</title> -!Pdrivers/gpu/vga/vga_switcheroo.c Driver power control - </sect1> - </chapter> - - <chapter id="api"> - <title>API</title> - <sect1> - <title>Public functions</title> -!Edrivers/gpu/vga/vga_switcheroo.c - </sect1> - <sect1> - <title>Public structures</title> -!Finclude/linux/vga_switcheroo.h vga_switcheroo_handler -!Finclude/linux/vga_switcheroo.h vga_switcheroo_client_ops - </sect1> - <sect1> - <title>Public constants</title> -!Finclude/linux/vga_switcheroo.h vga_switcheroo_handler_flags_t -!Finclude/linux/vga_switcheroo.h vga_switcheroo_client_id -!Finclude/linux/vga_switcheroo.h vga_switcheroo_state - </sect1> - <sect1> - <title>Private structures</title> -!Fdrivers/gpu/vga/vga_switcheroo.c vgasr_priv -!Fdrivers/gpu/vga/vga_switcheroo.c vga_switcheroo_client - </sect1> - </chapter> - - <chapter id="handlers"> - <title>Handlers</title> - <sect1> - <title>apple-gmux Handler</title> -!Pdrivers/platform/x86/apple-gmux.c Overview -!Pdrivers/platform/x86/apple-gmux.c Interrupt - <sect2> - <title>Graphics mux</title> -!Pdrivers/platform/x86/apple-gmux.c Graphics mux - </sect2> - <sect2> - <title>Power control</title> -!Pdrivers/platform/x86/apple-gmux.c Power control - </sect2> - <sect2> - <title>Backlight control</title> -!Pdrivers/platform/x86/apple-gmux.c Backlight control - </sect2> - <sect2> - <title>Public functions</title> -!Iinclude/linux/apple-gmux.h - </sect2> - </sect1> - </chapter> - -!Cdrivers/gpu/vga/vga_switcheroo.c -!Cinclude/linux/vga_switcheroo.h -!Cdrivers/platform/x86/apple-gmux.c -</part> - -</book> diff --git a/Documentation/DocBook/media/.gitignore b/Documentation/DocBook/media/.gitignore deleted file mode 100644 index e461c585fde8..000000000000 --- a/Documentation/DocBook/media/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.svg diff --git a/Documentation/DocBook/media/Makefile b/Documentation/DocBook/media/Makefile deleted file mode 100644 index fdc138624800..000000000000 --- a/Documentation/DocBook/media/Makefile +++ /dev/null @@ -1,427 +0,0 @@ -### -# Media build rules - Auto-generates media contents/indexes and *.h xml's -# - -SHELL=/bin/bash - -MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/ -MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media - -MEDIA_TEMP = media-entities.tmpl \ - media-indices.tmpl \ - videodev2.h.xml \ - v4l2.xml \ - audio.h.xml \ - ca.h.xml \ - dmx.h.xml \ - frontend.h.xml \ - net.h.xml \ - video.h.xml \ - -IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64))) -OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES)) -GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP)) - -PHONY += cleanmediadocs - -cleanmediadocs: - -@rm -f `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null - -$(obj)/media_api.xml: $(GENFILES) FORCE - -#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml -#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml -#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml - -V4L_SGMLS = \ - $(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \ - capture.c.xml \ - keytable.c.xml \ - v4l2grab.c.xml - -DVB_SGMLS = \ - $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') - -MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP)) - -FUNCS = \ - close \ - ioctl \ - mmap \ - munmap \ - open \ - poll \ - read \ - select \ - write \ - -IOCTLS = \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/cec.h) \ - $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \ - -DEFINES = \ - $(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \ - -TYPES = \ - $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \ - $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/dvb/frontend.h) - -ENUMS = \ - $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' \ - $(srctree)/include/uapi/linux/videodev2.h \ - $(srctree)/include/uapi/linux/dvb/audio.h \ - $(srctree)/include/uapi/linux/dvb/ca.h \ - $(srctree)/include/uapi/linux/dvb/dmx.h \ - $(srctree)/include/uapi/linux/dvb/frontend.h \ - $(srctree)/include/uapi/linux/dvb/net.h \ - $(srctree)/include/uapi/linux/dvb/video.h \ - $(srctree)/include/uapi/linux/media.h \ - $(srctree)/include/uapi/linux/v4l2-mediabus.h \ - $(srctree)/include/uapi/linux/v4l2-subdev.h) - -ENUM_DEFS = \ - $(shell perl -e 'open IN,"cat @ARGV| cpp -fpreprocessed |"; while (<IN>) { if ($$enum) {print "$$1\n" if (/\s*([A-Z]\S+)\b/); } $$enum = 0 if ($$enum && /^\}/); $$enum = 1 if(/^\s*enum\s/); }; close IN;' \ - $(srctree)/include/uapi/linux/dvb/dmx.h \ - $(srctree)/include/uapi/linux/dvb/frontend.h) - -STRUCTS = \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \ - $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \ - $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/cec.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \ - $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h) - -ERRORS = \ - E2BIG \ - EACCES \ - EAGAIN \ - EBADF \ - EBADFD \ - EBADR \ - EBADRQC \ - EBUSY \ - ECHILD \ - ECONNRESET \ - EDEADLK \ - EDOM \ - EEXIST \ - EFAULT \ - EFBIG \ - EILSEQ \ - EINIT \ - EINPROGRESS \ - EINTR \ - EINVAL \ - EIO \ - EMFILE \ - ENFILE \ - ENOBUFS \ - ENODATA \ - ENODEV \ - ENOENT \ - ENOIOCTLCMD \ - ENOMEM \ - ENOSPC \ - ENOSR \ - ENOSYS \ - ENOTSUP \ - ENOTSUPP \ - ENOTTY \ - ENXIO \ - EOPNOTSUPP \ - EOVERFLOW \ - EPERM \ - EPIPE \ - EPROTO \ - ERANGE \ - EREMOTE \ - EREMOTEIO \ - ERESTART \ - ERESTARTSYS \ - ESHUTDOWN \ - ESPIPE \ - ETIME \ - ETIMEDOUT \ - EUSERS \ - EWOULDBLOCK \ - EXDEV \ - -ESCAPE = \ - -e "s/&/\\&/g" \ - -e "s/</\\</g" \ - -e "s/>/\\>/g" - -FILENAME = \ - -e s,"^[^\/]*/",, \ - -e s/"\\.xml"// \ - -e s/"\\.tmpl"// \ - -e s/\\\./-/g \ - -e s/"^func-"// \ - -e s/"^pixfmt-"// \ - -e s/"^vidioc-"// - -# Generate references to these structs in videodev2.h.xml. -DOCUMENTED = \ - -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \ - -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \ - -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \ - -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ - -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g" - -DVB_DOCUMENTED = \ - -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ - -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \ - -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ - -e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \ - -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ - -e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \ - -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \ - -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ - -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ - -e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \ - -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \ - -e "s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \ - -# -# Media targets and dependencies -# - -install_media_images = \ - $(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \ - mkdir -p $(MEDIA_OBJ_DIR)/media_api; \ - cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \ - fi - -$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 - $(Q)base64 -d $< >$@ - -$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES) - @$($(quiet)gen_xml) - @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/) - @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/) - -$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - for ident in $(ENUM_DEFS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\ - done; \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/' | \ - perl -ne "$$r print $$_;") >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - for ident in $(ENUM_DEFS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\ - done; \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/' | \ - perl -ne "$$r print $$_;") >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<programlisting>") > $@ - @( \ - expand --tabs=8 < $< | \ - sed $(ESCAPE) $(DVB_DOCUMENTED) | \ - sed 's/i\.e\./&ie;/') >> $@ - @( \ - echo "</programlisting>") >> $@ - -$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<!-- Generated file! Do not edit. -->") >$@ - @( \ - echo -e "\n<!-- Functions -->") >>$@ - @( \ - for ident in $(FUNCS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "<!ENTITY func-$$entity \"<link" \ - "linkend='func-$$entity'><function>$$ident()</function></link>\">" \ - >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Ioctls -->") >>$@ - @( \ - for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\ - entity=`echo $$ident | tr _ -` ; \ - id=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \ - if [ "$$id" != "" ]; then echo "<!ENTITY $$entity \"<link" \ - "linkend='$$id'><constant>$$ident</constant></link>\">" \ - >>$@ ; else \ - echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \ - fi; \ - done) - @( \ - echo -e "\n<!-- Defines -->") >>$@ - @( \ - for ident in $(DEFINES) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "<!ENTITY $$entity \"<link" \ - "linkend='$$entity'><constant>$$ident</constant></link>\">" \ - >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Types -->") >>$@ - @( \ - for ident in $(TYPES) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "<!ENTITY $$entity \"<link" \ - "linkend='$$entity'>$$ident</link>\">" >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Enums -->") >>$@ - @( \ - for ident in $(ENUMS) ; do \ - entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \ - echo "<!ENTITY $$entity \"enum <link" \ - "linkend='$$entity'>$$ident</link>\">" >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Enum definitions -->") >>$@ - @( \ - for ident in $(ENUM_DEFS) ; do \ - entity=`echo $$ident | tr _ -` ; \ - echo "<!ENTITY $$entity \"<link" \ - "linkend='$$entity'><constant>$$ident</constant></link>\">" \ - >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Structures -->") >>$@ - @( \ - for ident in $(STRUCTS) ; do \ - entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ - echo "<!ENTITY $$entity \"struct <link" \ - "linkend='$$entity'>$$ident</link>\">" >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Error Codes -->") >>$@ - @( \ - for ident in $(ERRORS) ; do \ - echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \ - "error code\">" >>$@ ; \ - done) - @( \ - echo -e "\n<!-- Subsections -->") >>$@ - @( \ - for file in $(MEDIA_SGMLS) ; do \ - entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \ - if ! echo "$$file" | \ - grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \ - echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \ - fi ; \ - done) - @( \ - echo -e "\n<!-- Function Reference -->") >>$@ - @( \ - for file in $(MEDIA_SGMLS) ; do \ - if echo "$$file" | \ - grep -q -E -e '(func|vidioc|pixfmt)-' ; then \ - entity=`echo "$$file" |sed $(FILENAME)` ; \ - echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \ - fi ; \ - done) - -# Jade can auto-generate a list-of-tables, which includes all structs, -# but we only want data types, all types, and sorted please. -$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml - @$($(quiet)gen_xml) - @( \ - echo "<!-- Generated file! Do not edit. -->") >$@ - @( \ - echo -e "\n<index><title>List of Types</title>") >>$@ - @( \ - for ident in $(TYPES) ; do \ - id=`echo $$ident | tr _ -` ; \ - echo "<indexentry><primaryie><link" \ - "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ - done) - @( \ - for ident in $(ENUMS) ; do \ - id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \ - echo "<indexentry><primaryie>enum <link" \ - "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ - done) - @( \ - for ident in $(STRUCTS) ; do \ - id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ - echo "<indexentry><primaryie>struct <link" \ - "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ - done) - @( \ - echo "</index>") >>$@ - diff --git a/Documentation/DocBook/media/bayer.png.b64 b/Documentation/DocBook/media/bayer.png.b64 deleted file mode 100644 index ccdf2bcda95c..000000000000 --- a/Documentation/DocBook/media/bayer.png.b64 +++ /dev/null @@ -1,171 +0,0 @@ -iVBORw0KGgoAAAANSUhEUgAAAlgAAACqCAMAAABGfcHVAAAAAXNSR0IArs4c6QAAAwBQTFRFAAIA -CAICAAQVEQEBAgsAJgECAAogAwsTAQopHQYBNAEAAAxNARQAERIQAhoDABwAABZEHRQKGRYKQw0F -ACMBACUAERwpHR4cVRAFBR5rZhADACR2JiIhBDAGAiWGgQ4AcxQABDYACSeQMSYlJykmESxYlQ4A -PSYZIS05OSsJHS5JOC8kAEMDUC8SADXLNDUzADbEAEsAADX/2RABCFIAAD/qxB0AAD//BFgAK0Vp -WT4r3hwA3RsTRERAAEf/5CIA2iYCCUv+WUgz7iIAOk5g3CgVSU5SiD8uB2sABm8AE1X/U1RQOFyL -4jkfIlz/RV98M1j+G2H/fVk23jtD4T0pXl9ieFtGcV894UIiYWJfAIwA50gOV2p+4kssO2j+dGZx -bG1qVmj/OHH/aHJzfnBX5lQ7B50AZnahdXd0AKUG5V1ARnz/6mErCqgAAKsAent46GBIW4GhAK0A -AK8B42FtALIOin9/ALUAiIOBALkAVIf/6WxWg4eBi4SKJrEAmoVtdY2geoP/rYVXhoyOqYVuJbUh -IrgWX5D/jo6J7nszP7gAsI9S63xnN70zZqO/fZzCOb4+cZr+64dy8otYnJ6b7ImDRcM56IqcWMEo -oJb/N8ZoTMRL7Y9/QchcsaOTo6eohaj/7ZqKXspXj6v9xal+oK+7d7vTUM+Afco5r7CumLTVStKV -bs9ukbb/9qx/9q9l8queoLv/e9R66beG7rDImNRhi9aDwsPAs8bWzcK2cd67jtqP5MWUodyB8b+1 -tMr/z8L/j9+kbOXWnN2ZstD7yc7Rzs7Ly9xb183UwdD/+si/qeOmvuKIx9fj4tPCtuWiqOrL+tS2 -y9v++NPK2dvZt+m0ueq80+Wo3OeSwuy/yezG+d7f/eS/z/DS3uf/6Ono4PC71O39xPb02vPZ/+nR -+Ori6e399+vt+PGz+ur65fL55/Xb4vbh7ffX/PPY8vP9+vLy6Pf36fjr/PfM8vjr//f+/vn48P36 -9vv+/vzf+fv4/fvu//z7+v7//P/7/v/8//QpxAAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY8AABWW -AQ2TT8cAAAAHdElNRQfaCRQXGSltwbPRAAAgAElEQVR42u2dDXwU1bXAZwEJtEaNH1nbh68fpoWK -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 diff --git a/Documentation/DocBook/media/constraints.png.b64 b/Documentation/DocBook/media/constraints.png.b64 deleted file mode 100644 index 125b4a94962c..000000000000 --- a/Documentation/DocBook/media/constraints.png.b64 +++ /dev/null @@ -1,59 +0,0 @@ -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 -RU5ErkJggg== diff --git a/Documentation/DocBook/media/crop.gif.b64 b/Documentation/DocBook/media/crop.gif.b64 deleted file mode 100644 index 11d936ae72e8..000000000000 --- a/Documentation/DocBook/media/crop.gif.b64 +++ /dev/null @@ -1,105 +0,0 @@ -R0lGODlhuQJGAeMAAAAAAH9/fwCvAP8AANEA0dEAAK8Ar////wCOAAAA0QAA//////////////// -/////ywAAAAAuQJGAQAE/vDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqP -yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaH -iImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6gQC9vr/A -wcLDxMXGx8jJysvMzc7P0NHS09TV1tfYxbth2d3e3+DRAePk5ebn6Onl4ezt7u3q8fLqANtg7/j5 -+s/z/f4B+wIKHAjsn8F09ex5IciwobuDEM1Bi0ixosWLGDNqrJhQIZdk/htDihxJsiTJiSZTqlzJ -MmNHj1q+tRznsKbNmzhzDoz3EiYWmTN7+vQJgOfQmN5mAjzKtCg9pj+TBoU61ClCqlaAthSKVZdV -dFy7NtHKMqxYW1/PmT2bhOzKtWxlpZUYF4pblXDrvpq7Tq+Tu+UGCB5MuLDhw4gTK17MuLHjx5Aj -S55MubLly5gza95MmVxev0EAkxsg8jNoVXNJ0zy9RPQ41RtNsz6V2vPstlLTwdYo+zap2qt9G3Ed -YLdL4bGAL0VOhLhxjL2Zf1IeXboM56Wtt6KuPXRudM8vVu+eiTt5H9hDjj9vyfyIXrTW80gfO4OC -+/jz69/Pv7///wAG/ijggAQWaOCBCCao4IIMNujggRe4J4IwBxBg4YUYZqjhhhx26OGHIIYo4ogk -loihMBbi1k084VlklgLsWQKjBRJqgIwEBJRyY4UqZsNidhjMGOMkQlLgnjERwkdBjuVpk2QFTB5B -H2/2DUlJkRNYhWQKUTKyJQpdFjHlcUFaSaQxo9nGQph/fCkDm0OMCV2VZh7iZpbnwCYfBnDKcecO -fXq3ojotckRnnXr8SQGWEtQIphuKEhEoEHKKdygHCUiQ6QEJdDrEphWA2oGo3UXaAaMHOHrCpFmY -2gSr6H2XJ5AXoHqBp5xyuimpPfCa6we+6uWqCaiqagKsTAxrBbLz/slqTqEUvWgBqLviSqqvnXpq -rbbZTpDtt9ziSsG3unKraabkltutWMq+UOyswa3A7A/tfjGvDpW6eKm3v+a667i38vvvuQLzW7Cm -AJ878L/W9ouuR/Xi8O6zasorRMRo3JtDvoaWOe2v4IIc7LUIE4zwtd1Sm7C6KZ8MLsmzYBzExIFV -rILGJsgcB843cBztvgqHWnKwup5s8rroVivwwEc3DHLR/jKcis5K0JxmvDezQLUePNvgc0TSBix0 -1OuG6nS56nob7ssqp132wuIi7cnWU1j9ms1chkD3IF3X8DVEYe9AtNi37M2F3cXh/WgFhjPSNw1/ -HxS4CS97MPjH/ts5uQfieqbQuCWPzxC5QZPncPnYoXz+BueKY+Bm6J3AHsPo/5TOmup5sB5vxLJv -0vsLtPtjO1W4D0Kz6r9nknwLwfczvFeam6IAmndjnfcsy2vtbM3qAT2KkhkULwj4SRITIbzLWYx9 -j9j82L3HvyljivzeG1tC9qCzf4379cEPigACCAYAB0jAAhrwgAhMoAIXyMAGOvCBEIygAVMVDBLo -Ln1ZWx8SmjeP521CAEYiXypAGML1XHBPF8BfJVToue1drX+1GgUJZTHDFJywBSycRA5PwEF5eFAT -NYRFEE9wwzXRYoc5c2H1YGgBW32QFkMk1vkoZr3FyQKJJeih/lH894kotsKLFpwi9zB4vSvqzxr8 -oxIXPQHGVbRRBEVUnxk3qMTEvS+GonjjBBCwxwMg4I+d0CMI4pjBOUqpjtACm/c4IUhASuCPfPQj -I1lAyDLGAosk0OJT1hhIC0RSkpDsoyg9GUpAhtKPp6QAJD9pB0F+oJJWvOQZq5FGMuExFFHkYyR1 -OUpWqrKPvHykJIXZyzy40gOwXNURZ0mNWs6Jk5P0JChXKUxHXsCXwQTlKIe5h2OeSowvRKEFMOkI -ck4IkbRqogyvaU1uZpOd1URlNXepSnriwZscSOaxlknHQekmnRVwIhAxgM09rtKXBrXnKalJzFTe -AZ8b0Of9/vh5SH+CB6CLWicPEAoIiGpAoiQwp+OYOQ1nWgqaT0TBQTl6TUN4tH7oEyeUKDocdN5R -nXnsAUv98FJO2i+kNBWTTZkYUI3SkJLgXKJMlxTU5gxVjbf8HxSRSqOY4rCpcXqqLXGKy6muAKQj -EOkixPoBTV4FpQOdRU+jiicqkjGWsCCrB8wKlkWm9KhfTaod36pMDVbUR4TC6AQEmom1spGqjLOq -Ef1aU4uiD6pclapaEWskxcpRlv0E7D9vWtScTjavVXXrUicgV0SUlgN0VYtd04pXFYBVBKc1RGxt -pNVnsvWwn3WtXju3WEM2VrMX5WxGPdtaG+62dftkrFAd/utWyHa2q7k1bmjHOFocYfVitT3pbTsZ -XRS8NgSzJUR4XZddfaG1sF7V7XTDeVXlOpW5Y3TucKFbXO8et4p99e1ygfvYrT5XsvUl4n35mlz9 -vpe/zfXvfAEcC8P+t63Uba+BswrfF8p3sEZtMGUhzN7eYvav7QuscDFMXA2DNrGilfCHfxvizRJ1 -wV1Mr3RRHGEPx5Wk0jCpebcbzQBLcb1KVfGNM9vi4L6YxPQ1sXpp3OHLDhnE+xPxkSVAWEw4uMcz -rmyKbfyK8ZYPwfFVMJIZLMQNN8qyhVzxfovcX9tGNsbdFTCQ91pdHrmXwmC2sJipnOEyn1jLNXZy -l3Es/g4pX5jPJfbzkgHd5DQ/mcVRdvGhD1DlS1z5rlnmcJC57Aov06i8HeMxphWd6TNvWdCdJjRK -JL1nSvf5FZdGNJM3jepWeJpxoP7Zea0sY/vOmbe1ZsWtS5jnJU660paINXr/rGk6C3nQRI60kY/9 -alco+7sgGLYftN2oXCty15butZxn7WxO21rV/DB0q5FdCWXzmtmmDrSjoQ1lNKrbzQ/GrY9LgO0P -cJsP/04tXcCdbHH/mNzAnneqo21vVuMbxvpWcqlThWZLPnrN0m6zdt8ccVL7GuHIneidsVthY6+7 -2l80M8VPrfBzM5yW9954vrm77zD+OuRAHbmgir1X/monGtYq/2lYr7tzNif44WOGc81H0G8P/HsP -Afc24Fa77KXDccB1fjrX0O0MHYea4zSX+McZTeuWC5vrzfC6rkXNWrGPm+zlDvYqol7ynp/859YO -esXhSm9IN3zad0+yx9/e7IRbvO8Y/7vGdwx2LA/+4HA3PN8XXm+YO1zmEA/74/mN9WdT3u+WBzzS -ZU1moMN75fI+/OcTH/rFf33mjjf9oguP86HrnFJSlxzV3231EDS9A1rPA915nsipE7zdBuf8zfFb -YDUf2OhhHr2r8Z7y0wsdtkTHfd2Lr/vjU8Ld4bb+3vPrfDxDX8/SZ/f3k29zkDNf5BMmOfEFS3ql -/rsd8rR/f87jX/SMHx3zSddxsjdx1wde2UcvuUc6uxd+vTdInWduZ/dyzRRzjAd7ozaAY5d/BAZ/ -5Sd/52dy6YdyrHBtDyh3qjB8H2h3IUh9I6h3LKd6Lld5E3h5FZh5sZd34veCkxeDoDeDogeA9SeA -ODh78dZoMBiBMlhSFPh6NniBQ0iA49d8F/d8/hd9QDh9goeBhFeEZXeEc4d2zKB238Z2VXd/yud+ -G7h/Hdh/ivd/NRiAmqeF+MeFcWd2XyiBSkiDTAiHN1h9RIh6RriDSNiDefiDbxiEcfiEGUiHkkd+ -U2h+VYh+V6h+kyBBlniJmJiJmriJluiCqSeI/neYhDm2hGvXeJzgCzEjQkxXgnZ4gmC4DGJofGS4 -CcAAC7XYfpFXe9h3ewi4ffSHhfGjiqvwC2eYi/pne/ynffM3YoiYOqhoi894dcuXhsi4hsqYgtyn -gN5XHt1mi93oe6zoha6Ih6Ooh6VogTpSZ+3RG7/HAcGHBygYiSA4idCYisgUjqA4jqJYaOY4hqY4 -NepYCcI4cwWYbQcYK77IjMBYj3KxFu24Ae94B/HYhlZ4iAuZHAFJCQP5kBoQkXYwka3nhnvYjAyJ -kWBXkP52kD0gcH2xjQBpj3CIkk6nks2SkFN2kWiRkZOgJByZAR5ZByDpg653jk1YCwM5jADQ/pN8 -QpM7wJIhR4l7oZOSoIoyCXxMiS8JWDsLaJRS+QgwQj5V6Y5XuTFZKTxbmZOvICRKEpYQOZY44JTv -B5Xx0ZWKgCW+EIUc+IgeKI8qSI9YcZSiUCxp0YhSiHhUSJGSaJFyWTh0WQjv0guB6IiGCYmIOY+K -GReA2QnHUxSEmZeTuZeV2ZeXWReZqQl2A5nHuIvJ2IvLeJOLuQ2leQmcA5lZ55Y9U5bOc5ZHEZtX -cl+8mZK8iJCt6XO305h6cEK/KZbBuZK42UG6STzGeQdFlJw+aZte05w+9Jx/GZ10QEjUOU7W6TfY -uUWzKCzcGQew9J2kFZ6QM56bVJ5+oZ6E/qBP6vmTdBCUhTiU/oiOtyGfgQBS1Gmfc4Cf5WiII4mT -0uGffvBavymgckCg/GigRMmH1qGgm4OP5GWVy1mTwxl4Q2KheNB0memgO/OKyhCL3QefzAGiddCO -R0micAChqyah+1mU58GicsCRwgijbyCj6daPsviPMYKjq4OhZdUTPOoGPtp1pFijFGomRMoGSvmN -draawomNv/iaCXqeh2Ok51Sl1siaWKqQWlqhXJoFU4pr7Ck67nlWKgqlZ2oFaQolUZo/5Bih+hmk -/IkoIfQHc8pUFKSXbBiSFXmgZcoedQoGf7qeWRKngrCkadekemqjfPokx+mlakilqQCp/mEoqSkq -pJWaoSGKqdXYp5tqoiDhqdr4pqFqqi1KqqppqabAqbCoqlrpkq3aqK86jbW5AYlqWqiKDCi6qqCa -q7Q1B4tqXR3wq4VAqydqq2aJq8bqqm6QrGCKWo4KlMF6DMN6q6w6rbIqpbBqgHqTrQ+6rdQDpJ+6 -p+C6rObqA9baNcy6behaDN0ard/arqKaBvGaRJzgrKmqrsTKrvo6V++aA/3KQwebBgArrNCam9Ja -sPtKBgmLAvMqkfVKDPcKsfkqscdKseNqkCtwsfeZscOwsc4ZsR4bPgsbAxU7si0bBg3LrQ+bsh27 -sr4asy3wstojCTObrjQ6qU+Ks/7q/gU8yzw6uwU/a681m50qS7Q52wVH6wIkuwZLq7FNS57FCrVZ -lLTFqIG92p4jdaczmqfrSqlcq7BoGrLAeZ2KcLUnm7XvubVpW7RVMLVsCqxk+6NBe7ZDW7cqULUu -y7Yz2ZRe+wRwKwwo67Q3C7jlWjeEq6HNIl4mq7hy66Z067gWe7gwpYOSiZWPWrnBsLhaS7CaG7ic -e5J4manMCQiJO7qXW1dPe7pfygR4O7l98LoFEbuqNbu0W7tJcLutC3Wiu7sC662Z+7swG7yRq5w1 -tXV7y6THi6/Jq7zLawTCi3vwWLy/QLpza7rWS7U6m73e8ZHce5e8O3CNG76bOwTk/otdJRu9kTq9 -HFu97Iu0M9O8bfkEgvsq54ua9Guz9nu/+Auv+tuRUtC/SqC73Zu+Lbm+BIy6PfC+h6Sk/8sXiWmo -EQy/OkDBdMQGDIy+Acy4A7zBwHOeHowbahDCANy3A4u2JnybN5DCSqDAQcDCGGyZGhzDTlUDNNwa -qQuB18iX2Yi84MvDbisDP5wsQSyOV0rEWYrEFQwDSzwWTVyYlEmoGTyhJCnFCOguB1yd3HDFpXqY -WqzDXIygXly+nhiZWNwFNmwDOOy9mHvEa0yWOfiJn/sFcTwDc+zAT3nHQAyFnvvG90DGzkuIBWq2 -L/y3gqy9cwiIXZiPfIzIYryP/mUrkml8qI8snl/LiLpIrmrQx0IsplBMpp38F+NRxUhBBX88wqUL -w6nMxq8Uxkv5BqS8x4MqlJrspF08y897j7zqeWuQy6ybxbxcqJsMzFEQm6xcyU7wyi5sxLLMzFkV -UbacQnZgzG2ryHjay0L7y9b8wT61umXsJ6krzYxMzY48zlNMkOYcq9t8uOoMzn4rzu6swpnHlgi8 -B9x8y5jMt+tMvXaczz2MiPx8yf4cs/WszL6sxgatyjiZ0ADdB//MqAEtvdNM0NUc0eSMhmHbJu/a -0Fv80Jzs0T8wPT1B0do8CNxM0mhs0ih9BTMCPiwNnoWQyzAtmjs801RQJPBx/tMzZSdcutNFzNHt -7NNHwCgtPMm6zAvcadRRrNSQ+2lf0ZnHnNPGKdWoTNVSMDGoidXnTNQ0wNWu6dVfDU69INbyvAgX -a9bEidZOgDioGdKOwKxw7aFybbvHFY2tmAiJmtcruNdNgJyl7NbVJdh+Sdh8Pcw4yiwGMAGRbQCU -jQGRnQKXvQWPfcF0LLsQzNg+XIIgiiyVLQGUfdmZTQGpbQKr3cpPbcqhedT1W9CgjbDhqKBsktmT -XdoHkNqtXdqnLdm7fdqVTdy7PcaGPMSxPdW1zbzD/GnHPNmm3duSXd0XIN3TTd3ajdoVwN1iIJ+K -PZrNjQQS9Z1wIt3GPd28/m0B2L3d2e3dxJ3dY2DenA3IcTnezg3SUdvNwu3b1d3aqt3b8P3e6m3d -AH7IIpvR87vRs93R+D3D48qbfbLaup3e7G3avD3g1G3c7W0GEl7fsPy9Dv7gof3c7prIolCa4d3T -JO6+kQuYssPhgL0WK77MLU4ED7mWQ40KOg6oCt6pIV7HI37jg2vi50Q+SVoGxIjR3pzJDh3OEE3k -tm3kR94RSa7k0VjjMi3l+Uvl5fqMV04GFaTlUH7SXL6FklyH/hrmZ+ALZH7PUX7mJa7fa2Iidn7n -eJ7ner7nJgLiDC7AtC3neezG9wuXG2jmgr6KXh7Bhv5DiT4D1qqvja6d/o/+h0K9spPuu5UujXTO -w5n+2ZsOjotOwJ9ewqGOi2ArxaUe6Keu6J0ew6s+5K3u6sZIjdYb60k962h+6R6L6/is64uY5myt -vL4e58Ae7LwuscWO6Me+XclesMve7EqczUQb7dJOxdSOs9Z+7S4Q6e267dzexk5N6m3q2aYe7uVc -yIVe7r0L6ugek/FM7OyuvudurAUgAfd+AAWw7z+Q7yfg79806utuk3F9uvyu7/qe7wCvAwtPAg3/ -UdmO6fP+wPVuJf5+7/uu8BXw8BmP8QrP7x0/AR0/8gl/8CKf8fhu8hpf8h4P8iHfuXpM7gAw8wBQ -8zZ/8zif8zrf2e1e/vEWj/AIv/L4fgEXD/QXX/RFL/JAv/RLr/JDb/Qpr/QmD/ECz746f/VYj/U8 -T++sjigYz/Jfn/AYsPBC7/Rkj/JJ//Ri//Qr//FKz/JU/+omnPV0X/dbT/FdXyco//ZCbwEHH/Z/ -//drb/Z9H/htz/Ypr/Fp7+zx/rt1//hXf/eB7LhkP/Qk7/eCn/hwr/kjf/lBv/d7v/mKj/ahn+4x -P/CQn/o5zNM2jtIPnwGvvwPeDq6qX/uSf99I3PkeEPtE7+JVH761r/q3f+g+zft+7/tyv8HBn/rD -7+jvLurJz+jL//jNT+nPb/qEbvXTb/f2fegP8v3gH/7iP/7kX/7m/n/+6D/707r93K8bnPH+8B// -8j//9F//9n//+E//oez47J/1SmHJEHDkpNVenPXm3X8wFEeyNM8RCFa2BVA4lme6tm8g13e+9/lW -UDgkFgOvW1K5ZDadT6hSVURGrVdsdvnjdntGcHhY1ZbNZ3Ra3ZkSyWt4XF7z1rtivNi+5/f9f8BA -wUHCQsNDxETFHaO3uUfISDa7vErLS8xMzU3OTr1Az1DRUdJS0yBHSdXVyL3TV9hY2dmjRdtb3NxB -2iNW3985XeFh4mLjY+Rk5WUeYOdn6Gjpaepq62vsbO1t7m7vb/Bw8XHycvNz9HT1dfZ293f4ePl5 -+nr7e/x8/X3+G37/f4ABBQ4kWNDgQYQJFS5k2NDhQ4gRJdKLAAA7 diff --git a/Documentation/DocBook/media/dvb/.gitignore b/Documentation/DocBook/media/dvb/.gitignore deleted file mode 100644 index d7ec32eafac9..000000000000 --- a/Documentation/DocBook/media/dvb/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.xml diff --git a/Documentation/DocBook/media/dvb/audio.xml b/Documentation/DocBook/media/dvb/audio.xml deleted file mode 100644 index ea56743ddbe7..000000000000 --- a/Documentation/DocBook/media/dvb/audio.xml +++ /dev/null @@ -1,1314 +0,0 @@ -<title>DVB Audio Device</title> -<para>The DVB audio device controls the MPEG2 audio decoder of the DVB hardware. It -can be accessed through <constant>/dev/dvb/adapter?/audio?</constant>. Data types and and -ioctl definitions can be accessed by including <constant>linux/dvb/audio.h</constant> in your -application. -</para> -<para>Please note that some DVB cards don’t have their own MPEG decoder, which results in -the omission of the audio and video device. -</para> -<para> -These ioctls were also used by V4L2 to control MPEG decoders implemented in V4L2. The use -of these ioctls for that purpose has been made obsolete and proper V4L2 ioctls or controls -have been created to replace that functionality.</para> - -<section id="audio_data_types"> -<title>Audio Data Types</title> -<para>This section describes the structures, data types and defines used when talking to the -audio device. -</para> - -<section id="audio-stream-source-t"> -<title>audio_stream_source_t</title> -<para>The audio stream source is set through the AUDIO_SELECT_SOURCE call and can take -the following values, depending on whether we are replaying from an internal (demux) or -external (user write) source. -</para> -<programlisting> -typedef enum { - AUDIO_SOURCE_DEMUX, - AUDIO_SOURCE_MEMORY -} audio_stream_source_t; -</programlisting> -<para>AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the -DVR device) as the source of the video stream. If AUDIO_SOURCE_MEMORY -is selected the stream comes from the application through the <constant>write()</constant> system -call. -</para> - -</section> -<section id="audio-play-state-t"> -<title>audio_play_state_t</title> -<para>The following values can be returned by the AUDIO_GET_STATUS call representing the -state of audio playback. -</para> -<programlisting> -typedef enum { - AUDIO_STOPPED, - AUDIO_PLAYING, - AUDIO_PAUSED -} audio_play_state_t; -</programlisting> - -</section> -<section id="audio-channel-select-t"> -<title>audio_channel_select_t</title> -<para>The audio channel selected via AUDIO_CHANNEL_SELECT is determined by the -following values. -</para> -<programlisting> -typedef enum { - AUDIO_STEREO, - AUDIO_MONO_LEFT, - AUDIO_MONO_RIGHT, - AUDIO_MONO, - AUDIO_STEREO_SWAPPED -} audio_channel_select_t; -</programlisting> - -</section> -<section id="audio-status"> -<title>struct audio_status</title> -<para>The AUDIO_GET_STATUS call returns the following structure informing about various -states of the playback operation. -</para> -<programlisting> -typedef struct audio_status { - boolean AV_sync_state; - boolean mute_state; - audio_play_state_t play_state; - audio_stream_source_t stream_source; - audio_channel_select_t channel_select; - boolean bypass_mode; - audio_mixer_t mixer_state; -} audio_status_t; -</programlisting> - -</section> -<section id="audio-mixer"> -<title>struct audio_mixer</title> -<para>The following structure is used by the AUDIO_SET_MIXER call to set the audio -volume. -</para> -<programlisting> -typedef struct audio_mixer { - unsigned int volume_left; - unsigned int volume_right; -} audio_mixer_t; -</programlisting> - -</section> -<section id="audio_encodings"> -<title>audio encodings</title> -<para>A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the following -bits set according to the hardwares capabilities. -</para> -<programlisting> - #define AUDIO_CAP_DTS 1 - #define AUDIO_CAP_LPCM 2 - #define AUDIO_CAP_MP1 4 - #define AUDIO_CAP_MP2 8 - #define AUDIO_CAP_MP3 16 - #define AUDIO_CAP_AAC 32 - #define AUDIO_CAP_OGG 64 - #define AUDIO_CAP_SDDS 128 - #define AUDIO_CAP_AC3 256 -</programlisting> - -</section> -<section id="audio-karaoke"> -<title>struct audio_karaoke</title> -<para>The ioctl AUDIO_SET_KARAOKE uses the following format: -</para> -<programlisting> -typedef -struct audio_karaoke { - int vocal1; - int vocal2; - int melody; -} audio_karaoke_t; -</programlisting> -<para>If Vocal1 or Vocal2 are non-zero, they get mixed into left and right t at 70% each. If both, -Vocal1 and Vocal2 are non-zero, Vocal1 gets mixed into the left channel and Vocal2 into the -right channel at 100% each. Ff Melody is non-zero, the melody channel gets mixed into left -and right. -</para> - -</section> -<section id="audio-attributes-t"> -<title>audio attributes</title> -<para>The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES: -</para> -<programlisting> - typedef uint16_t audio_attributes_t; - /⋆ bits: descr. ⋆/ - /⋆ 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, ⋆/ - /⋆ 12 multichannel extension ⋆/ - /⋆ 11-10 audio type (0=not spec, 1=language included) ⋆/ - /⋆ 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) ⋆/ - /⋆ 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, ⋆/ - /⋆ 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) ⋆/ - /⋆ 2- 0 number of audio channels (n+1 channels) ⋆/ -</programlisting> - </section></section> -<section id="audio_function_calls"> -<title>Audio Function Calls</title> - - -<section id="audio_fopen"> -<title>open()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call opens a named audio device (e.g. /dev/dvb/adapter0/audio0) - for subsequent use. When an open() call has succeeded, the device will be ready - for use. The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. This is a standard system call, documented in the Linux - manual page for fcntl. Only one user can open the Audio Device in O_RDWR - mode. All other attempts to open the device in this mode will fail, and an error - code will be returned. If the Audio Device is opened in O_RDONLY mode, the - only ioctl call that can be used is AUDIO_GET_STATUS. All other call will - return with an error code.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int open(const char ⋆deviceName, int flags);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>const char - *deviceName</para> -</entry><entry - align="char"> -<para>Name of specific audio device.</para> -</entry> - </row><row><entry - align="char"> -<para>int flags</para> -</entry><entry - align="char"> -<para>A bit-wise OR of the following flags:</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDONLY read-only access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDWR read/write access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_NONBLOCK open in non-blocking mode</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>(blocking mode is the default)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>ENODEV</para> -</entry><entry - align="char"> -<para>Device driver not loaded/available.</para> -</entry> - </row><row><entry - align="char"> -<para>EBUSY</para> -</entry><entry - align="char"> -<para>Device or resource busy.</para> -</entry> - </row><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid argument.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section> -<section id="audio_fclose"> -<title>close()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call closes a previously opened audio device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int close(int fd);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section> -<section id="audio_fwrite"> -<title>write()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call can only be used if AUDIO_SOURCE_MEMORY is selected - in the ioctl call AUDIO_SELECT_SOURCE. The data provided shall be in - PES format. If O_NONBLOCK is not specified the function will block until - buffer space is available. The amount of data to be transferred is implied by - count.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>size_t write(int fd, const void ⋆buf, size_t count);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>void *buf</para> -</entry><entry - align="char"> -<para>Pointer to the buffer containing the PES data.</para> -</entry> - </row><row><entry - align="char"> -<para>size_t count</para> -</entry><entry - align="char"> -<para>Size of buf.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EPERM</para> -</entry><entry - align="char"> -<para>Mode AUDIO_SOURCE_MEMORY not selected.</para> -</entry> - </row><row><entry - align="char"> -<para>ENOMEM</para> -</entry><entry - align="char"> -<para>Attempted to write more data than the internal buffer can - hold.</para> -</entry> - </row><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="AUDIO_STOP" -role="subsection"><title>AUDIO_STOP</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to stop playing the current stream.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_STOP);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_STOP for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_PLAY" -role="subsection"><title>AUDIO_PLAY</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to start playing an audio stream from the - selected source.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_PLAY);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_PLAY for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_PAUSE" -role="subsection"><title>AUDIO_PAUSE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call suspends the audio stream being played. Decoding and playing - are paused. It is then possible to restart again decoding and playing process of - the audio stream using AUDIO_CONTINUE command.</para> -</entry> - </row><row><entry - align="char"> -<para>If AUDIO_SOURCE_MEMORY is selected in the ioctl call - AUDIO_SELECT_SOURCE, the DVB-subsystem will not decode (consume) - any more data until the ioctl call AUDIO_CONTINUE or AUDIO_PLAY is - performed.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_PAUSE);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_PAUSE for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_CONTINUE" -role="subsection"><title>AUDIO_CONTINUE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl restarts the decoding and playing process previously paused -with AUDIO_PAUSE command.</para> -</entry> - </row><row><entry - align="char"> -<para>It only works if the stream were previously stopped with AUDIO_PAUSE</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_CONTINUE);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_CONTINUE for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SELECT_SOURCE" -role="subsection"><title>AUDIO_SELECT_SOURCE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call informs the audio device which source shall be used - for the input data. The possible sources are demux or memory. If - AUDIO_SOURCE_MEMORY is selected, the data is fed to the Audio Device - through the write command.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_SELECT_SOURCE, - audio_stream_source_t source);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SELECT_SOURCE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>audio_stream_source_t - source</para> -</entry><entry - align="char"> -<para>Indicates the source that shall be used for the Audio - stream.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SET_MUTE" -role="subsection"><title>AUDIO_SET_MUTE</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; with the <constant>V4L2_DEC_CMD_START_MUTE_AUDIO</constant> flag instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the audio device to mute the stream that is currently being - played.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_SET_MUTE, - boolean state);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_MUTE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>boolean state</para> -</entry><entry - align="char"> -<para>Indicates if audio device shall mute or not.</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>TRUE Audio Mute</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>FALSE Audio Un-mute</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SET_AV_SYNC" -role="subsection"><title>AUDIO_SET_AV_SYNC</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to turn ON or OFF A/V synchronization.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_SET_AV_SYNC, - boolean state);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_AV_SYNC for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>boolean state</para> -</entry><entry - align="char"> -<para>Tells the DVB subsystem if A/V synchronization shall be - ON or OFF.</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>TRUE AV-sync ON</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>FALSE AV-sync OFF</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SET_BYPASS_MODE" -role="subsection"><title>AUDIO_SET_BYPASS_MODE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to bypass the Audio decoder and forward - the stream without decoding. This mode shall be used if streams that can’t be - handled by the DVB system shall be decoded. Dolby DigitalTM streams are - automatically forwarded by the DVB subsystem if the hardware can handle it.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - AUDIO_SET_BYPASS_MODE, boolean mode);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_BYPASS_MODE for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>boolean mode</para> -</entry><entry - align="char"> -<para>Enables or disables the decoding of the current Audio - stream in the DVB subsystem.</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>TRUE Bypass is disabled</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>FALSE Bypass is enabled</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_CHANNEL_SELECT" -role="subsection"><title>AUDIO_CHANNEL_SELECT</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -<constant>V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK</constant> control instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to select the requested channel if possible.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - AUDIO_CHANNEL_SELECT, audio_channel_select_t);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_CHANNEL_SELECT for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>audio_channel_select_t - ch</para> -</entry><entry - align="char"> -<para>Select the output format of the audio (mono left/right, - stereo).</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_BILINGUAL_CHANNEL_SELECT" -role="subsection"><title>AUDIO_BILINGUAL_CHANNEL_SELECT</title> -<para>DESCRIPTION -</para> -<para>This ioctl is obsolete. Do not use in new drivers. It has been replaced by -the V4L2 <constant>V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK</constant> control -for MPEG decoders controlled through V4L2.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to select the requested channel for bilingual streams if possible.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - AUDIO_BILINGUAL_CHANNEL_SELECT, audio_channel_select_t);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_BILINGUAL_CHANNEL_SELECT for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>audio_channel_select_t -ch</para> -</entry><entry - align="char"> -<para>Select the output format of the audio (mono left/right, - stereo).</para> -</entry> - </row> -</tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_GET_PTS" -role="subsection"><title>AUDIO_GET_PTS</title> -<para>DESCRIPTION -</para> -<para>This ioctl is obsolete. Do not use in new drivers. If you need this functionality, -then please contact the linux-media mailing list (&v4l-ml;).</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to return the current PTS timestamp.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - AUDIO_GET_PTS, __u64 *pts);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_GET_PTS for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>__u64 *pts -</para> -</entry><entry - align="char"> -<para>Returns the 33-bit timestamp as defined in ITU T-REC-H.222.0 / ISO/IEC 13818-1. -</para> -<para> -The PTS should belong to the currently played -frame if possible, but may also be a value close to it -like the PTS of the last decoded frame or the last PTS -extracted by the PES parser.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_GET_STATUS" -role="subsection"><title>AUDIO_GET_STATUS</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to return the current state of the Audio - Device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_GET_STATUS, - struct audio_status ⋆status);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_GET_STATUS for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct audio_status - *status</para> -</entry><entry - align="char"> -<para>Returns the current state of Audio Device.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_GET_CAPABILITIES" -role="subsection"><title>AUDIO_GET_CAPABILITIES</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to tell us about the decoding capabilities - of the audio hardware.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - AUDIO_GET_CAPABILITIES, unsigned int ⋆cap);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_GET_CAPABILITIES for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>unsigned int *cap</para> -</entry><entry - align="char"> -<para>Returns a bit array of supported sound formats.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_CLEAR_BUFFER" -role="subsection"><title>AUDIO_CLEAR_BUFFER</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Audio Device to clear all software and hardware buffers - of the audio decoder device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_CLEAR_BUFFER);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_CLEAR_BUFFER for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SET_ID" -role="subsection"><title>AUDIO_SET_ID</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl selects which sub-stream is to be decoded if a program or system - stream is sent to the video device. If no audio stream type is set the id has to be - in [0xC0,0xDF] for MPEG sound, in [0x80,0x87] for AC3 and in [0xA0,0xA7] - for LPCM. More specifications may follow for other stream types. If the stream - type is set the id just specifies the substream id of the audio stream and only - the first 5 bits are recognized.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_SET_ID, int - id);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_ID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>int id</para> -</entry><entry - align="char"> -<para>audio sub-stream id</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SET_MIXER" -role="subsection"><title>AUDIO_SET_MIXER</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl lets you adjust the mixer settings of the audio decoder.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = AUDIO_SET_MIXER, - audio_mixer_t ⋆mix);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_ID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>audio_mixer_t *mix</para> -</entry><entry - align="char"> -<para>mixer settings.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="AUDIO_SET_STREAMTYPE" -role="subsection"><title>AUDIO_SET_STREAMTYPE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl tells the driver which kind of audio stream to expect. This is useful - if the stream offers several audio sub-streams like LPCM and AC3.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = AUDIO_SET_STREAMTYPE, - int type);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_STREAMTYPE for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>int type</para> -</entry><entry - align="char"> -<para>stream type</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>type is not a valid or supported stream type.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="AUDIO_SET_EXT_ID" -role="subsection"><title>AUDIO_SET_EXT_ID</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl can be used to set the extension id for MPEG streams in DVD - playback. Only the first 3 bits are recognized.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = AUDIO_SET_EXT_ID, int - id);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_EXT_ID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>int id</para> -</entry><entry - align="char"> -<para>audio sub_stream_id</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>id is not a valid id.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="AUDIO_SET_ATTRIBUTES" -role="subsection"><title>AUDIO_SET_ATTRIBUTES</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is intended for DVD playback and allows you to set certain - information about the audio stream.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = AUDIO_SET_ATTRIBUTES, - audio_attributes_t attr );</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_ATTRIBUTES for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>audio_attributes_t - attr</para> -</entry><entry - align="char"> -<para>audio attributes according to section ??</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>attr is not a valid or supported attribute setting.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="AUDIO_SET_KARAOKE" -role="subsection"><title>AUDIO_SET_KARAOKE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl allows one to set the mixer settings for a karaoke DVD.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = AUDIO_SET_KARAOKE, - audio_karaoke_t ⋆karaoke);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals AUDIO_SET_KARAOKE for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>audio_karaoke_t - *karaoke</para> -</entry><entry - align="char"> -<para>karaoke settings according to section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>karaoke is not a valid or supported karaoke setting.</para> -</entry> - </row></tbody></tgroup></informaltable> - </section> -</section> diff --git a/Documentation/DocBook/media/dvb/ca.xml b/Documentation/DocBook/media/dvb/ca.xml deleted file mode 100644 index d0b07e763908..000000000000 --- a/Documentation/DocBook/media/dvb/ca.xml +++ /dev/null @@ -1,582 +0,0 @@ -<title>DVB CA Device</title> -<para>The DVB CA device controls the conditional access hardware. It can be accessed through -<constant>/dev/dvb/adapter?/ca?</constant>. Data types and and ioctl definitions can be accessed by -including <constant>linux/dvb/ca.h</constant> in your application. -</para> - -<section id="ca_data_types"> -<title>CA Data Types</title> - - -<section id="ca-slot-info"> -<title>ca_slot_info_t</title> - <programlisting> -typedef struct ca_slot_info { - int num; /⋆ slot number ⋆/ - - int type; /⋆ CA interface this slot supports ⋆/ -#define CA_CI 1 /⋆ CI high level interface ⋆/ -#define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ -#define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ -#define CA_DESCR 8 /⋆ built-in descrambler ⋆/ -#define CA_SC 128 /⋆ simple smart card interface ⋆/ - - unsigned int flags; -#define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ -#define CA_CI_MODULE_READY 2 -} ca_slot_info_t; -</programlisting> - -</section> -<section id="ca-descr-info"> -<title>ca_descr_info_t</title> -<programlisting> -typedef struct ca_descr_info { - unsigned int num; /⋆ number of available descramblers (keys) ⋆/ - unsigned int type; /⋆ type of supported scrambling system ⋆/ -#define CA_ECD 1 -#define CA_NDS 2 -#define CA_DSS 4 -} ca_descr_info_t; -</programlisting> - -</section> -<section id="ca-caps"> -<title>ca_caps_t</title> -<programlisting> -typedef struct ca_caps { - unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ - unsigned int slot_type; /⋆ OR of all supported types ⋆/ - unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ - unsigned int descr_type;/⋆ OR of all supported types ⋆/ - } ca_cap_t; -</programlisting> - -</section> -<section id="ca-msg"> -<title>ca_msg_t</title> -<programlisting> -/⋆ a message to/from a CI-CAM ⋆/ -typedef struct ca_msg { - unsigned int index; - unsigned int type; - unsigned int length; - unsigned char msg[256]; -} ca_msg_t; -</programlisting> - -</section> -<section id="ca-descr"> -<title>ca_descr_t</title> -<programlisting> -typedef struct ca_descr { - unsigned int index; - unsigned int parity; - unsigned char cw[8]; -} ca_descr_t; -</programlisting> -</section> - -<section id="ca-pid"> -<title>ca-pid</title> -<programlisting> -typedef struct ca_pid { - unsigned int pid; - int index; /⋆ -1 == disable⋆/ -} ca_pid_t; -</programlisting> -</section></section> - -<section id="ca_function_calls"> -<title>CA Function Calls</title> - - -<section id="ca_fopen"> -<title>open()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.</para> -<para>When an open() call has succeeded, the device will be ready for use. - The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. This is a standard system call, documented in the Linux - manual page for fcntl. Only one user can open the CA Device in O_RDWR - mode. All other attempts to open the device in this mode will fail, and an error - code will be returned.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int open(const char ⋆deviceName, int flags);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>const char - *deviceName</para> -</entry><entry - align="char"> -<para>Name of specific video device.</para> -</entry> - </row><row><entry - align="char"> -<para>int flags</para> -</entry><entry - align="char"> -<para>A bit-wise OR of the following flags:</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDONLY read-only access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDWR read/write access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_NONBLOCK open in non-blocking mode</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>(blocking mode is the default)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>ENODEV</para> -</entry><entry - align="char"> -<para>Device driver not loaded/available.</para> -</entry> - </row><row><entry - align="char"> -<para>EINTERNAL</para> -</entry><entry - align="char"> -<para>Internal error.</para> -</entry> - </row><row><entry - align="char"> -<para>EBUSY</para> -</entry><entry - align="char"> -<para>Device or resource busy.</para> -</entry> - </row><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid argument.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section> -<section id="ca_fclose"> -<title>close()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call closes a previously opened audio device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int close(int fd);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> - </section> - -<section id="CA_RESET" -role="subsection"><title>CA_RESET</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_RESET); -</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_RESET for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_GET_CAP" -role="subsection"><title>CA_GET_CAP</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_GET_CAP, - ca_caps_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_GET_CAP for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_caps_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_GET_SLOT_INFO" -role="subsection"><title>CA_GET_SLOT_INFO</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_GET_SLOT_INFO, - ca_slot_info_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_GET_SLOT_INFO for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_slot_info_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_GET_DESCR_INFO" -role="subsection"><title>CA_GET_DESCR_INFO</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_GET_DESCR_INFO, - ca_descr_info_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_GET_DESCR_INFO for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_descr_info_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_GET_MSG" -role="subsection"><title>CA_GET_MSG</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_GET_MSG, - ca_msg_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_GET_MSG for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_msg_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_SEND_MSG" -role="subsection"><title>CA_SEND_MSG</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_SEND_MSG, - ca_msg_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_SEND_MSG for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_msg_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_SET_DESCR" -role="subsection"><title>CA_SET_DESCR</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_SET_DESCR, - ca_descr_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_SET_DESCR for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_descr_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="CA_SET_PID" -role="subsection"><title>CA_SET_PID</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = CA_SET_PID, - ca_pid_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals CA_SET_PID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>ca_pid_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -</section> diff --git a/Documentation/DocBook/media/dvb/demux.xml b/Documentation/DocBook/media/dvb/demux.xml deleted file mode 100644 index 34f2fb1cd601..000000000000 --- a/Documentation/DocBook/media/dvb/demux.xml +++ /dev/null @@ -1,1162 +0,0 @@ -<title>DVB Demux Device</title> - -<para>The DVB demux device controls the filters of the DVB hardware/software. It can be -accessed through <constant>/dev/adapter?/demux?</constant>. Data types and and ioctl definitions can be -accessed by including <constant>linux/dvb/dmx.h</constant> in your application. -</para> -<section id="dmx_types"> -<title>Demux Data Types</title> - -<section id="dmx-output-t"> -<title>Output for the demux</title> - -<table pgwide="1" frame="none" id="dmx-output"> - <title>enum dmx_output</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="DMX-OUT-DECODER">DMX_OUT_DECODER</entry> - <entry>Streaming directly to decoder.</entry> - </row><row> - <entry align="char" id="DMX-OUT-TAP">DMX_OUT_TAP</entry> - <entry>Output going to a memory buffer (to be retrieved via the - read command). Delivers the stream output to the demux - device on which the ioctl is called.</entry> - </row><row> - <entry align="char" id="DMX-OUT-TS-TAP">DMX_OUT_TS_TAP</entry> - <entry>Output multiplexed into a new TS (to be retrieved by - reading from the logical DVR device). Routes output to the - logical DVR device <constant>/dev/dvb/adapter?/dvr?</constant>, - which delivers a TS multiplexed from all filters for which - <constant>DMX_OUT_TS_TAP</constant> was specified.</entry> - </row><row> - <entry align="char" id="DMX-OUT-TSDEMUX-TAP">DMX_OUT_TSDEMUX_TAP</entry> - <entry>Like &DMX-OUT-TS-TAP; but retrieved from the DMX - device.</entry> - </row> - </tbody> - </tgroup> -</table> - -</section> - -<section id="dmx-input-t"> -<title>dmx_input_t</title> -<programlisting> -typedef enum -{ - DMX_IN_FRONTEND, /⋆ Input from a front-end device. ⋆/ - DMX_IN_DVR /⋆ Input from the logical DVR device. ⋆/ -} dmx_input_t; -</programlisting> -</section> - -<section id="dmx-pes-type-t"> -<title>dmx_pes_type_t</title> -<programlisting> -typedef enum -{ - DMX_PES_AUDIO0, - DMX_PES_VIDEO0, - DMX_PES_TELETEXT0, - DMX_PES_SUBTITLE0, - DMX_PES_PCR0, - - DMX_PES_AUDIO1, - DMX_PES_VIDEO1, - DMX_PES_TELETEXT1, - DMX_PES_SUBTITLE1, - DMX_PES_PCR1, - - DMX_PES_AUDIO2, - DMX_PES_VIDEO2, - DMX_PES_TELETEXT2, - DMX_PES_SUBTITLE2, - DMX_PES_PCR2, - - DMX_PES_AUDIO3, - DMX_PES_VIDEO3, - DMX_PES_TELETEXT3, - DMX_PES_SUBTITLE3, - DMX_PES_PCR3, - - DMX_PES_OTHER -} dmx_pes_type_t; -</programlisting> -</section> - -<section id="dmx-filter"> -<title>struct dmx_filter</title> - <programlisting> - typedef struct dmx_filter -{ - __u8 filter[DMX_FILTER_SIZE]; - __u8 mask[DMX_FILTER_SIZE]; - __u8 mode[DMX_FILTER_SIZE]; -} dmx_filter_t; -</programlisting> -</section> - -<section id="dmx-sct-filter-params"> -<title>struct dmx_sct_filter_params</title> -<programlisting> -struct dmx_sct_filter_params -{ - __u16 pid; - dmx_filter_t filter; - __u32 timeout; - __u32 flags; -#define DMX_CHECK_CRC 1 -#define DMX_ONESHOT 2 -#define DMX_IMMEDIATE_START 4 -#define DMX_KERNEL_CLIENT 0x8000 -}; -</programlisting> -</section> - -<section id="dmx-pes-filter-params"> -<title>struct dmx_pes_filter_params</title> -<programlisting> -struct dmx_pes_filter_params -{ - __u16 pid; - dmx_input_t input; - dmx_output_t output; - dmx_pes_type_t pes_type; - __u32 flags; -}; -</programlisting> -</section> - -<section id="dmx-event"> -<title>struct dmx_event</title> - <programlisting> - struct dmx_event - { - dmx_event_t event; - time_t timeStamp; - union - { - dmx_scrambling_status_t scrambling; - } u; - }; -</programlisting> -</section> - -<section id="dmx-stc"> -<title>struct dmx_stc</title> -<programlisting> -struct dmx_stc { - unsigned int num; /⋆ input : which STC? 0..N ⋆/ - unsigned int base; /⋆ output: divisor for stc to get 90 kHz clock ⋆/ - __u64 stc; /⋆ output: stc in 'base'⋆90 kHz units ⋆/ -}; -</programlisting> -</section> - -<section id="dmx-caps"> -<title>struct dmx_caps</title> -<programlisting> - typedef struct dmx_caps { - __u32 caps; - int num_decoders; -} dmx_caps_t; -</programlisting> -</section> - -<section id="dmx-source-t"> -<title>enum dmx_source_t</title> -<programlisting> -typedef enum { - DMX_SOURCE_FRONT0 = 0, - DMX_SOURCE_FRONT1, - DMX_SOURCE_FRONT2, - DMX_SOURCE_FRONT3, - DMX_SOURCE_DVR0 = 16, - DMX_SOURCE_DVR1, - DMX_SOURCE_DVR2, - DMX_SOURCE_DVR3 -} dmx_source_t; -</programlisting> -</section> - -</section> -<section id="dmx_fcalls"> -<title>Demux Function Calls</title> - -<section id="dmx_fopen"> -<title>open()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call, used with a device name of /dev/dvb/adapter0/demux0, - allocates a new filter and returns a handle which can be used for subsequent - control of that filter. This call has to be made for each filter to be used, i.e. every - returned file descriptor is a reference to a single filter. /dev/dvb/adapter0/dvr0 - is a logical device to be used for retrieving Transport Streams for digital - video recording. When reading from this device a transport stream containing - the packets from all PES filters set in the corresponding demux device - (/dev/dvb/adapter0/demux0) having the output set to DMX_OUT_TS_TAP. A - recorded Transport Stream is replayed by writing to this device. </para> -<para>The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int open(const char ⋆deviceName, int flags);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>const char - *deviceName</para> -</entry><entry - align="char"> -<para>Name of demux device.</para> -</entry> - </row><row><entry - align="char"> -<para>int flags</para> -</entry><entry - align="char"> -<para>A bit-wise OR of the following flags:</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDWR read/write access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_NONBLOCK open in non-blocking mode</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>(blocking mode is the default)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>ENODEV</para> -</entry><entry - align="char"> -<para>Device driver not loaded/available.</para> -</entry> - </row><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid argument.</para> -</entry> - </row><row><entry - align="char"> -<para>EMFILE</para> -</entry><entry - align="char"> -<para>“Too many open files”, i.e. no more filters available.</para> -</entry> - </row><row><entry - align="char"> -<para>ENOMEM</para> -</entry><entry - align="char"> -<para>The driver failed to allocate enough memory.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="dmx_fclose"> -<title>close()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call deactivates and deallocates a filter that was previously - allocated via the open() call.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int close(int fd);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="dmx_fread"> -<title>read()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call returns filtered data, which might be section or PES data. The - filtered data is transferred from the driver’s internal circular buffer to buf. The - maximum amount of data to be transferred is implied by count.</para> -</entry> - </row><row><entry - align="char"> -<para>When returning section data the driver always tries to return a complete single - section (even though buf would provide buffer space for more data). If the size - of the buffer is smaller than the section as much as possible will be returned, - and the remaining data will be provided in subsequent calls.</para> -</entry> - </row><row><entry - align="char"> -<para>The size of the internal buffer is 2 * 4096 bytes (the size of two maximum - sized sections) by default. The size of this buffer may be changed by using the - DMX_SET_BUFFER_SIZE function. If the buffer is not large enough, or if - the read operations are not performed fast enough, this may result in a buffer - overflow error. In this case EOVERFLOW will be returned, and the circular - buffer will be emptied. This call is blocking if there is no data to return, i.e. the - process will be put to sleep waiting for data, unless the O_NONBLOCK flag - is specified.</para> -</entry> - </row><row><entry - align="char"> -<para>Note that in order to be able to read, the filtering process has to be started - by defining either a section or a PES filter by means of the ioctl functions, - and then starting the filtering process via the DMX_START ioctl function - or by setting the DMX_IMMEDIATE_START flag. If the reading is done - from a logical DVR demux device, the data will constitute a Transport Stream - including the packets from all PES filters in the corresponding demux device - /dev/dvb/adapter0/demux0 having the output set to DMX_OUT_TS_TAP.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>size_t read(int fd, void ⋆buf, size_t count);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>void *buf</para> -</entry><entry - align="char"> -<para>Pointer to the buffer to be used for returned filtered data.</para> -</entry> - </row><row><entry - align="char"> -<para>size_t count</para> -</entry><entry - align="char"> -<para>Size of buf.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EWOULDBLOCK</para> -</entry><entry - align="char"> -<para>No data to return and O_NONBLOCK was specified.</para> -</entry> - </row><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row><row><entry - align="char"> -<para>ECRC</para> -</entry><entry - align="char"> -<para>Last section had a CRC error - no data returned. The - buffer is flushed.</para> -</entry> - </row><row><entry - align="char"> -<para>EOVERFLOW</para> -</entry><entry - align="char"> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>The filtered data was not read from the buffer in due - time, resulting in non-read data being lost. The buffer is - flushed.</para> -</entry> - </row><row><entry - align="char"> -<para>ETIMEDOUT</para> -</entry><entry - align="char"> -<para>The section was not loaded within the stated timeout - period. See ioctl DMX_SET_FILTER for how to set a - timeout.</para> -</entry> - </row><row><entry - align="char"> -<para>EFAULT</para> -</entry><entry - align="char"> -<para>The driver failed to write to the callers buffer due to an - invalid *buf pointer.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="dmx_fwrite"> -<title>write()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call is only provided by the logical device /dev/dvb/adapter0/dvr0, - associated with the physical demux device that provides the actual DVR - functionality. It is used for replay of a digitally recorded Transport Stream. - Matching filters have to be defined in the corresponding physical demux - device, /dev/dvb/adapter0/demux0. The amount of data to be transferred is - implied by count.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>ssize_t write(int fd, const void ⋆buf, size_t - count);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>void *buf</para> -</entry><entry - align="char"> -<para>Pointer to the buffer containing the Transport Stream.</para> -</entry> - </row><row><entry - align="char"> -<para>size_t count</para> -</entry><entry - align="char"> -<para>Size of buf.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EWOULDBLOCK</para> -</entry><entry - align="char"> -<para>No data was written. This - might happen if O_NONBLOCK was specified and there - is no more buffer space available (if O_NONBLOCK is - not specified the function will block until buffer space is - available).</para> -</entry> - </row><row><entry - align="char"> -<para>EBUSY</para> -</entry><entry - align="char"> -<para>This error code indicates that there are conflicting - requests. The corresponding demux device is setup to - receive data from the front- end. Make sure that these - filters are stopped and that the filters with input set to - DMX_IN_DVR are started.</para> -</entry> - </row><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="DMX_START"> -<title>DMX_START</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call is used to start the actual filtering operation defined via the ioctl - calls DMX_SET_FILTER or DMX_SET_PES_FILTER.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = DMX_START);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_START for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid argument, i.e. no filtering parameters provided via - the DMX_SET_FILTER or DMX_SET_PES_FILTER - functions.</para> -</entry> - </row><row><entry - align="char"> -<para>EBUSY</para> -</entry><entry - align="char"> -<para>This error code indicates that there are conflicting - requests. There are active filters filtering data from - another input source. Make sure that these filters are - stopped before starting this filter.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="DMX_STOP"> -<title>DMX_STOP</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call is used to stop the actual filtering operation defined via the - ioctl calls DMX_SET_FILTER or DMX_SET_PES_FILTER and started via - the DMX_START command.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = DMX_STOP);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_STOP for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_SET_FILTER"> -<title>DMX_SET_FILTER</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call sets up a filter according to the filter and mask parameters - provided. A timeout may be defined stating number of seconds to wait for a - section to be loaded. A value of 0 means that no timeout should be applied. - Finally there is a flag field where it is possible to state whether a section should - be CRC-checked, whether the filter should be a ”one-shot” filter, i.e. if the - filtering operation should be stopped after the first section is received, and - whether the filtering operation should be started immediately (without waiting - for a DMX_START ioctl call). If a filter was previously set-up, this filter will - be canceled, and the receive buffer will be flushed.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = DMX_SET_FILTER, - struct dmx_sct_filter_params ⋆params);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_SET_FILTER for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct - dmx_sct_filter_params - *params</para> -</entry><entry - align="char"> -<para>Pointer to structure containing filter parameters.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_SET_PES_FILTER"> -<title>DMX_SET_PES_FILTER</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call sets up a PES filter according to the parameters provided. By a - PES filter is meant a filter that is based just on the packet identifier (PID), i.e. - no PES header or payload filtering capability is supported.</para> -</entry> - </row><row><entry - align="char"> -<para>The transport stream destination for the filtered output may be set. Also the - PES type may be stated in order to be able to e.g. direct a video stream directly - to the video decoder. Finally there is a flag field where it is possible to state - whether the filtering operation should be started immediately (without waiting - for a DMX_START ioctl call). If a filter was previously set-up, this filter will - be cancelled, and the receive buffer will be flushed.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = DMX_SET_PES_FILTER, - struct dmx_pes_filter_params ⋆params);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_SET_PES_FILTER for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct - dmx_pes_filter_params - *params</para> -</entry><entry - align="char"> -<para>Pointer to structure containing filter parameters.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EBUSY</para> -</entry><entry - align="char"> -<para>This error code indicates that there are conflicting - requests. There are active filters filtering data from - another input source. Make sure that these filters are - stopped before starting this filter.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="DMX_SET_BUFFER_SIZE"> -<title>DMX_SET_BUFFER_SIZE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call is used to set the size of the circular buffer used for filtered data. - The default size is two maximum sized sections, i.e. if this function is not called - a buffer size of 2 * 4096 bytes will be used.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = - DMX_SET_BUFFER_SIZE, unsigned long size);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_SET_BUFFER_SIZE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>unsigned long size</para> -</entry><entry - align="char"> -<para>Size of circular buffer.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_GET_EVENT"> -<title>DMX_GET_EVENT</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns an event if available. If an event is not available, - the behavior depends on whether the device is in blocking or non-blocking - mode. In the latter case, the call fails immediately with errno set to - EWOULDBLOCK. In the former case, the call blocks until an event becomes - available.</para> -</entry> - </row><row><entry - align="char"> -<para>The standard Linux poll() and/or select() system calls can be used with the - device file descriptor to watch for new events. For select(), the file descriptor - should be included in the exceptfds argument, and for poll(), POLLPRI should - be specified as the wake-up condition. Only the latest event for each filter is - saved.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = DMX_GET_EVENT, - struct dmx_event ⋆ev);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_GET_EVENT for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct dmx_event *ev</para> -</entry><entry - align="char"> -<para>Pointer to the location where the event is to be stored.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EWOULDBLOCK</para> -</entry><entry - align="char"> -<para>There is no event pending, and the device is in - non-blocking mode.</para> -</entry> - </row></tbody></tgroup></informaltable> -</section> - -<section id="DMX_GET_STC"> -<title>DMX_GET_STC</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns the current value of the system time counter (which is driven - by a PES filter of type DMX_PES_PCR). Some hardware supports more than one - STC, so you must specify which one by setting the num field of stc before the ioctl - (range 0...n). The result is returned in form of a ratio with a 64 bit numerator - and a 32 bit denominator, so the real 90kHz STC value is stc->stc / - stc->base - .</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = DMX_GET_STC, struct - dmx_stc ⋆stc);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_GET_STC for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct dmx_stc *stc</para> -</entry><entry - align="char"> -<para>Pointer to the location where the stc is to be stored.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid stc number.</para> -</entry> - </row></tbody></tgroup></informaltable> - </section> - -<section id="DMX_GET_PES_PIDS" -role="subsection"><title>DMX_GET_PES_PIDS</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = DMX_GET_PES_PIDS, - __u16[5]);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_GET_PES_PIDS for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>__u16[5] -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_GET_CAPS" -role="subsection"><title>DMX_GET_CAPS</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = DMX_GET_CAPS, - dmx_caps_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_GET_CAPS for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>dmx_caps_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_SET_SOURCE" -role="subsection"><title>DMX_SET_SOURCE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is undocumented. Documentation is welcome.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = DMX_SET_SOURCE, - dmx_source_t *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_SET_SOURCE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>dmx_source_t * -</para> -</entry><entry - align="char"> -<para>Undocumented.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_ADD_PID" -role="subsection"><title>DMX_ADD_PID</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call allows to add multiple PIDs to a transport stream filter -previously set up with DMX_SET_PES_FILTER and output equal to DMX_OUT_TSDEMUX_TAP. -</para></entry></row><row><entry align="char"><para> -It is used by readers of /dev/dvb/adapterX/demuxY. -</para></entry></row><row><entry align="char"><para> -It may be called at any time, i.e. before or after the first filter on the -shared file descriptor was started. It makes it possible to record multiple -services without the need to de-multiplex or re-multiplex TS packets.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = DMX_ADD_PID, - __u16 *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_ADD_PID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>__u16 * -</para> -</entry><entry - align="char"> -<para>PID number to be filtered.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - -<section id="DMX_REMOVE_PID" -role="subsection"><title>DMX_REMOVE_PID</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call allows to remove a PID when multiple PIDs are set on a -transport stream filter, e. g. a filter previously set up with output equal to -DMX_OUT_TSDEMUX_TAP, created via either DMX_SET_PES_FILTER or DMX_ADD_PID. -</para></entry></row><row><entry align="char"><para> -It is used by readers of /dev/dvb/adapterX/demuxY. -</para></entry></row><row><entry align="char"><para> -It may be called at any time, i.e. before or after the first filter on the -shared file descriptor was started. It makes it possible to record multiple -services without the need to de-multiplex or re-multiplex TS packets.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = DMX_REMOVE_PID, - __u16 *);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals DMX_REMOVE_PID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>__u16 * -</para> -</entry><entry - align="char"> -<para>PID of the PES filter to be removed.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -</section> - - -</section> diff --git a/Documentation/DocBook/media/dvb/dvbapi.xml b/Documentation/DocBook/media/dvb/dvbapi.xml deleted file mode 100644 index 8576481e20ae..000000000000 --- a/Documentation/DocBook/media/dvb/dvbapi.xml +++ /dev/null @@ -1,156 +0,0 @@ -<partinfo> -<authorgroup> -<author> -<firstname>Ralph</firstname> -<surname>Metzler</surname> -<othername role="mi">J. K.</othername> -<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation> -</author> -<author> -<firstname>Marcus</firstname> -<surname>Metzler</surname> -<othername role="mi">O. C.</othername> -<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation> -</author> -</authorgroup> -<authorgroup> -<author> -<firstname>Mauro</firstname> -<othername role="mi">Carvalho</othername> -<surname>Chehab</surname> -<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation> -<contrib>Ported document to Docbook XML.</contrib> -</author> -</authorgroup> -<copyright> - <year>2002</year> - <year>2003</year> - <holder>Convergence GmbH</holder> -</copyright> -<copyright> - <year>2009-2015</year> - <holder>Mauro Carvalho Chehab</holder> -</copyright> - -<revhistory> -<!-- Put document revisions here, newest first. --> -<revision> - <revnumber>2.1.0</revnumber> - <date>2015-05-29</date> - <authorinitials>mcc</authorinitials> - <revremark> - DocBook improvements and cleanups, in order to document the - system calls on a more standard way and provide more description - about the current DVB API. - </revremark> -</revision> -<revision> - <revnumber>2.0.4</revnumber> - <date>2011-05-06</date> - <authorinitials>mcc</authorinitials> - <revremark> - Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's. - </revremark> -</revision> -<revision> - <revnumber>2.0.3</revnumber> - <date>2010-07-03</date> - <authorinitials>mcc</authorinitials> - <revremark> - Add some frontend capabilities flags, present on kernel, but missing at the specs. - </revremark> -</revision> -<revision> - <revnumber>2.0.2</revnumber> - <date>2009-10-25</date> - <authorinitials>mcc</authorinitials> - <revremark> - documents FE_SET_FRONTEND_TUNE_MODE and FE_DISHETWORK_SEND_LEGACY_CMD ioctls. - </revremark> -</revision> -<revision> -<revnumber>2.0.1</revnumber> -<date>2009-09-16</date> -<authorinitials>mcc</authorinitials> -<revremark> -Added ISDB-T test originally written by Patrick Boettcher -</revremark> -</revision> -<revision> -<revnumber>2.0.0</revnumber> -<date>2009-09-06</date> -<authorinitials>mcc</authorinitials> -<revremark>Conversion from LaTex to DocBook XML. The - contents is the same as the original LaTex version.</revremark> -</revision> -<revision> -<revnumber>1.0.0</revnumber> -<date>2003-07-24</date> -<authorinitials>rjkm</authorinitials> -<revremark>Initial revision on LaTEX.</revremark> -</revision> -</revhistory> -</partinfo> - - -<title>LINUX DVB API</title> -<subtitle>Version 5.10</subtitle> -<!-- ADD THE CHAPTERS HERE --> - <chapter id="dvb_introdution"> - &sub-intro; - </chapter> - <chapter id="dvb_frontend"> - &sub-frontend; - </chapter> - <chapter id="dvb_demux"> - &sub-demux; - </chapter> - <chapter id="dvb_ca"> - &sub-ca; - </chapter> - <chapter id="net"> - &sub-net; - </chapter> - <chapter id="legacy_dvb_apis"> - <title>DVB Deprecated APIs</title> - <para>The APIs described here are kept only for historical reasons. There's - just one driver for a very legacy hardware that uses this API. No - modern drivers should use it. Instead, audio and video should be using - the V4L2 and ALSA APIs, and the pipelines should be set using the - Media Controller API</para> - <section id="dvb_video"> - &sub-video; - </section> - <section id="dvb_audio"> - &sub-audio; - </section> - </chapter> - <chapter id="dvb_examples"> - &sub-examples; - </chapter> -<!-- END OF CHAPTERS --> - <appendix id="audio_h"> - <title>DVB Audio Header File</title> - &sub-audio-h; - </appendix> - <appendix id="ca_h"> - <title>DVB Conditional Access Header File</title> - &sub-ca-h; - </appendix> - <appendix id="dmx_h"> - <title>DVB Demux Header File</title> - &sub-dmx-h; - </appendix> - <appendix id="frontend_h"> - <title>DVB Frontend Header File</title> - &sub-frontend-h; - </appendix> - <appendix id="net_h"> - <title>DVB Network Header File</title> - &sub-net-h; - </appendix> - <appendix id="video_h"> - <title>DVB Video Header File</title> - &sub-video-h; - </appendix> - diff --git a/Documentation/DocBook/media/dvb/dvbproperty.xml b/Documentation/DocBook/media/dvb/dvbproperty.xml deleted file mode 100644 index e579ae5088ae..000000000000 --- a/Documentation/DocBook/media/dvb/dvbproperty.xml +++ /dev/null @@ -1,1680 +0,0 @@ -<section id="frontend-properties"> -<title>DVB Frontend properties</title> -<para>Tuning into a Digital TV physical channel and starting decoding it - requires changing a set of parameters, in order to control the - tuner, the demodulator, the Linear Low-noise Amplifier (LNA) and to set the - antenna subsystem via Satellite Equipment Control (SEC), on satellite - systems. The actual parameters are specific to each particular digital - TV standards, and may change as the digital TV specs evolves.</para> -<para>In the past, the strategy used was to have a union with the parameters - needed to tune for DVB-S, DVB-C, DVB-T and ATSC delivery systems grouped - there. The problem is that, as the second generation standards appeared, - those structs were not big enough to contain the additional parameters. - Also, the union didn't have any space left to be expanded without breaking - userspace. So, the decision was to deprecate the legacy union/struct based - approach, in favor of a properties set approach.</para> - -<para>NOTE: on Linux DVB API version 3, setting a frontend were done via - <link linkend="dvb-frontend-parameters">struct <constant>dvb_frontend_parameters</constant></link>. - This got replaced on version 5 (also called "S2API", as this API were - added originally_enabled to provide support for DVB-S2), because the old - API has a very limited support to new standards and new hardware. This - section describes the new and recommended way to set the frontend, with - suppports all digital TV delivery systems.</para> - -<para>Example: with the properties based approach, in order to set the tuner - to a DVB-C channel at 651 kHz, modulated with 256-QAM, FEC 3/4 and symbol - rate of 5.217 Mbauds, those properties should be sent to - <link linkend="FE_GET_PROPERTY"><constant>FE_SET_PROPERTY</constant></link> ioctl:</para> - <itemizedlist> - <listitem><para>&DTV-DELIVERY-SYSTEM; = SYS_DVBC_ANNEX_A</para></listitem> - <listitem><para>&DTV-FREQUENCY; = 651000000</para></listitem> - <listitem><para>&DTV-MODULATION; = QAM_256</para></listitem> - <listitem><para>&DTV-INVERSION; = INVERSION_AUTO</para></listitem> - <listitem><para>&DTV-SYMBOL-RATE; = 5217000</para></listitem> - <listitem><para>&DTV-INNER-FEC; = FEC_3_4</para></listitem> - <listitem><para>&DTV-TUNE;</para></listitem> - </itemizedlist> - -<para>The code that would do the above is:</para> -<programlisting> -#include <stdio.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <linux/dvb/frontend.h> - -static struct dtv_property props[] = { - { .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBC_ANNEX_A }, - { .cmd = DTV_FREQUENCY, .u.data = 651000000 }, - { .cmd = DTV_MODULATION, .u.data = QAM_256 }, - { .cmd = DTV_INVERSION, .u.data = INVERSION_AUTO }, - { .cmd = DTV_SYMBOL_RATE, .u.data = 5217000 }, - { .cmd = DTV_INNER_FEC, .u.data = FEC_3_4 }, - { .cmd = DTV_TUNE } -}; - -static struct dtv_properties dtv_prop = { - .num = 6, .props = props -}; - -int main(void) -{ - int fd = open("/dev/dvb/adapter0/frontend0", O_RDWR); - - if (!fd) { - perror ("open"); - return -1; - } - if (ioctl(fd, FE_SET_PROPERTY, &dtv_prop) == -1) { - perror("ioctl"); - return -1; - } - printf("Frontend set\n"); - return 0; -} -</programlisting> - -<para>NOTE: While it is possible to directly call the Kernel code like the - above example, it is strongly recommended to use - <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>, - as it provides abstraction to work with the supported digital TV standards - and provides methods for usual operations like program scanning and to - read/write channel descriptor files.</para> - -<section id="dtv-stats"> -<title>struct <structname>dtv_stats</structname></title> -<programlisting> -struct dtv_stats { - __u8 scale; /* enum fecap_scale_params type */ - union { - __u64 uvalue; /* for counters and relative scales */ - __s64 svalue; /* for 1/1000 dB measures */ - }; -} __packed; -</programlisting> -</section> -<section id="dtv-fe-stats"> -<title>struct <structname>dtv_fe_stats</structname></title> -<programlisting> -#define MAX_DTV_STATS 4 - -struct dtv_fe_stats { - __u8 len; - &dtv-stats; stat[MAX_DTV_STATS]; -} __packed; -</programlisting> -</section> - -<section id="dtv-property"> -<title>struct <structname>dtv_property</structname></title> -<programlisting> -/* Reserved fields should be set to 0 */ - -struct dtv_property { - __u32 cmd; - __u32 reserved[3]; - union { - __u32 data; - &dtv-fe-stats; st; - struct { - __u8 data[32]; - __u32 len; - __u32 reserved1[3]; - void *reserved2; - } buffer; - } u; - int result; -} __attribute__ ((packed)); - -/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ -#define DTV_IOCTL_MAX_MSGS 64 -</programlisting> -</section> -<section id="dtv-properties"> -<title>struct <structname>dtv_properties</structname></title> -<programlisting> -struct dtv_properties { - __u32 num; - &dtv-property; *props; -}; -</programlisting> -</section> - -<section> - <title>Property types</title> -<para> -On <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY and FE_SET_PROPERTY</link>, -the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to -get/set up to 64 properties. The actual meaning of each property is described on the next sections. -</para> - -<para>The available frontend property types are shown on the next section.</para> -</section> - -<section id="fe_property_parameters"> - <title>Digital TV property parameters</title> - <section id="DTV-UNDEFINED"> - <title><constant>DTV_UNDEFINED</constant></title> - <para>Used internally. A GET/SET operation for it won't change or return anything.</para> - </section> - <section id="DTV-TUNE"> - <title><constant>DTV_TUNE</constant></title> - <para>Interpret the cache of data, build either a traditional frontend tunerequest so we can pass validation in the <constant>FE_SET_FRONTEND</constant> ioctl.</para> - </section> - <section id="DTV-CLEAR"> - <title><constant>DTV_CLEAR</constant></title> - <para>Reset a cache of data specific to the frontend here. This does not effect hardware.</para> - </section> - <section id="DTV-FREQUENCY"> - <title><constant>DTV_FREQUENCY</constant></title> - - <para>Central frequency of the channel.</para> - - <para>Notes:</para> - <para>1)For satellite delivery systems, it is measured in kHz. - For the other ones, it is measured in Hz.</para> - <para>2)For ISDB-T, the channels are usually transmitted with an offset of 143kHz. - E.g. a valid frequency could be 474143 kHz. The stepping is bound to the bandwidth of - the channel which is 6MHz.</para> - - <para>3)As in ISDB-Tsb the channel consists of only one or three segments the - frequency step is 429kHz, 3*429 respectively. As for ISDB-T the - central frequency of the channel is expected.</para> - </section> - <section id="DTV-MODULATION"> - <title><constant>DTV_MODULATION</constant></title> -<para>Specifies the frontend modulation type for delivery systems that supports - more than one modulation type. The modulation can be one of the types - defined by &fe-modulation;.</para> - - -<section id="fe-modulation-t"> -<title>Modulation property</title> - -<para>Most of the digital TV standards currently offers more than one possible - modulation (sometimes called as "constellation" on some standards). This - enum contains the values used by the Kernel. Please note that not all - modulations are supported by a given standard.</para> - -<table pgwide="1" frame="none" id="fe-modulation"> - <title>enum fe_modulation</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="QPSK"><constant>QPSK</constant></entry> - <entry>QPSK modulation</entry> - </row><row> - <entry id="QAM-16"><constant>QAM_16</constant></entry> - <entry>16-QAM modulation</entry> - </row><row> - <entry id="QAM-32"><constant>QAM_32</constant></entry> - <entry>32-QAM modulation</entry> - </row><row> - <entry id="QAM-64"><constant>QAM_64</constant></entry> - <entry>64-QAM modulation</entry> - </row><row> - <entry id="QAM-128"><constant>QAM_128</constant></entry> - <entry>128-QAM modulation</entry> - </row><row> - <entry id="QAM-256"><constant>QAM_256</constant></entry> - <entry>256-QAM modulation</entry> - </row><row> - <entry id="QAM-AUTO"><constant>QAM_AUTO</constant></entry> - <entry>Autodetect QAM modulation</entry> - </row><row> - <entry id="VSB-8"><constant>VSB_8</constant></entry> - <entry>8-VSB modulation</entry> - </row><row> - <entry id="VSB-16"><constant>VSB_16</constant></entry> - <entry>16-VSB modulation</entry> - </row><row> - <entry id="PSK-8"><constant>PSK_8</constant></entry> - <entry>8-PSK modulation</entry> - </row><row> - <entry id="APSK-16"><constant>APSK_16</constant></entry> - <entry>16-APSK modulation</entry> - </row><row> - <entry id="APSK-32"><constant>APSK_32</constant></entry> - <entry>32-APSK modulation</entry> - </row><row> - <entry id="DQPSK"><constant>DQPSK</constant></entry> - <entry>DQPSK modulation</entry> - </row><row> - <entry id="QAM-4-NR"><constant>QAM_4_NR</constant></entry> - <entry>4-QAM-NR modulation</entry> - </row> - </tbody> - </tgroup> -</table> -</section> - - </section> - <section id="DTV-BANDWIDTH-HZ"> - <title><constant>DTV_BANDWIDTH_HZ</constant></title> - - <para>Bandwidth for the channel, in HZ.</para> - - <para>Possible values: - <constant>1712000</constant>, - <constant>5000000</constant>, - <constant>6000000</constant>, - <constant>7000000</constant>, - <constant>8000000</constant>, - <constant>10000000</constant>. - </para> - - <para>Notes:</para> - - <para>1) For ISDB-T it should be always 6000000Hz (6MHz)</para> - <para>2) For ISDB-Tsb it can vary depending on the number of connected segments</para> - <para>3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth - for DVB-C depends on the symbol rate</para> - <para>4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from - other parameters (DTV_ISDBT_SB_SEGMENT_IDX, - DTV_ISDBT_SB_SEGMENT_COUNT).</para> - <para>5) DVB-T supports 6, 7 and 8MHz.</para> - <para>6) In addition, DVB-T2 supports 1.172, 5 and 10MHz.</para> - </section> - <section id="DTV-INVERSION"> - <title><constant>DTV_INVERSION</constant></title> - - <para>Specifies if the frontend should do spectral inversion or not.</para> - -<section id="fe-spectral-inversion-t"> -<title>enum fe_modulation: Frontend spectral inversion</title> - -<para>This parameter indicates if spectral inversion should be presumed or not. - In the automatic setting (<constant>INVERSION_AUTO</constant>) the hardware - will try to figure out the correct setting by itself. If the hardware - doesn't support, the DVB core will try to lock at the carrier first with - inversion off. If it fails, it will try to enable inversion. -</para> - -<table pgwide="1" frame="none" id="fe-spectral-inversion"> - <title>enum fe_modulation</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="INVERSION-OFF"><constant>INVERSION_OFF</constant></entry> - <entry>Don't do spectral band inversion.</entry> - </row><row> - <entry id="INVERSION-ON"><constant>INVERSION_ON</constant></entry> - <entry>Do spectral band inversion.</entry> - </row><row> - <entry id="INVERSION-AUTO"><constant>INVERSION_AUTO</constant></entry> - <entry>Autodetect spectral band inversion.</entry> - </row> - </tbody> - </tgroup> -</table> -</section> - - </section> - <section id="DTV-DISEQC-MASTER"> - <title><constant>DTV_DISEQC_MASTER</constant></title> - <para>Currently not implemented.</para> - </section> - <section id="DTV-SYMBOL-RATE"> - <title><constant>DTV_SYMBOL_RATE</constant></title> - <para>Digital TV symbol rate, in bauds (symbols/second). Used on cable standards.</para> - </section> - <section id="DTV-INNER-FEC"> - <title><constant>DTV_INNER_FEC</constant></title> - <para>Used cable/satellite transmissions. The acceptable values are: - </para> -<section id="fe-code-rate-t"> -<title>enum fe_code_rate: type of the Forward Error Correction.</title> - -<table pgwide="1" frame="none" id="fe-code-rate"> - <title>enum fe_code_rate</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="FEC-NONE"><constant>FEC_NONE</constant></entry> - <entry>No Forward Error Correction Code</entry> - </row><row> - <entry id="FEC-AUTO"><constant>FEC_AUTO</constant></entry> - <entry>Autodetect Error Correction Code</entry> - </row><row> - <entry id="FEC-1-2"><constant>FEC_1_2</constant></entry> - <entry>Forward Error Correction Code 1/2</entry> - </row><row> - <entry id="FEC-2-3"><constant>FEC_2_3</constant></entry> - <entry>Forward Error Correction Code 2/3</entry> - </row><row> - <entry id="FEC-3-4"><constant>FEC_3_4</constant></entry> - <entry>Forward Error Correction Code 3/4</entry> - </row><row> - <entry id="FEC-4-5"><constant>FEC_4_5</constant></entry> - <entry>Forward Error Correction Code 4/5</entry> - </row><row> - <entry id="FEC-5-6"><constant>FEC_5_6</constant></entry> - <entry>Forward Error Correction Code 5/6</entry> - </row><row> - <entry id="FEC-6-7"><constant>FEC_6_7</constant></entry> - <entry>Forward Error Correction Code 6/7</entry> - </row><row> - <entry id="FEC-7-8"><constant>FEC_7_8</constant></entry> - <entry>Forward Error Correction Code 7/8</entry> - </row><row> - <entry id="FEC-8-9"><constant>FEC_8_9</constant></entry> - <entry>Forward Error Correction Code 8/9</entry> - </row><row> - <entry id="FEC-9-10"><constant>FEC_9_10</constant></entry> - <entry>Forward Error Correction Code 9/10</entry> - </row><row> - <entry id="FEC-2-5"><constant>FEC_2_5</constant></entry> - <entry>Forward Error Correction Code 2/5</entry> - </row><row> - <entry id="FEC-3-5"><constant>FEC_3_5</constant></entry> - <entry>Forward Error Correction Code 3/5</entry> - </row> - </tbody> - </tgroup> -</table> -</section> - </section> - <section id="DTV-VOLTAGE"> - <title><constant>DTV_VOLTAGE</constant></title> - <para>The voltage is usually used with non-DiSEqC capable LNBs to switch - the polarzation (horizontal/vertical). When using DiSEqC epuipment this - voltage has to be switched consistently to the DiSEqC commands as - described in the DiSEqC spec.</para> - -<table pgwide="1" frame="none" id="fe-sec-voltage"> - <title id="fe-sec-voltage-t">enum fe_sec_voltage</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="SEC-VOLTAGE-13"><constant>SEC_VOLTAGE_13</constant></entry> - <entry align="char">Set DC voltage level to 13V</entry> - </row><row> - <entry align="char" id="SEC-VOLTAGE-18"><constant>SEC_VOLTAGE_18</constant></entry> - <entry align="char">Set DC voltage level to 18V</entry> - </row><row> - <entry align="char" id="SEC-VOLTAGE-OFF"><constant>SEC_VOLTAGE_OFF</constant></entry> - <entry align="char">Don't send any voltage to the antenna</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - <section id="DTV-TONE"> - <title><constant>DTV_TONE</constant></title> - <para>Currently not used.</para> - </section> - <section id="DTV-PILOT"> - <title><constant>DTV_PILOT</constant></title> - <para>Sets DVB-S2 pilot</para> - <section id="fe-pilot-t"> - <title>fe_pilot type</title> -<table pgwide="1" frame="none" id="fe-pilot"> - <title>enum fe_pilot</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="PILOT-ON"><constant>PILOT_ON</constant></entry> - <entry align="char">Pilot tones enabled</entry> - </row><row> - <entry align="char" id="PILOT-OFF"><constant>PILOT_OFF</constant></entry> - <entry align="char">Pilot tones disabled</entry> - </row><row> - <entry align="char" id="PILOT-AUTO"><constant>PILOT_AUTO</constant></entry> - <entry align="char">Autodetect pilot tones</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - </section> - <section id="DTV-ROLLOFF"> - <title><constant>DTV_ROLLOFF</constant></title> - <para>Sets DVB-S2 rolloff</para> - - <section id="fe-rolloff-t"> - <title>fe_rolloff type</title> -<table pgwide="1" frame="none" id="fe-rolloff"> - <title>enum fe_rolloff</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="ROLLOFF-35"><constant>ROLLOFF_35</constant></entry> - <entry align="char">Roloff factor: α=35%</entry> - </row><row> - <entry align="char" id="ROLLOFF-20"><constant>ROLLOFF_20</constant></entry> - <entry align="char">Roloff factor: α=20%</entry> - </row><row> - <entry align="char" id="ROLLOFF-25"><constant>ROLLOFF_25</constant></entry> - <entry align="char">Roloff factor: α=25%</entry> - </row><row> - <entry align="char" id="ROLLOFF-AUTO"><constant>ROLLOFF_AUTO</constant></entry> - <entry align="char">Auto-detect the roloff factor.</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - </section> - <section id="DTV-DISEQC-SLAVE-REPLY"> - <title><constant>DTV_DISEQC_SLAVE_REPLY</constant></title> - <para>Currently not implemented.</para> - </section> - <section id="DTV-FE-CAPABILITY-COUNT"> - <title><constant>DTV_FE_CAPABILITY_COUNT</constant></title> - <para>Currently not implemented.</para> - </section> - <section id="DTV-FE-CAPABILITY"> - <title><constant>DTV_FE_CAPABILITY</constant></title> - <para>Currently not implemented.</para> - </section> - <section id="DTV-DELIVERY-SYSTEM"> - <title><constant>DTV_DELIVERY_SYSTEM</constant></title> - <para>Specifies the type of Delivery system</para> - <section id="fe-delivery-system-t"> - <title>fe_delivery_system type</title> - <para>Possible values: </para> - -<table pgwide="1" frame="none" id="fe-delivery-system"> - <title>enum fe_delivery_system</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="SYS-UNDEFINED"><constant>SYS_UNDEFINED</constant></entry> - <entry>Undefined standard. Generally, indicates an error</entry> - </row><row> - <entry id="SYS-DVBC-ANNEX-A"><constant>SYS_DVBC_ANNEX_A</constant></entry> - <entry>Cable TV: DVB-C following ITU-T J.83 Annex A spec</entry> - </row><row> - <entry id="SYS-DVBC-ANNEX-B"><constant>SYS_DVBC_ANNEX_B</constant></entry> - <entry>Cable TV: DVB-C following ITU-T J.83 Annex B spec (ClearQAM)</entry> - </row><row> - <entry id="SYS-DVBC-ANNEX-C"><constant>SYS_DVBC_ANNEX_C</constant></entry> - <entry>Cable TV: DVB-C following ITU-T J.83 Annex C spec</entry> - </row><row> - <entry id="SYS-ISDBC"><constant>SYS_ISDBC</constant></entry> - <entry>Cable TV: ISDB-C (no drivers yet)</entry> - </row><row> - <entry id="SYS-DVBT"><constant>SYS_DVBT</constant></entry> - <entry>Terrestral TV: DVB-T</entry> - </row><row> - <entry id="SYS-DVBT2"><constant>SYS_DVBT2</constant></entry> - <entry>Terrestral TV: DVB-T2</entry> - </row><row> - <entry id="SYS-ISDBT"><constant>SYS_ISDBT</constant></entry> - <entry>Terrestral TV: ISDB-T</entry> - </row><row> - <entry id="SYS-ATSC"><constant>SYS_ATSC</constant></entry> - <entry>Terrestral TV: ATSC</entry> - </row><row> - <entry id="SYS-ATSCMH"><constant>SYS_ATSCMH</constant></entry> - <entry>Terrestral TV (mobile): ATSC-M/H</entry> - </row><row> - <entry id="SYS-DTMB"><constant>SYS_DTMB</constant></entry> - <entry>Terrestrial TV: DTMB</entry> - </row><row> - <entry id="SYS-DVBS"><constant>SYS_DVBS</constant></entry> - <entry>Satellite TV: DVB-S</entry> - </row><row> - <entry id="SYS-DVBS2"><constant>SYS_DVBS2</constant></entry> - <entry>Satellite TV: DVB-S2</entry> - </row><row> - <entry id="SYS-TURBO"><constant>SYS_TURBO</constant></entry> - <entry>Satellite TV: DVB-S Turbo</entry> - </row><row> - <entry id="SYS-ISDBS"><constant>SYS_ISDBS</constant></entry> - <entry>Satellite TV: ISDB-S</entry> - </row><row> - <entry id="SYS-DAB"><constant>SYS_DAB</constant></entry> - <entry>Digital audio: DAB (not fully supported)</entry> - </row><row> - <entry id="SYS-DSS"><constant>SYS_DSS</constant></entry> - <entry>Satellite TV:"DSS (not fully supported)</entry> - </row><row> - <entry id="SYS-CMMB"><constant>SYS_CMMB</constant></entry> - <entry>Terrestral TV (mobile):CMMB (not fully supported)</entry> - </row><row> - <entry id="SYS-DVBH"><constant>SYS_DVBH</constant></entry> - <entry>Terrestral TV (mobile): DVB-H (standard deprecated)</entry> - </row> - </tbody> - </tgroup> -</table> - - -</section> - </section> - <section id="DTV-ISDBT-PARTIAL-RECEPTION"> - <title><constant>DTV_ISDBT_PARTIAL_RECEPTION</constant></title> - - <para>If <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '0' this bit-field represents whether - the channel is in partial reception mode or not.</para> - - <para>If '1' <constant>DTV_ISDBT_LAYERA_*</constant> values are assigned to the center segment and - <constant>DTV_ISDBT_LAYERA_SEGMENT_COUNT</constant> has to be '1'.</para> - - <para>If in addition <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1' - <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> represents whether this ISDB-Tsb channel - is consisting of one segment and layer or three segments and two layers.</para> - - <para>Possible values: 0, 1, -1 (AUTO)</para> - </section> - <section id="DTV-ISDBT-SOUND-BROADCASTING"> - <title><constant>DTV_ISDBT_SOUND_BROADCASTING</constant></title> - - <para>This field represents whether the other DTV_ISDBT_*-parameters are - referring to an ISDB-T and an ISDB-Tsb channel. (See also - <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant>).</para> - - <para>Possible values: 0, 1, -1 (AUTO)</para> - </section> - <section id="DTV-ISDBT-SB-SUBCHANNEL-ID"> - <title><constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant></title> - - <para>This field only applies if <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1'.</para> - - <para>(Note of the author: This might not be the correct description of the - <constant>SUBCHANNEL-ID</constant> in all details, but it is my understanding of the technical - background needed to program a device)</para> - - <para>An ISDB-Tsb channel (1 or 3 segments) can be broadcasted alone or in a - set of connected ISDB-Tsb channels. In this set of channels every - channel can be received independently. The number of connected - ISDB-Tsb segment can vary, e.g. depending on the frequency spectrum - bandwidth available.</para> - - <para>Example: Assume 8 ISDB-Tsb connected segments are broadcasted. The - broadcaster has several possibilities to put those channels in the - air: Assuming a normal 13-segment ISDB-T spectrum he can align the 8 - segments from position 1-8 to 5-13 or anything in between.</para> - - <para>The underlying layer of segments are subchannels: each segment is - consisting of several subchannels with a predefined IDs. A sub-channel - is used to help the demodulator to synchronize on the channel.</para> - - <para>An ISDB-T channel is always centered over all sub-channels. As for - the example above, in ISDB-Tsb it is no longer as simple as that.</para> - - <para><constant>The DTV_ISDBT_SB_SUBCHANNEL_ID</constant> parameter is used to give the - sub-channel ID of the segment to be demodulated.</para> - - <para>Possible values: 0 .. 41, -1 (AUTO)</para> - </section> - <section id="DTV-ISDBT-SB-SEGMENT-IDX"> - <title><constant>DTV_ISDBT_SB_SEGMENT_IDX</constant></title> - <para>This field only applies if <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1'.</para> - <para><constant>DTV_ISDBT_SB_SEGMENT_IDX</constant> gives the index of the segment to be - demodulated for an ISDB-Tsb channel where several of them are - transmitted in the connected manner.</para> - <para>Possible values: 0 .. <constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> - 1</para> - <para>Note: This value cannot be determined by an automatic channel search.</para> - </section> - <section id="DTV-ISDBT-SB-SEGMENT-COUNT"> - <title><constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant></title> - <para>This field only applies if <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1'.</para> - <para><constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> gives the total count of connected ISDB-Tsb - channels.</para> - <para>Possible values: 1 .. 13</para> - <para>Note: This value cannot be determined by an automatic channel search.</para> - </section> - <section id="isdb-hierq-layers"> - <title><constant>DTV-ISDBT-LAYER*</constant> parameters</title> - <para>ISDB-T channels can be coded hierarchically. As opposed to DVB-T in - ISDB-T hierarchical layers can be decoded simultaneously. For that - reason a ISDB-T demodulator has 3 Viterbi and 3 Reed-Solomon decoders.</para> - <para>ISDB-T has 3 hierarchical layers which each can use a part of the - available segments. The total number of segments over all layers has - to 13 in ISDB-T.</para> - <para>There are 3 parameter sets, for Layers A, B and C.</para> - <section id="DTV-ISDBT-LAYER-ENABLED"> - <title><constant>DTV_ISDBT_LAYER_ENABLED</constant></title> - <para>Hierarchical reception in ISDB-T is achieved by enabling or disabling - layers in the decoding process. Setting all bits of - <constant>DTV_ISDBT_LAYER_ENABLED</constant> to '1' forces all layers (if applicable) to be - demodulated. This is the default.</para> - <para>If the channel is in the partial reception mode - (<constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> = 1) the central segment can be decoded - independently of the other 12 segments. In that mode layer A has to - have a <constant>SEGMENT_COUNT</constant> of 1.</para> - <para>In ISDB-Tsb only layer A is used, it can be 1 or 3 in ISDB-Tsb - according to <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant>. <constant>SEGMENT_COUNT</constant> must be filled - accordingly.</para> - <para>Possible values: 0x1, 0x2, 0x4 (|-able)</para> - <para><constant>DTV_ISDBT_LAYER_ENABLED[0:0]</constant> - layer A</para> - <para><constant>DTV_ISDBT_LAYER_ENABLED[1:1]</constant> - layer B</para> - <para><constant>DTV_ISDBT_LAYER_ENABLED[2:2]</constant> - layer C</para> - <para><constant>DTV_ISDBT_LAYER_ENABLED[31:3]</constant> unused</para> - </section> - <section id="DTV-ISDBT-LAYER-FEC"> - <title><constant>DTV_ISDBT_LAYER*_FEC</constant></title> - <para>Possible values: <constant>FEC_AUTO</constant>, <constant>FEC_1_2</constant>, <constant>FEC_2_3</constant>, <constant>FEC_3_4</constant>, <constant>FEC_5_6</constant>, <constant>FEC_7_8</constant></para> - </section> - <section id="DTV-ISDBT-LAYER-MODULATION"> - <title><constant>DTV_ISDBT_LAYER*_MODULATION</constant></title> - <para>Possible values: <constant>QAM_AUTO</constant>, QP<constant>SK, QAM_16</constant>, <constant>QAM_64</constant>, <constant>DQPSK</constant></para> - <para>Note: If layer C is <constant>DQPSK</constant> layer B has to be <constant>DQPSK</constant>. If layer B is <constant>DQPSK</constant> - and <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant>=0 layer has to be <constant>DQPSK</constant>.</para> - </section> - <section id="DTV-ISDBT-LAYER-SEGMENT-COUNT"> - <title><constant>DTV_ISDBT_LAYER*_SEGMENT_COUNT</constant></title> - <para>Possible values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1 (AUTO)</para> - <para>Note: Truth table for <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> and - <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> and <constant>LAYER</constant>*_SEGMENT_COUNT</para> - <informaltable id="isdbt-layer_seg-cnt-table"> - <tgroup cols="6"> - <tbody> - <row> - <entry>PR</entry> - <entry>SB</entry> - <entry>Layer A width</entry> - <entry>Layer B width</entry> - <entry>Layer C width</entry> - <entry>total width</entry> - </row> - <row> - <entry>0</entry> - <entry>0</entry> - <entry>1 .. 13</entry> - <entry>1 .. 13</entry> - <entry>1 .. 13</entry> - <entry>13</entry> - </row> - <row> - <entry>1</entry> - <entry>0</entry> - <entry>1</entry> - <entry>1 .. 13</entry> - <entry>1 .. 13</entry> - <entry>13</entry> - </row> - <row> - <entry>0</entry> - <entry>1</entry> - <entry>1</entry> - <entry>0</entry> - <entry>0</entry> - <entry>1</entry> - </row> - <row> - <entry>1</entry> - <entry>1</entry> - <entry>1</entry> - <entry>2</entry> - <entry>0</entry> - <entry>13</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </section> - <section id="DTV-ISDBT-LAYER-TIME-INTERLEAVING"> - <title><constant>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</constant></title> - <para>Valid values: 0, 1, 2, 4, -1 (AUTO)</para> - <para>when DTV_ISDBT_SOUND_BROADCASTING is active, value 8 is also valid.</para> - <para>Note: The real time interleaving length depends on the mode (fft-size). The values - here are referring to what can be found in the TMCC-structure, as shown in the table below.</para> - <informaltable id="isdbt-layer-interleaving-table"> - <tgroup cols="4" align="center"> - <tbody> - <row> - <entry>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</entry> - <entry>Mode 1 (2K FFT)</entry> - <entry>Mode 2 (4K FFT)</entry> - <entry>Mode 3 (8K FFT)</entry> - </row> - <row> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - </row> - <row> - <entry>1</entry> - <entry>4</entry> - <entry>2</entry> - <entry>1</entry> - </row> - <row> - <entry>2</entry> - <entry>8</entry> - <entry>4</entry> - <entry>2</entry> - </row> - <row> - <entry>4</entry> - <entry>16</entry> - <entry>8</entry> - <entry>4</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </section> - <section id="DTV-ATSCMH-FIC-VER"> - <title><constant>DTV_ATSCMH_FIC_VER</constant></title> - <para>Version number of the FIC (Fast Information Channel) signaling data.</para> - <para>FIC is used for relaying information to allow rapid service acquisition by the receiver.</para> - <para>Possible values: 0, 1, 2, 3, ..., 30, 31</para> - </section> - <section id="DTV-ATSCMH-PARADE-ID"> - <title><constant>DTV_ATSCMH_PARADE_ID</constant></title> - <para>Parade identification number</para> - <para>A parade is a collection of up to eight MH groups, conveying one or two ensembles.</para> - <para>Possible values: 0, 1, 2, 3, ..., 126, 127</para> - </section> - <section id="DTV-ATSCMH-NOG"> - <title><constant>DTV_ATSCMH_NOG</constant></title> - <para>Number of MH groups per MH subframe for a designated parade.</para> - <para>Possible values: 1, 2, 3, 4, 5, 6, 7, 8</para> - </section> - <section id="DTV-ATSCMH-TNOG"> - <title><constant>DTV_ATSCMH_TNOG</constant></title> - <para>Total number of MH groups including all MH groups belonging to all MH parades in one MH subframe.</para> - <para>Possible values: 0, 1, 2, 3, ..., 30, 31</para> - </section> - <section id="DTV-ATSCMH-SGN"> - <title><constant>DTV_ATSCMH_SGN</constant></title> - <para>Start group number.</para> - <para>Possible values: 0, 1, 2, 3, ..., 14, 15</para> - </section> - <section id="DTV-ATSCMH-PRC"> - <title><constant>DTV_ATSCMH_PRC</constant></title> - <para>Parade repetition cycle.</para> - <para>Possible values: 1, 2, 3, 4, 5, 6, 7, 8</para> - </section> - <section id="DTV-ATSCMH-RS-FRAME-MODE"> - <title><constant>DTV_ATSCMH_RS_FRAME_MODE</constant></title> - <para>Reed Solomon (RS) frame mode.</para> - <para>Possible values are:</para> -<table pgwide="1" frame="none" id="atscmh-rs-frame-mode"> - <title>enum atscmh_rs_frame_mode</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="ATSCMH-RSFRAME-PRI-ONLY"><constant>ATSCMH_RSFRAME_PRI_ONLY</constant></entry> - <entry>Single Frame: There is only a primary RS Frame for all - Group Regions.</entry> - </row><row> - <entry id="ATSCMH-RSFRAME-PRI-SEC"><constant>ATSCMH_RSFRAME_PRI_SEC</constant></entry> - <entry>Dual Frame: There are two separate RS Frames: Primary RS - Frame for Group Region A and B and Secondary RS Frame for Group - Region C and D.</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - <section id="DTV-ATSCMH-RS-FRAME-ENSEMBLE"> - <title><constant>DTV_ATSCMH_RS_FRAME_ENSEMBLE</constant></title> - <para>Reed Solomon(RS) frame ensemble.</para> - <para>Possible values are:</para> -<table pgwide="1" frame="none" id="atscmh-rs-frame-ensemble"> - <title>enum atscmh_rs_frame_ensemble</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="ATSCMH-RSFRAME-ENS-PRI"><constant>ATSCMH_RSFRAME_ENS_PRI</constant></entry> - <entry>Primary Ensemble.</entry> - </row><row> - <entry id="ATSCMH-RSFRAME-ENS-SEC"><constant>AATSCMH_RSFRAME_PRI_SEC</constant></entry> - <entry>Secondary Ensemble.</entry> - </row><row> - <entry id="ATSCMH-RSFRAME-RES"><constant>AATSCMH_RSFRAME_RES</constant></entry> - <entry>Reserved. Shouldn't be used.</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - <section id="DTV-ATSCMH-RS-CODE-MODE-PRI"> - <title><constant>DTV_ATSCMH_RS_CODE_MODE_PRI</constant></title> - <para>Reed Solomon (RS) code mode (primary).</para> - <para>Possible values are:</para> -<table pgwide="1" frame="none" id="atscmh-rs-code-mode"> - <title>enum atscmh_rs_code_mode</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="ATSCMH-RSCODE-211-187"><constant>ATSCMH_RSCODE_211_187</constant></entry> - <entry>Reed Solomon code (211,187).</entry> - </row><row> - <entry id="ATSCMH-RSCODE-223-187"><constant>ATSCMH_RSCODE_223_187</constant></entry> - <entry>Reed Solomon code (223,187).</entry> - </row><row> - <entry id="ATSCMH-RSCODE-235-187"><constant>ATSCMH_RSCODE_235_187</constant></entry> - <entry>Reed Solomon code (235,187).</entry> - </row><row> - <entry id="ATSCMH-RSCODE-RES"><constant>ATSCMH_RSCODE_RES</constant></entry> - <entry>Reserved. Shouldn't be used.</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - <section id="DTV-ATSCMH-RS-CODE-MODE-SEC"> - <title><constant>DTV_ATSCMH_RS_CODE_MODE_SEC</constant></title> - <para>Reed Solomon (RS) code mode (secondary).</para> - <para>Possible values are the same as documented on - &atscmh-rs-code-mode;:</para> - </section> - <section id="DTV-ATSCMH-SCCC-BLOCK-MODE"> - <title><constant>DTV_ATSCMH_SCCC_BLOCK_MODE</constant></title> - <para>Series Concatenated Convolutional Code Block Mode.</para> - <para>Possible values are:</para> -<table pgwide="1" frame="none" id="atscmh-sccc-block-mode"> - <title>enum atscmh_scc_block_mode</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="ATSCMH-SCCC-BLK-SEP"><constant>ATSCMH_SCCC_BLK_SEP</constant></entry> - <entry>Separate SCCC: the SCCC outer code mode shall be set independently - for each Group Region (A, B, C, D)</entry> - </row><row> - <entry id="ATSCMH-SCCC-BLK-COMB"><constant>ATSCMH_SCCC_BLK_COMB</constant></entry> - <entry>Combined SCCC: all four Regions shall have the same SCCC outer - code mode.</entry> - </row><row> - <entry id="ATSCMH-SCCC-BLK-RES"><constant>ATSCMH_SCCC_BLK_RES</constant></entry> - <entry>Reserved. Shouldn't be used.</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - <section id="DTV-ATSCMH-SCCC-CODE-MODE-A"> - <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_A</constant></title> - <para>Series Concatenated Convolutional Code Rate.</para> - <para>Possible values are:</para> -<table pgwide="1" frame="none" id="atscmh-sccc-code-mode"> - <title>enum atscmh_sccc_code_mode</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="ATSCMH-SCCC-CODE-HLF"><constant>ATSCMH_SCCC_CODE_HLF</constant></entry> - <entry>The outer code rate of a SCCC Block is 1/2 rate.</entry> - </row><row> - <entry id="ATSCMH-SCCC-CODE-QTR"><constant>ATSCMH_SCCC_CODE_QTR</constant></entry> - <entry>The outer code rate of a SCCC Block is 1/4 rate.</entry> - </row><row> - <entry id="ATSCMH-SCCC-CODE-RES"><constant>ATSCMH_SCCC_CODE_RES</constant></entry> - <entry>to be documented.</entry> - </row> - </tbody> - </tgroup> -</table> - </section> - <section id="DTV-ATSCMH-SCCC-CODE-MODE-B"> - <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_B</constant></title> - <para>Series Concatenated Convolutional Code Rate.</para> - <para>Possible values are the same as documented on - &atscmh-sccc-code-mode;.</para> - </section> - <section id="DTV-ATSCMH-SCCC-CODE-MODE-C"> - <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_C</constant></title> - <para>Series Concatenated Convolutional Code Rate.</para> - <para>Possible values are the same as documented on - &atscmh-sccc-code-mode;.</para> - </section> - <section id="DTV-ATSCMH-SCCC-CODE-MODE-D"> - <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant></title> - <para>Series Concatenated Convolutional Code Rate.</para> - <para>Possible values are the same as documented on - &atscmh-sccc-code-mode;.</para> - </section> - </section> - <section id="DTV-API-VERSION"> - <title><constant>DTV_API_VERSION</constant></title> - <para>Returns the major/minor version of the DVB API</para> - </section> - <section id="DTV-CODE-RATE-HP"> - <title><constant>DTV_CODE_RATE_HP</constant></title> - <para>Used on terrestrial transmissions. The acceptable values are - the ones described at &fe-transmit-mode-t;. - </para> - </section> - <section id="DTV-CODE-RATE-LP"> - <title><constant>DTV_CODE_RATE_LP</constant></title> - <para>Used on terrestrial transmissions. The acceptable values are - the ones described at &fe-transmit-mode-t;. - </para> - - </section> - - <section id="DTV-GUARD-INTERVAL"> - <title><constant>DTV_GUARD_INTERVAL</constant></title> - - <para>Possible values are:</para> - -<section id="fe-guard-interval-t"> -<title>Modulation guard interval</title> - -<table pgwide="1" frame="none" id="fe-guard-interval"> - <title>enum fe_guard_interval</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="GUARD-INTERVAL-AUTO"><constant>GUARD_INTERVAL_AUTO</constant></entry> - <entry>Autodetect the guard interval</entry> - </row><row> - <entry id="GUARD-INTERVAL-1-128"><constant>GUARD_INTERVAL_1_128</constant></entry> - <entry>Guard interval 1/128</entry> - </row><row> - <entry id="GUARD-INTERVAL-1-32"><constant>GUARD_INTERVAL_1_32</constant></entry> - <entry>Guard interval 1/32</entry> - </row><row> - <entry id="GUARD-INTERVAL-1-16"><constant>GUARD_INTERVAL_1_16</constant></entry> - <entry>Guard interval 1/16</entry> - </row><row> - <entry id="GUARD-INTERVAL-1-8"><constant>GUARD_INTERVAL_1_8</constant></entry> - <entry>Guard interval 1/8</entry> - </row><row> - <entry id="GUARD-INTERVAL-1-4"><constant>GUARD_INTERVAL_1_4</constant></entry> - <entry>Guard interval 1/4</entry> - </row><row> - <entry id="GUARD-INTERVAL-19-128"><constant>GUARD_INTERVAL_19_128</constant></entry> - <entry>Guard interval 19/128</entry> - </row><row> - <entry id="GUARD-INTERVAL-19-256"><constant>GUARD_INTERVAL_19_256</constant></entry> - <entry>Guard interval 19/256</entry> - </row><row> - <entry id="GUARD-INTERVAL-PN420"><constant>GUARD_INTERVAL_PN420</constant></entry> - <entry>PN length 420 (1/4)</entry> - </row><row> - <entry id="GUARD-INTERVAL-PN595"><constant>GUARD_INTERVAL_PN595</constant></entry> - <entry>PN length 595 (1/6)</entry> - </row><row> - <entry id="GUARD-INTERVAL-PN945"><constant>GUARD_INTERVAL_PN945</constant></entry> - <entry>PN length 945 (1/9)</entry> - </row> - </tbody> - </tgroup> -</table> - - <para>Notes:</para> - <para>1) If <constant>DTV_GUARD_INTERVAL</constant> is set the <constant>GUARD_INTERVAL_AUTO</constant> the hardware will - try to find the correct guard interval (if capable) and will use TMCC to fill - in the missing parameters.</para> - <para>2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present</para> - <para>3) DTMB specifies PN420, PN595 and PN945.</para> -</section> - </section> - <section id="DTV-TRANSMISSION-MODE"> - <title><constant>DTV_TRANSMISSION_MODE</constant></title> - - <para>Specifies the number of carriers used by the standard. - This is used only on OFTM-based standards, e. g. - DVB-T/T2, ISDB-T, DTMB</para> - -<section id="fe-transmit-mode-t"> -<title>enum fe_transmit_mode: Number of carriers per channel</title> - -<table pgwide="1" frame="none" id="fe-transmit-mode"> - <title>enum fe_transmit_mode</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="TRANSMISSION-MODE-AUTO"><constant>TRANSMISSION_MODE_AUTO</constant></entry> - <entry>Autodetect transmission mode. The hardware will try to find - the correct FFT-size (if capable) to fill in the missing - parameters.</entry> - </row><row> - <entry id="TRANSMISSION-MODE-1K"><constant>TRANSMISSION_MODE_1K</constant></entry> - <entry>Transmission mode 1K</entry> - </row><row> - <entry id="TRANSMISSION-MODE-2K"><constant>TRANSMISSION_MODE_2K</constant></entry> - <entry>Transmission mode 2K</entry> - </row><row> - <entry id="TRANSMISSION-MODE-8K"><constant>TRANSMISSION_MODE_8K</constant></entry> - <entry>Transmission mode 8K</entry> - </row><row> - <entry id="TRANSMISSION-MODE-4K"><constant>TRANSMISSION_MODE_4K</constant></entry> - <entry>Transmission mode 4K</entry> - </row><row> - <entry id="TRANSMISSION-MODE-16K"><constant>TRANSMISSION_MODE_16K</constant></entry> - <entry>Transmission mode 16K</entry> - </row><row> - <entry id="TRANSMISSION-MODE-32K"><constant>TRANSMISSION_MODE_32K</constant></entry> - <entry>Transmission mode 32K</entry> - </row><row> - <entry id="TRANSMISSION-MODE-C1"><constant>TRANSMISSION_MODE_C1</constant></entry> - <entry>Single Carrier (C=1) transmission mode (DTMB)</entry> - </row><row> - <entry id="TRANSMISSION-MODE-C3780"><constant>TRANSMISSION_MODE_C3780</constant></entry> - <entry>Multi Carrier (C=3780) transmission mode (DTMB)</entry> - </row> - </tbody> - </tgroup> -</table> - - - <para>Notes:</para> - <para>1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called - 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K</para> - - <para>2) If <constant>DTV_TRANSMISSION_MODE</constant> is set the <constant>TRANSMISSION_MODE_AUTO</constant> the - hardware will try to find the correct FFT-size (if capable) and will - use TMCC to fill in the missing parameters.</para> - <para>3) DVB-T specifies 2K and 8K as valid sizes.</para> - <para>4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K.</para> - <para>5) DTMB specifies C1 and C3780.</para> -</section> - </section> - <section id="DTV-HIERARCHY"> - <title><constant>DTV_HIERARCHY</constant></title> - <para>Frontend hierarchy</para> - - -<section id="fe-hierarchy-t"> -<title>Frontend hierarchy</title> - -<table pgwide="1" frame="none" id="fe-hierarchy"> - <title>enum fe_hierarchy</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="HIERARCHY-NONE"><constant>HIERARCHY_NONE</constant></entry> - <entry>No hierarchy</entry> - </row><row> - <entry id="HIERARCHY-AUTO"><constant>HIERARCHY_AUTO</constant></entry> - <entry>Autodetect hierarchy (if supported)</entry> - </row><row> - <entry id="HIERARCHY-1"><constant>HIERARCHY_1</constant></entry> - <entry>Hierarchy 1</entry> - </row><row> - <entry id="HIERARCHY-2"><constant>HIERARCHY_2</constant></entry> - <entry>Hierarchy 2</entry> - </row><row> - <entry id="HIERARCHY-4"><constant>HIERARCHY_4</constant></entry> - <entry>Hierarchy 4</entry> - </row> - </tbody> - </tgroup> -</table> -</section> - - </section> - <section id="DTV-STREAM-ID"> - <title><constant>DTV_STREAM_ID</constant></title> - <para>DVB-S2, DVB-T2 and ISDB-S support the transmission of several - streams on a single transport stream. - This property enables the DVB driver to handle substream filtering, - when supported by the hardware. - By default, substream filtering is disabled. - </para><para> - For DVB-S2 and DVB-T2, the valid substream id range is from 0 to 255. - </para><para> - For ISDB, the valid substream id range is from 1 to 65535. - </para><para> - To disable it, you should use the special macro NO_STREAM_ID_FILTER. - </para><para> - Note: any value outside the id range also disables filtering. - </para> - </section> - <section id="DTV-DVBT2-PLP-ID-LEGACY"> - <title><constant>DTV_DVBT2_PLP_ID_LEGACY</constant></title> - <para>Obsolete, replaced with DTV_STREAM_ID.</para> - </section> - <section id="DTV-ENUM-DELSYS"> - <title><constant>DTV_ENUM_DELSYS</constant></title> - <para>A Multi standard frontend needs to advertise the delivery systems provided. - Applications need to enumerate the provided delivery systems, before using - any other operation with the frontend. Prior to it's introduction, - FE_GET_INFO was used to determine a frontend type. A frontend which - provides more than a single delivery system, FE_GET_INFO doesn't help much. - Applications which intends to use a multistandard frontend must enumerate - the delivery systems associated with it, rather than trying to use - FE_GET_INFO. In the case of a legacy frontend, the result is just the same - as with FE_GET_INFO, but in a more structured format </para> - </section> - <section id="DTV-INTERLEAVING"> - <title><constant>DTV_INTERLEAVING</constant></title> - -<para>Time interleaving to be used. Currently, used only on DTMB.</para> - -<table pgwide="1" frame="none" id="fe-interleaving"> - <title>enum fe_interleaving</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="INTERLEAVING-NONE"><constant>INTERLEAVING_NONE</constant></entry> - <entry>No interleaving.</entry> - </row><row> - <entry id="INTERLEAVING-AUTO"><constant>INTERLEAVING_AUTO</constant></entry> - <entry>Auto-detect interleaving.</entry> - </row><row> - <entry id="INTERLEAVING-240"><constant>INTERLEAVING_240</constant></entry> - <entry>Interleaving of 240 symbols.</entry> - </row><row> - <entry id="INTERLEAVING-720"><constant>INTERLEAVING_720</constant></entry> - <entry>Interleaving of 720 symbols.</entry> - </row> - </tbody> - </tgroup> -</table> - - </section> - <section id="DTV-LNA"> - <title><constant>DTV_LNA</constant></title> - <para>Low-noise amplifier.</para> - <para>Hardware might offer controllable LNA which can be set manually - using that parameter. Usually LNA could be found only from - terrestrial devices if at all.</para> - <para>Possible values: 0, 1, LNA_AUTO</para> - <para>0, LNA off</para> - <para>1, LNA on</para> - <para>use the special macro LNA_AUTO to set LNA auto</para> - </section> -</section> - - <section id="frontend-stat-properties"> - <title>Frontend statistics indicators</title> - <para>The values are returned via <constant>dtv_property.stat</constant>. - If the property is supported, <constant>dtv_property.stat.len</constant> is bigger than zero.</para> - <para>For most delivery systems, <constant>dtv_property.stat.len</constant> - will be 1 if the stats is supported, and the properties will - return a single value for each parameter.</para> - <para>It should be noted, however, that new OFDM delivery systems - like ISDB can use different modulation types for each group of - carriers. On such standards, up to 3 groups of statistics can be - provided, and <constant>dtv_property.stat.len</constant> is updated - to reflect the "global" metrics, plus one metric per each carrier - group (called "layer" on ISDB).</para> - <para>So, in order to be consistent with other delivery systems, the first - value at <link linkend="dtv-stats"><constant>dtv_property.stat.dtv_stats</constant></link> - array refers to the global metric. The other elements of the array - represent each layer, starting from layer A(index 1), - layer B (index 2) and so on.</para> - <para>The number of filled elements are stored at <constant>dtv_property.stat.len</constant>.</para> - <para>Each element of the <constant>dtv_property.stat.dtv_stats</constant> array consists on two elements:</para> - <itemizedlist mark='opencircle'> - <listitem><para><constant>svalue</constant> or <constant>uvalue</constant>, where - <constant>svalue</constant> is for signed values of the measure (dB measures) - and <constant>uvalue</constant> is for unsigned values (counters, relative scale)</para></listitem> - <listitem><para><constant>scale</constant> - Scale for the value. It can be:</para> - <itemizedlist mark='bullet' id="fecap-scale-params"> - <listitem id="FE-SCALE-NOT-AVAILABLE"><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - The parameter is supported by the frontend, but it was not possible to collect it (could be a transitory or permanent condition)</para></listitem> - <listitem id="FE-SCALE-DECIBEL"><para><constant>FE_SCALE_DECIBEL</constant> - parameter is a signed value, measured in 1/1000 dB</para></listitem> - <listitem id="FE-SCALE-RELATIVE"><para><constant>FE_SCALE_RELATIVE</constant> - parameter is a unsigned value, where 0 means 0% and 65535 means 100%.</para></listitem> - <listitem id="FE-SCALE-COUNTER"><para><constant>FE_SCALE_COUNTER</constant> - parameter is a unsigned value that counts the occurrence of an event, like bit error, block error, or lapsed time.</para></listitem> - </itemizedlist> - </listitem> - </itemizedlist> - <section id="DTV-STAT-SIGNAL-STRENGTH"> - <title><constant>DTV_STAT_SIGNAL_STRENGTH</constant></title> - <para>Indicates the signal strength level at the analog part of the tuner or of the demod.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_DECIBEL</constant> - signal strength is in 0.001 dBm units, power measured in miliwatts. This value is generally negative.</para></listitem> - <listitem><para><constant>FE_SCALE_RELATIVE</constant> - The frontend provides a 0% to 100% measurement for power (actually, 0 to 65535).</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-CNR"> - <title><constant>DTV_STAT_CNR</constant></title> - <para>Indicates the Signal to Noise ratio for the main carrier.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_DECIBEL</constant> - Signal/Noise ratio is in 0.001 dB units.</para></listitem> - <listitem><para><constant>FE_SCALE_RELATIVE</constant> - The frontend provides a 0% to 100% measurement for Signal/Noise (actually, 0 to 65535).</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-PRE-ERROR-BIT-COUNT"> - <title><constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant></title> - <para>Measures the number of bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code).</para> - <para>This measure is taken during the same interval as <constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant>.</para> - <para>In order to get the BER (Bit Error Rate) measurement, it should be divided by - <link linkend="DTV-STAT-PRE-TOTAL-BIT-COUNT"><constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant></link>.</para> - <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of error bits counted before the inner coding.</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-PRE-TOTAL-BIT-COUNT"> - <title><constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant></title> - <para>Measures the amount of bits received before the inner code block, during the same period as - <link linkend="DTV-STAT-PRE-ERROR-BIT-COUNT"><constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant></link> measurement was taken.</para> - <para>It should be noted that this measurement can be smaller than the total amount of bits on the transport stream, - as the frontend may need to manually restart the measurement, losing some data between each measurement interval.</para> - <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of bits counted while measuring - <link linkend="DTV-STAT-PRE-ERROR-BIT-COUNT"><constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant></link>.</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-POST-ERROR-BIT-COUNT"> - <title><constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant></title> - <para>Measures the number of bit errors after the forward error correction (FEC) done by inner code block (after Viterbi, LDPC or other inner code).</para> - <para>This measure is taken during the same interval as <constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant>.</para> - <para>In order to get the BER (Bit Error Rate) measurement, it should be divided by - <link linkend="DTV-STAT-POST-TOTAL-BIT-COUNT"><constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant></link>.</para> - <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of error bits counted after the inner coding.</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-POST-TOTAL-BIT-COUNT"> - <title><constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant></title> - <para>Measures the amount of bits received after the inner coding, during the same period as - <link linkend="DTV-STAT-POST-ERROR-BIT-COUNT"><constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant></link> measurement was taken.</para> - <para>It should be noted that this measurement can be smaller than the total amount of bits on the transport stream, - as the frontend may need to manually restart the measurement, losing some data between each measurement interval.</para> - <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of bits counted while measuring - <link linkend="DTV-STAT-POST-ERROR-BIT-COUNT"><constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant></link>.</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-ERROR-BLOCK-COUNT"> - <title><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></title> - <para>Measures the number of block errors after the outer forward error correction coding (after Reed-Solomon or other outer code).</para> - <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. - The frontend may reset it when a channel/transponder is tuned.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of error blocks counted after the outer coding.</para></listitem> - </itemizedlist> - </section> - <section id="DTV-STAT-TOTAL-BLOCK-COUNT"> - <title><constant>DTV-STAT_TOTAL_BLOCK_COUNT</constant></title> - <para>Measures the total number of blocks received during the same period as - <link linkend="DTV-STAT-ERROR-BLOCK-COUNT"><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></link> measurement was taken.</para> - <para>It can be used to calculate the PER indicator, by dividing - <link linkend="DTV-STAT-ERROR-BLOCK-COUNT"><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></link> - by <link linkend="DTV-STAT-TOTAL-BLOCK-COUNT"><constant>DTV-STAT-TOTAL-BLOCK-COUNT</constant></link>.</para> - <para>Possible scales for this metric are:</para> - <itemizedlist mark='bullet'> - <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> - <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of blocks counted while measuring - <link linkend="DTV-STAT-ERROR-BLOCK-COUNT"><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></link>.</para></listitem> - </itemizedlist> - </section> - </section> - - <section id="frontend-property-terrestrial-systems"> - <title>Properties used on terrestrial delivery systems</title> - <section id="dvbt-params"> - <title>DVB-T delivery system</title> - <para>The following parameters are valid for DVB-T:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CODE-RATE-HP"><constant>DTV_CODE_RATE_HP</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CODE-RATE-LP"><constant>DTV_CODE_RATE_LP</constant></link></para></listitem> - <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-HIERARCHY"><constant>DTV_HIERARCHY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="dvbt2-params"> - <title>DVB-T2 delivery system</title> - <para>DVB-T2 support is currently in the early stages - of development, so expect that this section maygrow and become - more detailed with time.</para> - <para>The following parameters are valid for DVB-T2:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CODE-RATE-HP"><constant>DTV_CODE_RATE_HP</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CODE-RATE-LP"><constant>DTV_CODE_RATE_LP</constant></link></para></listitem> - <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-HIERARCHY"><constant>DTV_HIERARCHY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-STREAM-ID"><constant>DTV_STREAM_ID</constant></link></para></listitem> - <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="isdbt"> - <title>ISDB-T delivery system</title> - <para>This ISDB-T/ISDB-Tsb API extension should reflect all information - needed to tune any ISDB-T/ISDB-Tsb hardware. Of course it is possible - that some very sophisticated devices won't need certain parameters to - tune.</para> - <para>The information given here should help application writers to know how - to handle ISDB-T and ISDB-Tsb hardware using the Linux DVB-API.</para> - <para>The details given here about ISDB-T and ISDB-Tsb are just enough to - basically show the dependencies between the needed parameter values, - but surely some information is left out. For more detailed information - see the following documents:</para> - <para>ARIB STD-B31 - "Transmission System for Digital Terrestrial - Television Broadcasting" and</para> - <para>ARIB TR-B14 - "Operational Guidelines for Digital Terrestrial - Television Broadcasting".</para> - <para>In order to understand the ISDB specific parameters, - one has to have some knowledge the channel structure in - ISDB-T and ISDB-Tsb. I.e. it has to be known to - the reader that an ISDB-T channel consists of 13 segments, - that it can have up to 3 layer sharing those segments, - and things like that.</para> - <para>The following parameters are valid for ISDB-T:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-ENABLED"><constant>DTV_ISDBT_LAYER_ENABLED</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-PARTIAL-RECEPTION"><constant>DTV_ISDBT_PARTIAL_RECEPTION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-SOUND-BROADCASTING"><constant>DTV_ISDBT_SOUND_BROADCASTING</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-SB-SUBCHANNEL-ID"><constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-SB-SEGMENT-IDX"><constant>DTV_ISDBT_SB_SEGMENT_IDX</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-SB-SEGMENT-COUNT"><constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-FEC"><constant>DTV_ISDBT_LAYERA_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-MODULATION"><constant>DTV_ISDBT_LAYERA_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT"><constant>DTV_ISDBT_LAYERA_SEGMENT_COUNT</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING"><constant>DTV_ISDBT_LAYERA_TIME_INTERLEAVING</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-FEC"><constant>DTV_ISDBT_LAYERB_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-MODULATION"><constant>DTV_ISDBT_LAYERB_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT"><constant>DTV_ISDBT_LAYERB_SEGMENT_COUNT</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING"><constant>DTV_ISDBT_LAYERB_TIME_INTERLEAVING</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-FEC"><constant>DTV_ISDBT_LAYERC_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-MODULATION"><constant>DTV_ISDBT_LAYERC_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT"><constant>DTV_ISDBT_LAYERC_SEGMENT_COUNT</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING"><constant>DTV_ISDBT_LAYERC_TIME_INTERLEAVING</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="atsc-params"> - <title>ATSC delivery system</title> - <para>The following parameters are valid for ATSC:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="atscmh-params"> - <title>ATSC-MH delivery system</title> - <para>The following parameters are valid for ATSC-MH:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-FIC-VER"><constant>DTV_ATSCMH_FIC_VER</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-PARADE-ID"><constant>DTV_ATSCMH_PARADE_ID</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-NOG"><constant>DTV_ATSCMH_NOG</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-TNOG"><constant>DTV_ATSCMH_TNOG</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-SGN"><constant>DTV_ATSCMH_SGN</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-PRC"><constant>DTV_ATSCMH_PRC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-RS-FRAME-MODE"><constant>DTV_ATSCMH_RS_FRAME_MODE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-RS-FRAME-ENSEMBLE"><constant>DTV_ATSCMH_RS_FRAME_ENSEMBLE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-RS-CODE-MODE-PRI"><constant>DTV_ATSCMH_RS_CODE_MODE_PRI</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-RS-CODE-MODE-SEC"><constant>DTV_ATSCMH_RS_CODE_MODE_SEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-SCCC-BLOCK-MODE"><constant>DTV_ATSCMH_SCCC_BLOCK_MODE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-A"><constant>DTV_ATSCMH_SCCC_CODE_MODE_A</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-B"><constant>DTV_ATSCMH_SCCC_CODE_MODE_B</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-C"><constant>DTV_ATSCMH_SCCC_CODE_MODE_C</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-D"><constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="dtmb-params"> - <title>DTMB delivery system</title> - <para>The following parameters are valid for DTMB:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INTERLEAVING"><constant>DTV_INTERLEAVING</constant></link></para></listitem> - <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - </section> - <section id="frontend-property-cable-systems"> - <title>Properties used on cable delivery systems</title> - <section id="dvbc-params"> - <title>DVB-C delivery system</title> - <para>The DVB-C Annex-A is the widely used cable standard. Transmission uses QAM modulation.</para> - <para>The DVB-C Annex-C is optimized for 6MHz, and is used in Japan. It supports a subset of the Annex A modulation types, and a roll-off of 0.13, instead of 0.15</para> - <para>The following parameters are valid for DVB-C Annex A/C:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="dvbc-annex-b-params"> - <title>DVB-C Annex B delivery system</title> - <para>The DVB-C Annex-B is only used on a few Countries like the United States.</para> - <para>The following parameters are valid for DVB-C Annex B:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - </section> - <section id="frontend-property-satellite-systems"> - <title>Properties used on satellite delivery systems</title> - <section id="dvbs-params"> - <title>DVB-S delivery system</title> - <para>The following parameters are valid for DVB-S:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-VOLTAGE"><constant>DTV_VOLTAGE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TONE"><constant>DTV_TONE</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - <para>Future implementations might add those two missing parameters:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-DISEQC-MASTER"><constant>DTV_DISEQC_MASTER</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DISEQC-SLAVE-REPLY"><constant>DTV_DISEQC_SLAVE_REPLY</constant></link></para></listitem> - </itemizedlist> - </section> - <section id="dvbs2-params"> - <title>DVB-S2 delivery system</title> - <para>In addition to all parameters valid for DVB-S, DVB-S2 supports the following parameters:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-PILOT"><constant>DTV_PILOT</constant></link></para></listitem> - <listitem><para><link linkend="DTV-ROLLOFF"><constant>DTV_ROLLOFF</constant></link></para></listitem> - <listitem><para><link linkend="DTV-STREAM-ID"><constant>DTV_STREAM_ID</constant></link></para></listitem> - </itemizedlist> - <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> - </section> - <section id="turbo-params"> - <title>Turbo code delivery system</title> - <para>In addition to all parameters valid for DVB-S, turbo code supports the following parameters:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> - </itemizedlist> - </section> - <section id="isdbs-params"> - <title>ISDB-S delivery system</title> - <para>The following parameters are valid for ISDB-S:</para> - <itemizedlist mark='opencircle'> - <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> - <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> - <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> - <listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> - <listitem><para><link linkend="DTV-VOLTAGE"><constant>DTV_VOLTAGE</constant></link></para></listitem> - <listitem><para><link linkend="DTV-STREAM-ID"><constant>DTV_STREAM_ID</constant></link></para></listitem> - </itemizedlist> - </section> - </section> -</section> diff --git a/Documentation/DocBook/media/dvb/dvbstb.pdf b/Documentation/DocBook/media/dvb/dvbstb.pdf Binary files differdeleted file mode 100644 index 0fa75d90c3eb..000000000000 --- a/Documentation/DocBook/media/dvb/dvbstb.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/dvb/examples.xml b/Documentation/DocBook/media/dvb/examples.xml deleted file mode 100644 index 837fb3b64b72..000000000000 --- a/Documentation/DocBook/media/dvb/examples.xml +++ /dev/null @@ -1,367 +0,0 @@ -<title>Examples</title> -<para>In this section we would like to present some examples for using the DVB API. -</para> -<para>NOTE: This section is out of date, and the code below won't even - compile. Please refer to the - <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink> - for updated/recommended examples. -</para> - -<section id="tuning"> -<title>Tuning</title> -<para>We will start with a generic tuning subroutine that uses the frontend and SEC, as well as -the demux devices. The example is given for QPSK tuners, but can easily be adjusted for -QAM. -</para> -<programlisting> - #include <sys/ioctl.h> - #include <stdio.h> - #include <stdint.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> - #include <time.h> - #include <unistd.h> - - #include <linux/dvb/dmx.h> - #include <linux/dvb/frontend.h> - #include <linux/dvb/sec.h> - #include <sys/poll.h> - - #define DMX "/dev/dvb/adapter0/demux1" - #define FRONT "/dev/dvb/adapter0/frontend1" - #define SEC "/dev/dvb/adapter0/sec1" - - /⋆ routine for checking if we have a signal and other status information⋆/ - int FEReadStatus(int fd, fe_status_t ⋆stat) - { - int ans; - - if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){ - perror("FE READ STATUS: "); - return -1; - } - - if (⋆stat & FE_HAS_POWER) - printf("FE HAS POWER\n"); - - if (⋆stat & FE_HAS_SIGNAL) - printf("FE HAS SIGNAL\n"); - - if (⋆stat & FE_SPECTRUM_INV) - printf("SPEKTRUM INV\n"); - - return 0; - } - - - /⋆ tune qpsk ⋆/ - /⋆ freq: frequency of transponder ⋆/ - /⋆ vpid, apid, tpid: PIDs of video, audio and teletext TS packets ⋆/ - /⋆ diseqc: DiSEqC address of the used LNB ⋆/ - /⋆ pol: Polarisation ⋆/ - /⋆ srate: Symbol Rate ⋆/ - /⋆ fec. FEC ⋆/ - /⋆ lnb_lof1: local frequency of lower LNB band ⋆/ - /⋆ lnb_lof2: local frequency of upper LNB band ⋆/ - /⋆ lnb_slof: switch frequency of LNB ⋆/ - - int set_qpsk_channel(int freq, int vpid, int apid, int tpid, - int diseqc, int pol, int srate, int fec, int lnb_lof1, - int lnb_lof2, int lnb_slof) - { - struct secCommand scmd; - struct secCmdSequence scmds; - struct dmx_pes_filter_params pesFilterParams; - FrontendParameters frp; - struct pollfd pfd[1]; - FrontendEvent event; - int demux1, demux2, demux3, front; - - frequency = (uint32_t) freq; - symbolrate = (uint32_t) srate; - - if((front = open(FRONT,O_RDWR)) < 0){ - perror("FRONTEND DEVICE: "); - return -1; - } - - if((sec = open(SEC,O_RDWR)) < 0){ - perror("SEC DEVICE: "); - return -1; - } - - if (demux1 < 0){ - if ((demux1=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (demux2 < 0){ - if ((demux2=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (demux3 < 0){ - if ((demux3=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (freq < lnb_slof) { - frp.Frequency = (freq - lnb_lof1); - scmds.continuousTone = SEC_TONE_OFF; - } else { - frp.Frequency = (freq - lnb_lof2); - scmds.continuousTone = SEC_TONE_ON; - } - frp.Inversion = INVERSION_AUTO; - if (pol) scmds.voltage = SEC_VOLTAGE_18; - else scmds.voltage = SEC_VOLTAGE_13; - - scmd.type=0; - scmd.u.diseqc.addr=0x10; - scmd.u.diseqc.cmd=0x38; - scmd.u.diseqc.numParams=1; - scmd.u.diseqc.params[0] = 0xF0 | ((diseqc ⋆ 4) & 0x0F) | - (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) | - (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0); - - scmds.miniCommand=SEC_MINI_NONE; - scmds.numCommands=1; - scmds.commands=&scmd; - if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){ - perror("SEC SEND: "); - return -1; - } - - if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){ - perror("SEC SEND: "); - return -1; - } - - frp.u.qpsk.SymbolRate = srate; - frp.u.qpsk.FEC_inner = fec; - - if (ioctl(front, FE_SET_FRONTEND, &frp) < 0){ - perror("QPSK TUNE: "); - return -1; - } - - pfd[0].fd = front; - pfd[0].events = POLLIN; - - if (poll(pfd,1,3000)){ - if (pfd[0].revents & POLLIN){ - printf("Getting QPSK event\n"); - if ( ioctl(front, FE_GET_EVENT, &event) - - == -EOVERFLOW){ - perror("qpsk get event"); - return -1; - } - printf("Received "); - switch(event.type){ - case FE_UNEXPECTED_EV: - printf("unexpected event\n"); - return -1; - case FE_FAILURE_EV: - printf("failure event\n"); - return -1; - - case FE_COMPLETION_EV: - printf("completion event\n"); - } - } - } - - - pesFilterParams.pid = vpid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_DECODER; - pesFilterParams.pes_type = DMX_PES_VIDEO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("set_vpid"); - return -1; - } - - pesFilterParams.pid = apid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_DECODER; - pesFilterParams.pes_type = DMX_PES_AUDIO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("set_apid"); - return -1; - } - - pesFilterParams.pid = tpid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_DECODER; - pesFilterParams.pes_type = DMX_PES_TELETEXT; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux3, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("set_tpid"); - return -1; - } - - return has_signal(fds); - } - -</programlisting> -<para>The program assumes that you are using a universal LNB and a standard DiSEqC -switch with up to 4 addresses. Of course, you could build in some more checking if -tuning was successful and maybe try to repeat the tuning process. Depending on the -external hardware, i.e. LNB and DiSEqC switch, and weather conditions this may be -necessary. -</para> -</section> - -<section id="the_dvr_device"> -<title>The DVR device</title> -<para>The following program code shows how to use the DVR device for recording. -</para> -<programlisting> - #include <sys/ioctl.h> - #include <stdio.h> - #include <stdint.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> - #include <time.h> - #include <unistd.h> - - #include <linux/dvb/dmx.h> - #include <linux/dvb/video.h> - #include <sys/poll.h> - #define DVR "/dev/dvb/adapter0/dvr1" - #define AUDIO "/dev/dvb/adapter0/audio1" - #define VIDEO "/dev/dvb/adapter0/video1" - - #define BUFFY (188⋆20) - #define MAX_LENGTH (1024⋆1024⋆5) /⋆ record 5MB ⋆/ - - - /⋆ switch the demuxes to recording, assuming the transponder is tuned ⋆/ - - /⋆ demux1, demux2: file descriptor of video and audio filters ⋆/ - /⋆ vpid, apid: PIDs of video and audio channels ⋆/ - - int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid) - { - struct dmx_pes_filter_params pesFilterParams; - - if (demux1 < 0){ - if ((demux1=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - if (demux2 < 0){ - if ((demux2=open(DMX, O_RDWR|O_NONBLOCK)) - < 0){ - perror("DEMUX DEVICE: "); - return -1; - } - } - - pesFilterParams.pid = vpid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_TS_TAP; - pesFilterParams.pes_type = DMX_PES_VIDEO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("DEMUX DEVICE"); - return -1; - } - pesFilterParams.pid = apid; - pesFilterParams.input = DMX_IN_FRONTEND; - pesFilterParams.output = DMX_OUT_TS_TAP; - pesFilterParams.pes_type = DMX_PES_AUDIO; - pesFilterParams.flags = DMX_IMMEDIATE_START; - if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ - perror("DEMUX DEVICE"); - return -1; - } - return 0; - } - - /⋆ start recording MAX_LENGTH , assuming the transponder is tuned ⋆/ - - /⋆ demux1, demux2: file descriptor of video and audio filters ⋆/ - /⋆ vpid, apid: PIDs of video and audio channels ⋆/ - int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid) - { - int i; - int len; - int written; - uint8_t buf[BUFFY]; - uint64_t length; - struct pollfd pfd[1]; - int dvr, dvr_out; - - /⋆ open dvr device ⋆/ - if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) < 0){ - perror("DVR DEVICE"); - return -1; - } - - /⋆ switch video and audio demuxes to dvr ⋆/ - printf ("Switching dvr on\n"); - i = switch_to_record(demux1, demux2, vpid, apid); - printf("finished: "); - - printf("Recording %2.0f MB of test file in TS format\n", - MAX_LENGTH/(1024.0⋆1024.0)); - length = 0; - - /⋆ open output file ⋆/ - if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT - |O_TRUNC, S_IRUSR|S_IWUSR - |S_IRGRP|S_IWGRP|S_IROTH| - S_IWOTH)) < 0){ - perror("Can't open file for dvr test"); - return -1; - } - - pfd[0].fd = dvr; - pfd[0].events = POLLIN; - - /⋆ poll for dvr data and write to file ⋆/ - while (length < MAX_LENGTH ) { - if (poll(pfd,1,1)){ - if (pfd[0].revents & POLLIN){ - len = read(dvr, buf, BUFFY); - if (len < 0){ - perror("recording"); - return -1; - } - if (len > 0){ - written = 0; - while (written < len) - written += - write (dvr_out, - buf, len); - length += len; - printf("written %2.0f MB\r", - length/1024./1024.); - } - } - } - } - return 0; - } - -</programlisting> - -</section> diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml b/Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml deleted file mode 100644 index 4595dbfff208..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-recv-slave-reply.xml +++ /dev/null @@ -1,78 +0,0 @@ -<refentry id="FE_DISEQC_RECV_SLAVE_REPLY"> - <refmeta> - <refentrytitle>ioctl FE_DISEQC_RECV_SLAVE_REPLY</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_DISEQC_RECV_SLAVE_REPLY</refname> - <refpurpose>Receives reply from a DiSEqC 2.0 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 dvb_diseqc_slave_reply *<parameter>argp</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_DISEQC_RECV_SLAVE_REPLY</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para>pointer to &dvb-diseqc-slave-reply;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>Receives reply from a DiSEqC 2.0 command.</para> -&return-value-dvb; - -<table pgwide="1" frame="none" id="dvb-diseqc-slave-reply"> - <title>struct <structname>dvb_diseqc_slave_reply</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>uint8_t</entry> - <entry>msg[4]</entry> - <entry>DiSEqC message (framing, data[3])</entry> - </row><row> - <entry>uint8_t</entry> - <entry>msg_len</entry> - <entry>Length of the DiSEqC message. Valid values are 0 to 4, - where 0 means no msg</entry> - </row><row> - <entry>int</entry> - <entry>timeout</entry> - <entry>Return from ioctl after timeout ms with errorcode when no - message was received</entry> - </row> - </tbody> - </tgroup> -</table> - -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml b/Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml deleted file mode 100644 index c104df77ecd0..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-reset-overload.xml +++ /dev/null @@ -1,51 +0,0 @@ -<refentry id="FE_DISEQC_RESET_OVERLOAD"> - <refmeta> - <refentrytitle>ioctl FE_DISEQC_RESET_OVERLOAD</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_DISEQC_RESET_OVERLOAD</refname> - <refpurpose>Restores the power to the antenna subsystem, if it was powered - off due to power overload.</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <funcsynopsis> - <funcprototype> - <funcdef>int <function>ioctl</function></funcdef> - <paramdef>int <parameter>fd</parameter></paramdef> - <paramdef>int <parameter>request</parameter></paramdef> - <paramdef>NULL</paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_DISEQC_RESET_OVERLOAD</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>If the bus has been automatically powered off due to power overload, this ioctl - call restores the power to the bus. The call requires read/write access to the - device. This call has no effect if the device is manually powered off. Not all - DVB adapters support this ioctl.</para> -&return-value-dvb; -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml b/Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml deleted file mode 100644 index 9f6a68f32de3..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-send-burst.xml +++ /dev/null @@ -1,89 +0,0 @@ -<refentry id="FE_DISEQC_SEND_BURST"> - <refmeta> - <refentrytitle>ioctl FE_DISEQC_SEND_BURST</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_DISEQC_SEND_BURST</refname> - <refpurpose>Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection.</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 fe_sec_mini_cmd *<parameter>tone</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_DISEQC_SEND_BURST</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>tone</parameter></term> - <listitem> - <para>pointer to &fe-sec-mini-cmd;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - -<para>This ioctl is used to set the generation of a 22kHz tone burst for mini - DiSEqC satellite - selection for 2x1 switches. - This call requires read/write permissions.</para> -<para>It provides support for what's specified at - <ulink url="http://www.eutelsat.com/files/contributed/satellites/pdf/Diseqc/associated%20docs/simple_tone_burst_detec.pdf">Digital Satellite Equipment Control - (DiSEqC) - Simple "ToneBurst" Detection Circuit specification.</ulink> - </para> -&return-value-dvb; -</refsect1> - -<refsect1 id="fe-sec-mini-cmd-t"> -<title>enum fe_sec_mini_cmd</title> - -<table pgwide="1" frame="none" id="fe-sec-mini-cmd"> - <title>enum fe_sec_mini_cmd</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="SEC-MINI-A"><constant>SEC_MINI_A</constant></entry> - <entry align="char">Sends a mini-DiSEqC 22kHz '0' Tone Burst to - select satellite-A</entry> - </row><row> - <entry align="char" id="SEC-MINI-B"><constant>SEC_MINI_B</constant></entry> - <entry align="char">Sends a mini-DiSEqC 22kHz '1' Data Burst to - select satellite-B</entry> - </row> - </tbody> - </tgroup> -</table> -</refsect1> - -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml b/Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml deleted file mode 100644 index 38cf313e121b..000000000000 --- a/Documentation/DocBook/media/dvb/fe-diseqc-send-master-cmd.xml +++ /dev/null @@ -1,72 +0,0 @@ -<refentry id="FE_DISEQC_SEND_MASTER_CMD"> - <refmeta> - <refentrytitle>ioctl FE_DISEQC_SEND_MASTER_CMD</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_DISEQC_SEND_MASTER_CMD</refname> - <refpurpose>Sends a DiSEqC 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 dvb_diseqc_master_cmd *<parameter>argp</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_DISEQC_SEND_MASTER_CMD</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para>pointer to &dvb-diseqc-master-cmd;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>Sends a DiSEqC command to the antenna subsystem.</para> -&return-value-dvb; - -<table pgwide="1" frame="none" id="dvb-diseqc-master-cmd"> - <title>struct <structname>dvb_diseqc_master_cmd</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>uint8_t</entry> - <entry>msg[6]</entry> - <entry>DiSEqC message (framing, address, command, data[3])</entry> - </row><row> - <entry>uint8_t</entry> - <entry>msg_len</entry> - <entry>Length of the DiSEqC message. Valid values are 3 to 6</entry> - </row> - </tbody> - </tgroup> -</table> - -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml b/Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml deleted file mode 100644 index c11890b184ad..000000000000 --- a/Documentation/DocBook/media/dvb/fe-enable-high-lnb-voltage.xml +++ /dev/null @@ -1,61 +0,0 @@ -<refentry id="FE_ENABLE_HIGH_LNB_VOLTAGE"> - <refmeta> - <refentrytitle>ioctl FE_ENABLE_HIGH_LNB_VOLTAGE</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_ENABLE_HIGH_LNB_VOLTAGE</refname> - <refpurpose>Select output DC level between normal LNBf voltages or higher - LNBf voltages.</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <funcsynopsis> - <funcprototype> - <funcdef>int <function>ioctl</function></funcdef> - <paramdef>int <parameter>fd</parameter></paramdef> - <paramdef>int <parameter>request</parameter></paramdef> - <paramdef>unsigned int <parameter>high</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_ENABLE_HIGH_LNB_VOLTAGE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>high</parameter></term> - <listitem> - <para>Valid flags:</para> - <itemizedlist> - <listitem><para>0 - normal 13V and 18V.</para></listitem> - <listitem><para>>0 - enables slightly higher voltages instead of - 13/18V, in order to compensate for long antenna cables.</para></listitem> - </itemizedlist> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>Select output DC level between normal LNBf voltages or higher - LNBf voltages between 0 (normal) or a value grater than 0 for higher - voltages.</para> -&return-value-dvb; -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-get-info.xml b/Documentation/DocBook/media/dvb/fe-get-info.xml deleted file mode 100644 index ed0eeb29dd65..000000000000 --- a/Documentation/DocBook/media/dvb/fe-get-info.xml +++ /dev/null @@ -1,266 +0,0 @@ -<refentry id="FE_GET_INFO"> - <refmeta> - <refentrytitle>ioctl FE_GET_INFO</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_GET_INFO</refname> - <refpurpose>Query DVB frontend capabilities and returns information about - the front-end. This call only requires read-only access to the device</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 dvb_frontend_info *<parameter>argp</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_GET_INFO</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para>pointer to struct &dvb-frontend-info;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>All DVB frontend devices support the -<constant>FE_GET_INFO</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 dvb_frontend_info which is filled by the driver. When the -driver is not compatible with this specification the ioctl returns an error. -</para> -&return-value-dvb; - - <table pgwide="1" frame="none" id="dvb-frontend-info"> - <title>struct <structname>dvb_frontend_info</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>char</entry> - <entry>name[128]</entry> - <entry>Name of the frontend</entry> - </row><row> - <entry>fe_type_t</entry> - <entry>type</entry> - <entry><emphasis role="bold">DEPRECATED</emphasis>. DVBv3 type. Should not be used on modern programs, as a - frontend may have more than one type. So, the DVBv5 API should - be used instead to enumerate and select the frontend type.</entry> - </row><row> - <entry>uint32_t</entry> - <entry>frequency_min</entry> - <entry>Minimal frequency supported by the frontend</entry> - </row><row> - <entry>uint32_t</entry> - <entry>frequency_max</entry> - <entry>Maximal frequency supported by the frontend</entry> - </row><row> - <entry>uint32_t</entry> - <entry>frequency_stepsize</entry> - <entry>Frequency step - all frequencies are multiple of this value</entry> - </row><row> - <entry>uint32_t</entry> - <entry>frequency_tolerance</entry> - <entry>Tolerance of the frequency</entry> - </row><row> - <entry>uint32_t</entry> - <entry>symbol_rate_min</entry> - <entry>Minimal symbol rate (for Cable/Satellite systems), in bauds</entry> - </row><row> - <entry>uint32_t</entry> - <entry>symbol_rate_max</entry> - <entry>Maximal symbol rate (for Cable/Satellite systems), in bauds</entry> - </row><row> - <entry>uint32_t</entry> - <entry>symbol_rate_tolerance</entry> - <entry>Maximal symbol rate tolerance, in ppm</entry> - </row><row> - <entry>uint32_t</entry> - <entry>notifier_delay</entry> - <entry><emphasis role="bold">DEPRECATED</emphasis>. Not used by any driver.</entry> - </row><row> - <entry>&fe-caps;</entry> - <entry>caps</entry> - <entry>Capabilities supported by the frontend</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>NOTE: The frequencies are specified in Hz for Terrestrial and Cable - systems. They're specified in kHz for Satellite systems</para> - </refsect1> - -<refsect1 id="fe-caps-t"> -<title>frontend capabilities</title> - -<para>Capabilities describe what a frontend can do. Some capabilities are - supported only on some specific frontend types.</para> - -<table pgwide="1" frame="none" id="fe-caps"> - <title>enum fe_caps</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="FE-IS-STUPID"><constant>FE_IS_STUPID</constant></entry> - <entry>There's something wrong at the frontend, and it can't - report its capabilities</entry> - </row> - <row> - <entry id="FE-CAN-INVERSION-AUTO"><constant>FE_CAN_INVERSION_AUTO</constant></entry> - <entry>The frontend is capable of auto-detecting inversion</entry> - </row> - <row> - <entry id="FE-CAN-FEC-1-2"><constant>FE_CAN_FEC_1_2</constant></entry> - <entry>The frontend supports FEC 1/2</entry> - </row> - <row> - <entry id="FE-CAN-FEC-2-3"><constant>FE_CAN_FEC_2_3</constant></entry> - <entry>The frontend supports FEC 2/3</entry> - </row> - <row> - <entry id="FE-CAN-FEC-3-4"><constant>FE_CAN_FEC_3_4</constant></entry> - <entry>The frontend supports FEC 3/4</entry> - </row> - <row> - <entry id="FE-CAN-FEC-4-5"><constant>FE_CAN_FEC_4_5</constant></entry> - <entry>The frontend supports FEC 4/5</entry> - </row> - <row> - <entry id="FE-CAN-FEC-5-6"><constant>FE_CAN_FEC_5_6</constant></entry> - <entry>The frontend supports FEC 5/6</entry> - </row> - <row> - <entry id="FE-CAN-FEC-6-7"><constant>FE_CAN_FEC_6_7</constant></entry> - <entry>The frontend supports FEC 6/7</entry> - </row> - <row> - <entry id="FE-CAN-FEC-7-8"><constant>FE_CAN_FEC_7_8</constant></entry> - <entry>The frontend supports FEC 7/8</entry> - </row> - <row> - <entry id="FE-CAN-FEC-8-9"><constant>FE_CAN_FEC_8_9</constant></entry> - <entry>The frontend supports FEC 8/9</entry> - </row> - <row> - <entry id="FE-CAN-FEC-AUTO"><constant>FE_CAN_FEC_AUTO</constant></entry> - <entry>The frontend can autodetect FEC.</entry> - </row> - <row> - <entry id="FE-CAN-QPSK"><constant>FE_CAN_QPSK</constant></entry> - <entry>The frontend supports QPSK modulation</entry> - </row> - <row> - <entry id="FE-CAN-QAM-16"><constant>FE_CAN_QAM_16</constant></entry> - <entry>The frontend supports 16-QAM modulation</entry> - </row> - <row> - <entry id="FE-CAN-QAM-32"><constant>FE_CAN_QAM_32</constant></entry> - <entry>The frontend supports 32-QAM modulation</entry> - </row> - <row> - <entry id="FE-CAN-QAM-64"><constant>FE_CAN_QAM_64</constant></entry> - <entry>The frontend supports 64-QAM modulation</entry> - </row> - <row> - <entry id="FE-CAN-QAM-128"><constant>FE_CAN_QAM_128</constant></entry> - <entry>The frontend supports 128-QAM modulation</entry> - </row> - <row> - <entry id="FE-CAN-QAM-256"><constant>FE_CAN_QAM_256</constant></entry> - <entry>The frontend supports 256-QAM modulation</entry> - </row> - <row> - <entry id="FE-CAN-QAM-AUTO"><constant>FE_CAN_QAM_AUTO</constant></entry> - <entry>The frontend can autodetect modulation</entry> - </row> - <row> - <entry id="FE-CAN-TRANSMISSION-MODE-AUTO"><constant>FE_CAN_TRANSMISSION_MODE_AUTO</constant></entry> - <entry>The frontend can autodetect the transmission mode</entry> - </row> - <row> - <entry id="FE-CAN-BANDWIDTH-AUTO"><constant>FE_CAN_BANDWIDTH_AUTO</constant></entry> - <entry>The frontend can autodetect the bandwidth</entry> - </row> - <row> - <entry id="FE-CAN-GUARD-INTERVAL-AUTO"><constant>FE_CAN_GUARD_INTERVAL_AUTO</constant></entry> - <entry>The frontend can autodetect the guard interval</entry> - </row> - <row> - <entry id="FE-CAN-HIERARCHY-AUTO"><constant>FE_CAN_HIERARCHY_AUTO</constant></entry> - <entry>The frontend can autodetect hierarch</entry> - </row> - <row> - <entry id="FE-CAN-8VSB"><constant>FE_CAN_8VSB</constant></entry> - <entry>The frontend supports 8-VSB modulation</entry> - </row> - <row> - <entry id="FE-CAN-16VSB"><constant>FE_CAN_16VSB</constant></entry> - <entry>The frontend supports 16-VSB modulation</entry> - </row> - <row> - <entry id="FE-HAS-EXTENDED-CAPS"><constant>FE_HAS_EXTENDED_CAPS</constant></entry> - <entry>Currently, unused</entry> - </row> - <row> - <entry id="FE-CAN-MULTISTREAM"><constant>FE_CAN_MULTISTREAM</constant></entry> - <entry>The frontend supports multistream filtering</entry> - </row> - <row> - <entry id="FE-CAN-TURBO-FEC"><constant>FE_CAN_TURBO_FEC</constant></entry> - <entry>The frontend supports turbo FEC modulation</entry> - </row> - <row> - <entry id="FE-CAN-2G-MODULATION"><constant>FE_CAN_2G_MODULATION</constant></entry> - <entry>The frontend supports "2nd generation modulation" (DVB-S2/T2)></entry> - </row> - <row> - <entry id="FE-NEEDS-BENDING"><constant>FE_NEEDS_BENDING</constant></entry> - <entry>Not supported anymore, don't use it</entry> - </row> - <row> - <entry id="FE-CAN-RECOVER"><constant>FE_CAN_RECOVER</constant></entry> - <entry>The frontend can recover from a cable unplug automatically</entry> - </row> - <row> - <entry id="FE-CAN-MUTE-TS"><constant>FE_CAN_MUTE_TS</constant></entry> - <entry>The frontend can stop spurious TS data output</entry> - </row> - </tbody> - </tgroup> -</table> -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-get-property.xml b/Documentation/DocBook/media/dvb/fe-get-property.xml deleted file mode 100644 index 53a170ed3bd1..000000000000 --- a/Documentation/DocBook/media/dvb/fe-get-property.xml +++ /dev/null @@ -1,81 +0,0 @@ -<refentry id="FE_GET_PROPERTY"> - <refmeta> - <refentrytitle>ioctl FE_SET_PROPERTY, FE_GET_PROPERTY</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_SET_PROPERTY</refname> - <refname>FE_GET_PROPERTY</refname> - <refpurpose>FE_SET_PROPERTY sets one or more frontend properties. - FE_GET_PROPERTY returns one or more frontend 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 dtv_properties *<parameter>argp</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_PROPERTY, FE_GET_PROPERTY</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para>pointer to &dtv-properties;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>All DVB frontend devices support the -<constant>FE_SET_PROPERTY</constant> and <constant>FE_GET_PROPERTY</constant> -ioctls. The supported properties and statistics depends on the delivery system -and on the device:</para> -<itemizedlist> -<listitem> - <para><constant>FE_SET_PROPERTY:</constant></para> -<itemizedlist> -<listitem><para>This ioctl is used to set one or more - frontend properties.</para></listitem> -<listitem><para>This is the basic command to request the frontend to tune into some - frequency and to start decoding the digital TV signal.</para></listitem> -<listitem><para>This call requires read/write access to the device.</para></listitem> -<listitem><para>At return, the values are updated to reflect the - actual parameters used.</para></listitem> -</itemizedlist> -</listitem> -<listitem> - <para><constant>FE_GET_PROPERTY:</constant></para> -<itemizedlist> -<listitem><para>This ioctl is used to get properties and -statistics from the frontend.</para></listitem> -<listitem><para>No properties are changed, and statistics aren't reset.</para></listitem> -<listitem><para>This call only requires read-only access to the device.</para></listitem> -</itemizedlist> -</listitem> -</itemizedlist> -&return-value-dvb; -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-read-status.xml b/Documentation/DocBook/media/dvb/fe-read-status.xml deleted file mode 100644 index bc0dc2a55f19..000000000000 --- a/Documentation/DocBook/media/dvb/fe-read-status.xml +++ /dev/null @@ -1,107 +0,0 @@ -<refentry id="FE_READ_STATUS"> - <refmeta> - <refentrytitle>ioctl FE_READ_STATUS</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_READ_STATUS</refname> - <refpurpose>Returns status information about the front-end. This call only - requires read-only access to the device</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <funcsynopsis> - <funcprototype> - <funcdef>int <function>ioctl</function></funcdef> - <paramdef>int <parameter>fd</parameter></paramdef> - <paramdef>int <parameter>request</parameter></paramdef> - <paramdef>unsigned int *<parameter>status</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_READ_STATUS</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>status</parameter></term> - <listitem> - <para>pointer to a bitmask integer filled with the values defined by - &fe-status;.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>All DVB frontend devices support the -<constant>FE_READ_STATUS</constant> ioctl. It is used to check about the -locking status of the frontend after being tuned. The ioctl takes a -pointer to an integer where the status will be written. -</para> -<para>NOTE: the size of status is actually sizeof(enum fe_status), with varies - according with the architecture. This needs to be fixed in the future.</para> -&return-value-dvb; -</refsect1> - -<refsect1 id="fe-status-t"> -<title>int fe_status</title> - -<para>The fe_status parameter is used to indicate the current state - and/or state changes of the frontend hardware. It is produced using - the &fe-status; values on a bitmask</para> - -<table pgwide="1" frame="none" id="fe-status"> - <title>enum fe_status</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="FE-HAS-SIGNAL"><constant>FE_HAS_SIGNAL</constant></entry> - <entry align="char">The frontend has found something above the noise level</entry> - </row><row> - <entry align="char" id="FE-HAS-CARRIER"><constant>FE_HAS_CARRIER</constant></entry> - <entry align="char">The frontend has found a DVB signal</entry> - </row><row> - <entry align="char" id="FE-HAS-VITERBI"><constant>FE_HAS_VITERBI</constant></entry> - <entry align="char">The frontend FEC inner coding (Viterbi, LDPC or other inner code) is stable</entry> - </row><row> - <entry align="char" id="FE-HAS-SYNC"><constant>FE_HAS_SYNC</constant></entry> - <entry align="char">Synchronization bytes was found</entry> - </row><row> - <entry align="char" id="FE-HAS-LOCK"><constant>FE_HAS_LOCK</constant></entry> - <entry align="char">The DVB were locked and everything is working</entry> - </row><row> - <entry align="char" id="FE-TIMEDOUT"><constant>FE_TIMEDOUT</constant></entry> - <entry align="char">no lock within the last about 2 seconds</entry> - </row><row> - <entry align="char" id="FE-REINIT"><constant>FE_REINIT</constant></entry> - <entry align="char">The frontend was reinitialized, application is - recommended to reset DiSEqC, tone and parameters</entry> - </row> - </tbody> - </tgroup> -</table> -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml b/Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml deleted file mode 100644 index 99fa8a015c7a..000000000000 --- a/Documentation/DocBook/media/dvb/fe-set-frontend-tune-mode.xml +++ /dev/null @@ -1,64 +0,0 @@ -<refentry id="FE_SET_FRONTEND_TUNE_MODE"> - <refmeta> - <refentrytitle>ioctl FE_SET_FRONTEND_TUNE_MODE</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_SET_FRONTEND_TUNE_MODE</refname> - <refpurpose>Allow setting tuner mode flags to the frontend.</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <funcsynopsis> - <funcprototype> - <funcdef>int <function>ioctl</function></funcdef> - <paramdef>int <parameter>fd</parameter></paramdef> - <paramdef>int <parameter>request</parameter></paramdef> - <paramdef>unsigned int <parameter>flags</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_FRONTEND_TUNE_MODE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>flags</parameter></term> - <listitem> - <para>Valid flags:</para> - <itemizedlist> - <listitem><para>0 - normal tune mode</para></listitem> - <listitem><para>FE_TUNE_MODE_ONESHOT - When set, this flag will - disable any zigzagging or other "normal" tuning behaviour. - Additionally, there will be no automatic monitoring of the - lock status, and hence no frontend events will be - generated. If a frontend device is closed, this flag will - be automatically turned off when the device is reopened - read-write.</para></listitem> - </itemizedlist> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para>Allow setting tuner mode flags to the frontend, between 0 (normal) - or FE_TUNE_MODE_ONESHOT mode</para> -&return-value-dvb; -</refsect1> -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-set-tone.xml b/Documentation/DocBook/media/dvb/fe-set-tone.xml deleted file mode 100644 index 62d44e4ccc39..000000000000 --- a/Documentation/DocBook/media/dvb/fe-set-tone.xml +++ /dev/null @@ -1,91 +0,0 @@ -<refentry id="FE_SET_TONE"> - <refmeta> - <refentrytitle>ioctl FE_SET_TONE</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_SET_TONE</refname> - <refpurpose>Sets/resets the generation of the continuous 22kHz tone.</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 fe_sec_tone_mode *<parameter>tone</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_TONE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>tone</parameter></term> - <listitem> - <para>pointer to &fe-sec-tone-mode;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - -<para>This ioctl is used to set the generation of the continuous 22kHz tone. - This call requires read/write permissions.</para> -<para>Usually, satellite antenna subsystems require that the digital TV - device to send a 22kHz tone in order to select between high/low band on - some dual-band LNBf. It is also used to send signals to DiSEqC equipment, - but this is done using the DiSEqC ioctls.</para> -<para>NOTE: if more than one device is connected to the same antenna, - setting a tone may interfere on other devices, as they may lose - the capability of selecting the band. So, it is recommended that - applications would change to SEC_TONE_OFF when the device is not used.</para> - -&return-value-dvb; -</refsect1> - -<refsect1 id="fe-sec-tone-mode-t"> -<title>enum fe_sec_tone_mode</title> - -<table pgwide="1" frame="none" id="fe-sec-tone-mode"> - <title>enum fe_sec_tone_mode</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char" id="SEC-TONE-ON"><constant>SEC_TONE_ON</constant></entry> - <entry align="char">Sends a 22kHz tone burst to the antenna</entry> - </row><row> - <entry align="char" id="SEC-TONE-OFF"><constant>SEC_TONE_OFF</constant></entry> - <entry align="char">Don't send a 22kHz tone to the antenna - (except if the FE_DISEQC_* ioctls are called)</entry> - </row> - </tbody> - </tgroup> -</table> -</refsect1> - -</refentry> diff --git a/Documentation/DocBook/media/dvb/fe-set-voltage.xml b/Documentation/DocBook/media/dvb/fe-set-voltage.xml deleted file mode 100644 index c89a6f79b5af..000000000000 --- a/Documentation/DocBook/media/dvb/fe-set-voltage.xml +++ /dev/null @@ -1,69 +0,0 @@ -<refentry id="FE_SET_VOLTAGE"> - <refmeta> - <refentrytitle>ioctl FE_SET_VOLTAGE</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>FE_SET_VOLTAGE</refname> - <refpurpose>Allow setting the DC level sent to the antenna subsystem.</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 fe_sec_voltage *<parameter>voltage</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_VOLTAGE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>voltage</parameter></term> - <listitem> - <para>pointer to &fe-sec-voltage;</para> - <para>Valid values are described at &fe-sec-voltage;.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - -<para>This ioctl allows to set the DC voltage level sent through the antenna - cable to 13V, 18V or off.</para> -<para>Usually, a satellite antenna subsystems require that the digital TV - device to send a DC voltage to feed power to the LNBf. Depending on the - LNBf type, the polarization or the intermediate frequency (IF) of the LNBf - can controlled by the voltage level. Other devices (for example, the ones - that implement DISEqC and multipoint LNBf's don't need to control the - voltage level, provided that either 13V or 18V is sent to power up the - LNBf.</para> -<para>NOTE: if more than one device is connected to the same antenna, - setting a voltage level may interfere on other devices, as they may lose - the capability of setting polarization or IF. So, on those - cases, setting the voltage to SEC_VOLTAGE_OFF while the device is not is - used is recommended.</para> - -&return-value-dvb; -</refsect1> - -</refentry> diff --git a/Documentation/DocBook/media/dvb/frontend.xml b/Documentation/DocBook/media/dvb/frontend.xml deleted file mode 100644 index 01210b33c130..000000000000 --- a/Documentation/DocBook/media/dvb/frontend.xml +++ /dev/null @@ -1,269 +0,0 @@ -<title>DVB Frontend API</title> - -<para>The DVB frontend API was designed to support three types of delivery systems:</para> -<itemizedlist> - <listitem><para>Terrestrial systems: DVB-T, DVB-T2, ATSC, ATSC M/H, ISDB-T, DVB-H, DTMB, CMMB</para></listitem> - <listitem><para>Cable systems: DVB-C Annex A/C, ClearQAM (DVB-C Annex B), ISDB-C</para></listitem> - <listitem><para>Satellite systems: DVB-S, DVB-S2, DVB Turbo, ISDB-S, DSS</para></listitem> -</itemizedlist> -<para>The DVB frontend controls several sub-devices including:</para> -<itemizedlist> - <listitem><para>Tuner</para></listitem> - <listitem><para>Digital TV demodulator</para></listitem> - <listitem><para>Low noise amplifier (LNA)</para></listitem> - <listitem><para>Satellite Equipment Control (SEC) hardware (only for Satellite).</para></listitem> -</itemizedlist> -<para>The frontend can be accessed through - <constant>/dev/dvb/adapter?/frontend?</constant>. Data types and - ioctl definitions can be accessed by including - <constant>linux/dvb/frontend.h</constant> in your application. -</para> - -<para>NOTE: Transmission via the internet (DVB-IP) - is not yet handled by this API but a future extension is possible.</para> -<para>On Satellite systems, the API support for the Satellite Equipment Control - (SEC) allows to power control and to send/receive signals to control the - antenna subsystem, selecting the polarization and choosing the Intermediate - Frequency IF) of the Low Noise Block Converter Feed Horn (LNBf). It - supports the DiSEqC and V-SEC protocols. The DiSEqC (digital SEC) -specification is available at -<ulink url="http://www.eutelsat.com/satellites/4_5_5.html">Eutelsat</ulink>.</para> - -<section id="query-dvb-frontend-info"> -<title>Querying frontend information</title> - -<para>Usually, the first thing to do when the frontend is opened is to - check the frontend capabilities. This is done using <link linkend="FE_GET_INFO">FE_GET_INFO</link>. This ioctl will enumerate - the DVB API version and other characteristics about the frontend, and - can be opened either in read only or read/write mode.</para> -</section> - -<section id="dvb-fe-read-status"> -<title>Querying frontend status and statistics</title> - -<para>Once <link linkend="FE_GET_PROPERTY"><constant>FE_SET_PROPERTY</constant></link> - is called, the frontend will run a kernel thread that will periodically - check for the tuner lock status and provide statistics about the quality - of the signal.</para> -<para>The information about the frontend tuner locking status can be queried - using <link linkend="FE_READ_STATUS">FE_READ_STATUS</link>.</para> -<para>Signal statistics are provided via <link linkend="FE_GET_PROPERTY"><constant>FE_GET_PROPERTY</constant></link>. - Please note that several statistics require the demodulator to be fully - locked (e. g. with FE_HAS_LOCK bit set). See - <link linkend="frontend-stat-properties">Frontend statistics indicators</link> - for more details.</para> -</section> - -&sub-dvbproperty; - -<section id="frontend_fcalls"> -<title>Frontend Function Calls</title> - -<refentry id="frontend_f_open"> - <refmeta> - <refentrytitle>DVB frontend open()</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>fe-open</refname> - <refpurpose>Open a frontend 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 can either be - <constant>O_RDWR</constant> or <constant>O_RDONLY</constant>.</para> - <para>Multiple opens are allowed with <constant>O_RDONLY</constant>. In this mode, only query and read ioctls are allowed.</para> - <para>Only one open is allowed in <constant>O_RDWR</constant>. In this mode, all ioctls are allowed.</para> - <para>When the <constant>O_NONBLOCK</constant> flag is given, the system calls may return &EAGAIN; when no data is available or when the device driver is temporarily busy.</para> - <para>Other flags have no effect.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - <refsect1> - <title>Description</title> - <para>This system call opens a named frontend device (<constant>/dev/dvb/adapter?/frontend?</constant>) - for subsequent use. Usually the first thing to do after a successful open is to - find out the frontend type with <link linkend="FE_GET_INFO">FE_GET_INFO</link>.</para> -<para>The device can be opened in read-only mode, which only allows monitoring of - device status and statistics, or read/write mode, which allows any kind of use - (e.g. performing tuning operations.) -</para> -<para>In a system with multiple front-ends, it is usually the case that multiple devices - cannot be open in read/write mode simultaneously. As long as a front-end - device is opened in read/write mode, other open() calls in read/write mode will - either fail or block, depending on whether non-blocking or blocking mode was - specified. A front-end device opened in blocking mode can later be put into - non-blocking mode (and vice versa) using the F_SETFL command of the fcntl - system call. This is a standard system call, documented in the Linux manual - page for fcntl. When an open() call has succeeded, the device will be ready - for use in the specified mode. This implies that the corresponding hardware is - powered up, and that other front-ends may have been powered down to make - that possible.</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 the device driver 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> - <varlistentry> - <term><errorcode>ENODEV</errorcode></term> - <listitem> - <para>The device got removed.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> -</refentry> - -<refentry id="frontend_f_close"> - <refmeta> - <refentrytitle>DVB frontend close()</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>fe-close</refname> - <refpurpose>Close a frontend 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>This system call closes a previously opened front-end device. After closing - a front-end device, its corresponding hardware might be powered down - automatically.</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> - -&sub-fe-get-info; -&sub-fe-read-status; -&sub-fe-get-property; -&sub-fe-diseqc-reset-overload; -&sub-fe-diseqc-send-master-cmd; -&sub-fe-diseqc-recv-slave-reply; -&sub-fe-diseqc-send-burst; -&sub-fe-set-tone; -&sub-fe-set-voltage; -&sub-fe-enable-high-lnb-voltage; -&sub-fe-set-frontend-tune-mode; - -</section> - -<section id="frontend_legacy_dvbv3_api"> -<title>DVB Frontend legacy API (a. k. a. DVBv3)</title> -<para>The usage of this API is deprecated, as it doesn't support all digital - TV standards, doesn't provide good statistics measurements and provides - incomplete information. This is kept only to support legacy applications.</para> - -&sub-frontend_legacy_api; -</section> diff --git a/Documentation/DocBook/media/dvb/frontend_legacy_api.xml b/Documentation/DocBook/media/dvb/frontend_legacy_api.xml deleted file mode 100644 index 8fadf3a4ba44..000000000000 --- a/Documentation/DocBook/media/dvb/frontend_legacy_api.xml +++ /dev/null @@ -1,654 +0,0 @@ -<section id="frontend_legacy_types"> -<title>Frontend Legacy Data Types</title> - -<section id="fe-type-t"> -<title>Frontend type</title> - -<para>For historical reasons, frontend types are named by the type of modulation - used in transmission. The fontend types are given by fe_type_t type, defined as:</para> - -<table pgwide="1" frame="none" id="fe-type"> -<title>Frontend types</title> -<tgroup cols="3"> - &cs-def; - <thead> - <row> - <entry>fe_type</entry> - <entry>Description</entry> - <entry><link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> equivalent type</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="FE-QPSK"><constant>FE_QPSK</constant></entry> - <entry>For DVB-S standard</entry> - <entry><constant>SYS_DVBS</constant></entry> - </row> - <row> - <entry id="FE-QAM"><constant>FE_QAM</constant></entry> - <entry>For DVB-C annex A standard</entry> - <entry><constant>SYS_DVBC_ANNEX_A</constant></entry> - </row> - <row> - <entry id="FE-OFDM"><constant>FE_OFDM</constant></entry> - <entry>For DVB-T standard</entry> - <entry><constant>SYS_DVBT</constant></entry> - </row> - <row> - <entry id="FE-ATSC"><constant>FE_ATSC</constant></entry> - <entry>For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US.</entry> - <entry><constant>SYS_ATSC</constant> (terrestrial) or <constant>SYS_DVBC_ANNEX_B</constant> (cable)</entry> - </row> -</tbody></tgroup></table> - -<para>Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're -supported via the new <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY/FE_GET_SET_PROPERTY</link> ioctl's, using the <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> parameter. -</para> - -<para>In the old days, &dvb-frontend-info; used to contain - <constant>fe_type_t</constant> field to indicate the delivery systems, - filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this is - still filled to keep backward compatibility, the usage of this - field is deprecated, as it can report just one delivery system, but some - devices support multiple delivery systems. Please use - <link linkend="DTV-ENUM-DELSYS">DTV_ENUM_DELSYS</link> instead. -</para> -<para>On devices that support multiple delivery systems, - &dvb-frontend-info;::<constant>fe_type_t</constant> is filled with the - currently standard, as selected by the last call to - <link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link> - using the &DTV-DELIVERY-SYSTEM; property.</para> -</section> - -<section id="fe-bandwidth-t"> -<title>Frontend bandwidth</title> - -<table pgwide="1" frame="none" id="fe-bandwidth"> - <title>enum fe_bandwidth</title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry id="BANDWIDTH-AUTO"><constant>BANDWIDTH_AUTO</constant></entry> - <entry>Autodetect bandwidth (if supported)</entry> - </row><row> - <entry id="BANDWIDTH-1-712-MHZ"><constant>BANDWIDTH_1_712_MHZ</constant></entry> - <entry>1.712 MHz</entry> - </row><row> - <entry id="BANDWIDTH-5-MHZ"><constant>BANDWIDTH_5_MHZ</constant></entry> - <entry>5 MHz</entry> - </row><row> - <entry id="BANDWIDTH-6-MHZ"><constant>BANDWIDTH_6_MHZ</constant></entry> - <entry>6 MHz</entry> - </row><row> - <entry id="BANDWIDTH-7-MHZ"><constant>BANDWIDTH_7_MHZ</constant></entry> - <entry>7 MHz</entry> - </row><row> - <entry id="BANDWIDTH-8-MHZ"><constant>BANDWIDTH_8_MHZ</constant></entry> - <entry>8 MHz</entry> - </row><row> - <entry id="BANDWIDTH-10-MHZ"><constant>BANDWIDTH_10_MHZ</constant></entry> - <entry>10 MHz</entry> - </row> - </tbody> - </tgroup> -</table> - -</section> - -<section id="dvb-frontend-parameters"> -<title>frontend parameters</title> -<para>The kind of parameters passed to the frontend device for tuning depend on -the kind of hardware you are using.</para> -<para>The struct <constant>dvb_frontend_parameters</constant> uses an -union with specific per-system parameters. However, as newer delivery systems -required more data, the structure size weren't enough to fit, and just -extending its size would break the existing applications. So, those parameters -were replaced by the usage of <link linkend="FE_GET_PROPERTY"> -<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> ioctl's. The -new API is flexible enough to add new parameters to existing delivery systems, -and to add newer delivery systems.</para> -<para>So, newer applications should use <link linkend="FE_GET_PROPERTY"> -<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> instead, in -order to be able to support the newer System Delivery like DVB-S2, DVB-T2, -DVB-C2, ISDB, etc.</para> -<para>All kinds of parameters are combined as an union in the FrontendParameters structure: -<programlisting> -struct dvb_frontend_parameters { - uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/ - /⋆ intermediate frequency in kHz for QPSK ⋆/ - &fe-spectral-inversion-t; inversion; - union { - struct dvb_qpsk_parameters qpsk; - struct dvb_qam_parameters qam; - struct dvb_ofdm_parameters ofdm; - struct dvb_vsb_parameters vsb; - } u; -}; -</programlisting></para> -<para>In the case of QPSK frontends the <constant>frequency</constant> field specifies the intermediate -frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of -the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and -OFDM frontends the <constant>frequency</constant> specifies the absolute frequency and is given in Hz. -</para> - -<section id="dvb-qpsk-parameters"> -<title>QPSK parameters</title> -<para>For satellite QPSK frontends you have to use the <constant>dvb_qpsk_parameters</constant> structure:</para> -<programlisting> - struct dvb_qpsk_parameters { - uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ - &fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/ - }; -</programlisting> -</section> - -<section id="dvb-qam-parameters"> -<title>QAM parameters</title> -<para>for cable QAM frontend you use the <constant>dvb_qam_parameters</constant> structure:</para> -<programlisting> - struct dvb_qam_parameters { - uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ - &fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/ - &fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/ - }; -</programlisting> -</section> - -<section id="dvb-vsb-parameters"> -<title>VSB parameters</title> -<para>ATSC frontends are supported by the <constant>dvb_vsb_parameters</constant> structure:</para> -<programlisting> -struct dvb_vsb_parameters { - &fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/ -}; -</programlisting> -</section> - -<section id="dvb-ofdm-parameters"> -<title>OFDM parameters</title> -<para>DVB-T frontends are supported by the <constant>dvb_ofdm_parameters</constant> structure:</para> -<programlisting> - struct dvb_ofdm_parameters { - &fe-bandwidth-t; bandwidth; - &fe-code-rate-t; code_rate_HP; /⋆ high priority stream code rate ⋆/ - &fe-code-rate-t; code_rate_LP; /⋆ low priority stream code rate ⋆/ - &fe-modulation-t; constellation; /⋆ modulation type (see above) ⋆/ - &fe-transmit-mode-t; transmission_mode; - &fe-guard-interval-t; guard_interval; - &fe-hierarchy-t; hierarchy_information; - }; -</programlisting> -</section> -</section> - -<section id="dvb-frontend-event"> -<title>frontend events</title> - <programlisting> - struct dvb_frontend_event { - fe_status_t status; - struct dvb_frontend_parameters parameters; - }; -</programlisting> - </section> -</section> - -<section id="frontend_legacy_fcalls"> -<title>Frontend Legacy Function Calls</title> - -<para>Those functions are defined at DVB version 3. The support is kept in - the kernel due to compatibility issues only. Their usage is strongly - not recommended</para> - -<section id="FE_READ_BER"> -<title>FE_READ_BER</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns the bit error rate for the signal currently - received/demodulated by the front-end. For this command, read-only access to - the device is sufficient.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = <link linkend="FE_READ_BER">FE_READ_BER</link>, - uint32_t ⋆ber);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_READ_BER">FE_READ_BER</link> for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>uint32_t *ber</para> -</entry><entry - align="char"> -<para>The bit error rate is stored into *ber.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -</section> - -<section id="FE_READ_SNR"> -<title>FE_READ_SNR</title> - -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns the signal-to-noise ratio for the signal currently received - by the front-end. For this command, read-only access to the device is sufficient.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, uint16_t - ⋆snr);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_READ_SNR">FE_READ_SNR</link> for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>uint16_t *snr</para> -</entry><entry - align="char"> -<para>The signal-to-noise ratio is stored into *snr.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -</section> - -<section id="FE_READ_SIGNAL_STRENGTH"> -<title>FE_READ_SIGNAL_STRENGTH</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns the signal strength value for the signal currently received - by the front-end. For this command, read-only access to the device is sufficient.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = - <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, uint16_t ⋆strength);</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link> for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>uint16_t *strength</para> -</entry><entry - align="char"> -<para>The signal strength value is stored into *strength.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -</section> - -<section id="FE_READ_UNCORRECTED_BLOCKS"> -<title>FE_READ_UNCORRECTED_BLOCKS</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns the number of uncorrected blocks detected by the device - driver during its lifetime. For meaningful measurements, the increment in block - count during a specific time interval should be calculated. For this command, - read-only access to the device is sufficient.</para> -</entry> - </row><row><entry - align="char"> -<para>Note that the counter will wrap to zero after its maximum count has been - reached.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl( int fd, int request = - <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link>, uint32_t ⋆ublocks);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>uint32_t *ublocks</para> -</entry><entry - align="char"> -<para>The total number of uncorrected blocks seen by the driver - so far.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -</section> - -<section id="FE_SET_FRONTEND"> -<title>FE_SET_FRONTEND</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call starts a tuning operation using specified parameters. The result - of this call will be successful if the parameters were valid and the tuning could - be initiated. The result of the tuning operation in itself, however, will arrive - asynchronously as an event (see documentation for <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> and - FrontendEvent.) If a new <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> operation is initiated before - the previous one was completed, the previous operation will be aborted in favor - of the new one. This command requires read/write access to the device.</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link>, - struct dvb_frontend_parameters ⋆p);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct - dvb_frontend_parameters - *p</para> -</entry><entry - align="char"> -<para>Points to parameters for tuning operation.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Maximum supported symbol rate reached.</para> -</entry> -</row></tbody></tgroup></informaltable> -</section> - -<section id="FE_GET_FRONTEND"> -<title>FE_GET_FRONTEND</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call queries the currently effective frontend parameters. For this - command, read-only access to the device is sufficient.</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link>, - struct dvb_frontend_parameters ⋆p);</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct - dvb_frontend_parameters - *p</para> -</entry><entry - align="char"> -<para>Points to parameters for tuning operation.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Maximum supported symbol rate reached.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section> - -<section id="FE_GET_EVENT"> -<title>FE_GET_EVENT</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns a frontend event if available. If an event is not - available, the behavior depends on whether the device is in blocking or - non-blocking mode. In the latter case, the call fails immediately with errno - set to EWOULDBLOCK. In the former case, the call blocks until an event - becomes available.</para> -</entry> - </row><row><entry - align="char"> -<para>The standard Linux poll() and/or select() system calls can be used with the - device file descriptor to watch for new events. For select(), the file descriptor - should be included in the exceptfds argument, and for poll(), POLLPRI should - be specified as the wake-up condition. Since the event queue allocated is - rather small (room for 8 events), the queue must be serviced regularly to avoid - overflow. If an overflow happens, the oldest event is discarded from the queue, - and an error (EOVERFLOW) occurs the next time the queue is read. After - reporting the error condition in this fashion, subsequent - <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> - calls will return events from the queue as usual.</para> -</entry> - </row><row><entry - align="char"> -<para>For the sake of implementation simplicity, this command requires read/write - access to the device.</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = QPSK_GET_EVENT, - struct dvb_frontend_event ⋆ev);</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct - dvb_frontend_event - *ev</para> -</entry><entry - align="char"> -<para>Points to the location where the event,</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>if any, is to be stored.</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EWOULDBLOCK</para> -</entry><entry - align="char"> -<para>There is no event pending, and the device is in - non-blocking mode.</para> -</entry> - </row><row><entry - align="char"> -<para>EOVERFLOW</para> -</entry><entry - align="char"> -<para>Overflow in event queue - one or more events were lost.</para> -</entry> -</row></tbody></tgroup></informaltable> -</section> - -<section id="FE_DISHNETWORK_SEND_LEGACY_CMD"> - <title>FE_DISHNETWORK_SEND_LEGACY_CMD</title> -<para>DESCRIPTION</para> -<informaltable><tgroup cols="1"><tbody><row> -<entry align="char"> -<para>WARNING: This is a very obscure legacy command, used only at stv0299 driver. Should not be used on newer drivers.</para> -<para>It provides a non-standard method for selecting Diseqc voltage on the frontend, for Dish Network legacy switches.</para> -<para>As support for this ioctl were added in 2004, this means that such dishes were already legacy in 2004.</para> -</entry> -</row></tbody></tgroup></informaltable> - -<para>SYNOPSIS</para> -<informaltable><tgroup cols="1"><tbody><row> -<entry align="char"> -<para>int ioctl(int fd, int request = - <link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link>, unsigned long cmd);</para> -</entry> -</row></tbody></tgroup></informaltable> - -<para>PARAMETERS</para> -<informaltable><tgroup cols="2"><tbody><row> -<entry align="char"> - <para>unsigned long cmd</para> -</entry> -<entry align="char"> -<para> -sends the specified raw cmd to the dish via DISEqC. -</para> -</entry> - </row></tbody></tgroup></informaltable> - -&return-value-dvb; -</section> - -</section> diff --git a/Documentation/DocBook/media/dvb/intro.xml b/Documentation/DocBook/media/dvb/intro.xml deleted file mode 100644 index b5b701f5d8c2..000000000000 --- a/Documentation/DocBook/media/dvb/intro.xml +++ /dev/null @@ -1,211 +0,0 @@ -<title>Introduction</title> - -<section id="requisites"> -<title>What you need to know</title> - -<para>The reader of this document is required to have some knowledge in -the area of digital video broadcasting (DVB) and should be familiar with -part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e -you should know what a program/transport stream (PS/TS) is and what is -meant by a packetized elementary stream (PES) or an I-frame.</para> - -<para>Various DVB standards documents are available from -<ulink url="http://www.dvb.org" /> and/or -<ulink url="http://www.etsi.org" />.</para> - -<para>It is also necessary to know how to access unix/linux devices and -how to use ioctl calls. This also includes the knowledge of C or C++. -</para> -</section> - -<section id="history"> -<title>History</title> - -<para>The first API for DVB cards we used at Convergence in late 1999 -was an extension of the Video4Linux API which was primarily developed -for frame grabber cards. As such it was not really well suited to be -used for DVB cards and their new features like recording MPEG streams -and filtering several section and PES data streams at the same time. -</para> - -<para>In early 2000, we were approached by Nokia with a proposal for a -new standard Linux DVB API. As a commitment to the development of -terminals based on open standards, Nokia and Convergence made it -available to all Linux developers and published it on -<ulink url="https://linuxtv.org" /> in September 2000. -Convergence is the maintainer of the Linux DVB API. Together with the -LinuxTV community (i.e. you, the reader of this document), the Linux DVB -API will be constantly reviewed and improved. With the Linux driver for -the Siemens/Hauppauge DVB PCI card Convergence provides a first -implementation of the Linux DVB API.</para> -</section> - -<section id="overview"> -<title>Overview</title> - -<figure id="stb_components"> -<title>Components of a DVB card/STB</title> -<mediaobject> -<imageobject> -<imagedata fileref="dvbstb.pdf" format="PS" /> -</imageobject> -<imageobject> -<imagedata fileref="dvbstb.png" format="PNG" /> -</imageobject> -</mediaobject> -</figure> - -<para>A DVB PCI card or DVB set-top-box (STB) usually consists of the -following main hardware components: </para> - -<itemizedlist> - <listitem> - -<para>Frontend consisting of tuner and DVB demodulator</para> - -<para>Here the raw signal reaches the DVB hardware from a satellite dish -or antenna or directly from cable. The frontend down-converts and -demodulates this signal into an MPEG transport stream (TS). In case of a -satellite frontend, this includes a facility for satellite equipment -control (SEC), which allows control of LNB polarization, multi feed -switches or dish rotors.</para> - -</listitem> - <listitem> - -<para>Conditional Access (CA) hardware like CI adapters and smartcard slots -</para> - -<para>The complete TS is passed through the CA hardware. Programs to -which the user has access (controlled by the smart card) are decoded in -real time and re-inserted into the TS.</para> - -</listitem> - <listitem> - <para>Demultiplexer which filters the incoming DVB stream</para> - -<para>The demultiplexer splits the TS into its components like audio and -video streams. Besides usually several of such audio and video streams -it also contains data streams with information about the programs -offered in this or other streams of the same provider.</para> - -</listitem> -<listitem> - -<para>MPEG2 audio and video decoder</para> - -<para>The main targets of the demultiplexer are the MPEG2 audio and -video decoders. After decoding they pass on the uncompressed audio and -video to the computer screen or (through a PAL/NTSC encoder) to a TV -set.</para> - - -</listitem> -</itemizedlist> - -<para><xref linkend="stb_components" /> shows a crude schematic of the control and data flow -between those components.</para> - -<para>On a DVB PCI card not all of these have to be present since some -functionality can be provided by the main CPU of the PC (e.g. MPEG -picture and sound decoding) or is not needed (e.g. for data-only uses -like “internet over satellite”). Also not every card or STB -provides conditional access hardware.</para> - -</section> - -<section id="dvb_devices"> -<title>Linux DVB Devices</title> - -<para>The Linux DVB API lets you control these hardware components -through currently six Unix-style character devices for video, audio, -frontend, demux, CA and IP-over-DVB networking. The video and audio -devices control the MPEG2 decoder hardware, the frontend device the -tuner and the DVB demodulator. The demux device gives you control over -the PES and section filters of the hardware. If the hardware does not -support filtering these filters can be implemented in software. Finally, -the CA device controls all the conditional access capabilities of the -hardware. It can depend on the individual security requirements of the -platform, if and how many of the CA functions are made available to the -application through this device.</para> - -<para>All devices can be found in the <constant>/dev</constant> -tree under <constant>/dev/dvb</constant>. The individual devices -are called:</para> - -<itemizedlist> -<listitem> - -<para><constant>/dev/dvb/adapterN/audioM</constant>,</para> -</listitem> -<listitem> -<para><constant>/dev/dvb/adapterN/videoM</constant>,</para> -</listitem> -<listitem> -<para><constant>/dev/dvb/adapterN/frontendM</constant>,</para> -</listitem> - <listitem> - -<para><constant>/dev/dvb/adapterN/netM</constant>,</para> -</listitem> - <listitem> - -<para><constant>/dev/dvb/adapterN/demuxM</constant>,</para> -</listitem> - <listitem> - -<para><constant>/dev/dvb/adapterN/dvrM</constant>,</para> -</listitem> - <listitem> - -<para><constant>/dev/dvb/adapterN/caM</constant>,</para></listitem></itemizedlist> - -<para>where N enumerates the DVB PCI cards in a system starting -from 0, and M enumerates the devices of each type within each -adapter, starting from 0, too. We will omit the “ -<constant>/dev/dvb/adapterN/</constant>” in the further discussion -of these devices.</para> - -<para>More details about the data structures and function calls of all -the devices are described in the following chapters.</para> - -</section> - -<section id="include_files"> -<title>API include files</title> - -<para>For each of the DVB devices a corresponding include file exists. -The DVB API include files should be included in application sources with -a partial path like:</para> - -<programlisting> - #include <linux/dvb/audio.h> -</programlisting> -<programlisting> - #include <linux/dvb/ca.h> -</programlisting> -<programlisting> - #include <linux/dvb/dmx.h> -</programlisting> -<programlisting> - #include <linux/dvb/frontend.h> -</programlisting> -<programlisting> - #include <linux/dvb/net.h> -</programlisting> -<programlisting> - #include <linux/dvb/osd.h> -</programlisting> -<programlisting> - #include <linux/dvb/video.h> -</programlisting> - -<para>To enable applications to support different API version, an -additional include file -<constant>linux/dvb/version.h</constant> exists, which defines the -constant <constant>DVB_API_VERSION</constant>. This document -describes <constant>DVB_API_VERSION 5.10</constant>. -</para> - -</section> - diff --git a/Documentation/DocBook/media/dvb/net.xml b/Documentation/DocBook/media/dvb/net.xml deleted file mode 100644 index da095ed0b75c..000000000000 --- a/Documentation/DocBook/media/dvb/net.xml +++ /dev/null @@ -1,238 +0,0 @@ -<title>DVB Network API</title> -<para>The DVB net device controls the mapping of data packages that are - part of a transport stream to be mapped into a virtual network interface, - visible through the standard Linux network protocol stack.</para> -<para>Currently, two encapsulations are supported:</para> -<itemizedlist> - <listitem><para><ulink url="http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation"> - Multi Protocol Encapsulation (MPE)</ulink></para></listitem> - <listitem><para><ulink url="http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation"> - Ultra Lightweight Encapsulation (ULE)</ulink></para></listitem> -</itemizedlist> - -<para>In order to create the Linux virtual network interfaces, an application - needs to tell to the Kernel what are the PIDs and the encapsulation types - that are present on the transport stream. This is done through - <constant>/dev/dvb/adapter?/net?</constant> device node. - The data will be available via virtual <constant>dvb?_?</constant> - network interfaces, and will be controlled/routed via the standard - ip tools (like ip, route, netstat, ifconfig, etc).</para> -<para> Data types and and ioctl definitions are defined via - <constant>linux/dvb/net.h</constant> header.</para> - -<section id="net_fcalls"> -<title>DVB net Function Calls</title> - - -<refentry id="NET_ADD_IF"> - <refmeta> - <refentrytitle>ioctl NET_ADD_IF</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>NET_ADD_IF</refname> - <refpurpose>Creates a new network interface for a given Packet ID.</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 dvb_net_if *<parameter>net_if</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_TONE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>net_if</parameter></term> - <listitem> - <para>pointer to &dvb-net-if;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - -<para>The NET_ADD_IF ioctl system call selects the Packet ID (PID) that - contains a TCP/IP traffic, the type of encapsulation to be used (MPE or ULE) - and the interface number for the new interface to be created. When the - system call successfully returns, a new virtual network interface is created.</para> -<para>The &dvb-net-if;::ifnum field will be filled with the number of the - created interface.</para> - -&return-value-dvb; -</refsect1> - -<refsect1 id="dvb-net-if-t"> -<title>struct <structname>dvb_net_if</structname> description</title> - -<table pgwide="1" frame="none" id="dvb-net-if"> - <title>struct <structname>dvb_net_if</structname></title> - <tgroup cols="2"> - &cs-def; - <thead> - <row> - <entry>ID</entry> - <entry>Description</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry align="char">pid</entry> - <entry align="char">Packet ID (PID) of the MPEG-TS that contains - data</entry> - </row><row> - <entry align="char">ifnum</entry> - <entry align="char">number of the DVB interface.</entry> - </row><row> - <entry align="char">feedtype</entry> - <entry align="char">Encapsulation type of the feed. It can be: - <constant>DVB_NET_FEEDTYPE_MPE</constant> for MPE encoding - or - <constant>DVB_NET_FEEDTYPE_ULE</constant> for ULE encoding. - </entry> - </row> - </tbody> - </tgroup> -</table> -</refsect1> -</refentry> - -<refentry id="NET_REMOVE_IF"> - <refmeta> - <refentrytitle>ioctl NET_REMOVE_IF</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>NET_REMOVE_IF</refname> - <refpurpose>Removes a network interface.</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>ifnum</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_TONE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>net_if</parameter></term> - <listitem> - <para>number of the interface to be removed</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - -<para>The NET_REMOVE_IF ioctl deletes an interface previously created - via &NET-ADD-IF;.</para> - -&return-value-dvb; -</refsect1> -</refentry> - - -<refentry id="NET_GET_IF"> - <refmeta> - <refentrytitle>ioctl NET_GET_IF</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>NET_GET_IF</refname> - <refpurpose>Read the configuration data of an interface created via - &NET-ADD-IF;.</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 dvb_net_if *<parameter>net_if</parameter></paramdef> - </funcprototype> - </funcsynopsis> - </refsynopsisdiv> - - <refsect1> - <title>Arguments</title> - <variablelist> - <varlistentry> - <term><parameter>fd</parameter></term> - <listitem> - <para>&fe_fd;</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>FE_SET_TONE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>net_if</parameter></term> - <listitem> - <para>pointer to &dvb-net-if;</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - -<para>The NET_GET_IF ioctl uses the interface number given by the - &dvb-net-if;::ifnum field and fills the content of &dvb-net-if; with - the packet ID and encapsulation type used on such interface. If the - interface was not created yet with &NET-ADD-IF;, it will return -1 and - fill the <constant>errno</constant> with <constant>EINVAL</constant> - error code.</para> - -&return-value-dvb; -</refsect1> -</refentry> -</section> diff --git a/Documentation/DocBook/media/dvb/video.xml b/Documentation/DocBook/media/dvb/video.xml deleted file mode 100644 index 71547fcd7ba0..000000000000 --- a/Documentation/DocBook/media/dvb/video.xml +++ /dev/null @@ -1,1968 +0,0 @@ -<title>DVB Video Device</title> -<para>The DVB video device controls the MPEG2 video decoder of the DVB hardware. It -can be accessed through <emphasis role="bold">/dev/dvb/adapter0/video0</emphasis>. Data types and and -ioctl definitions can be accessed by including <emphasis role="bold">linux/dvb/video.h</emphasis> in your -application. -</para> -<para>Note that the DVB video device only controls decoding of the MPEG video stream, not -its presentation on the TV or computer screen. On PCs this is typically handled by an -associated video4linux device, e.g. <emphasis role="bold">/dev/video</emphasis>, which allows scaling and defining output -windows. -</para> -<para>Some DVB cards don’t have their own MPEG decoder, which results in the omission of -the audio and video device as well as the video4linux device. -</para> -<para>The ioctls that deal with SPUs (sub picture units) and navigation packets are only -supported on some MPEG decoders made for DVD playback. -</para> -<para> -These ioctls were also used by V4L2 to control MPEG decoders implemented in V4L2. The use -of these ioctls for that purpose has been made obsolete and proper V4L2 ioctls or controls -have been created to replace that functionality.</para> -<section id="video_types"> -<title>Video Data Types</title> - -<section id="video-format-t"> -<title>video_format_t</title> -<para>The <constant>video_format_t</constant> data type defined by -</para> -<programlisting> -typedef enum { - VIDEO_FORMAT_4_3, /⋆ Select 4:3 format ⋆/ - VIDEO_FORMAT_16_9, /⋆ Select 16:9 format. ⋆/ - VIDEO_FORMAT_221_1 /⋆ 2.21:1 ⋆/ -} video_format_t; -</programlisting> -<para>is used in the VIDEO_SET_FORMAT function (??) to tell the driver which aspect ratio -the output hardware (e.g. TV) has. It is also used in the data structures video_status -(??) returned by VIDEO_GET_STATUS (??) and video_event (??) returned by -VIDEO_GET_EVENT (??) which report about the display format of the current video -stream. -</para> -</section> - -<section id="video-displayformat-t"> -<title>video_displayformat_t</title> -<para>In case the display format of the video stream and of the display hardware differ the -application has to specify how to handle the cropping of the picture. This can be done using -the VIDEO_SET_DISPLAY_FORMAT call (??) which accepts -</para> -<programlisting> -typedef enum { - VIDEO_PAN_SCAN, /⋆ use pan and scan format ⋆/ - VIDEO_LETTER_BOX, /⋆ use letterbox format ⋆/ - VIDEO_CENTER_CUT_OUT /⋆ use center cut out format ⋆/ -} video_displayformat_t; -</programlisting> -<para>as argument. -</para> -</section> - -<section id="video-stream-source-t"> -<title>video_stream_source_t</title> -<para>The video stream source is set through the VIDEO_SELECT_SOURCE call and can take -the following values, depending on whether we are replaying from an internal (demuxer) or -external (user write) source. -</para> -<programlisting> -typedef enum { - VIDEO_SOURCE_DEMUX, /⋆ Select the demux as the main source ⋆/ - VIDEO_SOURCE_MEMORY /⋆ If this source is selected, the stream - comes from the user through the write - system call ⋆/ -} video_stream_source_t; -</programlisting> -<para>VIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the -DVR device) as the source of the video stream. If VIDEO_SOURCE_MEMORY -is selected the stream comes from the application through the <emphasis role="bold">write()</emphasis> system -call. -</para> -</section> - -<section id="video-play-state-t"> -<title>video_play_state_t</title> -<para>The following values can be returned by the VIDEO_GET_STATUS call representing the -state of video playback. -</para> -<programlisting> -typedef enum { - VIDEO_STOPPED, /⋆ Video is stopped ⋆/ - VIDEO_PLAYING, /⋆ Video is currently playing ⋆/ - VIDEO_FREEZED /⋆ Video is freezed ⋆/ -} video_play_state_t; -</programlisting> -</section> - -<section id="video-command"> -<title>struct video_command</title> -<para>The structure must be zeroed before use by the application -This ensures it can be extended safely in the future.</para> -<programlisting> -struct video_command { - __u32 cmd; - __u32 flags; - union { - struct { - __u64 pts; - } stop; - - struct { - /⋆ 0 or 1000 specifies normal speed, - 1 specifies forward single stepping, - -1 specifies backward single stepping, - >>1: playback at speed/1000 of the normal speed, - <-1: reverse playback at (-speed/1000) of the normal speed. ⋆/ - __s32 speed; - __u32 format; - } play; - - struct { - __u32 data[16]; - } raw; - }; -}; -</programlisting> -</section> - -<section id="video-size-t"> -<title>video_size_t</title> -<programlisting> -typedef struct { - int w; - int h; - video_format_t aspect_ratio; -} video_size_t; -</programlisting> -</section> - - -<section id="video-event"> -<title>struct video_event</title> -<para>The following is the structure of a video event as it is returned by the VIDEO_GET_EVENT -call. -</para> -<programlisting> -struct video_event { - __s32 type; -#define VIDEO_EVENT_SIZE_CHANGED 1 -#define VIDEO_EVENT_FRAME_RATE_CHANGED 2 -#define VIDEO_EVENT_DECODER_STOPPED 3 -#define VIDEO_EVENT_VSYNC 4 - __kernel_time_t timestamp; - union { - video_size_t size; - unsigned int frame_rate; /⋆ in frames per 1000sec ⋆/ - unsigned char vsync_field; /⋆ unknown/odd/even/progressive ⋆/ - } u; -}; -</programlisting> -</section> - -<section id="video-status"> -<title>struct video_status</title> -<para>The VIDEO_GET_STATUS call returns the following structure informing about various -states of the playback operation. -</para> -<programlisting> -struct video_status { - int video_blank; /⋆ blank video on freeze? ⋆/ - video_play_state_t play_state; /⋆ current state of playback ⋆/ - video_stream_source_t stream_source; /⋆ current source (demux/memory) ⋆/ - video_format_t video_format; /⋆ current aspect ratio of stream ⋆/ - video_displayformat_t display_format;/⋆ selected cropping mode ⋆/ -}; -</programlisting> -<para>If video_blank is set video will be blanked out if the channel is changed or if playback is -stopped. Otherwise, the last picture will be displayed. play_state indicates if the video is -currently frozen, stopped, or being played back. The stream_source corresponds to the seleted -source for the video stream. It can come either from the demultiplexer or from memory. -The video_format indicates the aspect ratio (one of 4:3 or 16:9) of the currently -played video stream. Finally, display_format corresponds to the selected cropping -mode in case the source video format is not the same as the format of the output -device. -</para> -</section> - -<section id="video-still-picture"> -<title>struct video_still_picture</title> -<para>An I-frame displayed via the VIDEO_STILLPICTURE call is passed on within the -following structure. -</para> -<programlisting> -/⋆ pointer to and size of a single iframe in memory ⋆/ -struct video_still_picture { - char ⋆iFrame; /⋆ pointer to a single iframe in memory ⋆/ - int32_t size; -}; -</programlisting> -</section> - -<section id="video_caps"> -<title>video capabilities</title> -<para>A call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the following -bits set according to the hardwares capabilities. -</para> -<programlisting> - /⋆ bit definitions for capabilities: ⋆/ - /⋆ can the hardware decode MPEG1 and/or MPEG2? ⋆/ - #define VIDEO_CAP_MPEG1 1 - #define VIDEO_CAP_MPEG2 2 - /⋆ can you send a system and/or program stream to video device? - (you still have to open the video and the audio device but only - send the stream to the video device) ⋆/ - #define VIDEO_CAP_SYS 4 - #define VIDEO_CAP_PROG 8 - /⋆ can the driver also handle SPU, NAVI and CSS encoded data? - (CSS API is not present yet) ⋆/ - #define VIDEO_CAP_SPU 16 - #define VIDEO_CAP_NAVI 32 - #define VIDEO_CAP_CSS 64 -</programlisting> -</section> - -<section id="video-system"> -<title>video_system_t</title> -<para>A call to VIDEO_SET_SYSTEM sets the desired video system for TV output. The -following system types can be set: -</para> -<programlisting> -typedef enum { - VIDEO_SYSTEM_PAL, - VIDEO_SYSTEM_NTSC, - VIDEO_SYSTEM_PALN, - VIDEO_SYSTEM_PALNc, - VIDEO_SYSTEM_PALM, - VIDEO_SYSTEM_NTSC60, - VIDEO_SYSTEM_PAL60, - VIDEO_SYSTEM_PALM60 -} video_system_t; -</programlisting> -</section> - -<section id="video-highlight"> -<title>struct video_highlight</title> -<para>Calling the ioctl VIDEO_SET_HIGHLIGHTS posts the SPU highlight information. The -call expects the following format for that information: -</para> -<programlisting> - typedef - struct video_highlight { - boolean active; /⋆ 1=show highlight, 0=hide highlight ⋆/ - uint8_t contrast1; /⋆ 7- 4 Pattern pixel contrast ⋆/ - /⋆ 3- 0 Background pixel contrast ⋆/ - uint8_t contrast2; /⋆ 7- 4 Emphasis pixel-2 contrast ⋆/ - /⋆ 3- 0 Emphasis pixel-1 contrast ⋆/ - uint8_t color1; /⋆ 7- 4 Pattern pixel color ⋆/ - /⋆ 3- 0 Background pixel color ⋆/ - uint8_t color2; /⋆ 7- 4 Emphasis pixel-2 color ⋆/ - /⋆ 3- 0 Emphasis pixel-1 color ⋆/ - uint32_t ypos; /⋆ 23-22 auto action mode ⋆/ - /⋆ 21-12 start y ⋆/ - /⋆ 9- 0 end y ⋆/ - uint32_t xpos; /⋆ 23-22 button color number ⋆/ - /⋆ 21-12 start x ⋆/ - /⋆ 9- 0 end x ⋆/ - } video_highlight_t; -</programlisting> - -</section> -<section id="video-spu"> -<title>struct video_spu</title> -<para>Calling VIDEO_SET_SPU deactivates or activates SPU decoding, according to the -following format: -</para> -<programlisting> - typedef - struct video_spu { - boolean active; - int stream_id; - } video_spu_t; -</programlisting> - -</section> -<section id="video-spu-palette"> -<title>struct video_spu_palette</title> -<para>The following structure is used to set the SPU palette by calling VIDEO_SPU_PALETTE: -</para> -<programlisting> - typedef - struct video_spu_palette { - int length; - uint8_t ⋆palette; - } video_spu_palette_t; -</programlisting> - -</section> -<section id="video-navi-pack"> -<title>struct video_navi_pack</title> -<para>In order to get the navigational data the following structure has to be passed to the ioctl -VIDEO_GET_NAVI: -</para> -<programlisting> - typedef - struct video_navi_pack { - int length; /⋆ 0 ... 1024 ⋆/ - uint8_t data[1024]; - } video_navi_pack_t; -</programlisting> -</section> - - -<section id="video-attributes-t"> -<title>video_attributes_t</title> -<para>The following attributes can be set by a call to VIDEO_SET_ATTRIBUTES: -</para> -<programlisting> - typedef uint16_t video_attributes_t; - /⋆ bits: descr. ⋆/ - /⋆ 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) ⋆/ - /⋆ 13-12 TV system (0=525/60, 1=625/50) ⋆/ - /⋆ 11-10 Aspect ratio (0=4:3, 3=16:9) ⋆/ - /⋆ 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca ⋆/ - /⋆ 7 line 21-1 data present in GOP (1=yes, 0=no) ⋆/ - /⋆ 6 line 21-2 data present in GOP (1=yes, 0=no) ⋆/ - /⋆ 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 ⋆/ - /⋆ 2 source letterboxed (1=yes, 0=no) ⋆/ - /⋆ 0 film/camera mode (0=camera, 1=film (625/50 only)) ⋆/ -</programlisting> -</section></section> - - -<section id="video_function_calls"> -<title>Video Function Calls</title> - - -<section id="video_fopen"> -<title>open()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call opens a named video device (e.g. /dev/dvb/adapter0/video0) - for subsequent use.</para> -<para>When an open() call has succeeded, the device will be ready for use. - The significance of blocking or non-blocking mode is described in the - documentation for functions where there is a difference. It does not affect the - semantics of the open() call itself. A device opened in blocking mode can later - be put into non-blocking mode (and vice versa) using the F_SETFL command - of the fcntl system call. This is a standard system call, documented in the Linux - manual page for fcntl. Only one user can open the Video Device in O_RDWR - mode. All other attempts to open the device in this mode will fail, and an - error-code will be returned. If the Video Device is opened in O_RDONLY - mode, the only ioctl call that can be used is VIDEO_GET_STATUS. All other - call will return an error code.</para> -</entry> - </row></tbody></tgroup></informaltable> - -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int open(const char ⋆deviceName, int flags);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>const char - *deviceName</para> -</entry><entry - align="char"> -<para>Name of specific video device.</para> -</entry> - </row><row><entry - align="char"> -<para>int flags</para> -</entry><entry - align="char"> -<para>A bit-wise OR of the following flags:</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDONLY read-only access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_RDWR read/write access</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>O_NONBLOCK open in non-blocking mode</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>(blocking mode is the default)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>ENODEV</para> -</entry><entry - align="char"> -<para>Device driver not loaded/available.</para> -</entry> - </row><row><entry - align="char"> -<para>EINTERNAL</para> -</entry><entry - align="char"> -<para>Internal error.</para> -</entry> - </row><row><entry - align="char"> -<para>EBUSY</para> -</entry><entry - align="char"> -<para>Device or resource busy.</para> -</entry> - </row><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid argument.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section> -<section id="video_fclose"> -<title>close()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call closes a previously opened video device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int close(int fd);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section> -<section id="video_fwrite"> -<title>write()</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This system call can only be used if VIDEO_SOURCE_MEMORY is selected - in the ioctl call VIDEO_SELECT_SOURCE. The data provided shall be in - PES format, unless the capability allows other formats. If O_NONBLOCK is - not specified the function will block until buffer space is available. The amount - of data to be transferred is implied by count.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>size_t write(int fd, const void ⋆buf, size_t count);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>void *buf</para> -</entry><entry - align="char"> -<para>Pointer to the buffer containing the PES data.</para> -</entry> - </row><row><entry - align="char"> -<para>size_t count</para> -</entry><entry - align="char"> -<para>Size of buf.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>RETURN VALUE</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EPERM</para> -</entry><entry - align="char"> -<para>Mode VIDEO_SOURCE_MEMORY not selected.</para> -</entry> - </row><row><entry - align="char"> -<para>ENOMEM</para> -</entry><entry - align="char"> -<para>Attempted to write more data than the internal buffer can - hold.</para> -</entry> - </row><row><entry - align="char"> -<para>EBADF</para> -</entry><entry - align="char"> -<para>fd is not a valid open file descriptor.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_STOP" -role="subsection"><title>VIDEO_STOP</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to stop playing the current stream. - Depending on the input parameter, the screen can be blanked out or displaying - the last decoded frame.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_STOP, boolean - mode);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_STOP for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>Boolean mode</para> -</entry><entry - align="char"> -<para>Indicates how the screen shall be handled.</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>TRUE: Blank screen when stop.</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>FALSE: Show last decoded frame.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_PLAY" -role="subsection"><title>VIDEO_PLAY</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to start playing a video stream from the - selected source.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_PLAY);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_PLAY for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_FREEZE" -role="subsection"><title>VIDEO_FREEZE</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call suspends the live video stream being played. Decoding - and playing are frozen. It is then possible to restart the decoding - and playing process of the video stream using the VIDEO_CONTINUE - command. If VIDEO_SOURCE_MEMORY is selected in the ioctl call - VIDEO_SELECT_SOURCE, the DVB subsystem will not decode any more - data until the ioctl call VIDEO_CONTINUE or VIDEO_PLAY is performed.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_FREEZE);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_FREEZE for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_CONTINUE" -role="subsection"><title>VIDEO_CONTINUE</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 -&VIDIOC-DECODER-CMD; instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call restarts decoding and playing processes of the video stream - which was played before a call to VIDEO_FREEZE was made.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_CONTINUE);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_CONTINUE for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SELECT_SOURCE" -role="subsection"><title>VIDEO_SELECT_SOURCE</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. This ioctl was also supported by the -V4L2 ivtv driver, but that has been replaced by the ivtv-specific -<constant>IVTV_IOC_PASSTHROUGH_MODE</constant> ioctl.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call informs the video device which source shall be used for the input - data. The possible sources are demux or memory. If memory is selected, the - data is fed to the video device through the write command.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_SELECT_SOURCE, - video_stream_source_t source);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SELECT_SOURCE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_stream_source_t - source</para> -</entry><entry - align="char"> -<para>Indicates which source shall be used for the Video stream.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SET_BLANK" -role="subsection"><title>VIDEO_SET_BLANK</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to blank out the picture.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_SET_BLANK, boolean - mode);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_BLANK for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>boolean mode</para> -</entry><entry - align="char"> -<para>TRUE: Blank screen when stop.</para> -</entry> - </row><row><entry - align="char"> -</entry><entry - align="char"> -<para>FALSE: Show last decoded frame.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_GET_STATUS" -role="subsection"><title>VIDEO_GET_STATUS</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to return the current status of the device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_GET_STATUS, struct - video_status ⋆status);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_STATUS for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct video_status - *status</para> -</entry><entry - align="char"> -<para>Returns the current status of the Video Device.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_GET_FRAME_COUNT" -role="subsection"><title>VIDEO_GET_FRAME_COUNT</title> -<para>DESCRIPTION -</para> -<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the <constant>V4L2_CID_MPEG_VIDEO_DEC_FRAME</constant> control.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to return the number of displayed frames -since the decoder was started.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - VIDEO_GET_FRAME_COUNT, __u64 *pts);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_FRAME_COUNT for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>__u64 *pts -</para> -</entry><entry - align="char"> -<para>Returns the number of frames displayed since the decoder was started. -</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_GET_PTS" -role="subsection"><title>VIDEO_GET_PTS</title> -<para>DESCRIPTION -</para> -<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the <constant>V4L2_CID_MPEG_VIDEO_DEC_PTS</constant> control.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to return the current PTS timestamp.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - VIDEO_GET_PTS, __u64 *pts);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_PTS for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>__u64 *pts -</para> -</entry><entry - align="char"> -<para>Returns the 33-bit timestamp as defined in ITU T-REC-H.222.0 / ISO/IEC 13818-1. -</para> -<para> -The PTS should belong to the currently played -frame if possible, but may also be a value close to it -like the PTS of the last decoded frame or the last PTS -extracted by the PES parser.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_GET_FRAME_RATE" -role="subsection"><title>VIDEO_GET_FRAME_RATE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to return the current framerate.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - VIDEO_GET_FRAME_RATE, unsigned int *rate);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_FRAME_RATE for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>unsigned int *rate -</para> -</entry><entry - align="char"> -<para>Returns the framerate in number of frames per 1000 seconds. -</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_GET_EVENT" -role="subsection"><title>VIDEO_GET_EVENT</title> -<para>DESCRIPTION -</para> -<para>This ioctl is for DVB devices only. To get events from a V4L2 decoder use the V4L2 -&VIDIOC-DQEVENT; ioctl instead.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call returns an event of type video_event if available. If an event is - not available, the behavior depends on whether the device is in blocking or - non-blocking mode. In the latter case, the call fails immediately with errno - set to EWOULDBLOCK. In the former case, the call blocks until an event - becomes available. The standard Linux poll() and/or select() system calls can - be used with the device file descriptor to watch for new events. For select(), - the file descriptor should be included in the exceptfds argument, and for - poll(), POLLPRI should be specified as the wake-up condition. Read-only - permissions are sufficient for this ioctl call.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_GET_EVENT, struct - video_event ⋆ev);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_EVENT for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct video_event - *ev</para> -</entry><entry - align="char"> -<para>Points to the location where the event, if any, is to be - stored.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EWOULDBLOCK</para> -</entry><entry - align="char"> -<para>There is no event pending, and the device is in - non-blocking mode.</para> -</entry> - </row><row><entry - align="char"> -<para>EOVERFLOW</para> -</entry><entry - align="char"> -<para>Overflow in event queue - one or more events were lost.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_COMMAND" -role="subsection"><title>VIDEO_COMMAND</title> -<para>DESCRIPTION -</para> -<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the &VIDIOC-DECODER-CMD; ioctl.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl commands the decoder. The <constant>video_command</constant> struct -is a subset of the <constant>v4l2_decoder_cmd</constant> struct, so refer to the -&VIDIOC-DECODER-CMD; documentation for more information.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - VIDEO_COMMAND, struct video_command *cmd);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_COMMAND for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct video_command *cmd -</para> -</entry><entry - align="char"> -<para>Commands the decoder. -</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_TRY_COMMAND" -role="subsection"><title>VIDEO_TRY_COMMAND</title> -<para>DESCRIPTION -</para> -<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this -ioctl has been replaced by the &VIDIOC-TRY-DECODER-CMD; ioctl.</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl tries a decoder command. The <constant>video_command</constant> struct -is a subset of the <constant>v4l2_decoder_cmd</constant> struct, so refer to the -&VIDIOC-TRY-DECODER-CMD; documentation for more information.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - VIDEO_TRY_COMMAND, struct video_command *cmd);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_TRY_COMMAND for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct video_command *cmd -</para> -</entry><entry - align="char"> -<para>Try a decoder command. -</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_GET_SIZE" -role="subsection"><title>VIDEO_GET_SIZE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl returns the size and aspect ratio.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = - VIDEO_GET_SIZE, video_size_t *size);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_SIZE for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_size_t *size -</para> -</entry><entry - align="char"> -<para>Returns the size and aspect ratio. -</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SET_DISPLAY_FORMAT" -role="subsection"><title>VIDEO_SET_DISPLAY_FORMAT</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to select the video format to be applied - by the MPEG chip on the video.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = - VIDEO_SET_DISPLAY_FORMAT, video_display_format_t - format);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_DISPLAY_FORMAT for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_display_format_t - format</para> -</entry><entry - align="char"> -<para>Selects the video format to be used.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_STILLPICTURE" -role="subsection"><title>VIDEO_STILLPICTURE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to display a still picture (I-frame). The - input data shall contain an I-frame. If the pointer is NULL, then the current - displayed still picture is blanked.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_STILLPICTURE, - struct video_still_picture ⋆sp);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_STILLPICTURE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>struct - video_still_picture - *sp</para> -</entry><entry - align="char"> -<para>Pointer to a location where an I-frame and size is stored.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_FAST_FORWARD" -role="subsection"><title>VIDEO_FAST_FORWARD</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the Video Device to skip decoding of N number of I-frames. - This call can only be used if VIDEO_SOURCE_MEMORY is selected.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_FAST_FORWARD, int - nFrames);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_FAST_FORWARD for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>int nFrames</para> -</entry><entry - align="char"> -<para>The number of frames to skip.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EPERM</para> -</entry><entry - align="char"> -<para>Mode VIDEO_SOURCE_MEMORY not selected.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_SLOWMOTION" -role="subsection"><title>VIDEO_SLOWMOTION</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the video device to repeat decoding frames N number of - times. This call can only be used if VIDEO_SOURCE_MEMORY is selected.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_SLOWMOTION, int - nFrames);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SLOWMOTION for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>int nFrames</para> -</entry><entry - align="char"> -<para>The number of times to repeat each frame.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EPERM</para> -</entry><entry - align="char"> -<para>Mode VIDEO_SOURCE_MEMORY not selected.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_GET_CAPABILITIES" -role="subsection"><title>VIDEO_GET_CAPABILITIES</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call asks the video device about its decoding capabilities. On success - it returns and integer which has bits set according to the defines in section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_GET_CAPABILITIES, - unsigned int ⋆cap);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_CAPABILITIES for this - command.</para> -</entry> - </row><row><entry - align="char"> -<para>unsigned int *cap</para> -</entry><entry - align="char"> -<para>Pointer to a location where to store the capability - information.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SET_ID" -role="subsection"><title>VIDEO_SET_ID</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl selects which sub-stream is to be decoded if a program or system - stream is sent to the video device.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(int fd, int request = VIDEO_SET_ID, int - id);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_ID for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>int id</para> -</entry><entry - align="char"> -<para>video sub-stream id</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>Invalid sub-stream id.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_CLEAR_BUFFER" -role="subsection"><title>VIDEO_CLEAR_BUFFER</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl call clears all video buffers in the driver and in the decoder hardware.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_CLEAR_BUFFER);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_CLEAR_BUFFER for this command.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SET_STREAMTYPE" -role="subsection"><title>VIDEO_SET_STREAMTYPE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl tells the driver which kind of stream to expect being written to it. If - this call is not used the default of video PES is used. Some drivers might not - support this call and always expect PES.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>int ioctl(fd, int request = VIDEO_SET_STREAMTYPE, - int type);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_STREAMTYPE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>int type</para> -</entry><entry - align="char"> -<para>stream type</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SET_FORMAT" -role="subsection"><title>VIDEO_SET_FORMAT</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl sets the screen format (aspect ratio) of the connected output device - (TV) so that the output of the decoder can be adjusted accordingly.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_SET_FORMAT, - video_format_t format);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_FORMAT for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_format_t - format</para> -</entry><entry - align="char"> -<para>video format of TV as defined in section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>format is not a valid video format.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_SET_SYSTEM" -role="subsection"><title>VIDEO_SET_SYSTEM</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl sets the television output format. The format (see section ??) may - vary from the color format of the displayed MPEG stream. If the hardware is - not able to display the requested format the call will return an error.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_SET_SYSTEM , - video_system_t system);</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_FORMAT for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_system_t - system</para> -</entry><entry - align="char"> -<para>video system of TV output.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>system is not a valid or supported video system.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_SET_HIGHLIGHT" -role="subsection"><title>VIDEO_SET_HIGHLIGHT</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl sets the SPU highlight information for the menu access of a DVD.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_SET_HIGHLIGHT - ,video_highlight_t ⋆vhilite)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_HIGHLIGHT for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_highlight_t - *vhilite</para> -</entry><entry - align="char"> -<para>SPU Highlight information according to section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; - -</section><section id="VIDEO_SET_SPU" -role="subsection"><title>VIDEO_SET_SPU</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl activates or deactivates SPU decoding in a DVD input stream. It can - only be used, if the driver is able to handle a DVD stream.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_SET_SPU , - video_spu_t ⋆spu)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_SPU for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_spu_t *spu</para> -</entry><entry - align="char"> -<para>SPU decoding (de)activation and subid setting according - to section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>input is not a valid spu setting or driver cannot handle - SPU.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_SET_SPU_PALETTE" -role="subsection"><title>VIDEO_SET_SPU_PALETTE</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl sets the SPU color palette.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_SET_SPU_PALETTE - ,video_spu_palette_t ⋆palette )</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_SPU_PALETTE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_spu_palette_t - *palette</para> -</entry><entry - align="char"> -<para>SPU palette according to section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>input is not a valid palette or driver doesn’t handle SPU.</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_GET_NAVI" -role="subsection"><title>VIDEO_GET_NAVI</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl returns navigational information from the DVD stream. This is - especially needed if an encoded stream has to be decoded by the hardware.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_GET_NAVI , - video_navi_pack_t ⋆navipack)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_GET_NAVI for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_navi_pack_t - *navipack</para> -</entry><entry - align="char"> -<para>PCI or DSI pack (private stream 2) according to section - ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EFAULT</para> -</entry><entry - align="char"> -<para>driver is not able to return navigational information</para> -</entry> - </row></tbody></tgroup></informaltable> - -</section><section id="VIDEO_SET_ATTRIBUTES" -role="subsection"><title>VIDEO_SET_ATTRIBUTES</title> -<para>DESCRIPTION -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para>This ioctl is intended for DVD playback and allows you to set certain - information about the stream. Some hardware may not need this information, - but the call also tells the hardware to prepare for DVD playback.</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>SYNOPSIS -</para> -<informaltable><tgroup cols="1"><tbody><row><entry - align="char"> -<para> int ioctl(fd, int request = VIDEO_SET_ATTRIBUTE - ,video_attributes_t vattr)</para> -</entry> - </row></tbody></tgroup></informaltable> -<para>PARAMETERS -</para> -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>int fd</para> -</entry><entry - align="char"> -<para>File descriptor returned by a previous call to open().</para> -</entry> - </row><row><entry - align="char"> -<para>int request</para> -</entry><entry - align="char"> -<para>Equals VIDEO_SET_ATTRIBUTE for this command.</para> -</entry> - </row><row><entry - align="char"> -<para>video_attributes_t - vattr</para> -</entry><entry - align="char"> -<para>video attributes according to section ??.</para> -</entry> - </row></tbody></tgroup></informaltable> -&return-value-dvb; -<informaltable><tgroup cols="2"><tbody><row><entry - align="char"> -<para>EINVAL</para> -</entry><entry - align="char"> -<para>input is not a valid attribute setting.</para> -</entry> - </row></tbody></tgroup></informaltable> - </section></section> diff --git a/Documentation/DocBook/media/dvbstb.png.b64 b/Documentation/DocBook/media/dvbstb.png.b64 deleted file mode 100644 index e8b52fde3d11..000000000000 --- a/Documentation/DocBook/media/dvbstb.png.b64 +++ /dev/null @@ -1,398 +0,0 @@ -iVBORw0KGgoAAAANSUhEUgAAAzMAAAGaCAYAAAA7Jx25AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI -WXMAAA3XAAANiQFmEOuiAAAgAElEQVR42uzdd1RU18I28GdgKFZUBE0saFA0KoqFFkEhKhbAQmxJ -bIkNNEpMEUwsMZarJMZrw4KxRExQczUqil0jRBA1GAjGQqLYC4TemdnfH76cj3HodYDntxaLmTll -zuw57Zmz9z4yIYQAkYZzcnJCSkoKGjZsyMIgIiIiquPS09PRoEEDyBhmqCaQyWRo06YN3nvvPRYG -ERERUR137Ngx/Pnnn5CzKKgmMDAwwKpVqxhmiIiIiAj29vZ4//33ocWiICIiIiKimohhhoiIiIiI -GGaIiIiIiIgYZoiIiIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIiGGGiIiIiIgYZoiIiIiIiBhm -iIiIiIiIGGaIiIiIiIgYZoiIiIiIiGGGiIiIiIiIYYaIiIiIiIhhhoiIiIiIGGaIiIiIiIgYZoiI -iIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIqFLIWQRElSMsLAy2trZo1KgR5HJualTxEhIS8P33 -3+PDDz+sM5+5bdu2ePDgAZo2bcoVgCplm3J0dMS5c+fqzGf++uuvsWTJEm5TVClSU1ORk5ODBw8e -oHXr1gwzRDVJbm4uAGDRokUwMDBggVCFmzlzJrKysurUZ3727BksLCzg4eHBFYAq3IIFC5CQkFCn -PnNGRgYAYNWqVVwBqMJFRUVh48aNUCqVlfYeDDNElWzGjBkMM1QpNm7cWOc+c8uWLTFjxgzMmDGD -KwBVuLt37yIkJKTOfW5nZ2duU1SpYaYysc0MERERERHVSAwzRERERETEMENERERERMQwQ0RERERE -xDBDREREREQMM0RERERERAwzREREREREDDNERERERMQwQ0RERERExDBDRERERETEMENERERERMQw -Q0REREREDDNEREREREQMM0RERERERAwzRERERETEMENERERERMQwQ0RERERExDBDREREREQMM0RE -RERERAwzREREREREDDNEREREREQMM0RERERExDBDRERERETEMENERERERMQwQ0REREREDDNERERE -REQMM0RERERERAwzRERERETEMENERERERMQwQ0REREREVGnkLAKimunBgwdISkoq8/SGhoZ47bXX -WJCV6NmzZwgMDMS5c+ewd+9eFgiVSVZWFkJCQnD16lU8evQICoUChoaG6NChA2xsbNCxY0fIZDI8 -efIEp06dwuTJk0s876CgIJiYmKBLly4saKq2Y5Wuri6aNm0KQ0NDaGnxd3ZimCGqE/78808EBgbi -p59+QkJCgsowLS0tyGQy6blSqYQQQmWcjz/+GGvXrmVBVoKtW7di+/btuHbtGoQQMDQ0ZKFQqf37 -77/w8fHBtm3bkJCQgCZNmsDS0hLGxsZ48OABtm/fjidPnsDU1BR2dnYICwtDz549SxxmlEol5s6d -CxsbG+zZs4cFTpV2rDpx4gQOHDiAJ0+eqAzT09ODUqlETk4OAEBfXx/dunWDvb093Nzc0LdvX5Vj -GVFBGH+JaqihQ4di06ZNOHr0qMrrly5dgkKhQG5urvSnVCqRlZWF27dvY8mSJQCA7OxsFmIlmTFj -Bs6ePctfu6nMTp48iTfffBOrV6+Gnp4e9uzZg+fPn+PUqVPw9/fHkSNH8PDhQxw9ehRCCOzevRu3 -bt1CWlpaqd4jJiYG+/btw+PHj1noVGnHqnXr1uHcuXMqr+/fvx8ZGRnIzs5GSkoKIiIi8M0330BH -Rwdr166Fvb09evXqhdOnT7MQiWGGqDazsrJSeV5Y1TFdXV107NgRX331FSZPniz9ElbTnDp1SuOX -USaToXHjxujevTtXUCq1H3/8EcOGDcPz58/RtWtXREREYMKECdDR0VE9gGtpwcXFBdeuXYONjQ0A -ID09vcTvs2HDBgBATk4OfH19WfBUqTp16gS5/P9XCDI3N5euujRs2BAWFhb46KOP8Ntvv+HIkSNo -3rw5rl+/DicnJ3z66adQKpUsRGKYIaqNdHR0Sl3HeNy4cTXyysyBAwdq1EkX635TaV29ehVTpkyB -UqlEw4YNcfToUbRs2bLIaZo0aYIjR47AyMioxFdm7ty5g6CgIGhrawMAtmzZgoyMDH4BVGlkMhl0 -dXVLNJ6rqyvCwsLQqlUrAMB3332Hjz/+mIVIDDNEtfkgURqOjo5YunRpjfqMd+7cwfTp0/llU62l -VCoxY8YM6arp/Pnz0b59+xJNa2RkBC8vrxJfmfH19YWVlRUmTJgAAIiPj2cnFaRRxypTU1McOnRI -CtwbNmzA4cOHWYjEMENUl+Xm5iIhIQH6+vowMTEpcJz8HQUIIdQ6DijoBKy0CppnUfN59uwZnJ2d -S9V7mxCiVMtW2mWqiPckyu/EiROIiIgAAGhra8Pd3b1U00+aNAlZWVnFjpeamoqdO3di9uzZmD17 -tvT6f//732K3d6KqZGlpiRkzZkjPvby8it3HlmY/XNh+v6jtoCTHRU1RlmNSac8BGGaIqEpduXIF -CxYsUHs9MTERfn5+sLa2xrVr15CSkoJJkyZBX18fbdq0QWRkpMrOLTAwEMOHD4epqSnat2+Pxo0b -o3///vDz8yu0LU5ubi7Onz8PDw8PmJubS+87d+5cGBoaQi6Xw8LCQq2x5+XLl2Fra4s7d+4AAEJD -Q+Hi4gIXFxfMnz9fZdzs7Gz4+vrC2toa+vr60NHRQdeuXeHj41PgSV5Zl+lVx44dw8CBA/Haa6+h -Q4cO6NmzJw4cOFBn17OgoCC1XouoeD/++KP02NbWFkZGRqWa3sjICDt37ix2PH9/f8jlcowdOxaW -lpawtrYGAERHR+Ps2bP8IjRQaGgooqKi6mTYnDNnjvT41q1buHTpkto4pdn3CyFw7do1eHt7o127 -dkhMTIQQAv7+/rCwsIBcLkfTpk3x8ccfS9Wxc3NzsXnzZvTu3Ru6urqoX78+3n33XbWeRPfv34/x -48dLx6jFixdLw5KSkjB37lwMHz5cGp6/hkRsbCzmz58vDcv7++KLL5Cbm4vDhw9j7Nix0utz587F -s2fPylUWZTkH0NTURqTxDAwMxN69e2vUMgcHBwsAIjExsdLfS1tbWwAQAMTdu3cLHW/hwoVi5syZ -0vMrV66IESNGCF1dXWn63377TfTv31/o6+tLry1YsEAIIUR6eroYPXq00NPTE7t37xY5OTlCCCFu -374t+vbtKwCIHj16iNjYWJX3PXXqlHBycpLm16JFCxEdHS06duwoHB0dhYuLi6hfv74AIHR0dMQf -f/whTfvXX3+J06dPC2NjYwFA2NraitOnT4vTp0+L8PBwabynT5+KPn36iOnTp4vIyEjx6NEjcejQ -IdGiRQsBQPTt21ekpaVVyDLlUSgUYvbs2UIul4stW7aI7OxsIYQQ0dHRwsLCQjRq1EgAEIaGhpXy -vZubmwtfX1+NW/fzyrRdu3Zi5syZIiAgQDx58qRC5t22bVuN/MwVoVWrVlLZeXp6Vsp7KJVK0bVr -V+Hl5SW95u/vL72vs7NznT7WeHt7Czs7O41brmnTpgkAwsDAQIwYMUKsX79eREZGCqVSWSGfuaq+ -9wYNGkjr2l9//VXi6dq3by9Nt3jxYpVhpdn3X7p0SYwePVrI5XKV5Rg8eLCwsrIS7u7u4u2335aG -ff755+LJkyfirbfeEo6OjmLWrFli1KhRQktLSwAQrq6uast67949af6DBw9WGx4dHS0ds18td6VS -KZYtWya9f+/evVWGr1y5Uujq6oqAgIACv/vSHgdLew5QFpGRkQKA2nlBRQgMDBQGBgaCYYYYZmpZ -mDl48KAIDQ2V/i5duiTOnj0rvv76a6Grq6sSZtLS0kR2drZ0oAQgnJycxKFDh0RqaqqYOHGiaNKk -iTh9+rRQKpVi7NixAkCBJ5MpKSmic+fOAoDo1KmTSElJURtn6NChAoDQ19cXlpaWIiIiQhr2xx9/ -SJ9jypQpatOamJgIAGLEiBFqw7Kzs0WfPn3EqFGj1Hbw+/fvlz6bt7d3hS7TokWLBACxZs0atWGP -Hz+WDtx1Lcw0a9ZMKnMdHR3pwF4R4aa2hpnk5GSpzApbpyrC2bNnhUwmU/nRIzMzU/qxAIC4efMm -w4yG8fDwkE6gtbS0hJ6eXoWFm5oQZkaOHClNN3r06HLv+xcsWCANs7GxUflhTKlUSu/XoEEDYWlp -KS5cuKAy/erVq6XpY2Ji1JbX1NS00DCT/3hWULkrlUoxZMgQ6bvOK6f09HTRsWNH8d133xU4z7KU -RWnOARhmiBhmqizMFPeXP8zk+eGHH6ThX331VYHvcezYMQFANG3aVGRlZRU4zpEjR6T5fPHFF2rD -P/roI2n4s2fP1Ib369dPCkOlCTNbt24VAMS5c+fUhmVmZkq/MDVt2lS6mlTeZbpx44bQ1tYWhoaG -hZbH8OHD62SYMTIyKnT9K2+4qa1h5p9//lEpp61bt1bK+4waNarAX5PzgjkAMWvWLIYZDQwz+a8m -5P8rb7ipCWFmxowZ0nSOjo7l3vdv375dml9YWJjatPv27ZOGb9q0SW34zZs3peG7du1SG96pU6ci -w0xe2Cms3O/fvy9d2XdychJKpVJMmzZNODg4CIVCUeA05TkOluQcQJPDjJw1UYlql5s3b6o07hdC -IC0tDZcuXcKHH35Y4DT5718xZMiQAsfJ6xLZysqq0O41hw0bBmNjYzx//hxbt27F0qVLVe4rkNcr -DQAYGxurTZ/XDWd8fHypPrOfnx8AIDw8HNHR0WrDmzVrhsePHyMhIQE3btxQuf9LWZdp3bp1UCgU -GDhwYKHl0ahRI66Qr8jfpurevXvYsWMHvv/+e+Tm5qJdu3YYPHgwHB0d0b9//2K7JK7NFApFhc8z -NjYWhw8fxvHjx9WGzZw5EytXroRCocCuXbuwfPlyNG3alCtsDZB3U+S8dhlHjx7FiRMnkJWVBQMD -Azg4OGDAgAFwcHBAt27dSt37pSbIv8z5j1dl3ffn3+83aNCg0P1+3jxe1aJFC+nxw4cPK/zztmnT -Bt988w3c3d1x6tQpTJo0CYcPH0ZUVFShXf6X5zhYknMATcYwQ1TL6OnpQV9fX+W1evXqYfjw4Viw -YIHUkL4w+Xfy+Q+WFy5cAAA0b968yGn79++PAwcOID4+HtHR0ejRo0eJlz1vJy1K0cg1OTkZ165d -g7a2dqGNzseMGaP2HuVZJiGE1EVo586dq/Uk5v79+7h27ZpGrYO5ubllDjfff/89tm/fDoVCIYWb -3r17w9XVtVaHm1eDQ1xcXIW/x5YtW/DGG29g0KBBBZ68ubm54cCBA0hPT8f27dvx+eef18l9aFpa -msZtUy9evChzuDly5AiCgoKQnZ2Nxo0bw9HREf369YO9vT369OlTI76Tf//9V3r8+uuvV/q+v6Dj -oMrJc74f6Srr/kzTp0/Hvn37cP78efj7+2Pjxo2F9kJakWVR3GdnmCGqQ4QG9jrz9ttv4+7du6We -Lj4+XroZX3Enqp06dZIeP3z4sFRhpizu3r0rdT+5Zs2aKtkRv3jxAk+fPgVQvVdfsrOzsWrVKqxa -tarWbDf516979+5h69atUkifOnVqpVyx0ARNmjSRrmoCQExMTIXOPyMjA35+flAoFCq/yL66nefZ -sGED5s2bp3LSVlfcuHGjxpzkl/RYlNcrV3JyMg4fPiz9GOPo6CiFA01269Yt6XHv3r2rbd9flbS0 -tODn5wdzc3NkZGTg1KlTmDVrVoFX1mp7WTDMEFWDFy9eYPny5Rq3XD179sTGjRtLPV3+E8i8k/jC -GBoaSo+rYoeaF7KEELh//36JbzJYHvl/Nc/MzKy271NPTw/ffvttodUHq4uZmVmZryzo6ekhKysL -enp6sLS0hJOTE/r37w8bGxvo6uoiMDCw1u437OzscPDgQQAvu+KtSAEBAUhNTYWPj0+Rv8quWLEC -T58+xYMHD3Do0CGVX3Prip49exZYFa86ffbZZ/jhhx9KddUzj46ODpRKJZRKJTp06IChQ4fCwcEB -ffv2hbGxMRYsWIDExESNPp5GRUVJz11cXKpt31/V0tLSpOPvkSNHsG/fPowfP14jjoMMM0S12Llz -5zBgwABMnTq11nym5s2bQ0dHBzk5OYiOjoYQotB61/lv0PXGG29U+rLVr19fehwSElIlO3E9PT3p -8d9//11t34tMJkP9+vU1rm1Daerk6+vrIzMzUyW8ODo6Ftk2q7YaO3asFGbu3LmDqKgo6f5H5SGE -wIYNGzBmzBjMnTu3yHHj4+Px1VdfAXh5E826GGby7jOiSfLvc4qjq6sLhUIBpVKJjh07YsiQIXBw -cIC9vX2R1YQ11c6dO6WaDi4uLmjXrl217furUlZWFiZMmIClS5di48aNePToEebMmYMBAwao3YOq -tpdFcXjTTKIKolQqsXz5cgwYMAAAMHz48Fp1cM+7sV5cXBxu3LhR6Lh59XVbtWqFjh07VvqymZqa -SifPfn5+RVbvS01NxcyZM8v9nq1bt5YaTF64cIF3TS+FvPZcenp6sLOzwxdffIHg4GAkJycjODgY -ixYtgp2dXZ0LMgDg5uamchLy3XffVch8L168iIiICEyfPr3YcWfOnCmt25cuXUJ4eDhXWg2nq6sL -bW1tyGQymJmZwd3dHQcOHMCLFy9w69YtrFu3DqNGjaqRQebx48dSNVpdXV2sXr26Wvf9FaUkx4yF -CxeicePGmD9/PjZv3iwdfz09PTXiOMgwQ1TLvHjxAoMGDcKSJUsAvLxjcUE9oFTWTjH/1ZDKOrH+ -4IMPpMcBAQGFjpd38uPu7l7qXnOKWva8eeXV/c7TqFEjKWgFBwdjz549BU6fm5uLKVOmwMnJqdzL -pKenh/79+wN4WVc5KCioyGnrWtjJq/Lwanixt7dneCmCjo4ONm3aJD3ftWsXTp8+XeLpExMT4erq -qnZX8NWrV8PMzAz29vbFzqNly5YYPXq09Hzt2rXcwWsApVIpVTcqaXjJX+W3Jp3E50lISMDIkSOR -kJAAANi0aRO6dOlSZfv+8sirYp2enl5gGaSkpBQ5/a+//oqNGzfCz88PWlpacHV1xbvvvgsA+Omn -n3D06NEqPQ4yzBDVcufPn0fXrl1x8eJFKJVKaGlp4bPPPquy909PT1c5QJSlZ5X8YaiwOtmTJk2C -paUlAGDz5s0F1rG+ffs2goODYWZmhnnz5qkNL67xdl7PVgUd8PKqfdy+fVsanp2djcePH6v8UjVt -2jSsX79e6s0HeFllx8XFBdnZ2XBzc6uQZcr/+Tw8PNS650xMTERISAiAl41uU1NT68w2kXcAfzW8 -XLx4keGlGEOHDsWaNWuk525ubiVqJxQaGgpLS0v069dPpdvYK1euICgoCGPGjCnxjwvvvfee9PjA -gQPVWpWS/v8JsBCixoWXV/e1+dsYFhZshBA4deoU+vTpgytXrkBXVxfbtm3DtGnT1MYt674//zGv -LMfE4n5AzLvCevnyZdy+fVulDFasWCHtIwu6DUFycjImT56MBQsW4M0335ReX7dunfQdu7u7qx2D -y3McLMk5AMMMUS2kVCrx9ddfY+DAgYiPj0dubi7kcjnGjx+Ptm3bVtlynDx5UuV5YVcJipK/u+bf -f/+9wHHkcjkOHTqETp06IT4+HhMmTFD5BT4hIQETJ05EmzZtEBgYWGDf/flPivJ6bcp/QPjzzz8B -vOxONDk5WWW4ra2tNI/58+fj4MGDeOedd/Dvv/9i3LhxGDdunBQ+PD090bx5c/To0QOmpqYwMzND -UlIS/P391U7oyrpMw4YNg4eHBwDg/v376NWrF1asWIHAwEBs27YNjo6OMDAwkA4O3bt3r3WX9gtz -7do1ZGVlMbyU0SeffIJ9+/ahWbNmSE1NhaurK9zc3HDy5EmVX3pTU1MRFBSEd955By4uLli2bJlK -d8qZmZmYNWuWtP2WVF6bhLyTr3nz5hV78keVa968eYiLi6tR4eVV58+fV1mP9u3bh5iYGPz999/4 -/fffcfjwYSxatAg9evTA4MGDce/ePbi5ueH69euFVpEs674/f2+BBQWK2NhY6XFB1aofPHggPX78 -+LHa8LyaDNnZ2bCzs4OXlxe8vb1hbm4OIQQcHBwAAGFhYXj//fdx7Ngx6bxi2rRpUCqV8PLyUpmn -kZGRVPvj8ePHmDJlikrwKM9xsCTnAJqe9ok0noGBgdi7d6/GLM+TJ0+Eg4OD2h2ZZTKZiIyMFEII -ERwcLACIxMTESlkGPz8/MWjQoALvCm1nZyc+/fTTYudx5swZ4erqKrS0tKRp9fT0xKRJk8T27dsL -nCYpKUnMmzdPNGrUSLz++utixowZ4sMPPxQmJibC3d1dxMXFqU0TGhoqxo8fr7KMXbp0EV9++aUQ -QoiTJ08KJycnleE9e/YU27Ztk+YRGxsrWrduLQ1//fXXxfnz56XhOTk5YsmSJdJdk/P+DAwMxMKF -C0VGRkaFL5NCoRDffPONaNq0qcp4JiYm4ty5c+L9998XhoaGwsPDQwQHBxd65+ayMjc3F76+vnVq -X9C2bds685nj4uLEkiVLRNu2bVX2MYaGhqJZs2YCgGjTpo1YtGiR2na3f/9+0blzZ2k6uVwuRo0a -JY4fP17o+/31119i8uTJol27dmr7lN69e4tffvml1pe5t7e3sLOzq1PblLe3d6F3oq+oY5WTk5PQ -1dVVW6/y/zVu3Fh06dJFjB07VmzatEk8fPiwRPMvzb7/119/FbNmzRJ6enoq+2tvb28RGxsr/v77 -bzFv3jzRvHlzabiurq7w8PAQFy5cEBkZGeLzzz8X7du3V9m23N3dRWBgoPQ+SqVSLF26VOX43KxZ -M+n44ezsLNq3by+8vb1FaGioyM3NFcHBweLtt98WAISRkZHw8fFR+Zznzp0TDg4OKp/R1tZWZZsu -7XGwLOcApRUZGSkAiNjY2ApftwIDA4WBgYGQCbZcpRqgSZMm8PX1Van+UJ2/Lo0ZMwYpKSkq7Tfk -cjkcHR1x6tQpAC97FLG3t0diYqL0C31tkpWVhT/++ANxcXFo2rQpevToodKjSmVIS0tDWFiY1PNV -QT38ZGRk4Pr160hISICRkRG6d+9eqp6AyloW169fR1xcHIyNjdGzZ0/I5XLExMTAxMRE5e7KFal7 -9+7w8PCQrhDVBSYmJvD29q5Tn1kIgdu3b+PPP/9EXFwclEoljI2N0bVrV3Tq1KlG3tFdUy1YsAAh -ISEIDg6uU585Kiqqxnd7Xh37/uK8ePEC169fR7169dCnTx+pDeE///yDdu3alfomzjWxLKKiotC9 -e3fExsZWeK2VY8eO4f3332fXzEQlpVAosGzZMixbtky6HPzq8C+++KLOlIeenh6srKyq9D0bNGgg -9RZXmHr16klV0qqyLPIaX+bXoUMHbjhUbjKZDJ06dVK5IS0RVf++vzhGRkYYNGiQ2uuVfdsCTSyL -ysQwQ1QCT58+xZgxYxAWFlZg3XEtLS1YWFhI9WCJiIiIqPKxAwCiYpw5cwbdunVDeHh4kb18LFy4 -kIVFRERExDBDVP0UCgUWL14MJycnJCQkqN3fJI9MJoOJiQlGjBjBQiMiIiKqQqxmRlSAR48eYfz4 -8QgLC5P69y+MtrY2vvjii0pryEdEREREDDNEJXLq1CkMHjwYurq6Jbp5lIGBASZNmsSCIyIiIqpi -/CmZKB8hBPbv3w8AhVYry09XVxdeXl68ISARERERwwxR9ZLJZNi+fTvWr18PLS2tYquO6ejoYMaM -GSw4IiIiIoYZIs0wZ84cnDlzBo0aNSr0hoe6urr46KOPauUNMYmIiIgYZohqMEdHR4SGhkJbW7vA -O2wrlUp4enqyoIiIiIgYZog0z6pVq9CsWTO4uLhAW1tbel1XVxeTJ0/Ga6+9xkIiIiIiYpgh0izr -1q1DQEAA/ve//+Hw4cNYvnw5tLS0IJPJkJ2dDS8vLxYSEREREcMMkWa5cOECPvvsM/j6+sLGxgYy -mQze3t4IDAyEEAI2Njbo2LEjC4qIiIioGvE+M0SvuH//PsaOHYtp06Zh6tSpKsOGDh2KW7duISsr -iwVFRERExDBDpDnS09Ph5uYGMzMzrFu3rsBxzMzMWFBEREREDDNEmsXDwwNPnz7F1atXeSNMIiIi -IoYZopohr8H/r7/+ipYtW7JAiIiIiBhmiDRfXoP/LVu2wMbGhgVCREREVAOwNzOq84pq8E9ERERE -DDNEGqkkDf6JiIiISDOxmhnVaWzwT0RERFQLwsz333+P77//Hg0aNGCpUIVTKBTIycnB//73Pxgb -G2vEMrHBPxEREVEtCTMxMTEIDQ2Fl5cXS4UqXFRUFM6fP4/MzEyNWB42+CciIiKqRWEGAJydnbFq -1SqWClVKmDl+/LhGLAsb/BMRERHVDuwAgOoUNvgnIiIiqj3YAQDVKWzwT0RERMQwQ1TjsME/ERER -EcMMUY3DBv9EREREtQ/bzFCtxwb/RERERAwzRDUOG/wTERER1V6sZka1Ghv8ExERETHMENU4bPBP -RERExDBDVOOwwT8RERFR7cc2M1TrsME/EREREcMMUY3DBv9EREREdQermVGtwgb/RERERAwzRDWO -pjb4X716NQwMDPgFUYWLioqqc5/54cOHWL16NZKTk7kCUKXsr83Nzevc5z527BhWr17NFaAYycnJ -uH//Ptq1a4eGDRuyQDTkOMUwQ7WCJjb4b9iwIUxMTHDixAloabFGJ1W8Nm3awMjIqE59ZkdHR9y/ -fx8HDhzgCkAVrl27dujZs2ed+sytWrVCmzZtuE29QqlUIi0tTeUvJycHMpkM+vr66NKlCwupBLKz -s2FqalqptWUYZqjG09QG/xYWFrh37x6/IKIKdObMGRYCUQX66KOP8NFHH9XpMlAoFIiOjkZ4eDgu -X76My5cv48aNGxBCoHPnznBycoKVlRVsbGwQFRWFhQsX4urVq1x5NATDDNVobPBPREREpfHo0SMp -tFy+fBnXrhOJlUQAACAASURBVF1DamoqWrZsCWtra4wfPx42Njbo06cPGjdurDLtjRs3WIAMM0QV -hw3+iYiIqDCpqam4evUqwsPDERYWhvDwcDx69Aj169dH7969YWVlhdmzZ8Pa2hpt27ZlgTHMEFUd -TW3wT0RERFWvuOpi1tbWWLhwIWxsbNCtWzfI5TwNZpghqiaa2OCfiIiIqk55qosRwwxRtdHUBv9E -RERUOVhdjBhmqFZgg38iIqLajdXFiGGGai02+CciIqpdWF2MGGaoTjhx4gT27dvHBv9EREQ1FKuL -EcMM1Um5ubn48ccfsXXrVjb4JyIiqgFYXYwYZojwssF/eno63n77bTb4JyIi0lCsLkYMM0SvyGvw -r6WlhUmTJrFAiIiINACrixHDDFEJeHh44NmzZ2jQoAEvPxMREVUDVhcjhhmiMli3bh0CAgLw66+/ -YsiQISwQIiKiKlCS6mLW1tawtLRkdTFimCEqyIULF/DZZ59hy5YtbPBPRERUSVhdjBhmiCrY/fv3 -MXbsWEybNo0N/omIiCoIq4sRw0wVCAoKgomJCbp06cJvpw7Ka/BvZmaGdevWsUCIiIjKiNXFiGGm -iimVSsydOxc2NjbYs2cPv506KK/B/5UrV6Crq8sCISIiKgFWFyOGGQ1w8uRJxMTEIDY2FqtXr8br -r7/Ob6gOyd/gv2XLliwQIiKiAigUCty4cUPlqgurixHDjAbYsGEDACAnJwe+vr5Yvnx5lb7/qVOn -4OTkxLWiGrDBPxERUcFYXYyoBoSZO3fuICgoCNra2lAoFNiyZQu+/PJL1KtXr0re/8CBA9i7dy/D -TDVgg38iIqKXWF2MqIaGGV9fX1hZWeHNN9/E7t27ER8fj71792LatGlVEqSmT58OBwcHrhFVjA3+ -iYiormJ1Mc329OlThISEYPTo0UWOFxMTg3/++Yc/iNflMJOamoqdO3di/fr1UpgBgP/+97+YOnUq -ZDJZieclhFAbX6lUQktLq8Dxnz17BmdnZyQlJZVqmYUQEEIUOt/yLFNFTfvqfACUqiyrAhv8ExFR -XcHqYjXLzZs3MW7cOMTFxaFp06aFjrdnzx4cPXqUYaaaaGnCQvj7+0Mul2Ps2LGwtLSEtbU1ACA6 -Ohpnz54tdvrc3FycP38eHh4eMDc3BwAkJiZi7ty5MDQ0hFwuh4WFBU6fPq0y3eXLl2Fra4s7d+4A -AEJDQ+Hi4gIXFxfMnz9f7X2ys7Ph6+sLa2tr6OvrQ0dHB127doWPjw+ysrIqZJnKO21+V69excSJ -E2Fvb4/Bgwejbdu26N27N3bs2CGFm+qU1+D/wIEDbPBPRES1SmpqKi5cuAAfHx+4ubmhdevWaN26 -NSZOnIjQ0FD06dMHO3bsQGxsLJ48eYJffvkFX3zxBQYMGMAgoyFsbGygq6uLkJCQIse7cOECHB0d -WWDVRfwfb29v4ezsLKqaUqkUXbt2FV5eXtJr/v7+AoAAUOwynTp1Sjg5OUnjt2jRQkRHR4uOHTsK -R0dH4eLiIurXry8ACB0dHfHHH39I0/7111/i9OnTwtjYWAAQtra24vTp0+L06dMiPDxc5X2ePn0q -+vTpI6ZPny4iIyPFo0ePxKFDh0SLFi0EANG3b1+RlpZW7mUqz7T5bdq0SchkMuHp6SkUCoUQQoi0 -tDRhZ2cnAIgVK1ZU6fccGRkpAIjY2FghhBDnz58XcrlcbN++vUTTGxgYiL179woiIiJNk5ubKyIj -I4Wfn5+YNm2aMDc3F9ra2kJLS0t06dJFfPDBB2Lz5s0iIiJC5OTksMBqkH79+olPPvlEer53717R -tm1b6Xl6errQ09MTR44cYWFVscDAQGFgYCCqPcycPXtWyGQycffuXem1zMxMKWAAEDdv3ix2PkOH -DhUAhL6+vrC0tBQRERHSsD/++ENoa2sLAGLKlClq05qYmAgAYsSIEQXOOzs7W/Tp00eMGjVKKJVK -lWH79++XltPb27vClqk80z548EAafurUKZVhAQEBAoBo1KiRyMrKqpYwExsbK4yMjIS7u3uJp2eY -ISIiTfHw4UPxv//9T8yfP1/0799fNGzYUAAQLVu2FCNGjBArVqwQZ86cEUlJSSysGm7x4sWiZ8+e -hYaZ8+fPC21tbZGQkMDCqqYwU+3VzDZu3AgXFxe0a9dOek1PTw8zZ86Unq9fv77Y+ZiamgIAMjMz -ERgYCAsLC2lY9+7d0bdvX6kqWWnt3LkTV69exZw5c9TanAwfPhz6+voAgK1btyI3N7dClqk8096+ -fRsKhQIAEBcXpzLM2NgYAJCSkoK7d+9W+fedkZHBBv9ERMTqYlQjODo64o8//kBCQkKBw8+fP4/u -3bujSZMmLKxqUq0dAMTGxuLw4cM4fvy42rCZM2di5cqVUCgU2LVrF5YvX15k4yttbW21E/b8WrVq -BQCIj48v9XL6+fkBAMLDwxEdHa02vFmzZnj8+DESEhJw48YNdO/evdzLVJ5p+/Xrh08//RRZWVkY -OXKkyrD8Yay0nR5UhC+//JIN/omISCOxdzF6lY2NDXR0dBASEgJXV1e14WwvU8fDzJYtW/DGG29g -0KBBBZ6su7m54cCBA0hPT8f27dvx+eefl/m98nr/EqVs+J6cnIxr165BW1sbT548KXCcMWPGqL1P -ZS5TcdPK5XJ8++23Kq+lp6cjICAAO3bskF5TKpVV/p0fOXIEFy9eZIN/IiKqduxdjIqjr68Pa2tr -XLhwQS3MZGRk4PLly/jss89YUHUxzGRkZMDPzw8KhUK6kvGq/FcdNmzYgHnz5lX5ryB3796FEAJK -pRJr1qxRuWJSE9y7dw/r16/HrVu3MHXqVCxZsqRauw5csWIFbGxsuOUREVGV4s0oqawcHBxw9OhR -tdcvX76M3Nxc2Nvbs5DqYpgJCAhAamoqfHx8iryasWLFCjx9+hQPHjzAoUOHVK6CVIW0tDQAL6+A -3L9/H+3bt68RX2xaWhoWLFgAf39/+Pr6Ys2aNZDJZLhw4UK1Ltft27dx//59HiiIiKjSsLoYVSRH -R0csX74ciYmJKq+zvUwdDjNCCGzYsAFjxozB3Llzixw3Pj4eX331FYCXN9Gs6jBTv3596XFISEiN -CDNJSUlwdHREREQEgoKCMGTIEI1Ztl69esHExASTJk2Cn58f280QEVG5sboYVaa8djPBwcEqr7O9 -jGaolt7MLl68iIiICEyfPr3YcWfOnAkdHR0AwKVLlxAeHl6ly2pqaio1mvfz8yuyfUtqaqpKL2zV -ZeXKlYiIiICJiYlGBRkAcHZ2BgD88MMPePPNN3HixAluhUREVGLsXYyqWv52M3ny2ss4ODiwgOpi -mFm9ejXMzMxKVMewZcuWGD16tPR87dq1ZXrPokJIXljJzs5WG9aoUSNYW1sDAIKDg7Fnz54C55Gb -m4spU6aUqj1KWRr+l2TavN7h9PT01Ibl5ORU+0oXFRUF4GV7JGdnZ4wcORL//PMPt0YiIlKhUCgQ -FRWF7du3Y/r06VKVngEDBmD37t1o0qQJFi5ciIiICCQlJeHixYv49ttvMWbMGFZnpgrl4OCA8+fP -S8/DwsLYXqauhpkrV64gKCgIY8aMUbtnS2Hee+896fGBAwfw999/F7jDK0reSXxBISCvy+fbt29L -w7Ozs/H48WMAgKenpzTutGnTsH79emRlZUmv3blzBy4uLsjOzoabm1uFLFN5ps3rpezOnTv4888/ -pdczMzOxe/dulV8VyhuqyqJbt2745JNPYGBgAF1dXcTExKBbt2746quvpGUiIiLNdP36ddy5c6dS -5v3o0SMcPHgQXl5ecHBwQJMmTdC9e3csWrQIL168wPjx43Hy5EkkJCQgOjoaO3bsgLu7OywsLNju -hSpV3v1m0tPTAbysYtajRw+2l6lrYSYzMxOzZs0CgFLtdPLfUFOhUGDevHlq3QrnDzjPnz9XGSaE -kE7qk5KSkJycrDLc1tZWmsf8+fNx8OBBvPPOO/j3338BAOPGjcO4ceOkEOHp6YnmzZujR48eMDU1 -hZmZGZKSkuDv768S0MqzTOWZNu/qkBACgwYNwsKFCzF79mz06NEDXbt2lcZbtWoVlixZgh9++KHK -V7wlS5ZAX18fPXr0wN27dzFr1ixs3rwZXbp0waFDh7hlEhFpmN9//x0jR45Er169EBAQUO75sboY -1SR57WZu3rwphRlWMdMQ4v94e3sLZ2dnUVn2798vOnfuLAAIAEIul4tRo0aJ48ePFzrNX3/9JSZP -nizatWsnTZf317t3b/HLL7+I0NBQMX78eJVhXbp0EV9++aUQQoiTJ08KJycnleE9e/YU27Ztk94n -NjZWtG7dWhr++uuvi/Pnz6ssS05OjliyZIlo1KiRyrwMDAzEwoULRUZGhjRueZapIj5PUlKScHBw -UBnH2dlZxMTECIVCIczNzaXXR40aJdLT00Vli4yMFABEbGys9NquXbuEvr6+mDx5sqhfv744dOiQ -mDt3rpDL5WLIkCHi1q1b0rgGBgZi7969goiIqtaVK1eEq6urkMlkwsnJSYSEhJR6Hrm5uSIyMlL4 -+fmJadOmCXNzc6GtrS20tLREly5dxAcffCA2b94sIiIiRE5ODgudNFK/fv3EsGHDRJs2bYSenp44 -cuQIC6UaBQYGCgMDAyET/1fHaMGCBYiKikJgYGCdDHVpaWkICwuDnp4eLC0tC2xvArysmnX9+nUk -JCTAyMgI3bt3L3Tcag6piIyMxJMnT/Dmm2/CxMREGpaSkoLQ0FA0b94cPXv2LHF1v/KIiopC9+7d -ERsbK9VjFkLA3t4eTZo0QYcOHeDn54fDhw+jRYsWmDNnDkJDQ/HJJ5/gyy+/ROvWreHr66tS5ZCI -iCpPeHg4vv76axw7dgxDhgzB4sWLpZoMxSmudzErKyv2LkY1zpIlS+Dv74/U1FTEx8cjLi6O1cyq -0bFjx/D++++DFUz/T4MGDTBgwIBix6tXr16Jd+bVSSaToUePHujRo4fasEaNGlXrjTPzL+PGjRvR -p08f/PLLLwCAESNG4PDhwzh//jwCAgLw6aefwt/fXyM6LiAiqgvCwsLw9ddfIygoCMOGDUNYWJjU -EU5BeDNKqivy7jfToEEDtpfRIAwzVK0sLCwwY8YMzJs3D5GRkSqB5t1334Wrqyu+/vprfPPNN1i+ -fLlaux8iIqoYv/32G77++mucPn0azs7OCA8Ph6Wlpco4vBkl1WXW1taQy+VISUlhexmGGaL/b9my -Zfj555/x7bffSl1v5wWagQMHwsfHB1u2bIFcLoeFhQXmzJmDxYsX8xcRIqIKEBwcjKVLl+LcuXNw -dXXFlStX0Lt3bwBFVxezsrLizSipTqlXrx7Mzc1x7do1hhmGGaL/z9DQECtXroSnpycmT55cYKDR -0tKCt7c39PX1MW/ePAQEBGD9+vUq9yAiIqKS+/XXX7F06VJcuHABI0eOREhICLKzs3H27FmsWLGC -1cWICtC8eXMA4P1lGGaIVH344YfYunUrPv30Uxw4cEAt0ORxc3PD0KFDsXLlSrXuuYmIqHjnz5/H -0qVLERwcjF69emHUqFG4c+cO+vXrx+piRMXw9vbGixcvWDuEYYZIlZaWFjZs2IC+ffvi1KlTcHJy -Ugk0+Xtcq1evHpYtW8ZCIyIqhb1792LChAkAAG1tbSiVSsTGxsLIyAgjR47E2rVrWV2MqBjW1tYY -PHgwC4JhhkidjY0NPvzwQ3h6eiIyMhI6OjpSoFm/fr10o9Ca4s8//8TEiRPRrFkzaGlp8QumCvf8 -+XMsX74crq6udeYzv/POO3j48CFPuEshOTkZMTEx0o2ggZcN+QHgxYsXCAoKQlBQEJYtWwaZTCZd -hcn7r6Ojo/JcLpdDJpNBW1sbLVq0gKGhYa0pq3///RdvvfUWNmzYUGfWj++//x7r16+HsbExN5YS -ysrKwqBBg1gQJZCdnY309HQcO3as0tYxhhnSKCtXroSZmRnWrVuHzz77DDKZDGvXrsWWLVuwZs0a -vP322xg4cGCN+CyJiYm4fv063N3dYWBgwC+XKtzq1avx8OHDOvWZDx48iMaNG8PDw4MrQCk4OjpK -ISYnJ0f6r1QqkZ2drfZfCIGsrCzpf94JHABkZmZK/9u3b4+OHTvWqm0qOzu7Tq0bMTExiIyMhJeX -FzcUqnBRUVG4ePGitN9gmKFaz8jICEuXLsWXX36Jd999F61atYJMJoO+vj5sbW1VOgWoKVatWsUw -Q5Xi+PHjde4zt23bFt7e3gwzVClkMhlCQkLq3Od2dnbGqlWruAJQpYSZyj5Wse4LaZzZs2ejQ4cO -mD9/vsrrEyZMwPTp0zFixAicOXOGBUVERERUxzHMkMbR1tbG+vXrERAQgODgYOn1vCpnDDRERERE -BLCaGWkoe3t7zJw5E8+ePVN5PS/QAKiRVc6IiIiIiGGG6gBfX98CX2egISIiIiKGGaqxGGiIiIiI -iGGGGGiIiIiIiGGGiIGGiIiIiBhmiBhoiIiIiIhhhhhoiIiIiIhhhoiBhoiIiIgYZogYaIiIiIiI -YYaIgYaIiIiIYYaIgYaIiIiIGGaIGGiIiIiIiGGGiIGGiIiIiBhmiIGGiIiIiBhmiBhoiIiIiIhh -hoiBhoiIiIgYZogYaIiIiIgYZogYaIiIiIiIYYaIgYaIiIiIGGaIGGiIiIiIGGaIGGiIiIiIiGGG -iIGGiIiIiBhmiBhoiIiIiIhhhoiBhoiIiIhhhoiBhoiIiIiqNcxcuHABZ86cYalQhYuKimKgISIi -IqLKCzNpaWkYNGgQS4XqPAYaIiIiohoUZv7zn//gP//5D0uEiIGGiIiIqGaFGSJioCmMEALh4eE4 -ceIEnj17BmNjY1haWuLtt99GvXr1kJiYiJ9//hnTpk2Tpnnw4AGSkpLK/J6GhoZ47bXXih0vKysL -ISEhuHr1Kh49egSFQgFDQ0N06NABNjY26NixI2QyGZ48eYJTp05h8uTJXLGpWgUFBcHExARdunTR -mGV69uwZAgMDce7cOezdu1dl2L179+Dh4QEDAwNs3boVBgYG/BKpytbLFy9eFDq8adOmaNWqVYHH -rOjo6AKnad++PRo0aFBh63ZR2w4xzBAx0GiAFy9eYNKkSThx4gSaN28OW1tb3L9/H76+vsjKyoKL -iwsePnwIuVyuEmb+/PNPBAYG4qeffkJCQoLKPLW0tCCTyaTnSqUSQgiVcT7++GOp3Avy77//wsfH -B9u2bUNCQgKaNGkCS0tLGBsb48GDB9i+fTuePHkCU1NT2NnZISwsDD179mSYoWqlVCoxd+5c2NjY -YM+ePdW+PFu3bsX27dtx7do1CCFgaGioNs6aNWtw4sQJAICtrS08PT35RVKV+Oeff+Dn54ddu3ap -HCM6deqE8ePHo1+/foWGmaCgIPz22284fPgwAMDAwACzZs3CRx99JIWZ8qzbJdl2qIoIohrAwMBA -7N27t1qXQalUCk9PT1G/fn1x+vTpYscPDg4WAERiYmKNLfeMjAxhYWEhAIjJkyeLjIwMaVh2drbY -vHmzqFevngAgOnfuXOA8QkJCBADpLyQkpMDxsrKyxO3bt8WSJUsEADFr1qxCl+vEiRPC2NhYABAt -W7YUe/bsEdnZ2SrjKBQKcfToUfHGG29I7+3q6lqrtgtzc3Ph6+tbp/YFbdu2rdGf+fjx4wKA0NHR -EY8ePar25VEqlSIpKUl07dpVABCGhoZq42zbtk0AEDKZTJw9e7ZWr1/e3t7Czs6uTm1T3t7ewtnZ -WaOX0cfHR+U48tNPP5V42i5duggA4sSJExW6bpdk2yEhIiMjBQARGxtb4fMODAwUBgYGQotxjqh0 -V2imT5+OESNG1Ime/7Zt24br16+jSZMm2Lx5M/T19aVhOjo6cHd3x5kzZ1CvXj08evSowHlYWVmp -PC/oVzQA0NXVRceOHfHVV19h8uTJyMnJKXC8H3/8EcOGDcPz58/RtWtXREREYMKECdDR0VG7+uPi -4oJr167BxsYGAJCens4VmarVhg0bAAA5OTnw9fXViP1a48aN0b1790LHmT59Oi5fvoyoqCi8/fbb -/BKpys2bNw9vvvmm9DwkJKSkP9gjLi4OdnZ2GDx4cIWu2yXZdqhqMMwQMdAU6siRIwAAU1NT1KtX -r8Bx3nrrLXzzzTdISUlBSkqK2nAdHR1oaZVuVzNu3DhkZ2ervX716lVMmTIFSqUSDRs2xNGjR9Gy -Zcsi59WkSRMcOXIERkZGSEtL40pM1ebOnTsICgqCtrY2AGDLli3IyMjQjJOBYrZRKysrdO3alV8i -VQu5XI7FixdLz/39/Uu0Pw8PD8fz58/x0UcfVdq6XdrjGzHMEDHQVKHHjx9LJ2FFXdWYPn06WrRo -IY1fUJmVhqOjI5YuXarymlKpxIwZM6QrNvPnz0f79u1LND8jIyN4eXnxygxVK19fX1hZWWHChAkA -gPj4eDYYJiqh0aNHw8TEBACQlJSEHTt2FDvN999/j+bNm2PkyJEsQIYZIqqLgaZJkyYAgOTkZCxY -sKDQ8XR1dTFp0iT8+++/5X7PFy9eQF9fXzpo5Tlx4gQiIiIAANra2nB3dy/VfCdNmoSsrCyuvFQt -UlNTsXPnTsyePRuzZ8+WXv/vf/+r1vlFVRBCQKlUlmm6kirL/IkKI5fL8fHHH0vP165dC4VCUej4 -KSkp+PHHHzF58mTo6elV2Lpd1m2nPNNyW2KYIWKgKaP8N9Fdv349Pv744wKrfwGAj48PbG1ty/V+ -SqWy0J7ifvzxR+mxra0tjIyMSjVvIyMj7Ny5kysuVQt/f3/I5XKMHTsWlpaWsLa2BgBER0fj7Nmz -RU67f/9+jB8/Hi4uLnBxcVGpbpOUlIS5c+di+PDh0vBXr2rmd+zYMQwcOBCvvfYaOnTogJ49e+LA -gQNFvn9KSgp++OEHDB48GOvWrSvyRC0wMBDDhw+Hqakp2rdvj8aNG6N///7w8/MrtB0cUUlNnTpV -6j757t27Uk9lhR0z0tLSMH369HKv22XddgAgOzsbvr6+sLa2hr6+PnR0dNC1a1f4+PgU+gMbt6XS -p0Qi9mZWCb2c1YbezOLi4sRrr72m0ouMhYWFCA8PL9V8tLW1penv3r1b6HghISHCxMSkwGGtWrWS -5uHp6cmNgr2Z1RhKpVJ07dpVeHl5Sa/5+/tL63NJepK6d++ekMvlAoAYPHiw2vDo6GhpOytofgqF -QsyePVvI5XKxZcsWqfe/6OhoYWFhIRo1aqTWI1N0dLQYO3as0NfXl5b1m2++KXD50tPTxejRo4We -np7YvXu3yMnJEUIIcfv2bdG3b18BQPTo0aNSejRib2a1vzez/D7//HNpfezbt2+h21zPnj1Fv379 -ChxemnW7LNtOnqdPn4o+ffqI6dOni8jISPHo0SNx6NAh0aJFC2n509LSauW2VJW9mTHMEMNMJQWa -2hBmhBDi999/F82bN1cJNADExIkTxcOHD0sdZg4ePChCQ0NV/n799VexZcsW0a5duwLDTHJyssp7 -r1mzhhsFw0yNcfbsWSGTyVSCfGZmptS9OABx8+bNYudjampaaJgRQggTE5NCw8yiRYsK3XYeP34s -GjRooHZClpqaKjIzM8Xu3buLPOFTKpVi7NixAkCB301KSoro3LmzACA6deokUlJSGGYYZsrswYMH -UrAHIMLCwtTGuXLligAg/P39C5xHSdftsm47Qry8fUGfPn3EqFGjhFKpVBm2f/9+6X29vb1r5bZU -lWGG1cyIWOWsSD179sS1a9fUuq3cs2cPOnfujG3btpWqHr2bmxtsbW1V/vr37w93d3fcu3evwGni -4uJUnjds2JArHdUYGzduhIuLC9q1aye9pqenh5kzZ6pU4yyOXC4v0/C//voLK1euhKGhYYG9Or32 -2msYMGCA2usNGjSAnp4e7O3ti3zfoKAg7N+/H02bNsXUqVPVhjds2BA+Pj4AgFu3buE///kPVwoq -s9atW2PcuHHS8++++05tnK1bt6Jp06Z45513CpxHSdftsm47ALBz505cvXoVc+bMUesEZ/jw4dKt -DrZu3Yrc3FxuS+XAMENUSYHm6tWrteaztW3bFmfOnMG+ffvwxhtvSK+npqZi5syZRd4X5lU3b95E -RkaG9Jeeno6kpCRcvXoVffv2LdE8imr0SaRJYmNjcfjwYZVG/3lmzpwpddO8a9cuJCQkVMoyrFu3 -DgqFAgMHDoSurm6B4zRq1KjQ6V+9h9Or8u6XY2VlVej8hw0bBmNjY7WTN6Ky+OSTT6THP//8M2Jj -Y6XnycnJ+OmnnzBx4kSVe6OVZd0uz7bj5+cH4GX30Bs3blT58/PzQ7NmzQAACQkJuHHjBrclhhki -zQs0RfX+VVM/29ixY3Hjxg0sXbpU5VfgPXv2YPLkySW6QqOnpwd9fX3pr169emjcuDF69+6NzZs3 -FzhN06ZNVZ6/eqWGSFNt2bIFb7zxhkpnGnlatWoFNzc3AC9v6Lp9+/YKf38hhNRIunPnzhU+f6VS -iQsXLgAAmjdvXuh42tra6N+/P4CXXVJHR0dz5aAy69WrFxwcHKR1MP+VzZI0/K/sbSc5ORnXrl2D -trY2njx5gpiYGLW/MWPGwNPTE56entDS0uK2VA5ybhJElRNoHj9+XKKeTmoaPT09LF68GEOGDMGI -ESPw9OlTAMBPP/2EUaNGYcyYMWWed7du3dCqVSu115s0aQJjY2M8f/4cABATE8MVjTReRkYG/Pz8 -oFAoCr1LeHx8vPR4w4YNmDdvXrHVyUrjxYsX0jZa1NWXsoqPj5duXljcL8SdOnWSHj98+BA9evTg -SkJl9umnn0on/35+fliyZAkaNWqErVu3wtbWFt26dau2befu3btSN8xr1qyRrsAW937clhhmiDQq -0MyZM6dGh5nU1FQ0aNCg0BteWllZITg4GLa2ttKVEl9f33KFGZlMht9++63AYXZ2djh48CAAIDQ0 -lCsZDE9QJwAAGAdJREFUabyAgACkpqbCx8enyLuEr1ixAk+fPsWDBw9w6NChcm1Dr8p/FTMzM7PC -P2P+Kp95J36FMTQ0lB6X5OSOqCjDhg1Dp06dcOvWLaSkpGD79u2wt7fH9evXK6Qb/vJsO3mhRAiB -+/fvl+gGz9yWGGaINDLQ1GTu7u6YNWsW3nrrrULH6dChA3x8fPDhhx8CAP74448KXYaHDx/CyMgI -enp6GDt2rBRm7ty5g6ioKJibm3NFI40khMCGDRswZswYzJ07t8hx4+Pj8dVXXwF4eRPNigwz+W8W -+Pfff1f452zevDl0dHSQk5OD6OhoCCEK3fflv/Ff/rZ3RGWhpaWFTz75ROpIY926dYiMjETjxo0r -ZBsqz7ZTv3596XFISEiJwgy3pXKsC9wciKiwoLJ8+fJix8t/o8yS3GW5pJKSkmBpaSldbndzc1M5 -IBTUgw2Rprh48SIiIiJKVG9/5syZUkPkS5cuITw8vMwB6lWtW7eW5n3hwoVS9TxYEnK5XLoBaFxc -nNSQuSBPnjwB8LKtUMeOHbmSULlNnDhRal9y//597N69GxMmTECDBg3KPe/ybDumpqZSEPHz8yty -2ryOdLgtMcwQUSWEmaCgoCLvsAy8bBeQx8bGpsQnWcVZtGgROnfuLB2UdHR0sGnTJmn4rl27cPr0 -6RLPLzExEa6urnj27Bm/XKp0q1evhpmZWbFdvwJAy5YtMXr0aOn52rVrCxwvrzpJenp6gdtYSkqK -2ut6enpSY+G7d+8iKCioyG20oG21uO33gw8+kB4HBAQUOl5eSHN3d6/xV65JM9SrVw+zZs1Sea00 -Df+LWrfLs+00atRICibBwcHYs2dPgdPm5uZiypQpcHJy4rbEMENElRFm8nauRf1ClL9dUP7uMvNk -ZmaqXBIv7sQor3rOhg0b1HqAGjp0KNasWSM9d3NzQ2BgYLGfJTQ0FJaWlujXrx9atGjBL5cq1ZUr -VxAUFIQxY8aU+ETjvffeU9mmCqrWkndl8vLly7h9+7b0ukKhwIoVK6SQk79TAQCYN2+e9NjDwwMP -Hz5UC/ohISEAXvbClJqaqjI8f7frBTVMnjRpEiwtLQEAmzdvRmJioto4t2/fRnBwMMzMzFSWh6i8 -Zs2aJdUK6NOnDywsLEo8bXHrdnm2HU9PT+nxtGnTsH79emRlZUmv3blzBy4uLsjOzpZ6NeS2xDBD -RJUQZhISEmBnZ4effvpJpYGiUqnEjh07pBt4LV++vMBfoV8NGzt27EBYWBhiYmJw79493L17Fzdv -3sTFixexadMm2NvbS20MBg4cqDa/Tz75BPv27UOzZs2QmpoKV1dXuLm54eTJkyq/WKempiIoKAjv -vPMOXFxcsGzZMnz++ef8YqlSZWZmSr8Ul6ZXsvw31FQoFJg3b57KjwB5PywAQHZ2Nuzs7ODl5QVv -b2+Ym5tDCCF1VRsWFob3338fx44dA/CyobSHhweAl1VxevXqhRUrViAwMBDbtm2Do6MjDAwMpBO6 -7t27q9zQM/+PGbdu3VJbdrlcjkOHDqFTp06Ij4/HhAkTpAbQefuQiRMnok2bNggMDKyQKkBEeVq0 -aIGJEycCAGbMmFGqaYtbt8uz7YwbN066uWdOTg48PT3RvHlz9OjRA6ampjAzM0NSUhL8/f2lHz24 -LZWRIKoBDAwMxN69e2vUMgcHBwsAIjExsUaWuVKpFAYGBmLJkiXCy8tLmJmZiRYtWoghQ4YIV1dX -0bZtWwFAmJqaip9//lltej8/PzFgwAChra0tAJT6z8DAQOTm5ha6fHFxcWLJkiXScgAQMplMGBoa -imbNmgkAok2bNmLRokUiLi6uVm4X5ubmwtfXt07tC9q2bauxn3n//v2ic+fO0vool8vFqFGjxPHj -xwud5q+//hKTJ08W7dq1U9sGevfuLX755ReVbXLp0qVCLpdL4zRr1kxs27ZNCCGEs7OzaN++vfD2 -9hahoaEq249CoRDffPONaNq0qcp7mJiYiHPnzon33/9/7d1/dNV1/cDxF9vdxgZzTn4VET/q2DIC -A9EgEaxOBxI9kOmRUA6dOqEQET+UMDrQOXKC6mQHS4qAlHM8mgdPHTMMzBN4GHFU1CUJyVkonFJ+ -jDMYsrGN7dMfftnXxa8pG9y7PR5/7W73fnbv+3Mv7LnPfX12e9KtW7dk2rRpyebNm5OGhoZk06ZN -yYwZM5Lu3bs3e41NnDgxeeyxx055LEeOHElmz56dFBYWJr17906mTp2afOMb30j69euX3HXXXRnx -Opw/f34ycuTIDvWamj9/fjJu3LiMfgw7duxICgsLk6qqqhZd//08tz/Ia+ek+vr6ZNGiRUlhYeEp -/7/94Ac/SGpqak57/9rDa+mkV199NYmIZM+ePa2+7T/96U9JUVFR0ilp7WlAaAOXXnppLF++vNlb -MdJdaWlpXHfddXH48OGm39xkmqeffjpuuOGGk7/4iF27dkVZWVkcOnQo8vPzY9CgQTF06NCznnb2 -AvxCJnbt2hX/+Mc/oqKiIhobG6Nnz54xcODAKCkpadfvJx48eHBMmzat6TeHHUG/fv1i/vz5Heox -/6+DBw9GWVlZ5Ofnx7Bhw5r+yvnu3bujf//+Z3091tbWRllZWVRUVETPnj1jyJAhkUqlory8PPr1 -63fOv4jeErW1tfH3v/89Kioqori4OK688spmZ3dKZ/fee2+UlpbG5s2bO8zz6d57743t27e36C27 -6ezll1+OoUOHttn2z+e1U1NTE2VlZVFZWRk9evSIwYMHt+iEOZn8Wjpp+/btMXjw4NizZ0/07du3 -Vbe9bt26uP32252aGTizkyET8e6ppktKSpr9sa50kK73C9pKjx49Tpkni2jZKVrz8vKaBpPf6+Tb -SltDXl5eXHPNNXYUF1Rbhsz5vnby8/ObnfnTa6l1mZkBAADEDAAAgJgBAAAQMwAAgJgBAAAQMwAA -AGIGAAAQMwAAAGIGAABAzAAAAIgZAABAzAAAAIgZAAAAMQMAAIgZAAAAMQMAACBmAAAAMQMAACBm -AAAAxAwAAICYAQAAxAwAAICYAQAAEDMAAICYAQAAEDMAAABiBgAAEDMAAABiBgAAQMwAAACIGQAA -QMwAAACIGQAAADEDAACIGQAAgDSTsgTQttauXRtFRUUWgla3ffv2DveYKyoqYu3atdG9e/cO85gb -Ghri+PHj0aVLF096/163iXXr1sXatWs9AVqguro68vPzo1OnThYjTf6fEjPQVi+u1Lsvr9mzZ0dO -To4FoU3k5eV1qMdbVFQUGzdujLKysg7zmOvq6qK6ujry8vKic+fOfohqQ5WVlTF69OgO9Zjz8/Mj -IuLOO+/0BDiH2traqKmpiYKCgsjNzbUgLXDkyJGIiMjKars3g4kZaCPDhw+PJEksBLSit956q8M9 -5rq6uli1alUsXbo0qqqqYubMmTFr1qwoLi72hOC8LVy4MBYuXGghzmL9+vUxd+7c2Lt3b9x3330x -Z86cpgjk4jMzAwBpLDc3N6ZPnx7l5eXxox/9KB566KEYMGBALFq0KCorKy0QtJHy8vIYP358jBs3 -LoYPHx67du2KBQsWCBkxAwCIGkhPhw8fjrvvvjsGDhwYVVVVsW3btli9enV8+MMftjhiBgAQNZB+ -Tpw4EcuXL4/LL7881q5dG2vWrImNGzfGkCFDLI6YAQBEDaSn9evXx5VXXhnf+973YtasWfHPf/4z -Jk6caGHEDAAgaiA9mYsRMwCAqIGMYi5GzAAAogYyirkYMQMAiBrIOOZixAwAIGogo5iLETMAQDuN -moULF4oa2iVzMWIGAGjnUfPwww+LGtoVczFiBgAQNZBxzMWIGQBA1IgaMkp5eXlMmDDBXIyYAQBE -jaghM7x3LubIkSPmYsQMACBqRA3pzVwMYgYAEDVkHHMxiBkAQNSQUczFIGYAAFFDRjEXg5gBAFo9 -apYsWSJqaDPmYhAzAECbRc20adNEDW3CXAwt1SlJksQykPZP1E6dYvDgwTFp0iSLAZCGGhoa4sUX -X4yNGzdGbW1tXHvttTFy5EjzDLwvhw4dinXr1sXOnTvjqquuijFjxkRhYaGF4RTr1q2LzZs3ixky -wzXXXBNVVVXRtWtXiwGQxpIkiYqKiti3b180NDREz549o1evXpGdnW1xOGsMv/3223HgwIHo2rVr -9OnTJwoKCiwMZ1RdXR1du3YVMwBA66urq4vVq1fHkiVLoqqqKmbOnBmzZ8+O4uJii0OTEydOxG9+ -85tYtGhRFBQUxI9//GNvJ+N9ETMAgKjhglu/fn3MnTs39u7dG/Pnz485c+Z4WyJiBgAQNaSv8vLy -uPvuu+Opp56Kr3/967F48WKnWeYDczYzAKDNOfsZ/l4MbcGRGQDggnOkpuMwF4OYAQBEDRnHXAxi -BgAQNWQUczFcKGZmAICLzkxN+2AuhgvNkRkAIO04UpNZzMUgZgAARE3GMReDmAEAEDUZxVwM6cDM -DACQ9szUpA9zMaQTR2YAgIzjSM2FZy4GMQMAIGoyjrkYxAwAgKjJKOZiSHdmZgCAjGempnWZiyFT -ODIDALQ7jtR8MP87F7N06dL42te+ZmEQMwAAoiZ9mYtBzAAAiJqMYi6GTGZmBgBo98zUnMpcDO2B -IzMAQIfTHo/UvPnmm/Hmm2/G9ddff9brmYtBzAAAdPCoOXbsWDz77LMxfvz4i/44du3aFSUlJU2P -KScn57TXMxdDe+NtZgBAh3U+bz/75S9/GRMmTIilS5de1Mewc+fOuPbaayM7OzuysrLigQceOOU6 -5eXlMWHChBg3blwMHz48du3aFQsWLBAyZDxHZgAA/k9Lj9QcO3YsPvrRj0ZlZWVkZ2fHlClTYsWK -FZFKpS7o/S0rK4svfOELcfTo0Thx4kRERHTp0iXeeOON6NGjRxw+fDgWL14cv/jFL+Jzn/tc3H// -/TFkyBA7GjEDANBRo+anP/1pLFiwIOrr6yMiIicnJ0aOHBl/+MMfoqio6ILcx5deeik+//nPR3V1 -dTQ0NDR9Pjc3NyZNmhRXX321uRjEDACAqPn/qLnzzjtj0KBBp7wNLTc3NwYMGBDPPPNM9O3bt03v -15YtW2LMmDFx/PjxZiHzXgUFBfH973/fXAxiBgBA1LwbNQcPHoz6+vrTRkROTk5ccsklsWHDhrjq -qqva5L5s2rQpvvzlL0ddXV00Njae9jpZWVkxZMiQ2LZtm52HmAEAIKKysjL69OkT1dXVZ7xOdnZ2 -pFKpePzxx1v9TGcbNmyI8ePHR319/RlD5r1B87vf/S5uvfVWO452y9nMAABaaNWqVU1zMmfS0NAQ -dXV1cfPNN8eyZcta7Xs/9dRTceONN571iMx7JUkS3/3ud+P48eN2HGIGAKAjO3bsWCxZsuScMXMy -JBobG2POnDnx7W9/+4xzLS31xBNPxM033xwnTpyIlr6pJkmSePvtty/6qaNBzAAAXGTLli2Lo0eP -vq/bNDY2xsqVK+Omm26Kd9555wN930ceeSRuu+229xVEeXl50alTp4iIeO2118JUAe2VmRkAgHOo -qamJgoKCiHj3rGV1dXXv6/a5ubnxiU98IjZs2BC9e/du8e1Wr14dU6dObdF8TCqVirq6uhgwYEBM -mDAhxo4dG6NGjYrOnTvbgYgZAICObN++fbF169bYunVrPPfcc1FWVhZ1dXWRl5fXooH8nJycKC4u -jmeffTYGDRp0zu/34IMPxne+850zHlXJy8uLurq6yM3NjS9+8Ytx0003xdixY6N///52FmIGAIAz -q6+vj5dffjmef/75+Nvf/habNm2K/fv3RyqViuzs7KitrT3lNllZWZGXlxe///3vY+zYsWfc9s9+ -9rOYN29es0By9AXEDABAm/nPf/4TL7zwQmzZsiU2bdoUr776atTX10fnzp2jtra22VGWX/3qV3HX -XXedso377rsvFi5cGBHvnua5sbHR0RcQMwAAF1ZdXV288sorsXXr1ti8eXOUlpbGgQMHmr7+pS99 -KdavXx9ZWe+ek2natGnx61//OiIi+vfvH1/5ylccfQExAwBcKPv27Ys//vGPFuIMDh8+HP/617/i -6aefjoaGhujbt2/ccccdsX79+vj3v/8dH/rQh2L06NHRrVs3i3UWI0eOjE996lMWQsyIGQCg9ZSW -lsZ1110XvXr1ii5duliQczj5N2mysrKaTqfM2e3evTuWL18e06ZNsxgdXMoSAABt4fXXX4+ioiIL -QasbPHiwRSAi/NFMAABAzAAAAIgZAAAAMQMAAIgZAAAAMQMAACBmAAAAMQMAACBmAAAAxAwAAICY -AQAAxAwAAICYAQAAEDMAAICYAQAAEDMAAABiBgAAEDMAAABiBgAAQMwAAACIGQAAQMwAAACIGQAA -ADEDAACIGQAAADEDAAAgZgAAADEDAAAgZgAAAMQMAACAmAEAANqBlCUAADh/VVVVsXfv3vP7wSyV -ik9+8pOxf//+OHjw4BmvV1xcHB/5yEdO+XySJPHaa6+d9jYDBgyILl262FGIGQAAmvvLX/4St9xy -y3lto2fPnrF///7YvXt3rFy5Mh5++OFIkqTp6yUlJTFx4sQYNWrUGWPmz3/+c2zZsiWefPLJiIgo -KiqK6dOnx4wZM8QMYgYAgFPV1NRERETv3r1jwYIF8dnPfjYuu+yySKVSUVpaGpMmTYqIiI997GPx -3HPPRZIkcfz48XjrrbfiySefjGXLljVtY8SIETFixIi44oorYt68eU3f44c//GFMnDjxjPchKysr -7rnnnrjnnnti4MCBsWPHjnj88cdjzJgxdhBiBgCA06uuro6cnJz461//GiUlJc2+1qNHj6aPc3Jy -ok+fPk2XL7/88hg9enRceumlsXjx4ma3mz17djz00EOxc+fOiIgoLS09a8yclCRJVFRUxMiRI4UM -7ZoTAAAAtIKampoYP378KSHTUjNmzIjGxsZoaGho+lwqlYqFCxc2XX7kkUfi2LFj59zWCy+8EAcO -HIgZM2bYMYgZAADOHTPjxo37wLe/7LLLYtiwYXH8+PFmn7/llluiX79+ERFx5MiR+O1vf3vOba1e -vTq6d+8eEyZMsGMQMwAAnN28efNiypQp57WNLVu2REFBQbPPpVKpmDVrVtPln//8582O3vyvo0eP -xqOPPhpTpkyJvLw8OwYxAwDAOX6oysqKTp06ndc2srOzT7uNb37zm1FUVBQREW+88UbTmcpO59FH -H41jx47Ft771LTsFMQMAwMVVWFgYU6dObbp8//33n/Z6SZLEihUrYtSoUR94dgfEDAAArWrmzJmR -Sr17ItotW7bE888/f8p1XnrppXjllVeahQ+IGQAALqo+ffrEbbfd1nT5dEdnVqxYEcXFxfHVr37V -giFmAABIH3PmzGn6+Iknnog9e/Y0Xa6qqorHHnssJk+eHJ07d7ZYiBkAANLH0KFD4/rrr4+IiMbG -xnjggQeavmbwHzEDAEBamzt3btPHK1eujKqqqqbB/xEjRsSnP/1pi4SYAQAg/dxwww1NZyo7evRo -rFq1KrZt2xZlZWUG/xEzAACk8Q9vWVnNZmeWLVsWDz74YFxyySVx6623WiDEDAAA6Wvy5MnRvXv3 -iIjYu3dvrFmzJu64447o0qWLxUHMAADQehobG1t1e/n5+TF9+vRmnzP4j5gBAKDVvfPOO00f19TU -tMo2p0+fHnl5eRERMWzYsPjMZz5joREzAAC0rmeeeabp471798aOHTvOe5u9evWKyZMnR0QY/EfM -AADQeg4dOhRTpkyJIUOGxIoVK5p97eqrr44bb7wxfvKTn5zX95gzZ04UFhbGxIkTLTgdUsoSAAC0 -vm7dusWaNWva9HtcccUVsWnTpigsLLTgdEiOzAAAZLChQ4daBMQMAACAmAEAABAzAAAAYgYAABAz -AAAAYgYAAEDMAAAAYgYAAEDMAAAAiBkAAEDMAAAAiBkAAAAxAwAAIGYAAAAxAwAAIGYAAADEDAAA -IGYAAADEDAAAgJgBAADEjCUAAADEDAAAgJgBAAAQMwAAgJgBAAAQMwAAAGIGAAAQMwAAAGIGAABA -zAAAAIgZAABAzAAAAIgZAAAAMQMAAIgZAACA9JCyBABAW+jVq1cUFBRYCFpdZWWlRSAiIjolSZJY -BgCgtVRUVMTGjRstBG1q6NCh8fGPf9xCiBkxAwAAZB4zMwAAQEZKvb79xaYLJYOutiIAAEBGcGQG -AADISP8FpxZnWS0U37cAAAAASUVORK5CYII= diff --git a/Documentation/DocBook/media/fieldseq_bt.gif.b64 b/Documentation/DocBook/media/fieldseq_bt.gif.b64 deleted file mode 100644 index b5b557b88158..000000000000 --- a/Documentation/DocBook/media/fieldseq_bt.gif.b64 +++ /dev/null @@ -1,447 +0,0 @@ -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 -l3O5NwEBADs= diff --git a/Documentation/DocBook/media/fieldseq_tb.gif.b64 b/Documentation/DocBook/media/fieldseq_tb.gif.b64 deleted file mode 100644 index 7b4c1766b407..000000000000 --- a/Documentation/DocBook/media/fieldseq_tb.gif.b64 +++ /dev/null @@ -1,445 +0,0 @@ -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 -kh6JXympkivJkm4TEAA7 diff --git a/Documentation/DocBook/media/nv12mt.gif.b64 b/Documentation/DocBook/media/nv12mt.gif.b64 deleted file mode 100644 index 083a7c85d107..000000000000 --- a/Documentation/DocBook/media/nv12mt.gif.b64 +++ /dev/null @@ -1,37 +0,0 @@ -R0lGODlhFgFnAMZnAAAAAAYCAgAASAwFBQAAdEgAACQODkgASCoQEEgAdHQAADATEjUVFHQASDsX -F3QAdE0eHVMhIABISABInEhIAIM0Mok2NI84Nk9PT5o9O5xIAHRInFlZWaxEQbhJRgB0v75LSLhQ -TbRTUcBRTrBXVatcWsJWVKdfXW9vb6VhX0h0v8RcWZhpaJJubpBwb8ZiX8ZiYI5zc4t1dYd4eMhn -Zb90AIN8fH9/f8pracpta8ttasxzcM51dM52dM53dc94dkic39F+fNOEgpmZmdWJh9ePjdiTkt+c -SNuamd2gnt6lo3S//5y/nOCqqeKwr+S1tOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0fHX -1//fnPPd3fTe3vXj4vfo6Pnu7r////v09N////35+f//v///3/////////////////////////// -/////////////////////////////////////////////////////////////////////////yH+ -FE5WMTJNVCBtZW1vcnkgbGF5b3V0ACwAAAAAFgFnAAAH/oBngoOEhYaHiImKi4yNjo+QkZKTlJWW -l5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGmkM3ysvMzc7P -0NHS0CjT1tfY19XZ3N3Y297h4sxDlQDj6OLn6ezZ6+3w0u/x9M0A5r/3vvq9/Lz+kQDqEpiLIC6D -txAyUliLIS2HsyDKkniIIiyLrzC60tiKoyCPq0CqEpmKJCqQJk+lNLWyVEtSKPPJ3Ddz0stRN0Xl -DLUTVEyaQPvVlNTzU1FPRzsl5fRTaNB/QwNGHTi1IL6nu5Zu0qqpKVSsVME+4pqJLCazl9Ba8oqp -jAIA/gTCIOXkVsAVo52OAABgV6kmMxr2Cgbil9LLGh/OIJ6r6QgBLAfuMm48YYzPT1siF7a5qUyD -u1HibtaUWfLoS55NT+a0+DSklqXPxK5EJkuhm7NdV8pMYW9i3YJsT8q99Wqm2MQn/cihZRBuzasv -RenrdgnwM8uFQzpSOfrrTcihW5KyogiYM89VF9cUWq7i3+sRTVlB5Lyj6ngNd/58pn0mMUmY4ER6 -+R2nGWCEMbUIGQE2QUYj3Fnm3VibIPgeJ178kEFz4Imn4F8aEJbcWY18EcQLViziVoITOvLSFgXA -5R4iVvxg44045oijByAU0QMIQAYppJAwPHhIFILx/qUeieDFCIB1igjBg45U4nhBlVSaAEIQYiTi -2IzXLbTKF1mUaeaZaJr5RAc5aKeIFStw0RErVehARZp4mrlAnmlCscILU8yp3y5iILECBI7AKaeg -q3DxQ5cuMgLgCg5uZBwuTpiAhBgQKZqRK45CKqYiftZ30aW1WEFDEF58xIinn4L6aCMIabHDDhye -OqgtYgSRonOLwBqrrKImglAQUjyEalg0xjlRLKEuotayFIoliLC6whKtsVVFai222Wo7KyLT7kpU -VeCGK26xhJTLmblZGZKuuutW1C2tUc1Lb7233TuqU9c6m9At2wJrLb68JEEGP/rG4u4iBaPnr7S8 -/ohhgsRnNOxwLgU/LJVh9YR8Qwsl3HCOCyHIIDI986yMjgwkzKBMyy63g1LN8JzAgskoq4wzOzT/ -3E0MIIiQggM2CG0ztbW88MUZDAgc7y5aFlHBCDsk4ebA8NryxQsZd7DoV7oIQcQKBpyhRRM/jOCE -VV3X8kQRcKYtCBnsNsQLFHSLPQjecL+bi9lxApCFEjuM0ASzuXwNtdSMf5yLlkQEAcIOSmzN9S5O -A6Dxs3HPogUIOSBhRQATy1LEE/d8vq+3t5BhhH0YA6zLFELo47qlocNChhC/unowLRYzDLnevbvy -e/DC265LEqgPsntITCsPvCEef4fV9CVVz8ry/vYOjzwh3KvkvSrgh+985AGPDbrgvl9PbuoRNev+ -6wjHzzz29L8v7/G8g18r0sct8SkrEeXTyfkigaS9sIgRBCwge/bSlzBNAjAV/BACAXgIGAmmOxo8 -lybK8AC5TGdJh4igBAuhOUaUYQOWqQEIMVGb2jVGAh6iRA0N9iYOFmJE8RFhJ/CzIPn9qxDZoYR/ -NLEcBNClAUzIISWWw6FO+XAQQOzKAocjxUKoUBEImY+pIAEY+GhCCh0wT2OAkEVJkMc8EtGYB/cC -pRBKjjVmTKER85fCBhlpEQ2c4SYGEKC3XWILCQhDGyUBIBNE4BG7O0IGtZg8SkRIEV+k2CJM/oSi -R0gShWs5Q4aYY4kaiKiLlvDCBUjZCNcRMYh3zMSXFuEDHGAJS1e65Y20xKVGvPJNurTSjUbQox8N -6ZhAosEf3ZIkADxQXsHU0QWI6SNkIrNIKlJAHSkpwEvIUEKK6AKfxrmncZbJT4BSxBZUIIgTlsic -ZyrnE1bQJkws8gxkgieaIEDPFkaiBlCapR21dxwn7UWQTErEpCqlCMBQEJRrKdQKnkAaVFKiUB2g -aEEPCk5YEpRshygV7VwRAU3lbRaZQsIA+qc+kBLCVriKhaos0CpcqIpVNpxaNwNXCGTJoldWyJ5C -fcVDl35Up0blKVJjyT6lNvUgW/TfUp+6jzkhJhWqBqxfJQ+4Pqd6FXZXrepUv8rHsWK1q2e1qlnF -SlVbsKWt4wurW6O6saxKFa5gZCn+5mrXiijNZn8FWmDTEbTBuqMSHDDsODCgWHEwtrHeeCxkucGB -Y1j2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM3tLQIBADs= diff --git a/Documentation/DocBook/media/nv12mt_example.gif.b64 b/Documentation/DocBook/media/nv12mt_example.gif.b64 deleted file mode 100644 index a512078c7f24..000000000000 --- a/Documentation/DocBook/media/nv12mt_example.gif.b64 +++ /dev/null @@ -1,121 +0,0 @@ -R0lGODlhoAHkAOe1AAAAAAAASAAAdEgAAEgASEgAdBgYGHQAABoaGnQASHQAdC0eHigoKEIlJEYm -JS4uLlssKzY2NgBISFIyMQBInEBAQEhBQUhIAFBBQVhCQkhISF5DQ2NDQmdDQ3NEQ05OToNGRHhJ -SJxIAItHRY9HRXRInJdIRlpaWppLSaJJRqpJR7BIRa5KR2NfX7JKR2BgYGxdXWleXmZfX31ZWXJc -XHpaWQB0v29dXLZKSHhbWolXVpVUU5JVU55SUJhUUqdQTrpLSK9OTKRRT6FSULRNS7hMSrVNSr5L -SL9MSr1OS7xQTsBRTrtTUL5WU7lYVsJWVEh0v7deW4pqab5dW8RcWbdgXrZjYcZgXnd3d8ZiX8Zi -YL9lY7RoZshnZb90ALJubLFwb8prabBzccpta79wbsttaqx6ecxzcKt8e4aGhr93dc10cs51dM52 -dImJib97ec53dc94dqiEhKeHhkic39F+fKeKiaWPj9OEgqSSkb6PjtWJh5qamqGamqCcnNePjZ+f -n9iTkr6amtiUktmVk9+cSL6enduamb+jo92gnr+pqd6lo7Ozs7+wsHS//7W1tZy/nOCqqbm5ub+4 -uOKwr+S1tL+/v9+/dOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0d/fnPHX1+Dg4P/fnPPd -3fTe3vXj4vfo6L//v+/v7/nu7r///9//v/v09N//39////35+f//v///3/////////////////// -//////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH -SU1QACwAAAAAoAHkAAAI/gBrCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJ -sqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtapV -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 -XnvvxTdfffflt19//+03IAA7 diff --git a/Documentation/DocBook/media/pipeline.png.b64 b/Documentation/DocBook/media/pipeline.png.b64 deleted file mode 100644 index 97d9ac007473..000000000000 --- a/Documentation/DocBook/media/pipeline.png.b64 +++ /dev/null @@ -1,213 +0,0 @@ -iVBORw0KGgoAAAANSUhEUgAAAlgAAAEcCAMAAAAsmToJAAAAAXNSR0IArs4c6QAAAwBQTFRFAAEA -EAEBAwUBCgMBCAUKAgkMHQIDCwYXFQYDBgkVDwgFCAsHChASJwkDFA4NEg4TDhANHgwHDg8aExAG -DBEjBBUZERMQCBNRDxU0ExcZFRgVFRcgCRkzHBcUDRdCNRELIxYTAx4mLBUMEBwcEhsiDxwhExsu -Dh8XJRkQByAtDCMUHx4bACk0DSsiGScsFCRcJSUiGSZCDiwqGCg1LyQbIycpVhsPDy0wNyQVECxA -PSIfCS84ADJCEStWRiIULSwpADdHCDkgEy1/BjorEjhADDhXCzZvITNPUysQDzs8MjIvCj04BT1O -PDEoQjEhMDU3LzY9KTdFTTMYNzk2GD6PAEpfEUVjBExFCEpPB1ArK0FjKEVZYTscdDYXG0d5SkA5 -FEiJQUNAOURPAFhCA1RpP0ZJVEMvYUAyBFtRWkYnDlR+QEleAF1jkTojHlV1AGB4PlN5YU87cUws -SVRXAGaBWVJKUlRRRVZlAG1PWFNSBGt5AmqVAG+NAHNpK17BWl9ifFs9KWmnSGZ0YGFfp1IuCnWj -AHuKbWBXoVNAdGBPDniWAHujTWmLk14rAH+ch19XX2aRX2t8AIeLiWgvAIeeAIaqa21rOnehdW1m -AImspWJYj2tLW3C0AIyvWXaNAo6xb3Z5dXZzent4WIKiQojAen+CkX1pcoSWcYDOoH9fp4E+Y4ur -hoWCXIvGb4mut3xpqYNYnYdUO5rDyXxdjY6LYJqk0IRGb5azXZnMjJGUgJWqpJB8l5aUyJN4kKK1 -rZ6IYqzge6Xho6GdnaWpgqy6yZ9zvaR0hqzMk6rN5Jxxw6mF26lbq7C2pLTGwrCbs7Owvb+8zcGc -8rp42L2xsMbY3L+jtMfsz8W2nM/yx8jH0MfA7MWU78h/3crIyNTo4NLD6dK1z9bc1dbT3NXOv9vr -/OKSwur8++Gw4uTh0ef78uPU+OPL3Ojz++bGyfH36evo/+3b6vT88vPw/feu1/v+//bb//nK/PnW -5f/+//ro+fv49/7///37//71//3//v/8sZeTnQAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY4AABWO -AUTUBDsAAAAHdElNRQfaCRQPAiJBEFMLAAAgAElEQVR42u2dD3wU5bX300nWws50shA4lyTGikRE -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 diff --git a/Documentation/DocBook/media/selection.png.b64 b/Documentation/DocBook/media/selection.png.b64 deleted file mode 100644 index 416186558cb2..000000000000 --- a/Documentation/DocBook/media/selection.png.b64 +++ /dev/null @@ -1,206 +0,0 @@ -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 diff --git a/Documentation/DocBook/media/typical_media_device.svg b/Documentation/DocBook/media/typical_media_device.svg deleted file mode 100644 index f0c82f72c4b6..000000000000 --- a/Documentation/DocBook/media/typical_media_device.svg +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg stroke-linejoin="round" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" clip-path="url(#a)" xml:space="preserve" fill-rule="evenodd" height="178.78mm" viewBox="0 0 24285.662 17877.829" width="251.99mm" version="1.2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" preserveAspectRatio="xMidYMid" stroke-width="28.222"><defs><clipPath id="a" clipPathUnits="userSpaceOnUse"><rect y="0" x="0" width="28000" height="21000"/></clipPath></defs><g transform="matrix(1.004 0 0 1 -2185.6 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#fcf" d="m12231 4800c-516 0-1031 515-1031 1031v4124c0 516 515 1032 1031 1032h8538c516 0 1032-516 1032-1032v-4124c0-516-516-1031-1032-1031h-8538z"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#ffc" d="m3595 15607c-293 0-585 292-585 585v2340c0 293 292 586 585 586h3275c293 0 586-293 586-586v-2340c0-293-293-585-586-585h-3275z"/></g><g transform="translate(-2197.3 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#e6e6e6" d="m2663 2186c-461 0-922 461-922 922v11169c0 461 461 923 922 923h3692c461 0 922-462 922-923v-11169c0-461-461-922-922-922h-3692z"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4461 8602h-2260v-1086h4520v1086h-2260z"/><path fill="none" d="m4461 8602h-2260v-1086h4520v1086h-2260z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="8275" x="2579" class="TextPosition"><tspan fill="#000000">Audio decoder</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4461 11772h-2260v-1270h4520v1270h-2260z"/><path fill="none" d="m4461 11772h-2260v-1270h4520v1270h-2260z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="11353" x="2617" class="TextPosition"><tspan fill="#000000">Video decoder</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4453 10217h-2269v-1224h4537v1224h-2268z"/><path fill="none" d="m4453 10217h-2269v-1224h4537v1224h-2268z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="9821" x="2571" class="TextPosition"><tspan fill="#000000">Audio encoder</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.RectangleShape"><path fill="#cfc" d="m15711 12832h-3810v-1281h7620v1281h-3810z"/><path fill="none" d="m15711 12832h-3810v-1281h7620v1281h-3810z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="12407" x="12377" class="TextPosition"><tspan fill="#000000">Button Key/IR input logic</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2411.8)" class="com.sun.star.drawing.RectangleShape"><path fill="#cfe7f5" d="m14169 14572h-2268v-1412h4536v1412h-2268z"/><path fill="none" d="m14169 14572h-2268v-1412h4536v1412h-2268z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="14082" x="12882" class="TextPosition"><tspan fill="#000000">EEPROM</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#fc9" d="m5140 17662h-1563v-1715h3126v1715h-1563z"/><path fill="none" d="m5140 17662h-1563v-1715h3126v1715h-1563z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="17020" x="4276" class="TextPosition"><tspan fill="#000000">Sensor</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6719 8030 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z"/><path fill="none" d="m6719 8030 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6719 9612 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z"/><path fill="none" d="m6719 9612 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6721 11100 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m6721 11100 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2411.8)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 13854 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m9962 13854 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 12163 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m9962 12163 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 17158 670-353v176h2028v-176l671 353-671 354v-177h-2028v177l-670-354z"/><path fill="none" d="m9962 17158 670-353v176h2028v-176l671 353-671 354v-177h-2028v177l-670-354z" stroke="#3465af"/></g><g transform="matrix(0 .83339 -1.0005 0 30268 -5276.3)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m23229 12779 1009-978 1009 978h-505v2959h505l-1009 979-1009-979h504v-2959h-504z"/><path fill="none" d="m23229 12779 1009-978 1009 978h-505v2959h505l-1009 979-1009-979h504v-2959h-504z" stroke="#3465af"/></g><g transform="translate(-9973.6 -666.6)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="706px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="15832" x="24341" class="TextPosition" transform="matrix(0,-1,1,0,8509,40173)"><tspan fill="#000000">System Bus</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#cff" d="m13151 9262h-1250v-875h2499v875h-1249z"/><path fill="none" d="m13151 9262h-1250v-875h2499v875h-1249z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="9040" x="12215" class="TextPosition"><tspan fill="#000000">Demux</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9996 8765 373-357v178h1130v-178l374 357-374 358v-179h-1130v179l-373-358z"/><path fill="none" d="m9996 8765 373-357v178h1130v-178l374 357-374 358v-179h-1130v179l-373-358z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9996 7378 373-358v179h1130v-179l374 358-374 358v-179h-1130v179l-373-358z"/><path fill="none" d="m9996 7378 373-358v179h1130v-179l374 358-374 358v-179h-1130v179l-373-358z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#cff" d="m16322 7992h-4421v-1270h8841v1270h-4420z"/><path fill="none" d="m16322 7992h-4421v-1270h8841v1270h-4420z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="7573" x="12786" class="TextPosition"><tspan fill="#000000">Conditional Access Module</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4445 13287h-2269v-1224h4537v1224h-2268z"/><path fill="none" d="m4445 13287h-2269v-1224h4537v1224h-2268z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="12891" x="2601" class="TextPosition"><tspan fill="#000000">Video encoder</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6721 12634 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m6721 12634 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m20791 7545 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m20791 7545 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2028 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="14478" x="1990" class="TextPosition"><tspan fill="#000000">Radio / Analog TV</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="700" class="TextParagraph"><tspan y="10724" x="14956" class="TextPosition"><tspan fill="#000000">Digital TV</tspan></tspan></tspan></text> -</g><g transform="translate(-8970.5 -1395.8)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="494px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="19167" x="14724" class="TextPosition"><tspan fill="#000000">PS.: picture is not complete: other blocks may be present</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="18561" x="4199" class="TextPosition"><tspan fill="#000000">Webcam</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.RectangleShape"><path fill="#f90" d="m14552 16372h-2650v-1412h5299v1412h-2649z"/><path fill="none" d="m14552 16372h-2650v-1412h5299v1412h-2649z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="15882" x="12265" class="TextPosition"><tspan fill="#000000">Processing blocks</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 15654 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m9962 15654 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6702 16954 397-353v176h1201v-176l398 353-398 354v-177h-1201v177l-397-354z"/><path fill="none" d="m6702 16954 397-353v176h1201v-176l398 353-398 354v-177h-1201v177l-397-354z" stroke="#3465af"/></g><g transform="translate(-2479.5 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="8792" x="22850" class="TextPosition"><tspan fill="#000000">Smartcard</tspan></tspan></tspan></text> -</g><g transform="matrix(1.0048 0 0 1 -2207.4 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#fcf" d="m2766 2600c-333 0-666 333-666 666v2668c0 333 333 666 666 666h18368c333 0 667-333 667-666v-2668c0-333-334-666-667-666h-18368z"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m5121 5155h-1614v-1816h3227v1816h-1613z"/><path fill="none" d="m5121 5155h-1614v-1816h3227v1816h-1613z" stroke="#3465af"/><text font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextShape"><tspan class="TextParagraph"><tspan y="4111" x="4374" class="TextPosition"><tspan fill="#000000">Tuner</tspan></tspan></tspan><tspan class="TextParagraph"><tspan y="4814" x="4151" class="TextPosition"><tspan fill="#000000">FM/TV</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#ff8080" d="m2902 3702c0 111 40 202 88 202h530c48 0 89-91 89-202 0-110-41-202-89-202h-530c-48 0-88 92-88 202z"/><path fill="none" d="m2902 3702c0 111 40 202 88 202h530c48 0 89-91 89-202 0-110-41-202-89-202h-530c-48 0-88 92-88 202z" stroke="#3465af"/><path fill="#ffb3b3" d="m2902 3702c0 111 40 202 88 202s88-91 88-202c0-110-40-202-88-202s-88 92-88 202z"/><path fill="none" d="m2902 3702c0 111 40 202 88 202s88-91 88-202c0-110-40-202-88-202s-88 92-88 202z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#ff8080" d="m2903 4267c0 110 40 202 88 202h530c48 0 89-92 89-202s-41-203-89-203h-530c-48 0-88 93-88 203z"/><path fill="none" d="m2903 4267c0 110 40 202 88 202h530c48 0 89-92 89-202s-41-203-89-203h-530c-48 0-88 93-88 203z" stroke="#3465af"/><path fill="#ffb3b3" d="m2903 4267c0 110 40 202 88 202s88-92 88-202-40-203-88-203-88 93-88 203z"/><path fill="none" d="m2903 4267c0 110 40 202 88 202s88-92 88-202-40-203-88-203-88 93-88 203z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6719 4196 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z"/><path fill="none" d="m6719 4196 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9979 4150 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z"/><path fill="none" d="m9979 4150 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#cff" d="m16500 6189h-4500v-1389h9e3v1389h-4500z"/><path fill="none" d="m16500 6189h-4500v-1389h9e3v1389h-4500z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="5710" x="12051" class="TextPosition"><tspan fill="#000000">Satellite Equipment Control (SEC)</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#cff" d="m13400 4600h-1400v-1e3h2800v1e3h-1400z"/><path fill="none" d="m13400 4600h-1400v-1e3h2800v1e3h-1400z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="4316" x="12465" class="TextPosition"><tspan fill="#000000">Demod</tspan></tspan></tspan></text> -</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9979 5451 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z"/><path fill="none" d="m9979 5451 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" stroke="#3465af"/></g><path fill="#ff9" d="m7855.1 9099v7302h-1270v-14605h1270v7303z"/><path fill="none" d="m7855.1 9099v7302h-1270v-14605h1270v7303z" stroke="#3465af"/><text y="-6640.4663" x="-20770.572" transform="rotate(-90)" class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="7409.5396" x="-11193.634" class="TextPosition" transform="matrix(0,-1,1,0,-4473,23627)"><tspan fill="#000000">I2C Bus (control bus)</tspan></tspan></tspan></text> -<g transform="translate(-2197.3 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="3278" x="9391" class="TextPosition"><tspan fill="#000000">Digital TV Frontend</tspan></tspan></tspan></text> -</g><g transform="matrix(1.015 0 0 .99994 -2233.3 -2185.7)" class="com.sun.star.drawing.CustomShape"><g stroke="#3465af" fill="none"><path d="m3e3 2800c-18 0-35 1-53 3"/><path d="m2915 2808c-17 3-35 7-52 12"/><path d="m2832 2830c-16 6-33 12-49 20"/><path d="m2754 2864c-15 8-31 17-46 27"/><path d="m2681 2909c-14 10-28 21-42 32"/><path d="m2614 2962c-13 12-26 24-38 37"/><path d="m2554 3023c-11 13-22 27-33 41"/><path d="m2502 3091c-10 14-19 29-28 45"/><path d="m2459 3164c-8 16-15 32-22 49"/><path d="m2426 3243c-5 17-10 34-14 51"/><path d="m2406 3326c-3 18-5 35-6 53"/><path d="m2400 3411v53"/><path d="m2400 3497v53"/><path d="m2400 3582v53"/><path d="m2400 3668v53"/><path d="m2400 3753v53"/><path d="m2400 3839v53"/><path d="m2400 3924v53"/><path d="m2400 4009v54"/><path d="m2400 4095v53"/><path d="m2400 4180v53"/><path d="m2400 4266v53"/><path d="m2400 4351v53"/><path d="m2400 4437v53"/><path d="m2400 4522v53"/><path d="m2400 4607v54"/><path d="m2400 4693v53"/><path d="m2400 4778v53"/><path d="m2400 4864v53"/><path d="m2400 4949v53"/><path d="m2400 5035v53"/><path d="m2400 5120v53"/><path d="m2400 5205v54"/><path d="m2400 5291v53"/><path d="m2400 5376v53"/><path d="m2400 5462v53"/><path d="m2400 5547v53"/><path d="m2400 5633v53"/><path d="m2400 5718v53"/><path d="m2400 5803c0 18 1 36 3 53"/><path d="m2408 5888c4 18 8 35 13 52"/><path d="m2431 5971c6 16 13 33 20 49"/><path d="m2466 6049c8 15 17 31 27 46"/><path d="m2511 6122c10 14 21 28 32 42"/><path d="m2564 6188c12 13 25 26 38 38"/><path d="m2626 6248c13 11 27 23 41 33"/><path d="m2694 6300c14 10 29 19 45 27"/><path d="m2768 6343c15 7 32 15 48 21"/><path d="m2847 6375c17 5 34 10 51 14"/><path d="m2930 6395c17 2 35 4 53 5"/><path d="m3015 6400h53"/><path d="m3100 6400h53"/><path d="m3186 6400h53"/><path d="m3271 6400h53"/><path d="m3357 6400h53"/><path d="m3442 6400h53"/><path d="m3527 6400h54"/><path d="m3613 6400h53"/><path d="m3698 6400h53"/><path d="m3784 6400h53"/><path d="m3869 6400h53"/><path d="m3955 6400h53"/><path d="m4040 6400h53"/><path d="m4125 6400h54"/><path d="m4211 6400h53"/><path d="m4296 6400h53"/><path d="m4382 6400h53"/><path d="m4467 6400h53"/><path d="m4553 6400h53"/><path d="m4638 6400h53"/><path d="m4723 6400h54"/><path d="m4809 6400h53"/><path d="m4894 6400h53"/><path d="m4980 6400h53"/><path d="m5065 6400h53"/><path d="m5151 6400h53"/><path d="m5236 6400h53"/><path d="m5322 6400h53"/><path d="m5407 6400h53"/><path d="m5492 6400h53"/><path d="m5578 6400h53"/><path d="m5663 6400h53"/><path d="m5749 6400h53"/><path d="m5834 6400h53"/><path d="m5920 6400h53"/><path d="m6005 6400h53"/><path d="m6090 6400h53"/><path d="m6176 6400h53"/><path d="m6261 6400h53"/><path d="m6347 6400h53"/><path d="m6432 6400h53"/><path d="m6518 6400h53"/><path d="m6603 6400h53"/><path d="m6688 6400h54"/><path d="m6774 6400h53"/><path d="m6859 6400h53"/><path d="m6945 6400h53"/><path d="m7030 6400h53"/><path d="m7116 6400h53"/><path d="m7201 6400h53"/><path d="m7286 6400h54"/><path d="m7372 6400h53"/><path d="m7457 6400h53"/><path d="m7543 6400h53"/><path d="m7628 6400h53"/><path d="m7714 6400h53"/><path d="m7799 6400h53"/><path d="m7884 6400h54"/><path d="m7970 6400h53"/><path d="m8055 6400h53"/><path d="m8141 6400h53"/><path d="m8226 6400h53"/><path d="m8312 6400h53"/><path d="m8397 6400h53"/><path d="m8482 6400h54"/><path d="m8568 6400h53"/><path d="m8653 6400h53"/><path d="m8739 6400h53"/><path d="m8824 6400h53"/><path d="m8910 6400h53"/><path d="m8995 6400h53"/><path d="m9081 6400h53"/><path d="m9166 6400h53"/><path d="m9251 6400h53"/><path d="m9337 6400h53"/><path d="m9422 6400h53"/><path d="m9508 6400h53"/><path d="m9593 6400h53"/><path d="m9679 6400h53"/><path d="m9764 6400h53"/><path d="m9849 6400h53"/><path d="m9935 6400h53"/><path d="m10020 6400h53"/><path d="m10106 6400h53"/><path d="m10191 6400h53"/><path d="m10277 6400h53"/><path d="m10362 6400h53"/><path d="m10447 6400h53"/><path d="m10533 6400h53"/><path d="m10618 6400h53"/><path d="m10704 6400h53"/><path d="m10789 6400h53"/><path d="m10875 6400h53"/><path d="m10960 6400h53"/><path d="m11045 6400h54"/><path d="m11131 6400h53"/><path d="m11216 6400h53"/><path d="m11302 6400h53"/><path d="m11387 6400h53"/><path d="m11473 6400h53"/><path d="m11558 6400h53"/><path d="m11643 6400h54"/><path d="m11729 6400h53"/><path d="m11814 6400h53"/><path d="m11900 6400h53"/><path d="m11985 6400h53"/><path d="m12071 6400h53"/><path d="m12156 6400h53"/><path d="m12241 6400h54"/><path d="m12327 6400h53"/><path d="m12412 6400h53"/><path d="m12498 6400h53"/><path d="m12583 6400h53"/><path d="m12669 6400h53"/><path d="m12754 6400h53"/><path d="m12839 6400h54"/><path d="m12925 6400h53"/><path d="m13010 6400h53"/><path d="m13096 6400h53"/><path d="m13181 6400h53"/><path d="m13267 6400h53"/><path d="m13352 6400h53"/><path d="m13438 6400h53"/><path d="m13523 6400h53"/><path d="m13608 6400h53"/><path d="m13694 6400h53"/><path d="m13779 6400h53"/><path d="m13865 6400h53"/><path d="m13950 6400h53"/><path d="m14036 6400h53"/><path d="m14121 6400h53"/><path d="m14206 6400h53"/><path d="m14292 6400h53"/><path d="m14377 6400h53"/><path d="m14463 6400h53"/><path d="m14548 6400h53"/><path d="m14634 6400h53"/><path d="m14719 6400h53"/><path d="m14804 6400h54"/><path d="m14890 6400h53"/><path d="m14975 6400h53"/><path d="m15061 6400h53"/><path d="m15146 6400h53"/><path d="m15232 6400h53"/><path d="m15317 6400h53"/><path d="m15402 6400h54"/><path d="m15488 6400h53"/><path d="m15573 6400h53"/><path d="m15659 6400h53"/><path d="m15744 6400h53"/><path d="m15830 6400h53"/><path d="m15915 6400h53"/><path d="m16000 6400h54"/><path d="m16086 6400h53"/><path d="m16171 6400h53"/><path d="m16257 6400h53"/><path d="m16342 6400h53"/><path d="m16428 6400h53"/><path d="m16513 6400h53"/><path d="m16598 6400h54"/><path d="m16684 6400h53"/><path d="m16769 6400h53"/><path d="m16855 6400h53"/><path d="m16940 6400h53"/><path d="m17026 6400h53"/><path d="m17111 6400h53"/><path d="m17196 6400h54"/><path d="m17282 6400h53"/><path d="m17367 6400h53"/><path d="m17453 6400h53"/><path d="m17538 6400h53"/><path d="m17624 6400h53"/><path d="m17709 6400h53"/><path d="m17795 6400h53"/><path d="m17880 6400h53"/><path d="m17965 6400h53"/><path d="m18051 6400h53"/><path d="m18136 6400h53"/><path d="m18222 6400h53"/><path d="m18307 6400h53"/><path d="m18393 6400h53"/><path d="m18478 6400h53"/><path d="m18563 6400h53"/><path d="m18649 6400h53"/><path d="m18734 6400h53"/><path d="m18820 6400h53"/><path d="m18905 6400h53"/><path d="m18991 6400h53"/><path d="m19076 6400h53"/><path d="m19161 6400h54"/><path d="m19247 6400h53"/><path d="m19332 6400h53"/><path d="m19418 6400h53"/><path d="m19503 6400h53"/><path d="m19589 6400h53"/><path d="m19674 6400h53"/><path d="m19759 6400h54"/><path d="m19845 6400h53"/><path d="m19930 6400h53"/><path d="m20016 6400h53"/><path d="m20101 6400h53"/><path d="m20187 6400h53"/><path d="m20272 6400h53"/><path d="m20357 6400h54"/><path d="m20443 6400h53"/><path d="m20528 6400h53"/><path d="m20614 6400c17-1 35-2 53-5"/><path d="m20699 6390c17-4 34-9 51-14"/><path d="m20781 6365c16-6 32-13 48-21"/><path d="m20858 6329c15-8 31-17 45-27"/><path d="m20930 6283c14-10 28-21 42-32"/><path d="m20996 6229c13-12 25-25 37-38"/><path d="m21055 6167c11-14 22-28 33-42"/><path d="m21106 6098c10-15 19-30 27-45"/><path d="m21148 6024c7-16 14-33 20-49"/><path d="m21179 5944c5-17 9-34 13-51"/><path d="m21197 5861c2-18 4-35 4-53"/><path d="m21201 5776v-54"/><path d="m21201 5690v-53"/><path d="m21201 5605v-53"/><path d="m21201 5519v-53"/><path d="m21201 5434v-53"/><path d="m21201 5348v-53"/><path d="m21201 5263v-53"/><path d="m21201 5178v-54"/><path d="m21201 5092v-53"/><path d="m21201 5007v-53"/><path d="m21201 4921v-53"/><path d="m21201 4836v-53"/><path d="m21201 4750v-53"/><path d="m21201 4665v-53"/><path d="m21201 4579v-53"/><path d="m21201 4494v-53"/><path d="m21201 4409v-53"/><path d="m21201 4323v-53"/><path d="m21201 4238v-53"/><path d="m21201 4152v-53"/><path d="m21201 4067v-53"/><path d="m21201 3981v-53"/><path d="m21201 3896v-53"/><path d="m21201 3811v-53"/><path d="m21201 3725v-53"/><path d="m21201 3640v-53"/><path d="m21201 3554v-53"/><path d="m21201 3469v-53"/><path d="m21201 3383c-1-17-3-35-5-52"/><path d="m21190 3299c-4-17-8-35-14-51"/><path d="m21165 3217c-6-16-13-33-21-49"/><path d="m21129 3140c-9-16-18-31-28-46"/><path d="m21082 3068c-10-14-21-28-33-42"/><path d="m21027 3002c-12-13-24-25-37-37"/><path d="m20965 2944c-14-12-28-22-42-33"/><path d="m20896 2893c-15-9-30-18-46-27"/><path d="m20821 2852c-16-8-32-14-49-20"/><path d="m20741 2821c-17-5-34-9-51-12"/><path d="m20658 2804c-18-3-35-4-53-4"/><path d="m20573 2800h-53"/><path d="m20487 2800h-53"/><path d="m20402 2800h-53"/><path d="m20316 2800h-53"/><path d="m20231 2800h-53"/><path d="m20146 2800h-54"/><path d="m20060 2800h-53"/><path d="m19975 2800h-53"/><path d="m19889 2800h-53"/><path d="m19804 2800h-53"/><path d="m19718 2800h-53"/><path d="m19633 2800h-53"/><path d="m19548 2800h-54"/><path d="m19462 2800h-53"/><path d="m19377 2800h-53"/><path d="m19291 2800h-53"/><path d="m19206 2800h-53"/><path d="m19120 2800h-53"/><path d="m19035 2800h-53"/><path d="m18950 2800h-54"/><path d="m18864 2800h-53"/><path d="m18779 2800h-53"/><path d="m18693 2800h-53"/><path d="m18608 2800h-53"/><path d="m18522 2800h-53"/><path d="m18437 2800h-53"/><path d="m18352 2800h-54"/><path d="m18266 2800h-53"/><path d="m18181 2800h-53"/><path d="m18095 2800h-53"/><path d="m18010 2800h-53"/><path d="m17924 2800h-53"/><path d="m17839 2800h-53"/><path d="m17753 2800h-53"/><path d="m17668 2800h-53"/><path d="m17583 2800h-53"/><path d="m17497 2800h-53"/><path d="m17412 2800h-53"/><path d="m17326 2800h-53"/><path d="m17241 2800h-53"/><path d="m17155 2800h-53"/><path d="m17070 2800h-53"/><path d="m16985 2800h-53"/><path d="m16899 2800h-53"/><path d="m16814 2800h-53"/><path d="m16728 2800h-53"/><path d="m16643 2800h-53"/><path d="m16557 2800h-53"/><path d="m16472 2800h-53"/><path d="m16387 2800h-54"/><path d="m16301 2800h-53"/><path d="m16216 2800h-53"/><path d="m16130 2800h-53"/><path d="m16045 2800h-53"/><path d="m15959 2800h-53"/><path d="m15874 2800h-53"/><path d="m15789 2800h-54"/><path d="m15703 2800h-53"/><path d="m15618 2800h-53"/><path d="m15532 2800h-53"/><path d="m15447 2800h-53"/><path d="m15361 2800h-53"/><path d="m15276 2800h-53"/><path d="m15191 2800h-54"/><path d="m15105 2800h-53"/><path d="m15020 2800h-53"/><path d="m14934 2800h-53"/><path d="m14849 2800h-53"/><path d="m14763 2800h-53"/><path d="m14678 2800h-53"/><path d="m14593 2800h-54"/><path d="m14507 2800h-53"/><path d="m14422 2800h-53"/><path d="m14336 2800h-53"/><path d="m14251 2800h-53"/><path d="m14165 2800h-53"/><path d="m14080 2800h-53"/><path d="m13994 2800h-53"/><path d="m13909 2800h-53"/><path d="m13824 2800h-53"/><path d="m13738 2800h-53"/><path d="m13653 2800h-53"/><path d="m13567 2800h-53"/><path d="m13482 2800h-53"/><path d="m13396 2800h-53"/><path d="m13311 2800h-53"/><path d="m13226 2800h-53"/><path d="m13140 2800h-53"/><path d="m13055 2800h-53"/><path d="m12969 2800h-53"/><path d="m12884 2800h-53"/><path d="m12798 2800h-53"/><path d="m12713 2800h-53"/><path d="m12628 2800h-53"/><path d="m12542 2800h-53"/><path d="m12457 2800h-53"/><path d="m12371 2800h-53"/><path d="m12286 2800h-53"/><path d="m12200 2800h-53"/><path d="m12115 2800h-53"/><path d="m12030 2800h-54"/><path d="m11944 2800h-53"/><path d="m11859 2800h-53"/><path d="m11773 2800h-53"/><path d="m11688 2800h-53"/><path d="m11602 2800h-53"/><path d="m11517 2800h-53"/><path d="m11432 2800h-54"/><path d="m11346 2800h-53"/><path d="m11261 2800h-53"/><path d="m11175 2800h-53"/><path d="m11090 2800h-53"/><path d="m11004 2800h-53"/><path d="m10919 2800h-53"/><path d="m10834 2800h-54"/><path d="m10748 2800h-53"/><path d="m10663 2800h-53"/><path d="m10577 2800h-53"/><path d="m10492 2800h-53"/><path d="m10406 2800h-53"/><path d="m10321 2800h-53"/><path d="m10236 2800h-54"/><path d="m10150 2800h-53"/><path d="m10065 2800h-53"/><path d="m9979 2800h-53"/><path d="m9894 2800h-53"/><path d="m9808 2800h-53"/><path d="m9723 2800h-53"/><path d="m9637 2800h-53"/><path d="m9552 2800h-53"/><path d="m9467 2800h-53"/><path d="m9381 2800h-53"/><path d="m9296 2800h-53"/><path d="m9210 2800h-53"/><path d="m9125 2800h-53"/><path d="m9039 2800h-53"/><path d="m8954 2800h-53"/><path d="m8869 2800h-53"/><path d="m8783 2800h-53"/><path d="m8698 2800h-53"/><path d="m8612 2800h-53"/><path d="m8527 2800h-53"/><path d="m8441 2800h-53"/><path d="m8356 2800h-53"/><path d="m8271 2800h-54"/><path d="m8185 2800h-53"/><path d="m8100 2800h-53"/><path d="m8014 2800h-53"/><path d="m7929 2800h-53"/><path d="m7843 2800h-53"/><path d="m7758 2800h-53"/><path d="m7673 2800h-54"/><path d="m7587 2800h-53"/><path d="m7502 2800h-53"/><path d="m7416 2800h-53"/><path d="m7331 2800h-53"/><path d="m7245 2800h-53"/><path d="m7160 2800h-53"/><path d="m7075 2800h-54"/><path d="m6989 2800h-53"/><path d="m6904 2800h-53"/><path d="m6818 2800h-53"/><path d="m6733 2800h-53"/><path d="m6647 2800h-53"/><path d="m6562 2800h-53"/><path d="m6477 2800h-54"/><path d="m6391 2800h-53"/><path d="m6306 2800h-53"/><path d="m6220 2800h-53"/><path d="m6135 2800h-53"/><path d="m6049 2800h-53"/><path d="m5964 2800h-53"/><path d="m5879 2800h-54"/><path d="m5793 2800h-53"/><path d="m5708 2800h-53"/><path d="m5622 2800h-53"/><path d="m5537 2800h-53"/><path d="m5451 2800h-53"/><path d="m5366 2800h-53"/><path d="m5280 2800h-53"/><path d="m5195 2800h-53"/><path d="m5110 2800h-53"/><path d="m5024 2800h-53"/><path d="m4939 2800h-53"/><path d="m4853 2800h-53"/><path d="m4768 2800h-53"/><path d="m4682 2800h-53"/><path d="m4597 2800h-53"/><path d="m4512 2800h-53"/><path d="m4426 2800h-53"/><path d="m4341 2800h-53"/><path d="m4255 2800h-53"/><path d="m4170 2800h-53"/><path d="m4084 2800h-53"/><path d="m3999 2800h-53"/><path d="m3914 2800h-54"/><path d="m3828 2800h-53"/><path d="m3743 2800h-53"/><path d="m3657 2800h-53"/><path d="m3572 2800h-53"/><path d="m3486 2800h-53"/><path d="m3401 2800h-53"/><path d="m3316 2800h-54"/><path d="m3230 2800h-53"/><path d="m3145 2800h-53"/><path d="m3059 2800h-53"/></g></g><g transform="translate(-2197.3 -2186)"><rect height="1100.7" width="1213.6" y="6917.1" x="23255" fill="#f3e777"/><path fill="#ca4677" d="m22802 7700.4v-405.46l150.7-169.16c82.886-93.039 170.53-186.62 194.77-207.96l44.069-38.798 783.23-0.086 783.23-0.086v613.5 613.5h-978-978v-405.46zm1027.7 136.98v-78.372l-169.91 4.925-169.91 4.9249-5.09 45.854c-8.249 74.303 46.711 101.04 207.69 101.04h137.21v-78.372zm235.86-262.94 4.495-341.31 207.2-8.6408 207.2-8.6408 5.144-46.443c9.596-86.615-41.863-102.05-322.02-96.607l-246.71 4.7956-4.438 419.08-4.439 419.08h74.537 74.538l4.494-341.31zm391.3 313.72c26.41-19.286 36.255-41.399 32.697-73.447l-5.09-45.854h-174.05-174.05l-5.38 48.984c-9.97 90.771 0.993 97.91 150.36 97.91 99.305 0 148.27-7.6982 175.52-27.594zm-627.16-274.84v-77.768h-174.05-174.05v66.246c0 36.436 4.973 71.431 11.051 77.768 6.078 6.3366 84.401 11.521 174.05 11.521h163v-77.768zm659.89-4.9154 5.125-74.042-179.18 4.9155-179.18 4.9155-5.38 48.984c-10.473 95.348-2.259 99.57 183.28 94.197l170.2-4.9284 5.125-74.042zm-659.89-237.63v-78.372l-169.91 4.925-169.91 4.925-5.097 73.447-5.097 73.447h175 175v-78.372zm659.86 4.925-5.097-73.447h-174.05-174.05l-5.38 48.984c-10.289 93.673-2.146 97.91 188.15 97.91h175.52l-5.097-73.447zm-659.86-228.98v-77.768h-137.21c-97.358 0-147.91 7.8138-174.05 26.902-34.952 25.523-49.645 92.242-25.79 117.11 6.078 6.3366 84.401 11.521 174.05 11.521h163v-77.768z"/></g><g transform="matrix(.84874 0 0 .76147 2408.1 3615.3)"><rect height="3076.2" width="2734.3" y="13264" x="19249" fill="#6076b3"/><g stroke-linejoin="round" fill-rule="evenodd" stroke-width="28.222" fill="#e0ee2c"><rect y="13369" width="356.65" x="18937" height="180.95"/><rect y="13708" width="356.65" x="18937" height="180.95"/><rect y="14048" width="356.65" x="18937" height="180.95"/><rect y="14387" width="356.65" x="18937" height="180.95"/><rect y="14726" width="356.65" x="18937" height="180.95"/><rect y="15066" width="356.65" x="18937" height="180.95"/><rect y="15405" width="356.65" x="18937" height="180.95"/><rect y="15744" width="356.65" x="18937" height="180.95"/><rect y="16083" width="356.65" x="18937" height="180.95"/><rect y="13324" width="356.65" x="21939" height="180.95"/><rect y="13663" width="356.65" x="21939" height="180.95"/><rect y="14002" width="356.65" x="21939" height="180.95"/><rect y="14342" width="356.65" x="21939" height="180.95"/><rect y="14681" width="356.65" x="21939" height="180.95"/><rect y="15020" width="356.65" x="21939" height="180.95"/><rect y="15360" width="356.65" x="21939" height="180.95"/><rect y="15699" width="356.65" x="21939" height="180.95"/><rect y="16038" width="356.65" x="21939" height="180.95"/></g><g stroke-linejoin="round" fill-rule="evenodd" transform="matrix(.98702 0 0 .90336 -2675 7020.8)" class="com.sun.star.drawing.TextShape" stroke-width="28.222"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"/></text> -<text style="word-spacing:0px;letter-spacing:0px" xml:space="preserve" font-size="1128.9px" y="9042.0264" x="22439.668" font-family="Sans" line-height="125%" fill="#000000"><tspan y="9042.0264" x="22439.668">CPU</tspan></text> -</g></g><g stroke-linejoin="round" fill-rule="evenodd" transform="translate(-11752 543.6)" class="com.sun.star.drawing.TextShape" stroke-width="28.222"><text class="TextShape"><tspan font-size="706px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="15832" x="24341" class="TextPosition" transform="matrix(0,-1,1,0,8509,40173)"><tspan fill="#000000">PCI, USB, SPI, I2C, ...</tspan></tspan></tspan></text> -</g><g stroke-linejoin="round" fill-rule="evenodd" transform="translate(-655.31 963.83)" class="com.sun.star.drawing.RectangleShape" stroke-width="28.222"><g transform="matrix(.49166 0 0 1.0059 6045.6 -82.24)"><path fill="#cfe7f5" d="m14169 14572h-2268v-1412h4536v1412h-2268z"/><path fill="none" d="m14169 14572h-2268v-1412h4536v1412h-2268z" stroke="#3465af"/></g><text y="-395.11282" x="-790.22229" class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="13686.9" x="12091.779" class="TextPosition"><tspan fill="#000000">Bridge</tspan></tspan></tspan></text> -<text y="338.66486" x="-846.66675" class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="14420.677" x="12035.335" class="TextPosition"><tspan fill="#000000"> DMA</tspan></tspan></tspan></text> -</g></svg> diff --git a/Documentation/DocBook/media/v4l/.gitignore b/Documentation/DocBook/media/v4l/.gitignore deleted file mode 100644 index d7ec32eafac9..000000000000 --- a/Documentation/DocBook/media/v4l/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.xml diff --git a/Documentation/DocBook/media/v4l/biblio.xml b/Documentation/DocBook/media/v4l/biblio.xml deleted file mode 100644 index 87f1d24958aa..000000000000 --- a/Documentation/DocBook/media/v4l/biblio.xml +++ /dev/null @@ -1,381 +0,0 @@ - <bibliography> - <title>References</title> - - <biblioentry id="cea608"> - <abbrev>CEA 608-E</abbrev> - <authorgroup> - <corpauthor>Consumer Electronics Association (<ulink -url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor> - </authorgroup> - <title>CEA-608-E R-2014 "Line 21 Data Services"</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="smpte431"> - <abbrev>SMPTE RP 431-2</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 RP 431-2:2011 "D-Cinema Quality - Reference Projector and Environment"</title> - </biblioentry> - - <biblioentry id="smpte2084"> - <abbrev>SMPTE ST 2084</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 ST 2084:2014 "High Dynamic Range Electro-Optical Transfer Function of Master Reference Displays"</title> - </biblioentry> - - <biblioentry id="srgb"> - <abbrev>sRGB</abbrev> - <authorgroup> - <corpauthor>International Electrotechnical Commission -(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> - </authorgroup> - <title>IEC 61966-2-1 ed1.0 "Multimedia systems and equipment - Colour measurement -and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title> - </biblioentry> - - <biblioentry id="sycc"> - <abbrev>sYCC</abbrev> - <authorgroup> - <corpauthor>International Electrotechnical Commission -(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> - </authorgroup> - <title>IEC 61966-2-1-am1 ed1.0 "Amendment 1 - Multimedia systems and equipment - Colour measurement -and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title> - </biblioentry> - - <biblioentry id="xvycc"> - <abbrev>xvYCC</abbrev> - <authorgroup> - <corpauthor>International Electrotechnical Commission -(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> - </authorgroup> - <title>IEC 61966-2-4 ed1.0 "Multimedia systems and equipment - Colour measurement -and management - Part 2-4: Colour management - Extended-gamut YCC colour space for video -applications - xvYCC"</title> - </biblioentry> - - <biblioentry id="adobergb"> - <abbrev>AdobeRGB</abbrev> - <authorgroup> - <corpauthor>Adobe Systems Incorporated (<ulink url="http://www.adobe.com">http://www.adobe.com</ulink>)</corpauthor> - </authorgroup> - <title>Adobe© RGB (1998) Color Image Encoding Version 2005-05</title> - </biblioentry> - - <biblioentry id="oprgb"> - <abbrev>opRGB</abbrev> - <authorgroup> - <corpauthor>International Electrotechnical Commission -(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> - </authorgroup> - <title>IEC 61966-2-5 "Multimedia systems and equipment - Colour measurement -and management - Part 2-5: Colour management - Optional RGB colour space - opRGB"</title> - </biblioentry> - - <biblioentry id="itu2020"> - <abbrev>ITU BT.2020</abbrev> - <authorgroup> - <corpauthor>International Telecommunication Union (<ulink -url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> - </authorgroup> - <title>ITU-R Recommendation BT.2020 (08/2012) "Parameter values for ultra-high -definition television systems for production and international programme exchange" -</title> - </biblioentry> - - <biblioentry id="tech3213"> - <abbrev>EBU Tech 3213</abbrev> - <authorgroup> - <corpauthor>European Broadcast Union (<ulink -url="http://www.ebu.ch">http://www.ebu.ch</ulink>)</corpauthor> - </authorgroup> - <title>E.B.U. Standard for Chromaticity Tolerances for Studio Monitors"</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="hdmi2"> - <abbrev>HDMI2</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 2.0</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> - - <biblioentry id="poynton"> - <abbrev>poynton</abbrev> - <authorgroup> - <corpauthor>Charles Poynton</corpauthor> - </authorgroup> - <title>Digital Video and HDTV, Algorithms and Interfaces</title> - </biblioentry> - - <biblioentry id="colimg"> - <abbrev>colimg</abbrev> - <authorgroup> - <corpauthor>Erik Reinhard et al.</corpauthor> - </authorgroup> - <title>Color Imaging: Fundamentals and Applications</title> - </biblioentry> - - </bibliography> diff --git a/Documentation/DocBook/media/v4l/capture.c.xml b/Documentation/DocBook/media/v4l/capture.c.xml deleted file mode 100644 index 22126a991b34..000000000000 --- a/Documentation/DocBook/media/v4l/capture.c.xml +++ /dev/null @@ -1,659 +0,0 @@ -<programlisting> -/* - * V4L2 video capture example - * - * This program can be used and distributed without restrictions. - * - * This program is provided with the V4L2 API - * see https://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/cec-api.xml b/Documentation/DocBook/media/v4l/cec-api.xml deleted file mode 100644 index 7062c1fa4904..000000000000 --- a/Documentation/DocBook/media/v4l/cec-api.xml +++ /dev/null @@ -1,75 +0,0 @@ -<partinfo> - <authorgroup> - <author> - <firstname>Hans</firstname> - <surname>Verkuil</surname> - <affiliation><address><email>hans.verkuil@cisco.com</email></address></affiliation> - <contrib>Initial version.</contrib> - </author> - </authorgroup> - <copyright> - <year>2016</year> - <holder>Hans Verkuil</holder> - </copyright> - - <revhistory> - <!-- Put document revisions here, newest first. --> - <revision> - <revnumber>1.0.0</revnumber> - <date>2016-03-17</date> - <authorinitials>hv</authorinitials> - <revremark>Initial revision</revremark> - </revision> - </revhistory> -</partinfo> - -<title>CEC API</title> - -<chapter id="cec-api"> - <title>CEC: Consumer Electronics Control</title> - - <section id="cec-intro"> - <title>Introduction</title> - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - <para>HDMI connectors provide a single pin for use by the Consumer Electronics - Control protocol. This protocol allows different devices connected by an HDMI cable - to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC) - and 2 (HEAC or HDMI Ethernet and Audio Return Channel) of the HDMI 1.4a - (<xref linkend="hdmi" />) specification and the extensions added to CEC version 2.0 - are defined in chapter 11 of the HDMI 2.0 (<xref linkend="hdmi2" />) specification. - </para> - - <para>The bitrate is very slow (effectively no more than 36 bytes per second) and - is based on the ancient AV.link protocol used in old SCART connectors. The protocol - closely resembles a crazy Rube Goldberg contraption and is an unholy mix of low and - high level messages. Some messages, especially those part of the HEAC protocol layered - on top of CEC, need to be handled by the kernel, others can be handled either by the - kernel or by userspace.</para> - - <para>In addition, CEC can be implemented in HDMI receivers, transmitters and in USB - devices that have an HDMI input and an HDMI output and that control just the CEC pin.</para> - - <para>Drivers that support CEC will create a CEC device node (/dev/cecX) - to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace - what it is allowed to do.</para> - </section> -</chapter> - -<appendix id="cec-user-func"> - <title>Function Reference</title> - <!-- Keep this alphabetically sorted. --> - &sub-cec-func-open; - &sub-cec-func-close; - &sub-cec-func-ioctl; - &sub-cec-func-poll; - <!-- All ioctls go here. --> - &sub-cec-ioc-adap-g-caps; - &sub-cec-ioc-adap-g-log-addrs; - &sub-cec-ioc-adap-g-phys-addr; - &sub-cec-ioc-dqevent; - &sub-cec-ioc-g-mode; - &sub-cec-ioc-receive; -</appendix> diff --git a/Documentation/DocBook/media/v4l/cec-func-close.xml b/Documentation/DocBook/media/v4l/cec-func-close.xml deleted file mode 100644 index 0812c8cd9634..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-close.xml +++ /dev/null @@ -1,64 +0,0 @@ -<refentry id="cec-func-close"> - <refmeta> - <refentrytitle>cec close()</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>cec-close</refname> - <refpurpose>Close a cec 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> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>Closes the cec 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/cec-func-ioctl.xml b/Documentation/DocBook/media/v4l/cec-func-ioctl.xml deleted file mode 100644 index f92817a2dc80..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-ioctl.xml +++ /dev/null @@ -1,78 +0,0 @@ -<refentry id="cec-func-ioctl"> - <refmeta> - <refentrytitle>cec ioctl()</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>cec-ioctl</refname> - <refpurpose>Control a cec 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>CEC ioctl request code as defined in the cec.h header file, - for example CEC_ADAP_G_CAPS.</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> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>The <function>ioctl()</function> function manipulates cec device - parameters. The argument <parameter>fd</parameter> must be an open file - descriptor.</para> - <para>The ioctl <parameter>request</parameter> code specifies the cec - 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 cec ioctl requests and - their parameters are located in the cec.h header file. All cec ioctl - requests, their respective function and parameters are specified in - <xref linkend="cec-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/cec-func-open.xml b/Documentation/DocBook/media/v4l/cec-func-open.xml deleted file mode 100644 index 2edc5555b81a..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-open.xml +++ /dev/null @@ -1,104 +0,0 @@ -<refentry id="cec-func-open"> - <refmeta> - <refentrytitle>cec open()</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>cec-open</refname> - <refpurpose>Open a cec 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>. - </para> - <para>When the <constant>O_NONBLOCK</constant> flag is -given, the &CEC-RECEIVE; ioctl will return &EAGAIN; when no message is -available, and the &CEC-TRANSMIT;, &CEC-ADAP-S-PHYS-ADDR; and -&CEC-ADAP-S-LOG-ADDRS; ioctls all act in non-blocking mode.</para> - <para>Other flags have no effect.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - <refsect1> - <title>Description</title> - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>To open a cec 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, attempts 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 include:</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/cec-func-poll.xml b/Documentation/DocBook/media/v4l/cec-func-poll.xml deleted file mode 100644 index 1bddbde0142d..000000000000 --- a/Documentation/DocBook/media/v4l/cec-func-poll.xml +++ /dev/null @@ -1,94 +0,0 @@ -<refentry id="cec-func-poll"> - <refmeta> - <refentrytitle>cec poll()</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>cec-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> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>With the <function>poll()</function> function applications -can wait for CEC events.</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). -CEC devices set the <constant>POLLIN</constant> and -<constant>POLLRDNORM</constant> flags in the -<structfield>revents</structfield> field if there are messages in the -receive queue. If the transmit queue has room for new messages, the -<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant> -flags are set. If there are events in the event queue, then the -<constant>POLLPRI</constant> flag is set. -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. -</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>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/cec-ioc-adap-g-caps.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml deleted file mode 100644 index 3523ef2259b1..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-caps.xml +++ /dev/null @@ -1,151 +0,0 @@ -<refentry id="cec-ioc-adap-g-caps"> - <refmeta> - <refentrytitle>ioctl CEC_ADAP_G_CAPS</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>CEC_ADAP_G_CAPS</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 cec_caps *<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='cec-func-open'><function>open()</function></link>.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>CEC_ADAP_G_CAPS</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>All cec devices must support the <constant>CEC_ADAP_G_CAPS</constant> - ioctl. To query device information, applications call the ioctl with a - pointer to a &cec-caps;. The driver fills the structure and returns - the information to the application. - The ioctl never fails.</para> - - <table pgwide="1" frame="none" id="cec-caps"> - <title>struct <structname>cec_caps</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>char</entry> - <entry><structfield>driver[32]</structfield></entry> - <entry>The name of the cec adapter driver.</entry> - </row> - <row> - <entry>char</entry> - <entry><structfield>name[32]</structfield></entry> - <entry>The name of this CEC adapter. The combination <structfield>driver</structfield> - and <structfield>name</structfield> must be unique.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>capabilities</structfield></entry> - <entry>The capabilities of the CEC adapter, see <xref - linkend="cec-capabilities" />.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>version</structfield></entry> - <entry>CEC Framework API version, formatted with the - <constant>KERNEL_VERSION()</constant> macro.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-capabilities"> - <title>CEC Capabilities Flags</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_CAP_PHYS_ADDR</constant></entry> - <entry>0x00000001</entry> - <entry>Userspace has to configure the physical address by - calling &CEC-ADAP-S-PHYS-ADDR;. If this capability isn't set, - then setting the physical address is handled by the kernel - whenever the EDID is set (for an HDMI receiver) or read (for - an HDMI transmitter).</entry> - </row> - <row> - <entry><constant>CEC_CAP_LOG_ADDRS</constant></entry> - <entry>0x00000002</entry> - <entry>Userspace has to configure the logical addresses by - calling &CEC-ADAP-S-LOG-ADDRS;. If this capability isn't set, - then the kernel will have configured this.</entry> - </row> - <row> - <entry><constant>CEC_CAP_TRANSMIT</constant></entry> - <entry>0x00000004</entry> - <entry>Userspace can transmit CEC messages by calling &CEC-TRANSMIT;. This - implies that userspace can be a follower as well, since being able to - transmit messages is a prerequisite of becoming a follower. If this - capability isn't set, then the kernel will handle all CEC transmits - and process all CEC messages it receives. - </entry> - </row> - <row> - <entry><constant>CEC_CAP_PASSTHROUGH</constant></entry> - <entry>0x00000008</entry> - <entry>Userspace can use the passthrough mode by - calling &CEC-S-MODE;.</entry> - </row> - <row> - <entry><constant>CEC_CAP_RC</constant></entry> - <entry>0x00000010</entry> - <entry>This adapter supports the remote control protocol.</entry> - </row> - <row> - <entry><constant>CEC_CAP_MONITOR_ALL</constant></entry> - <entry>0x00000020</entry> - <entry>The CEC hardware can monitor all messages, not just directed and - broadcast messages.</entry> - </row> - </tbody> - </tgroup> - </table> - </refsect1> - - <refsect1> - &return-value; - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml deleted file mode 100644 index 302b8294f7fc..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-log-addrs.xml +++ /dev/null @@ -1,329 +0,0 @@ -<refentry id="cec-ioc-adap-g-log-addrs"> - <refmeta> - <refentrytitle>ioctl CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>CEC_ADAP_G_LOG_ADDRS</refname> - <refname>CEC_ADAP_S_LOG_ADDRS</refname> - <refpurpose>Get or set the logical addresses</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 cec_log_addrs *<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='cec-func-open'><function>open()</function></link>.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>To query the current CEC logical addresses, applications call the -<constant>CEC_ADAP_G_LOG_ADDRS</constant> ioctl with a pointer to a -<structname>cec_log_addrs</structname> structure where the drivers stores the -logical addresses.</para> - - <para>To set new logical addresses, applications fill in struct <structname>cec_log_addrs</structname> -and call the <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl with a pointer to this struct. -The <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl is only available if -<constant>CEC_CAP_LOG_ADDRS</constant> is set (&ENOTTY; is returned otherwise). This ioctl will block until all -requested logical addresses have been claimed. <constant>CEC_ADAP_S_LOG_ADDRS</constant> -can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para> - - <table pgwide="1" frame="none" id="cec-log-addrs"> - <title>struct <structname>cec_log_addrs</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>__u8</entry> - <entry><structfield>log_addr</structfield>[CEC_MAX_LOG_ADDRS]</entry> - <entry>The actual logical addresses that were claimed. This is set by the - driver. If no logical address could be claimed, then it is set to - <constant>CEC_LOG_ADDR_INVALID</constant>. If this adapter is Unregistered, - then <structfield>log_addr[0]</structfield> is set to 0xf and all others to - <constant>CEC_LOG_ADDR_INVALID</constant>.</entry> - </row> - <row> - <entry>__u16</entry> - <entry><structfield>log_addr_mask</structfield></entry> - <entry>The bitmask of all logical addresses this adapter has claimed. - If this adapter is Unregistered then <structfield>log_addr_mask</structfield> - sets bit 15 and clears all other bits. If this adapter is not configured at all, then - <structfield>log_addr_mask</structfield> is set to 0. Set by the driver.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>cec_version</structfield></entry> - <entry>The CEC version that this adapter shall use. See - <xref linkend="cec-versions" />. - Used to implement the <constant>CEC_MSG_CEC_VERSION</constant> and - <constant>CEC_MSG_REPORT_FEATURES</constant> messages. Note that - <constant>CEC_OP_CEC_VERSION_1_3A</constant> is not allowed - by the CEC framework. - </entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>num_log_addrs</structfield></entry> - <entry>Number of logical addresses to set up. Must be ≤ - <structfield>available_log_addrs</structfield> as returned by - &CEC-ADAP-G-CAPS;. All arrays in this structure are only filled up to - index <structfield>available_log_addrs</structfield>-1. The remaining - array elements will be ignored. Note that the CEC 2.0 standard allows - for a maximum of 2 logical addresses, although some hardware has support - for more. <constant>CEC_MAX_LOG_ADDRS</constant> is 4. The driver will - return the actual number of logical addresses it could claim, which may - be less than what was requested. If this field is set to 0, then the - CEC adapter shall clear all claimed logical addresses and all other - fields will be ignored.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>vendor_id</structfield></entry> - <entry>The vendor ID is a 24-bit number that identifies the specific - vendor or entity. Based on this ID vendor specific commands may be - defined. If you do not want a vendor ID then set it to - <constant>CEC_VENDOR_ID_NONE</constant>.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry>Flags. No flags are defined yet, so set this to 0.</entry> - </row> - <row> - <entry>char</entry> - <entry><structfield>osd_name</structfield>[15]</entry> - <entry>The On-Screen Display name as is returned by the - <constant>CEC_MSG_SET_OSD_NAME</constant> message.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>primary_device_type</structfield>[CEC_MAX_LOG_ADDRS]</entry> - <entry>Primary device type for each logical address. See - <xref linkend="cec-prim-dev-types" /> for possible types.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>log_addr_type</structfield>[CEC_MAX_LOG_ADDRS]</entry> - <entry>Logical address types. See <xref linkend="cec-log-addr-types" /> for - possible types. The driver will update this with the actual logical address - type that it claimed (e.g. it may have to fallback to - <constant>CEC_LOG_ADDR_TYPE_UNREGISTERED</constant>).</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>all_device_types</structfield>[CEC_MAX_LOG_ADDRS]</entry> - <entry>CEC 2.0 specific: all device types. See <xref linkend="cec-all-dev-types-flags" />. - Used to implement the <constant>CEC_MSG_REPORT_FEATURES</constant> message. - This field is ignored if <structfield>cec_version</structfield> < - <constant>CEC_OP_CEC_VERSION_2_0</constant>.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>features</structfield>[CEC_MAX_LOG_ADDRS][12]</entry> - <entry>Features for each logical address. Used to implement the - <constant>CEC_MSG_REPORT_FEATURES</constant> message. The 12 bytes include - both the RC Profile and the Device Features. - This field is ignored if <structfield>cec_version</structfield> < - <constant>CEC_OP_CEC_VERSION_2_0</constant>.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-versions"> - <title>CEC Versions</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_OP_CEC_VERSION_1_3A</constant></entry> - <entry>4</entry> - <entry>CEC version according to the HDMI 1.3a standard.</entry> - </row> - <row> - <entry><constant>CEC_OP_CEC_VERSION_1_4B</constant></entry> - <entry>5</entry> - <entry>CEC version according to the HDMI 1.4b standard.</entry> - </row> - <row> - <entry><constant>CEC_OP_CEC_VERSION_2_0</constant></entry> - <entry>6</entry> - <entry>CEC version according to the HDMI 2.0 standard.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-prim-dev-types"> - <title>CEC Primary Device Types</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_TV</constant></entry> - <entry>0</entry> - <entry>Use for a TV.</entry> - </row> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_RECORD</constant></entry> - <entry>1</entry> - <entry>Use for a recording device.</entry> - </row> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_TUNER</constant></entry> - <entry>3</entry> - <entry>Use for a device with a tuner.</entry> - </row> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_PLAYBACK</constant></entry> - <entry>4</entry> - <entry>Use for a playback device.</entry> - </row> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM</constant></entry> - <entry>5</entry> - <entry>Use for an audio system (e.g. an audio/video receiver).</entry> - </row> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_SWITCH</constant></entry> - <entry>6</entry> - <entry>Use for a CEC switch.</entry> - </row> - <row> - <entry><constant>CEC_OP_PRIM_DEVTYPE_VIDEOPROC</constant></entry> - <entry>7</entry> - <entry>Use for a video processor device.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-log-addr-types"> - <title>CEC Logical Address Types</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_TV</constant></entry> - <entry>0</entry> - <entry>Use for a TV.</entry> - </row> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_RECORD</constant></entry> - <entry>1</entry> - <entry>Use for a recording device.</entry> - </row> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_TUNER</constant></entry> - <entry>2</entry> - <entry>Use for a tuner device.</entry> - </row> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_PLAYBACK</constant></entry> - <entry>3</entry> - <entry>Use for a playback device.</entry> - </row> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_AUDIOSYSTEM</constant></entry> - <entry>4</entry> - <entry>Use for an audio system device.</entry> - </row> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_SPECIFIC</constant></entry> - <entry>5</entry> - <entry>Use for a second TV or for a video processor device.</entry> - </row> - <row> - <entry><constant>CEC_LOG_ADDR_TYPE_UNREGISTERED</constant></entry> - <entry>6</entry> - <entry>Use this if you just want to remain unregistered. - Used for pure CEC switches or CDC-only devices (CDC: - Capability Discovery and Control).</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-all-dev-types-flags"> - <title>CEC All Device Types Flags</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_OP_ALL_DEVTYPE_TV</constant></entry> - <entry>0x80</entry> - <entry>This supports the TV type.</entry> - </row> - <row> - <entry><constant>CEC_OP_ALL_DEVTYPE_RECORD</constant></entry> - <entry>0x40</entry> - <entry>This supports the Recording type.</entry> - </row> - <row> - <entry><constant>CEC_OP_ALL_DEVTYPE_TUNER</constant></entry> - <entry>0x20</entry> - <entry>This supports the Tuner type.</entry> - </row> - <row> - <entry><constant>CEC_OP_ALL_DEVTYPE_PLAYBACK</constant></entry> - <entry>0x10</entry> - <entry>This supports the Playback type.</entry> - </row> - <row> - <entry><constant>CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM</constant></entry> - <entry>0x08</entry> - <entry>This supports the Audio System type.</entry> - </row> - <row> - <entry><constant>CEC_OP_ALL_DEVTYPE_SWITCH</constant></entry> - <entry>0x04</entry> - <entry>This supports the CEC Switch or Video Processing type.</entry> - </row> - </tbody> - </tgroup> - </table> - </refsect1> - - <refsect1> - &return-value; - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml b/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml deleted file mode 100644 index d95f1785080c..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-adap-g-phys-addr.xml +++ /dev/null @@ -1,86 +0,0 @@ -<refentry id="cec-ioc-adap-g-phys-addr"> - <refmeta> - <refentrytitle>ioctl CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>CEC_ADAP_G_PHYS_ADDR</refname> - <refname>CEC_ADAP_S_PHYS_ADDR</refname> - <refpurpose>Get or set the physical address</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <funcsynopsis> - <funcprototype> - <funcdef>int <function>ioctl</function></funcdef> - <paramdef>int <parameter>fd</parameter></paramdef> - <paramdef>int <parameter>request</parameter></paramdef> - <paramdef>__u16 *<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='cec-func-open'><function>open()</function></link>.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>To query the current physical address applications call the -<constant>CEC_ADAP_G_PHYS_ADDR</constant> ioctl with a pointer to an __u16 -where the driver stores the physical address.</para> - - <para>To set a new physical address applications store the physical address in -an __u16 and call the <constant>CEC_ADAP_S_PHYS_ADDR</constant> ioctl with a -pointer to this integer. <constant>CEC_ADAP_S_PHYS_ADDR</constant> is only -available if <constant>CEC_CAP_PHYS_ADDR</constant> is set (&ENOTTY; will be returned -otherwise). <constant>CEC_ADAP_S_PHYS_ADDR</constant> -can only be called by a file handle in initiator mode (see &CEC-S-MODE;), if not -&EBUSY; will be returned.</para> - - <para>The physical address is a 16-bit number where each group of 4 bits -represent a digit of the physical address a.b.c.d where the most significant -4 bits represent 'a'. The CEC root device (usually the TV) has address 0.0.0.0. -Every device that is hooked up to an input of the TV has address a.0.0.0 (where -'a' is ≥ 1), devices hooked up to those in turn have addresses a.b.0.0, etc. -So a topology of up to 5 devices deep is supported. The physical address a -device shall use is stored in the EDID of the sink.</para> - -<para>For example, the EDID for each HDMI input of the TV will have a different -physical address of the form a.0.0.0 that the sources will read out and use as -their physical address.</para> - </refsect1> - - <refsect1> - &return-value; - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml b/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml deleted file mode 100644 index 697dde575cd4..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-dqevent.xml +++ /dev/null @@ -1,202 +0,0 @@ -<refentry id="cec-ioc-g-event"> - <refmeta> - <refentrytitle>ioctl CEC_DQEVENT</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>CEC_DQEVENT</refname> - <refpurpose>Dequeue a CEC 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 cec_event *<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='cec-func-open'><function>open()</function></link>.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>CEC_DQEVENT</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>CEC devices can send asynchronous events. These can be retrieved by calling - the <constant>CEC_DQEVENT</constant> ioctl. If the file descriptor is in non-blocking - mode and no event is pending, then it will return -1 and set errno to the &EAGAIN;.</para> - - <para>The internal event queues are per-filehandle and per-event type. If there is - no more room in a queue then the last event is overwritten with the new one. This - means that intermediate results can be thrown away but that the latest event is always - available. This also means that is it possible to read two successive events that have - the same value (e.g. two CEC_EVENT_STATE_CHANGE events with the same state). In that - case the intermediate state changes were lost but it is guaranteed that the state - did change in between the two events.</para> - - <table pgwide="1" frame="none" id="cec-event-state-change"> - <title>struct <structname>cec_event_state_change</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>__u16</entry> - <entry><structfield>phys_addr</structfield></entry> - <entry>The current physical address.</entry> - </row> - <row> - <entry>__u16</entry> - <entry><structfield>log_addr_mask</structfield></entry> - <entry>The current set of claimed logical addresses.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-event-lost-msgs"> - <title>struct <structname>cec_event_lost_msgs</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>__u32</entry> - <entry><structfield>lost_msgs</structfield></entry> - <entry>Set to the number of lost messages since the filehandle - was opened or since the last time this event was dequeued for - this filehandle. The messages lost are the oldest messages. So - when a new message arrives and there is no more room, then the - oldest message is discarded to make room for the new one. The - internal size of the message queue guarantees that all messages - received in the last two seconds will be stored. Since messages - should be replied to within a second according to the CEC - specification, this is more than enough. - </entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-event"> - <title>struct <structname>cec_event</structname></title> - <tgroup cols="4"> - &cs-str; - <tbody valign="top"> - <row> - <entry>__u64</entry> - <entry><structfield>ts</structfield></entry> - <entry>Timestamp of the event in ns.</entry> - <entry></entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>event</structfield></entry> - <entry>The CEC event type, see <xref linkend="cec-events" />.</entry> - <entry></entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry>Event flags, see <xref linkend="cec-event-flags" />.</entry> - <entry></entry> - </row> - <row> - <entry>union</entry> - <entry>(anonymous)</entry> - <entry></entry> - <entry></entry> - </row> - <row> - <entry></entry> - <entry>struct cec_event_state_change</entry> - <entry><structfield>state_change</structfield></entry> - <entry>The new adapter state as sent by the <constant>CEC_EVENT_STATE_CHANGE</constant> - event.</entry> - </row> - <row> - <entry></entry> - <entry>struct cec_event_lost_msgs</entry> - <entry><structfield>lost_msgs</structfield></entry> - <entry>The number of lost messages as sent by the <constant>CEC_EVENT_LOST_MSGS</constant> - event.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-events"> - <title>CEC Events Types</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_EVENT_STATE_CHANGE</constant></entry> - <entry>1</entry> - <entry>Generated when the CEC Adapter's state changes. When open() is - called an initial event will be generated for that filehandle with the - CEC Adapter's state at that time. - </entry> - </row> - <row> - <entry><constant>CEC_EVENT_LOST_MSGS</constant></entry> - <entry>2</entry> - <entry>Generated if one or more CEC messages were lost because the - application didn't dequeue CEC messages fast enough.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-event-flags"> - <title>CEC Event Flags</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_EVENT_FL_INITIAL_VALUE</constant></entry> - <entry>1</entry> - <entry>Set for the initial events that are generated when the device is - opened. See the table above for which events do this. This allows - applications to learn the initial state of the CEC adapter at open() - time.</entry> - </row> - </tbody> - </tgroup> - </table> - </refsect1> - - <refsect1> - &return-value; - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml b/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml deleted file mode 100644 index 26b4282ad134..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-g-mode.xml +++ /dev/null @@ -1,255 +0,0 @@ -<refentry id="cec-ioc-g-mode"> - <refmeta> - <refentrytitle>ioctl CEC_G_MODE, CEC_S_MODE</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>CEC_G_MODE</refname> - <refname>CEC_S_MODE</refname> - <refpurpose>Get or set exclusive use of the CEC adapter</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <funcsynopsis> - <funcprototype> - <funcdef>int <function>ioctl</function></funcdef> - <paramdef>int <parameter>fd</parameter></paramdef> - <paramdef>int <parameter>request</parameter></paramdef> - <paramdef>__u32 *<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='cec-func-open'><function>open()</function></link>.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>CEC_G_MODE, CEC_S_MODE</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>By default any filehandle can use &CEC-TRANSMIT; and &CEC-RECEIVE;, but -in order to prevent applications from stepping on each others toes it must be possible -to obtain exclusive access to the CEC adapter. This ioctl sets the filehandle -to initiator and/or follower mode which can be exclusive depending on the chosen -mode. The initiator is the filehandle that is used -to initiate messages, i.e. it commands other CEC devices. The follower is the filehandle -that receives messages sent to the CEC adapter and processes them. The same filehandle -can be both initiator and follower, or this role can be taken by two different -filehandles.</para> - - <para>When a CEC message is received, then the CEC framework will decide how -it will be processed. If the message is a reply to an earlier transmitted message, -then the reply is sent back to the filehandle that is waiting for it. In addition -the CEC framework will process it.</para> - - <para>If the message is not a reply, then the CEC framework will process it -first. If there is no follower, then the message is just discarded and a feature -abort is sent back to the initiator if the framework couldn't process it. If there -is a follower, then the message is passed on to the follower who will use -&CEC-RECEIVE; to dequeue the new message. The framework expects the follower to -make the right decisions.</para> - - <para>The CEC framework will process core messages unless requested otherwise -by the follower. The follower can enable the passthrough mode. In that case, the -CEC framework will pass on most core messages without processing them and -the follower will have to implement those messages. There are some messages -that the core will always process, regardless of the passthrough mode. See -<xref linkend="cec-core-processing" /> for details.</para> - - <para>If there is no initiator, then any CEC filehandle can use &CEC-TRANSMIT;. -If there is an exclusive initiator then only that initiator can call &CEC-TRANSMIT;. -The follower can of course always call &CEC-TRANSMIT;.</para> - - <para>Available initiator modes are:</para> - - <table pgwide="1" frame="none" id="cec-mode-initiator"> - <title>Initiator Modes</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_MODE_NO_INITIATOR</constant></entry> - <entry>0x0</entry> - <entry>This is not an initiator, i.e. it cannot transmit CEC messages - or make any other changes to the CEC adapter.</entry> - </row> - <row> - <entry><constant>CEC_MODE_INITIATOR</constant></entry> - <entry>0x1</entry> - <entry>This is an initiator (the default when the device is opened) and it - can transmit CEC messages and make changes to the CEC adapter, unless there - is an exclusive initiator.</entry> - </row> - <row> - <entry><constant>CEC_MODE_EXCL_INITIATOR</constant></entry> - <entry>0x2</entry> - <entry>This is an exclusive initiator and this file descriptor is the only one - that can transmit CEC messages and make changes to the CEC adapter. If someone - else is already the exclusive initiator then an attempt to become one will return - the &EBUSY; error.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Available follower modes are:</para> - - <table pgwide="1" frame="none" id="cec-mode-follower"> - <title>Follower Modes</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_MODE_NO_FOLLOWER</constant></entry> - <entry>0x00</entry> - <entry>This is not a follower (the default when the device is opened).</entry> - </row> - <row> - <entry><constant>CEC_MODE_FOLLOWER</constant></entry> - <entry>0x10</entry> - <entry>This is a follower and it will receive CEC messages unless there is - an exclusive follower. You cannot become a follower if <constant>CEC_CAP_TRANSMIT</constant> - is not set or if <constant>CEC_MODE_NO_INITIATOR</constant> was specified, - &EINVAL; is returned in that case.</entry> - </row> - <row> - <entry><constant>CEC_MODE_EXCL_FOLLOWER</constant></entry> - <entry>0x20</entry> - <entry>This is an exclusive follower and only this file descriptor will receive - CEC messages for processing. If someone else is already the exclusive follower - then an attempt to become one will return the &EBUSY; error. You cannot become - a follower if <constant>CEC_CAP_TRANSMIT</constant> is not set or if - <constant>CEC_MODE_NO_INITIATOR</constant> was specified, &EINVAL; is returned - in that case.</entry> - </row> - <row> - <entry><constant>CEC_MODE_EXCL_FOLLOWER_PASSTHRU</constant></entry> - <entry>0x30</entry> - <entry>This is an exclusive follower and only this file descriptor will receive - CEC messages for processing. In addition it will put the CEC device into - passthrough mode, allowing the exclusive follower to handle most core messages - instead of relying on the CEC framework for that. If someone else is already the - exclusive follower then an attempt to become one will return the &EBUSY; error. - You cannot become a follower if <constant>CEC_CAP_TRANSMIT</constant> - is not set or if <constant>CEC_MODE_NO_INITIATOR</constant> was specified, - &EINVAL; is returned in that case.</entry> - </row> - <row> - <entry><constant>CEC_MODE_MONITOR</constant></entry> - <entry>0xe0</entry> - <entry>Put the file descriptor into monitor mode. Can only be used in combination - with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be - returned. In monitor mode all messages this CEC device transmits and all messages - it receives (both broadcast messages and directed messages for one its logical - addresses) will be reported. This is very useful for debugging. This is only - allowed if the process has the <constant>CAP_NET_ADMIN</constant> - capability. If that is not set, then &EPERM; is returned.</entry> - </row> - <row> - <entry><constant>CEC_MODE_MONITOR_ALL</constant></entry> - <entry>0xf0</entry> - <entry>Put the file descriptor into 'monitor all' mode. Can only be used in combination - with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be - returned. In 'monitor all' mode all messages this CEC device transmits and all messages - it receives, including directed messages for other CEC devices will be reported. This - is very useful for debugging, but not all devices support this. This mode requires that - the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, otherwise &EINVAL; is - returned. This is only allowed if the process has the <constant>CAP_NET_ADMIN</constant> - capability. If that is not set, then &EPERM; is returned.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Core message processing details:</para> - - <table pgwide="1" frame="none" id="cec-core-processing"> - <title>Core Message Processing</title> - <tgroup cols="2"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_MSG_GET_CEC_VERSION</constant></entry> - <entry>When in passthrough mode this message has to be handled by userspace, - otherwise the core will return the CEC version that was set with &CEC-ADAP-S-LOG-ADDRS;.</entry> - </row> - <row> - <entry><constant>CEC_MSG_GIVE_DEVICE_VENDOR_ID</constant></entry> - <entry>When in passthrough mode this message has to be handled by userspace, - otherwise the core will return the vendor ID that was set with &CEC-ADAP-S-LOG-ADDRS;.</entry> - </row> - <row> - <entry><constant>CEC_MSG_ABORT</constant></entry> - <entry>When in passthrough mode this message has to be handled by userspace, - otherwise the core will return a feature refused message as per the specification.</entry> - </row> - <row> - <entry><constant>CEC_MSG_GIVE_PHYSICAL_ADDR</constant></entry> - <entry>When in passthrough mode this message has to be handled by userspace, - otherwise the core will report the current physical address.</entry> - </row> - <row> - <entry><constant>CEC_MSG_GIVE_OSD_NAME</constant></entry> - <entry>When in passthrough mode this message has to be handled by userspace, - otherwise the core will report the current OSD name as was set with - &CEC-ADAP-S-LOG-ADDRS;.</entry> - </row> - <row> - <entry><constant>CEC_MSG_GIVE_FEATURES</constant></entry> - <entry>When in passthrough mode this message has to be handled by userspace, - otherwise the core will report the current features as was set with - &CEC-ADAP-S-LOG-ADDRS; or the message is ignore if the CEC version was - older than 2.0.</entry> - </row> - <row> - <entry><constant>CEC_MSG_USER_CONTROL_PRESSED</constant></entry> - <entry>If <constant>CEC_CAP_RC</constant> is set, then generate a remote control - key press. This message is always passed on to userspace.</entry> - </row> - <row> - <entry><constant>CEC_MSG_USER_CONTROL_RELEASED</constant></entry> - <entry>If <constant>CEC_CAP_RC</constant> is set, then generate a remote control - key release. This message is always passed on to userspace.</entry> - </row> - <row> - <entry><constant>CEC_MSG_REPORT_PHYSICAL_ADDR</constant></entry> - <entry>The CEC framework will make note of the reported physical address - and then just pass the message on to userspace.</entry> - </row> - </tbody> - </tgroup> - </table> - </refsect1> - - <refsect1> - &return-value; - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml b/Documentation/DocBook/media/v4l/cec-ioc-receive.xml deleted file mode 100644 index fde9f8678e67..000000000000 --- a/Documentation/DocBook/media/v4l/cec-ioc-receive.xml +++ /dev/null @@ -1,274 +0,0 @@ -<refentry id="cec-ioc-receive"> - <refmeta> - <refentrytitle>ioctl CEC_RECEIVE, CEC_TRANSMIT</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>CEC_RECEIVE</refname> - <refname>CEC_TRANSMIT</refname> - <refpurpose>Receive or transmit a CEC message</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 cec_msg *<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='cec-func-open'><function>open()</function></link>.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>request</parameter></term> - <listitem> - <para>CEC_RECEIVE, CEC_TRANSMIT</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - - <para> - Note: this documents the proposed CEC API. This API is not yet finalized and - is currently only available as a staging kernel module. - </para> - - <para>To receive a CEC message the application has to fill in the - <structname>cec_msg</structname> structure and pass it to the - <constant>CEC_RECEIVE</constant> ioctl. <constant>CEC_RECEIVE</constant> is - only available if <constant>CEC_CAP_RECEIVE</constant> is set. If the - file descriptor is in non-blocking mode and there are no received - messages pending, then it will return -1 and set errno to the &EAGAIN;. - If the file descriptor is in blocking mode and <structfield>timeout</structfield> - is non-zero and no message arrived within <structfield>timeout</structfield> - milliseconds, then it will return -1 and set errno to the &ETIMEDOUT;.</para> - - <para>To send a CEC message the application has to fill in the - <structname>cec_msg</structname> structure and pass it to the - <constant>CEC_TRANSMIT</constant> ioctl. <constant>CEC_TRANSMIT</constant> is - only available if <constant>CEC_CAP_TRANSMIT</constant> is set. - If there is no more room in the transmit queue, then it will return - -1 and set errno to the &EBUSY;.</para> - - <table pgwide="1" frame="none" id="cec-msg"> - <title>struct <structname>cec_msg</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>__u64</entry> - <entry><structfield>ts</structfield></entry> - <entry>Timestamp of when the message was transmitted in ns in the case - of <constant>CEC_TRANSMIT</constant> with <structfield>reply</structfield> - set to 0, or the timestamp of the received message in all other cases.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>len</structfield></entry> - <entry>The length of the message. For <constant>CEC_TRANSMIT</constant> this - is filled in by the application. The driver will fill this in for - <constant>CEC_RECEIVE</constant> and for <constant>CEC_TRANSMIT</constant> - it will be filled in with the length of the reply message if - <structfield>reply</structfield> was set.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>timeout</structfield></entry> - <entry>The timeout in milliseconds. This is the time the device will wait for a message to - be received before timing out. If it is set to 0, then it will wait indefinitely when it - is called by <constant>CEC_RECEIVE</constant>. If it is 0 and it is called by - <constant>CEC_TRANSMIT</constant>, then it will be replaced by 1000 if the - <structfield>reply</structfield> is non-zero or ignored if <structfield>reply</structfield> - is 0.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>sequence</structfield></entry> - <entry>The sequence number is automatically assigned by the CEC - framework for all transmitted messages. It can be later used by the - framework to generate an event if a reply for a message was - requested and the message was transmitted in a non-blocking mode. - </entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry>Flags. No flags are defined yet, so set this to 0.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>rx_status</structfield></entry> - <entry>The status bits of the received message. See <xref linkend="cec-rx-status" /> - for the possible status values. It is 0 if this message was transmitted, not - received, unless this is the reply to a transmitted message. In that case both - <structfield>rx_status</structfield> and <structfield>tx_status</structfield> - are set.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>tx_status</structfield></entry> - <entry>The status bits of the transmitted message. See <xref linkend="cec-tx-status" /> - for the possible status values. It is 0 if this messages was received, not - transmitted.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>msg</structfield>[16]</entry> - <entry>The message payload. For <constant>CEC_TRANSMIT</constant> this - is filled in by the application. The driver will fill this in for - <constant>CEC_RECEIVE</constant> and for <constant>CEC_TRANSMIT</constant> - it will be filled in with the payload of the reply message if - <structfield>reply</structfield> was set.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>reply</structfield></entry> - <entry>Wait until this message is replied. If <structfield>reply</structfield> - is 0 and the <structfield>timeout</structfield> is 0, then don't wait for a reply but - return after transmitting the message. If there was an error as indicated by a non-zero - <structfield>tx_status</structfield> field, then <structfield>reply</structfield> and - <structfield>timeout</structfield> are both set to 0 by the driver. Ignored by - <constant>CEC_RECEIVE</constant>. The case where <structfield>reply</structfield> is 0 - (this is the opcode for the Feature Abort message) and <structfield>timeout</structfield> - is non-zero is specifically allowed to send a message and wait up to <structfield>timeout</structfield> - milliseconds for a Feature Abort reply. In this case <structfield>rx_status</structfield> - will either be set to <constant>CEC_RX_STATUS_TIMEOUT</constant> or - <constant>CEC_RX_STATUS_FEATURE_ABORT</constant>.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>tx_arb_lost_cnt</structfield></entry> - <entry>A counter of the number of transmit attempts that resulted in the - Arbitration Lost error. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_ARB_LOST</constant> - status bit is set.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>tx_nack_cnt</structfield></entry> - <entry>A counter of the number of transmit attempts that resulted in the - Not Acknowledged error. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_NACK</constant> - status bit is set.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>tx_low_drive_cnt</structfield></entry> - <entry>A counter of the number of transmit attempts that resulted in the - Arbitration Lost error. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_LOW_DRIVE</constant> - status bit is set.</entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>tx_error_cnt</structfield></entry> - <entry>A counter of the number of transmit errors other than Arbitration Lost - or Not Acknowledged. This is only set if the hardware supports this, otherwise - it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_ERROR</constant> - status bit is set.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-tx-status"> - <title>CEC Transmit Status</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_TX_STATUS_OK</constant></entry> - <entry>0x01</entry> - <entry>The message was transmitted successfully. This is mutually exclusive with - <constant>CEC_TX_STATUS_MAX_RETRIES</constant>. Other bits can still be set if - earlier attempts met with failure before the transmit was eventually successful.</entry> - </row> - <row> - <entry><constant>CEC_TX_STATUS_ARB_LOST</constant></entry> - <entry>0x02</entry> - <entry>CEC line arbitration was lost.</entry> - </row> - <row> - <entry><constant>CEC_TX_STATUS_NACK</constant></entry> - <entry>0x04</entry> - <entry>Message was not acknowledged.</entry> - </row> - <row> - <entry><constant>CEC_TX_STATUS_LOW_DRIVE</constant></entry> - <entry>0x08</entry> - <entry>Low drive was detected on the CEC bus. This indicates that a follower - detected an error on the bus and requests a retransmission.</entry> - </row> - <row> - <entry><constant>CEC_TX_STATUS_ERROR</constant></entry> - <entry>0x10</entry> - <entry>Some error occurred. This is used for any errors that do not - fit the previous two, either because the hardware could not tell - which error occurred, or because the hardware tested for other conditions - besides those two.</entry> - </row> - <row> - <entry><constant>CEC_TX_STATUS_MAX_RETRIES</constant></entry> - <entry>0x20</entry> - <entry>The transmit failed after one or more retries. This status bit is mutually - exclusive with <constant>CEC_TX_STATUS_OK</constant>. Other bits can still be set - to explain which failures were seen.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="cec-rx-status"> - <title>CEC Receive Status</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>CEC_RX_STATUS_OK</constant></entry> - <entry>0x01</entry> - <entry>The message was received successfully.</entry> - </row> - <row> - <entry><constant>CEC_RX_STATUS_TIMEOUT</constant></entry> - <entry>0x02</entry> - <entry>The reply to an earlier transmitted message timed out.</entry> - </row> - <row> - <entry><constant>CEC_RX_STATUS_FEATURE_ABORT</constant></entry> - <entry>0x04</entry> - <entry>The message was received successfully but the reply was - <constant>CEC_MSG_FEATURE_ABORT</constant>. This status is only - set if this message was the reply to an earlier transmitted - message.</entry> - </row> - </tbody> - </tgroup> - </table> - </refsect1> - - <refsect1> - &return-value; - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/common.xml b/Documentation/DocBook/media/v4l/common.xml deleted file mode 100644 index 8b5e014224d6..000000000000 --- a/Documentation/DocBook/media/v4l/common.xml +++ /dev/null @@ -1,1102 +0,0 @@ - <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/cgit.cgi/v4l-utils.git/">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 deleted file mode 100644 index 82fa328abd58..000000000000 --- a/Documentation/DocBook/media/v4l/compat.xml +++ /dev/null @@ -1,2723 +0,0 @@ - <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="ctrl-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> - <title>V4L2 in Linux 3.16</title> - <orderedlist> - <listitem> - <para>Added event V4L2_EVENT_SOURCE_CHANGE. - </para> - </listitem> - </orderedlist> - </section> - - <section> - <title>V4L2 in Linux 3.17</title> - <orderedlist> - <listitem> - <para>Extended &v4l2-pix-format;. Added format flags. - </para> - </listitem> - <listitem> - <para>Added compound control types and &VIDIOC-QUERY-EXT-CTRL;. - </para> - </listitem> - </orderedlist> - </section> - - <section> - <title>V4L2 in Linux 3.18</title> - <orderedlist> - <listitem> - <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and - <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> - </listitem> - </orderedlist> - </section> - - <section> - <title>V4L2 in Linux 3.19</title> - <orderedlist> - <listitem> - <para>Rewrote Colorspace chapter, added new &v4l2-ycbcr-encoding; -and &v4l2-quantization; fields to &v4l2-pix-format;, &v4l2-pix-format-mplane; -and &v4l2-mbus-framefmt;. - </para> - </listitem> - </orderedlist> - </section> - - <section> - <title>V4L2 in Linux 4.4</title> - <orderedlist> - <listitem> - <para>Renamed <constant>V4L2_TUNER_ADC</constant> to -<constant>V4L2_TUNER_SDR</constant>. The use of -<constant>V4L2_TUNER_ADC</constant> is deprecated now. - </para> - </listitem> - <listitem> - <para>Added <constant>V4L2_CID_RF_TUNER_RF_GAIN</constant> -RF Tuner control.</para> - </listitem> - <listitem> - <para>Added transmitter support for 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="https://linuxtv.org">https://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>&VIDIOC-DBG-G-REGISTER; and &VIDIOC-DBG-S-REGISTER; -ioctls.</para> - </listitem> - <listitem> - <para>&VIDIOC-DBG-G-CHIP-INFO; ioctl.</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 deleted file mode 100644 index e2e5484d2d9b..000000000000 --- a/Documentation/DocBook/media/v4l/controls.xml +++ /dev/null @@ -1,5505 +0,0 @@ - <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> -<footnote><para>The use of <constant>V4L2_CID_PRIVATE_BASE</constant> -is problematic because different drivers may use the same -<constant>V4L2_CID_PRIVATE_BASE</constant> ID for different controls. -This makes it hard to programatically set such controls since the meaning -of the control with that ID is driver dependent. In order to resolve this -drivers use unique IDs and the <constant>V4L2_CID_PRIVATE_BASE</constant> -IDs are mapped to those unique IDs by the kernel. Consider these -<constant>V4L2_CID_PRIVATE_BASE</constant> IDs as aliases to the real -IDs.</para> -<para>Many applications today still use the <constant>V4L2_CID_PRIVATE_BASE</constant> -IDs instead of using &VIDIOC-QUERYCTRL; with the <constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant> -flag to enumerate all IDs, so support for <constant>V4L2_CID_PRIVATE_BASE</constant> -is still around.</para></footnote> -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.</para> - - <para>If a control is not applicable to the current configuration -of the device (for example, it doesn't apply to the current video input) -drivers set the <constant>V4L2_CTRL_FLAG_INACTIVE</constant> flag.</para> - - <para>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.</para> - - <para>V4L2 specifies an event mechanism to notify applications -when controls change value (see &VIDIOC-SUBSCRIBE-EVENT;, event -<constant>V4L2_EVENT_CTRL</constant>), panel applications might want to make -use of that in order to always reflect the correct control value.</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. When a capture device (or - capture queue of a mem-to-mem device) produces a 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 device or the mem-to-mem - input data this control lets you select the alpha component value of - all pixels. When an output device (or output queue of a mem-to-mem - device) consumes a frame format that doesn't include an alpha - component and the device supports alpha channel processing this - control lets you set the alpha component value of all pixels for - further processing in the device. - </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 id="enum_all_controls"> - <title>Enumerating all user 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>Enumerating all user controls (alternative)</title> - <programlisting> -memset(&queryctrl, 0, sizeof(queryctrl)); - -queryctrl.id = V4L2_CTRL_CLASS_USER | V4L2_CTRL_FLAG_NEXT_CTRL; -while (0 == ioctl(fd, &VIDIOC-QUERYCTRL;, &queryctrl)) { - if (V4L2_CTRL_ID2CLASS(queryctrl.id) != V4L2_CTRL_CLASS_USER) - break; - if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - - printf("Control %s\n", queryctrl.name); - - if (queryctrl.type == V4L2_CTRL_TYPE_MENU) - enumerate_menu(); - - queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; -} -if (errno != EINVAL) { - 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 = 1; /* 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>Since the &v4l2-ext-control; supports pointers it is now -also possible to have controls with compound types such as N-dimensional arrays -and/or structures. You need to specify the <constant>V4L2_CTRL_FLAG_NEXT_COMPOUND</constant> -when enumerating controls to actually be able to see such compound controls. -In other words, these controls with compound types should only be used -programmatically.</para> - - <para>Since such compound controls need to expose more information -about themselves than is possible with &VIDIOC-QUERYCTRL; the -&VIDIOC-QUERY-EXT-CTRL; ioctl was added. In particular, this ioctl gives -the dimensions of the N-dimensional array if this control consists of more than -one element.</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; (or &VIDIOC-QUERY-EXT-CTRL;) 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 -<xref linkend="enum_all_controls" />). 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 id="v4l2-mpeg-video-force-key-frame"> - <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME</constant> </entry> - <entry>button</entry> - </row><row><entry spanname="descr">Force a key frame for the next queued buffer. Applicable to encoders. -This is a general, codec-agnostic keyframe control.</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>boolean</entry> - </row><row><entry spanname="descr">If the display delay is enabled then the decoder is forced to return a -CAPTURE buffer (decoded frame) after processing a certain number of OUTPUT buffers. The delay can be set through -<constant>V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY</constant>. 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 constraints. 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 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> - - <row> - <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> - <entry>integer</entry> - </row><row><entry spanname="descr">This control turns the -camera horizontally at the specific speed. 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 stops the motion -if one is in progress and has no effect otherwise.</entry> - </row> - <row><entry></entry></row> - - <row> - <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> - <entry>integer</entry> - </row><row><entry spanname="descr">This control turns the -camera vertically at the specified speed. The unit is undefined. A -positive value moves the camera up, a negative value down. A value of zero -stops the motion if one is in progress and has no effect otherwise.</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_RDS_TX_MONO_STEREO</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">Sets the Mono/Stereo bit of the Decoder Identification code. If set, -then the audio was recorded as stereo.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_ARTIFICIAL_HEAD</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">Sets the -<ulink url="http://en.wikipedia.org/wiki/Artificial_head">Artificial Head</ulink> bit of the Decoder -Identification code. If set, then the audio was recorded using an artificial head.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_COMPRESSED</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">Sets the Compressed bit of the Decoder Identification code. If set, -then the audio is compressed.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_DYNAMIC_PTY</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">Sets the Dynamic PTY bit of the Decoder Identification code. If set, -then the PTY code is dynamically switched.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then a traffic announcement is in progress.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_TRAFFIC_PROGRAM</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then the tuned programme carries traffic announcements.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_MUSIC_SPEECH</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then this channel broadcasts music. If cleared, then it -broadcasts speech. If the transmitter doesn't make this distinction, then it should be set.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_ALT_FREQS_ENABLE</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then transmit alternate frequencies.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_TX_ALT_FREQS</constant> </entry> - <entry>__u32 array</entry> - </row> - <row><entry spanname="descr">The alternate frequencies in kHz units. The RDS standard allows -for up to 25 frequencies to be defined. Drivers may support fewer frequencies so check -the array size.</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> - - <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> - - <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 spanname="id"><constant>V4L2_CID_TEST_PATTERN_RED</constant></entry> - <entry>integer</entry> - </row> - <row> - <entry spanname="descr">Test pattern red colour component. - </entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_TEST_PATTERN_GREENR</constant></entry> - <entry>integer</entry> - </row> - <row> - <entry spanname="descr">Test pattern green (next to red) - colour component. - </entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_TEST_PATTERN_BLUE</constant></entry> - <entry>integer</entry> - </row> - <row> - <entry spanname="descr">Test pattern blue colour component. - </entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_TEST_PATTERN_GREENB</constant></entry> - <entry>integer</entry> - </row> - <row> - <entry spanname="descr">Test pattern green (next to blue) - colour component. - </entry> - </row> - <row><entry></entry></row> - </tbody> - </tgroup> - </table> - - </section> - - <section id="image-process-controls"> - <title>Image Process Control Reference</title> - - <para> - The Image Process 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 Process 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> - - <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_TX_IT_CONTENT_TYPE</constant></entry> - <entry id="v4l2-dv-content-type">enum v4l2_dv_it_content_type</entry> - </row> - <row><entry spanname="descr">Configures the IT Content Type - of the transmitted video. This information is sent over HDMI and DisplayPort connectors - as part of the AVI InfoFrame. The term 'IT Content' is used for content that originates - from a computer as opposed to content from a TV broadcast or an analog source. The - enum v4l2_dv_it_content_type defines the possible content types:</entry> - </row> - <row> - <entrytbl spanname="descr" cols="2"> - <tbody valign="top"> - <row> - <entry><constant>V4L2_DV_IT_CONTENT_TYPE_GRAPHICS</constant> </entry> - <entry>Graphics content. Pixel data should be passed unfiltered and without - analog reconstruction.</entry> - </row> - <row> - <entry><constant>V4L2_DV_IT_CONTENT_TYPE_PHOTO</constant> </entry> - <entry>Photo content. The content is derived from digital still pictures. - The content should be passed through with minimal scaling and picture - enhancements.</entry> - </row> - <row> - <entry><constant>V4L2_DV_IT_CONTENT_TYPE_CINEMA</constant> </entry> - <entry>Cinema content.</entry> - </row> - <row> - <entry><constant>V4L2_DV_IT_CONTENT_TYPE_GAME</constant> </entry> - <entry>Game content. Audio and video latency should be minimized.</entry> - </row> - <row> - <entry><constant>V4L2_DV_IT_CONTENT_TYPE_NO_ITC</constant> </entry> - <entry>No IT Content information is available and the ITC bit in the AVI - InfoFrame is set to 0.</entry> - </row> - </tbody> - </entrytbl> - </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 spanname="id"><constant>V4L2_CID_DV_RX_IT_CONTENT_TYPE</constant></entry> - <entry>enum v4l2_dv_it_content_type</entry> - </row> - <row><entry spanname="descr">Reads the IT Content Type - of the received video. This information is sent over HDMI and DisplayPort connectors - as part of the AVI InfoFrame. The term 'IT Content' is used for content that originates - from a computer as opposed to content from a TV broadcast or an analog source. See - <constant>V4L2_CID_DV_TX_IT_CONTENT_TYPE</constant> for the available content types.</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_RDS_RX_PTY</constant> </entry> - <entry>integer</entry> - </row> - <row><entry spanname="descr">Gets RDS Programme Type field. -This encodes up to 31 pre-defined programme types.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_RX_PS_NAME</constant> </entry> - <entry>string</entry> - </row> - <row><entry spanname="descr">Gets the Programme Service name (PS_NAME). -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_RX_RADIO_TEXT</constant> </entry> - <entry>string</entry> - </row> - <row><entry spanname="descr">Gets the Radio Text info. 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 can be used in addition to -<constant>V4L2_CID_RDS_RX_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_RDS_RX_TRAFFIC_ANNOUNCEMENT</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then a traffic announcement is in progress.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_RX_TRAFFIC_PROGRAM</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then the tuned programme carries traffic announcements.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_RDS_RX_MUSIC_SPEECH</constant> </entry> - <entry>boolean</entry> - </row> - <row><entry spanname="descr">If set, then this channel broadcasts music. If cleared, then it -broadcasts speech. If the transmitter doesn't make this distinction, then it will be set.</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="detect-controls"> - <title>Detect Control Reference</title> - - <para>The Detect class includes controls for common features of - various motion or object detection capable devices.</para> - - <table pgwide="1" frame="none" id="detect-control-id"> - <title>Detect 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_DETECT_CLASS</constant> </entry> - <entry>class</entry> - </row><row><entry spanname="descr">The Detect 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_DETECT_MD_MODE</constant> </entry> - <entry>menu</entry> - </row><row><entry spanname="descr">Sets the motion detection mode.</entry> - </row> - <row> - <entrytbl spanname="descr" cols="2"> - <tbody valign="top"> - <row> - <entry><constant>V4L2_DETECT_MD_MODE_DISABLED</constant> - </entry><entry>Disable motion detection.</entry> - </row> - <row> - <entry><constant>V4L2_DETECT_MD_MODE_GLOBAL</constant> - </entry><entry>Use a single motion detection threshold.</entry> - </row> - <row> - <entry><constant>V4L2_DETECT_MD_MODE_THRESHOLD_GRID</constant> - </entry><entry>The image is divided into a grid, each cell with its own - motion detection threshold. These thresholds are set through the - <constant>V4L2_CID_DETECT_MD_THRESHOLD_GRID</constant> matrix control.</entry> - </row> - <row> - <entry><constant>V4L2_DETECT_MD_MODE_REGION_GRID</constant> - </entry><entry>The image is divided into a grid, each cell with its own - region value that specifies which per-region motion detection thresholds - should be used. Each region has its own thresholds. How these per-region - thresholds are set up is driver-specific. The region values for the grid are set - through the <constant>V4L2_CID_DETECT_MD_REGION_GRID</constant> matrix - control.</entry> - </row> - </tbody> - </entrytbl> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD</constant> </entry> - <entry>integer</entry> - </row> - <row><entry spanname="descr">Sets the global motion detection threshold to be - used with the <constant>V4L2_DETECT_MD_MODE_GLOBAL</constant> motion detection mode.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_DETECT_MD_THRESHOLD_GRID</constant> </entry> - <entry>__u16 matrix</entry> - </row> - <row><entry spanname="descr">Sets the motion detection thresholds for each cell in the grid. - To be used with the <constant>V4L2_DETECT_MD_MODE_THRESHOLD_GRID</constant> - motion detection mode. Matrix element (0, 0) represents the cell at the top-left of the - grid.</entry> - </row> - <row> - <entry spanname="id"><constant>V4L2_CID_DETECT_MD_REGION_GRID</constant> </entry> - <entry>__u8 matrix</entry> - </row> - <row><entry spanname="descr">Sets the motion detection region value for each cell in the grid. - To be used with the <constant>V4L2_DETECT_MD_MODE_REGION_GRID</constant> - motion detection mode. Matrix element (0, 0) represents the cell at the top-left of the - grid.</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_RF_GAIN</constant> </entry> - <entry>integer</entry> - </row> - <row> - <entry spanname="descr">The RF amplifier is the very first -amplifier on the receiver signal path, just right after the antenna input. -The difference between the LNA gain and the RF gain in this document is that -the LNA gain is integrated in the tuner chip while the RF gain is a separate -chip. There may be both RF and LNA gain controls in the same device. -The range and step are driver-specific.</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. -See <constant>V4L2_CID_RF_TUNER_RF_GAIN</constant> to understand how RF gain -and LNA gain differs from the each others. -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 differdeleted file mode 100644 index c9fb81cd32f3..000000000000 --- a/Documentation/DocBook/media/v4l/crop.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/dev-capture.xml b/Documentation/DocBook/media/v4l/dev-capture.xml deleted file mode 100644 index e1c5f9406d6a..000000000000 --- a/Documentation/DocBook/media/v4l/dev-capture.xml +++ /dev/null @@ -1,110 +0,0 @@ - <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 deleted file mode 100644 index ff44c16fc080..000000000000 --- a/Documentation/DocBook/media/v4l/dev-codec.xml +++ /dev/null @@ -1,27 +0,0 @@ - <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 deleted file mode 100644 index 2350a67c0710..000000000000 --- a/Documentation/DocBook/media/v4l/dev-effect.xml +++ /dev/null @@ -1,17 +0,0 @@ - <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 deleted file mode 100644 index 19f4becfae34..000000000000 --- a/Documentation/DocBook/media/v4l/dev-event.xml +++ /dev/null @@ -1,43 +0,0 @@ - <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 deleted file mode 100644 index 54853329140b..000000000000 --- a/Documentation/DocBook/media/v4l/dev-osd.xml +++ /dev/null @@ -1,149 +0,0 @@ - <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 deleted file mode 100644 index 9130a3dc7880..000000000000 --- a/Documentation/DocBook/media/v4l/dev-output.xml +++ /dev/null @@ -1,106 +0,0 @@ - <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 deleted file mode 100644 index cc6e0c5c960c..000000000000 --- a/Documentation/DocBook/media/v4l/dev-overlay.xml +++ /dev/null @@ -1,368 +0,0 @@ - <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 deleted file mode 100644 index 3e6ac73b36af..000000000000 --- a/Documentation/DocBook/media/v4l/dev-radio.xml +++ /dev/null @@ -1,49 +0,0 @@ - <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 deleted file mode 100644 index 78599bbd58f7..000000000000 --- a/Documentation/DocBook/media/v4l/dev-raw-vbi.xml +++ /dev/null @@ -1,345 +0,0 @@ - <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 capabilities 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. -The <constant>V4L2_VBI_ITU_525_F1_START</constant>, -<constant>V4L2_VBI_ITU_525_F2_START</constant>, -<constant>V4L2_VBI_ITU_625_F1_START</constant> and -<constant>V4L2_VBI_ITU_625_F2_START</constant> defines give the start line -numbers for each field for each 525 or 625 line format as a convenience. -Don't forget that ITU line numbering starts at 1, not 0. -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 deleted file mode 100644 index be2f33737323..000000000000 --- a/Documentation/DocBook/media/v4l/dev-rds.xml +++ /dev/null @@ -1,196 +0,0 @@ - <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 deleted file mode 100644 index 6da1157fb5bd..000000000000 --- a/Documentation/DocBook/media/v4l/dev-sdr.xml +++ /dev/null @@ -1,126 +0,0 @@ - <title>Software Defined Radio Interface (SDR)</title> - - <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. - </para> - <para> -Devices supporting the SDR transmitter interface set the -<constant>V4L2_CAP_SDR_OUTPUT</constant> and -<constant>V4L2_CAP_MODULATOR</constant> flag in the -<structfield>capabilities</structfield> field of &v4l2-capability; -returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an -Digital to Analog Converter (DAC), which is a mandatory element for the SDR transmitter. - </para> - <para> -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/DAC sampling rate (sampling frequency) and the possible -radio frequency (RF). - </para> - - <para> -The <constant>V4L2_TUNER_SDR</constant> tuner type is used for setting SDR -device ADC/DAC frequency, and the <constant>V4L2_TUNER_RF</constant> -tuner type is used for setting radio frequency. -The tuner index of the RF tuner (if any) must always follow the SDR tuner index. -Normally the SDR 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 device uses the <link linkend="format">format</link> ioctls to -select the capture and output 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> or -<constant>V4L2_BUF_TYPE_SDR_OUTPUT</constant> and use the &v4l2-sdr-format; -<structfield>sdr</structfield> member of the <structfield>fmt</structfield> -union as needed per the desired operation. -Currently there is two fields, <structfield>pixelformat</structfield> and -<structfield>buffersize</structfield>, of struct &v4l2-sdr-format; which are -used. Content of the <structfield>pixelformat</structfield> is V4L2 FourCC -code of the data format. The <structfield>buffersize</structfield> field is -maximum buffer size in bytes required for data transfer, set by the driver in -order to inform application. - </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>__u32</entry> - <entry><structfield>buffersize</structfield></entry> - <entry> -Maximum size in bytes required for data. Value is set by the driver. - </entry> - </row> - <row> - <entry>__u8</entry> - <entry><structfield>reserved[24]</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 deleted file mode 100644 index 0aec62ed2bf8..000000000000 --- a/Documentation/DocBook/media/v4l/dev-sliced-vbi.xml +++ /dev/null @@ -1,706 +0,0 @@ - <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. -The <constant>V4L2_VBI_ITU_525_F1_START</constant>, -<constant>V4L2_VBI_ITU_525_F2_START</constant>, -<constant>V4L2_VBI_ITU_625_F1_START</constant> and -<constant>V4L2_VBI_ITU_625_F2_START</constant> defines give the start -line numbers for each field for each 525 or 625 line format as a -convenience. Don't forget that ITU line numbering starts at 1, not 0. -</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="cea608" /></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 deleted file mode 100644 index f4bc27af83eb..000000000000 --- a/Documentation/DocBook/media/v4l/dev-subdev.xml +++ /dev/null @@ -1,478 +0,0 @@ - <title>Sub-device Interface</title> - - <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 format" /> - <colspec colname="frontend-0 format" /> - <colspec colname="frontend-1 format" /> - <colspec colname="scaler-0 format" /> - <colspec colname="scaler-0 compose" /> - <colspec colname="scaler-1 format" /> - <thead> - <row> - <entry></entry> - <entry>Sensor/0 format</entry> - <entry>Frontend/0 format</entry> - <entry>Frontend/1 format</entry> - <entry>Scaler/0 format</entry> - <entry>Scaler/0 compose selection rectangle</entry> - <entry>Scaler/1 format</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Initial state</entry> - <entry>2048x1536/SGRBG8_1X8</entry> - <entry>(default)</entry> - <entry>(default)</entry> - <entry>(default)</entry> - <entry>(default)</entry> - <entry>(default)</entry> - </row> - <row> - <entry>Configure frontend sink format</entry> - <entry>2048x1536/SGRBG8_1X8</entry> - <entry><emphasis>2048x1536/SGRBG8_1X8</emphasis></entry> - <entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry> - <entry>(default)</entry> - <entry>(default)</entry> - <entry>(default)</entry> - </row> - <row> - <entry>Configure scaler sink format</entry> - <entry>2048x1536/SGRBG8_1X8</entry> - <entry>2048x1536/SGRBG8_1X8</entry> - <entry>2046x1534/SGRBG8_1X8</entry> - <entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry> - <entry><emphasis>0,0/2046x1534</emphasis></entry> - <entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry> - </row> - <row> - <entry>Configure scaler sink compose selection</entry> - <entry>2048x1536/SGRBG8_1X8</entry> - <entry>2048x1536/SGRBG8_1X8</entry> - <entry>2046x1534/SGRBG8_1X8</entry> - <entry>2046x1534/SGRBG8_1X8</entry> - <entry><emphasis>0,0/1280x960</emphasis></entry> - <entry><emphasis>1280x960/SGRBG8_1X8</emphasis></entry> - </row> - </tbody> - </tgroup> - </table> - - <para> - <orderedlist> - <listitem><para>Initial state. The sensor source pad format is - set to its native 3MP size and V4L2_MBUS_FMT_SGRBG8_1X8 - media bus code. Formats on the host frontend and scaler sink - and source pads have the default values, as well as the - compose rectangle on the scaler's sink pad.</para></listitem> - - <listitem><para>The application configures the frontend sink - pad format's size to 2048x1536 and its media bus code to - V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the format to - the frontend source pad.</para></listitem> - - <listitem><para>The application configures the scaler sink pad - format's size to 2046x1534 and the media bus code to - V4L2_MBUS_FMT_SGRBG_1X8 to match the frontend source size and - media bus code. The media bus code on the sink pad is set to - V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the size to the - compose selection rectangle on the scaler's sink pad, and the - format to the scaler source pad.</para></listitem> - - <listitem><para>The application configures the size of the compose - selection rectangle of the scaler's sink pad 1280x960. The driver - propagates the size to the scaler's source pad - format.</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 deleted file mode 100644 index bd21c64d70f3..000000000000 --- a/Documentation/DocBook/media/v4l/dev-teletext.xml +++ /dev/null @@ -1,29 +0,0 @@ - <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 deleted file mode 100644 index 7c6638bacedb..000000000000 --- a/Documentation/DocBook/media/v4l/driver.xml +++ /dev/null @@ -1,200 +0,0 @@ - <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 deleted file mode 100644 index 71299a3897c4..000000000000 --- a/Documentation/DocBook/media/v4l/fdl-appendix.xml +++ /dev/null @@ -1,671 +0,0 @@ -<!-- - 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 - distribute 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 differdeleted file mode 100644 index 26598b23f80d..000000000000 --- a/Documentation/DocBook/media/v4l/fieldseq_bt.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/fieldseq_tb.pdf b/Documentation/DocBook/media/v4l/fieldseq_tb.pdf Binary files differdeleted file mode 100644 index 4965b22ddb3a..000000000000 --- a/Documentation/DocBook/media/v4l/fieldseq_tb.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/func-close.xml b/Documentation/DocBook/media/v4l/func-close.xml deleted file mode 100644 index 232920d2f3c6..000000000000 --- a/Documentation/DocBook/media/v4l/func-close.xml +++ /dev/null @@ -1,62 +0,0 @@ -<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 deleted file mode 100644 index 4394184a1a6d..000000000000 --- a/Documentation/DocBook/media/v4l/func-ioctl.xml +++ /dev/null @@ -1,71 +0,0 @@ -<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 deleted file mode 100644 index f31ad71bf301..000000000000 --- a/Documentation/DocBook/media/v4l/func-mmap.xml +++ /dev/null @@ -1,183 +0,0 @@ -<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 deleted file mode 100644 index 860d49ca54a5..000000000000 --- a/Documentation/DocBook/media/v4l/func-munmap.xml +++ /dev/null @@ -1,76 +0,0 @@ -<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 deleted file mode 100644 index cf64e207c3ee..000000000000 --- a/Documentation/DocBook/media/v4l/func-open.xml +++ /dev/null @@ -1,113 +0,0 @@ -<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 deleted file mode 100644 index 4c73f115219b..000000000000 --- a/Documentation/DocBook/media/v4l/func-poll.xml +++ /dev/null @@ -1,142 +0,0 @@ -<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 by the capture device and can be dequeued -with the &VIDIOC-DQBUF; ioctl. For output devices this function waits -until the device is ready to accept a new buffer to be queued up with -the &VIDIOC-QBUF; ioctl for display. When buffers are already in the outgoing -queue of the driver (capture) or the incoming queue isn't full (display) -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-STREAMON; the -<function>poll()</function> function succeeds, but sets the -<constant>POLLERR</constant> flag in the -<structfield>revents</structfield> field. When the -application has called &VIDIOC-STREAMON; for a capture device but hasn't -yet called &VIDIOC-QBUF;, the <function>poll()</function> function -succeeds and sets the <constant>POLLERR</constant> flag in the -<structfield>revents</structfield> field. For output devices this -same situation will cause <function>poll()</function> to succeed -as well, but it sets the <constant>POLLOUT</constant> and -<constant>POLLWRNORM</constant> flags in the <structfield>revents</structfield> -field.</para> - - <para>If an event occurred (see &VIDIOC-DQEVENT;) then -<constant>POLLPRI</constant> will be set in the <structfield>revents</structfield> -field and <function>poll()</function> will return.</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 and the driver does not stream yet, the -<function>poll</function> function starts streaming. When that fails -it returns a <constant>POLLERR</constant> as above. Otherwise it waits -until the driver is ready for a non-blocking -<function>write()</function> call.</para> - - <para>If the caller is only interested in events (just -<constant>POLLPRI</constant> is set in the <structfield>events</structfield> -field), then <function>poll()</function> will <emphasis>not</emphasis> -start streaming if the driver does not stream yet. This makes it -possible to just poll for events and not for buffers.</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 deleted file mode 100644 index e218bbfbd362..000000000000 --- a/Documentation/DocBook/media/v4l/func-read.xml +++ /dev/null @@ -1,181 +0,0 @@ -<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 deleted file mode 100644 index e12a60d9bd85..000000000000 --- a/Documentation/DocBook/media/v4l/func-select.xml +++ /dev/null @@ -1,130 +0,0 @@ -<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 deleted file mode 100644 index 575207885726..000000000000 --- a/Documentation/DocBook/media/v4l/func-write.xml +++ /dev/null @@ -1,128 +0,0 @@ -<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 deleted file mode 100644 index 7e29a4e1f696..000000000000 --- a/Documentation/DocBook/media/v4l/gen-errors.xml +++ /dev/null @@ -1,77 +0,0 @@ -<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 deleted file mode 100644 index 21a3dde8f95d..000000000000 --- a/Documentation/DocBook/media/v4l/io.xml +++ /dev/null @@ -1,1545 +0,0 @@ - <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 with the memory type set to <constant>V4L2_MEMORY_MMAP</constant>.</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 with the memory type set to <constant>V4L2_MEMORY_USERPTR</constant>.</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> - -<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 a capture 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 a capture 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 capture 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. Drivers and applications -must set this to 0.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield></entry> - <entry></entry> - <entry>A place holder for future extensions. Drivers and applications -must 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 a capture 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. Note that the actual image data starts at - <structfield>data_offset</structfield> which may not be 0.</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 a capture stream, applications when it refers to an output stream. - Note that data_offset is included in <structfield>bytesused</structfield>. - So the size of the image in the plane is - <structfield>bytesused</structfield>-<structfield>data_offset</structfield> at - offset <structfield>data_offset</structfield> from the start of the plane. - </entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved[11]</structfield></entry> - <entry></entry> - <entry>Reserved for future use. Should be zeroed by drivers and - applications.</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) capture stream, see - <xref linkend="sdr" />.</entry> - </row> - <row> - <entry><constant>V4L2_BUF_TYPE_SDR_OUTPUT</constant></entry> - <entry>12</entry> - <entry>Buffer for Software Defined Radio (SDR) output stream, 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 known 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_LAST</constant></entry> - <entry>0x00100000</entry> - <entry>Last buffer produced by the hardware. mem2mem codec drivers -set this flag on the capture queue for the last buffer when the -<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link> or -<link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl is called. Due to hardware -limitations, the last buffer may be empty. In this case the driver will set the -<structfield>bytesused</structfield> field to 0, regardless of the format. Any -Any subsequent call to the <link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl -will not block anymore, but return an &EPIPE;.</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. Drivers must -never return <constant>V4L2_FIELD_ANY</constant>. If multiple -field orders are possible the driver must choose one of the possible -field orders during &VIDIOC-S-FMT; or &VIDIOC-TRY-FMT;. &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 deleted file mode 100644 index d53254a3be15..000000000000 --- a/Documentation/DocBook/media/v4l/keytable.c.xml +++ /dev/null @@ -1,172 +0,0 @@ -<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 deleted file mode 100644 index d3b71e20003c..000000000000 --- a/Documentation/DocBook/media/v4l/libv4l.xml +++ /dev/null @@ -1,160 +0,0 @@ -<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 deleted file mode 100644 index f53ad58027a7..000000000000 --- a/Documentation/DocBook/media/v4l/lirc_device_interface.xml +++ /dev/null @@ -1,255 +0,0 @@ -<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 steps 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). Return 0 on success.</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 deleted file mode 100644 index 5f2fc07a93d7..000000000000 --- a/Documentation/DocBook/media/v4l/media-controller.xml +++ /dev/null @@ -1,105 +0,0 @@ -<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 and Linux Kernel interfaces are modelled as graph objects on - an oriented graph. The object types that constitute the graph are:</para> - <itemizedlist> - <listitem><para>An <emphasis role="bold">entity</emphasis> - 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></listitem> - <listitem><para>An <emphasis role="bold">interface</emphasis> - is a graph representation of a Linux Kernel userspace API interface, - like a device node or a sysfs file that controls one or more entities - in the graph.</para></listitem> - <listitem><para>A <emphasis role="bold">pad</emphasis> - is a data 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></listitem> - <listitem><para>A <emphasis role="bold">data link</emphasis> - 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></listitem> - <listitem><para>An <emphasis role="bold">interface link</emphasis> - is a point-to-point bidirectional control connection between a Linux - Kernel interface and an entity.m</para></listitem> - </itemizedlist> - </section> - - <!-- All non-ioctl specific data types go here. --> - &sub-media-types; -</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-g-topology; - &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 deleted file mode 100644 index be149c802aeb..000000000000 --- a/Documentation/DocBook/media/v4l/media-func-close.xml +++ /dev/null @@ -1,59 +0,0 @@ -<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 deleted file mode 100644 index 39478d0fbcaa..000000000000 --- a/Documentation/DocBook/media/v4l/media-func-ioctl.xml +++ /dev/null @@ -1,73 +0,0 @@ -<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 deleted file mode 100644 index 122374a3e894..000000000000 --- a/Documentation/DocBook/media/v4l/media-func-open.xml +++ /dev/null @@ -1,94 +0,0 @@ -<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, attempts 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 deleted file mode 100644 index b0a21ac300b8..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-device-info.xml +++ /dev/null @@ -1,132 +0,0 @@ -<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>driver_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 deleted file mode 100644 index 0c4f96bfc2de..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-enum-entities.xml +++ /dev/null @@ -1,180 +0,0 @@ -<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> - - <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. Always zero (obsolete)</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. Always zero (obsolete)</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>dev</structfield></entry> - <entry></entry> - <entry>Valid for (sub-)devices that create a single device node.</entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>__u32</entry> - <entry><structfield>major</structfield></entry> - <entry>Device node major number.</entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>__u32</entry> - <entry><structfield>minor</structfield></entry> - <entry>Device node minor number.</entry> - </row> - <row> - <entry></entry> - <entry>__u8</entry> - <entry><structfield>raw</structfield>[184]</entry> - <entry></entry> - <entry></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 deleted file mode 100644 index 2bbeea9f3e18..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-enum-links.xml +++ /dev/null @@ -1,160 +0,0 @@ -<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 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> - - </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-g-topology.xml b/Documentation/DocBook/media/v4l/media-ioc-g-topology.xml deleted file mode 100644 index e0d49fa329f0..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-g-topology.xml +++ /dev/null @@ -1,391 +0,0 @@ -<refentry id="media-g-topology"> - <refmeta> - <refentrytitle>ioctl MEDIA_IOC_G_TOPOLOGY</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>MEDIA_IOC_G_TOPOLOGY</refname> - <refpurpose>Enumerate the graph topology and graph element 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_v2_topology *<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_G_TOPOLOGY</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>argp</parameter></term> - <listitem> - <para></para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1> - <title>Description</title> - <para>The typical usage of this ioctl is to call it twice. - On the first call, the structure defined at &media-v2-topology; should - be zeroed. At return, if no errors happen, this ioctl will return the - <constant>topology_version</constant> and the total number of entities, - interfaces, pads and links.</para> - <para>Before the second call, the userspace should allocate arrays to - store the graph elements that are desired, putting the pointers to them - at the ptr_entities, ptr_interfaces, ptr_links and/or ptr_pads, keeping - the other values untouched.</para> - <para>If the <constant>topology_version</constant> remains the same, the - ioctl should fill the desired arrays with the media graph elements.</para> - - <table pgwide="1" frame="none" id="media-v2-topology"> - <title>struct <structname>media_v2_topology</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>__u64</entry> - <entry><structfield>topology_version</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Version of the media graph topology. When the graph is - created, this field starts with zero. Every time a graph - element is added or removed, this field is - incremented.</entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>num_entities</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Number of entities in the graph</entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>ptr_entities</structfield></entry> - <entry></entry> - <entry></entry> - <entry>A pointer to a memory area where the entities array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - entities. It will just update - <constant>num_entities</constant></entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>num_interfaces</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Number of interfaces in the graph</entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>ptr_interfaces</structfield></entry> - <entry></entry> - <entry></entry> - <entry>A pointer to a memory area where the interfaces array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - interfaces. It will just update - <constant>num_interfaces</constant></entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>num_pads</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Total number of pads in the graph</entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>ptr_pads</structfield></entry> - <entry></entry> - <entry></entry> - <entry>A pointer to a memory area where the pads array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - pads. It will just update - <constant>num_pads</constant></entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>num_links</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Total number of data and interface links in the graph</entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>ptr_links</structfield></entry> - <entry></entry> - <entry></entry> - <entry>A pointer to a memory area where the links array - will be stored, converted to a 64-bits integer. - It can be zero. if zero, the ioctl won't store the - links. It will just update - <constant>num_links</constant></entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="media-v2-entity"> - <title>struct <structname>media_v2_entity</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>Unique ID for the entity.</entry> - </row> - <row> - <entry>char</entry> - <entry><structfield>name</structfield>[64]</entry> - <entry></entry> - <entry></entry> - <entry>Entity name as an UTF-8 NULL-terminated string.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>function</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Entity main function, see <xref linkend="media-entity-type" /> for details.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield>[12]</entry> - <entry>Reserved for future extensions. Drivers and applications must - set this array to zero.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="media-v2-interface"> - <title>struct <structname>media_v2_interface</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>Unique ID for the interface.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>intf_type</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Interface type, see <xref linkend="media-intf-type" /> for details.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Interface flags. Currently unused.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield>[9]</entry> - <entry></entry> - <entry></entry> - <entry>Reserved for future extensions. Drivers and applications must - set this array to zero.</entry> - </row> - <row> - <entry>struct media_v2_intf_devnode</entry> - <entry><structfield>devnode</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Used only for device node interfaces. See <xref linkend="media-v2-intf-devnode" /> for details..</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="media-v2-intf-devnode"> - <title>struct <structname>media_v2_interface</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>major</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Device node major number.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>minor</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Device node minor number.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="media-v2-pad"> - <title>struct <structname>media_v2_pad</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>Unique ID for the pad.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>entity_id</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Unique ID for the entity where this pad belongs.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield>[9]</entry> - <entry></entry> - <entry></entry> - <entry>Reserved for future extensions. Drivers and applications must - set this array to zero.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="media-v2-link"> - <title>struct <structname>media_v2_pad</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>Unique ID for the pad.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>source_id</structfield></entry> - <entry></entry> - <entry></entry> - <entry> - <para>On pad to pad links: unique ID for the source pad.</para> - <para>On interface to entity links: unique ID for the interface.</para> - </entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>sink_id</structfield></entry> - <entry></entry> - <entry></entry> - <entry> - <para>On pad to pad links: unique ID for the sink pad.</para> - <para>On interface to entity links: unique ID for the entity.</para> - </entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry></entry> - <entry></entry> - <entry>Link flags, see <xref linkend="media-link-flag" /> for more details.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield>[5]</entry> - <entry></entry> - <entry></entry> - <entry>Reserved for future extensions. Drivers and applications must - set this array to zero.</entry> - </row> - </tbody> - </tgroup> - </table> - - </refsect1> - - <refsect1> - &return-value; - - <variablelist> - <varlistentry> - <term><errorcode>ENOSPC</errorcode></term> - <listitem> - <para>This is returned when either one or more of the num_entities, - num_interfaces, num_links or num_pads are non-zero and are smaller - than the actual number of elements inside the graph. This may happen - if the <constant>topology_version</constant> changed when compared - to the last time this ioctl was called. Userspace should usually - free the area for the pointers, zero the struct elements and call - this ioctl again.</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 deleted file mode 100644 index fc2e522ee65a..000000000000 --- a/Documentation/DocBook/media/v4l/media-ioc-setup-link.xml +++ /dev/null @@ -1,84 +0,0 @@ -<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/media-types.xml b/Documentation/DocBook/media/v4l/media-types.xml deleted file mode 100644 index 95aa1f9c836a..000000000000 --- a/Documentation/DocBook/media/v4l/media-types.xml +++ /dev/null @@ -1,379 +0,0 @@ -<section id="media-controller-types"> -<title>Types and flags used to represent the media graph elements</title> - - <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_F_UNKNOWN</constant> and <constant>MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN</constant></entry> - <entry>Unknown entity. That generally indicates that - a driver didn't initialize properly the entity, with is a Kernel bug</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_IO_V4L</constant></entry> - <entry>Data streaming input and/or output entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_IO_VBI</constant></entry> - <entry>V4L VBI streaming input or output entity</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_IO_SWRADIO</constant></entry> - <entry>V4L Software Digital Radio (SDR) streaming input or output entity</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_IO_DTV</constant></entry> - <entry>DVB Digital TV streaming input or output entity</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_DTV_DEMOD</constant></entry> - <entry>Digital TV demodulator entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_TS_DEMUX</constant></entry> - <entry>MPEG Transport stream demux entity. Could be implemented on hardware or in Kernelspace by the Linux DVB subsystem.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_DTV_CA</constant></entry> - <entry>Digital TV Conditional Access module (CAM) entity</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_DTV_NET_DECAP</constant></entry> - <entry>Digital TV network ULE/MLE desencapsulation entity. Could be implemented on hardware or in Kernelspace</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_CONN_RF</constant></entry> - <entry>Connector for a Radio Frequency (RF) signal.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_CONN_SVIDEO</constant></entry> - <entry>Connector for a S-Video signal.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_CONN_COMPOSITE</constant></entry> - <entry>Connector for a RGB composite signal.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_CAM_SENSOR</constant></entry> - <entry>Camera video sensor entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_FLASH</constant></entry> - <entry>Flash controller entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_LENS</constant></entry> - <entry>Lens controller entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_ATV_DECODER</constant></entry> - <entry>Analog 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, SECAM or HD format, separating the stream - into its component parts, luminance and chrominance, and output - it in some digital video standard, with appropriate timing - signals.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_TUNER</constant></entry> - <entry>Digital TV, analog TV, radio and/or software radio tuner, - with consists on a PLL tuning stage that converts radio - frequency (RF) signal into an Intermediate Frequency (IF). - Modern tuners have internally IF-PLL decoders for audio - and video, but older models have those stages implemented - on separate entities. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_IF_VID_DECODER</constant></entry> - <entry>IF-PLL video decoder. It receives the IF from a PLL - and decodes the analog TV video signal. This is commonly - found on some very old analog tuners, like Philips MK3 - designs. They all contain a tda9887 (or some software - compatible similar chip, like tda9885). Those devices - use a different I2C address than the tuner PLL. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_IF_AUD_DECODER</constant></entry> - <entry>IF-PLL sound decoder. It receives the IF from a PLL - and decodes the analog TV audio signal. This is commonly - found on some very old analog hardware, like Micronas - msp3400, Philips tda9840, tda985x, etc. Those devices - use a different I2C address than the tuner PLL and - should be controlled together with the IF-PLL video - decoder. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_AUDIO_CAPTURE</constant></entry> - <entry>Audio Capture Function Entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_AUDIO_PLAYBACK</constant></entry> - <entry>Audio Playback Function Entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_AUDIO_MIXER</constant></entry> - <entry>Audio Mixer Function Entity.</entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_PROC_VIDEO_COMPOSER</constant></entry> - <entry>Video composer (blender). An entity capable of video - composing must have at least two sink pads and one source - pad, and composes input video frames onto output video - frames. Composition can be performed using alpha blending, - color keying, raster operations (ROP), stitching or any other - means. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER</constant></entry> - <entry>Video pixel formatter. An entity capable of pixel formatting - must have at least one sink pad and one source pad. Read - pixel formatters read pixels from memory and perform a subset - of unpacking, cropping, color keying, alpha multiplication - and pixel encoding conversion. Write pixel formatters perform - a subset of dithering, pixel encoding conversion and packing - and write pixels to memory. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_PROC_VIDEO_PIXEL_ENC_CONV</constant></entry> - <entry>Video pixel encoding converter. An entity capable of pixel - enconding conversion must have at least one sink pad and one - source pad, and convert the encoding of pixels received on - its sink pad(s) to a different encoding output on its source - pad(s). Pixel encoding conversion includes but isn't limited - to RGB to/from HSV, RGB to/from YUV and CFA (Bayer) to RGB - conversions. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_PROC_VIDEO_LUT</constant></entry> - <entry>Video look-up table. An entity capable of video lookup table - processing must have one sink pad and one source pad. It uses - the values of the pixels received on its sink pad to look up - entries in internal tables and output them on its source pad. - The lookup processing can be performed on all components - separately or combine them for multi-dimensional table - lookups. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_PROC_VIDEO_SCALER</constant></entry> - <entry>Video scaler. An entity capable of video scaling must have - at least one sink pad and one source pad, and scale the - video frame(s) received on its sink pad(s) to a different - resolution output on its source pad(s). The range of - supported scaling ratios is entity-specific and can differ - between the horizontal and vertical directions (in particular - scaling can be supported in one direction only). Binning and - skipping are considered as scaling. - </entry> - </row> - <row> - <entry><constant>MEDIA_ENT_F_PROC_VIDEO_STATISTICS</constant></entry> - <entry>Video statistics computation (histogram, 3A, ...). An entity - capable of statistics computation must have one sink pad and - one source pad. It computes statistics over the frames - received on its sink pad and outputs the statistics data on - its source pad. - </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> - <row> - <entry><constant>MEDIA_ENT_FL_CONNECTOR</constant></entry> - <entry>The entity represents a data conector</entry> - </row> - </tbody> - </tgroup> - </table> - - <table frame="none" pgwide="1" id="media-intf-type"> - <title>Media interface types</title> - <tgroup cols="3"> - <colspec colname="c1"/> - <colspec colname="c2"/> - <colspec colname="c3"/> - <tbody valign="top"> - <row> - <entry><constant>MEDIA_INTF_T_DVB_FE</constant></entry> - <entry>Device node interface for the Digital TV frontend</entry> - <entry>typically, /dev/dvb/adapter?/frontend?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_DVB_DEMUX</constant></entry> - <entry>Device node interface for the Digital TV demux</entry> - <entry>typically, /dev/dvb/adapter?/demux?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_DVB_DVR</constant></entry> - <entry>Device node interface for the Digital TV DVR</entry> - <entry>typically, /dev/dvb/adapter?/dvr?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_DVB_CA</constant></entry> - <entry>Device node interface for the Digital TV Conditional Access</entry> - <entry>typically, /dev/dvb/adapter?/ca?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_DVB_FE</constant></entry> - <entry>Device node interface for the Digital TV network control</entry> - <entry>typically, /dev/dvb/adapter?/net?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_V4L_VIDEO</constant></entry> - <entry>Device node interface for video (V4L)</entry> - <entry>typically, /dev/video?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_V4L_VBI</constant></entry> - <entry>Device node interface for VBI (V4L)</entry> - <entry>typically, /dev/vbi?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_V4L_RADIO</constant></entry> - <entry>Device node interface for radio (V4L)</entry> - <entry>typically, /dev/vbi?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_V4L_SUBDEV</constant></entry> - <entry>Device node interface for a V4L subdevice</entry> - <entry>typically, /dev/v4l-subdev?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_V4L_SWRADIO</constant></entry> - <entry>Device node interface for Software Defined Radio (V4L)</entry> - <entry>typically, /dev/swradio?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_PCM_CAPTURE</constant></entry> - <entry>Device node interface for ALSA PCM Capture</entry> - <entry>typically, /dev/snd/pcmC?D?c</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_PCM_PLAYBACK</constant></entry> - <entry>Device node interface for ALSA PCM Playback</entry> - <entry>typically, /dev/snd/pcmC?D?p</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_CONTROL</constant></entry> - <entry>Device node interface for ALSA Control</entry> - <entry>typically, /dev/snd/controlC?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_COMPRESS</constant></entry> - <entry>Device node interface for ALSA Compress</entry> - <entry>typically, /dev/snd/compr?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_RAWMIDI</constant></entry> - <entry>Device node interface for ALSA Raw MIDI</entry> - <entry>typically, /dev/snd/midi?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_HWDEP</constant></entry> - <entry>Device node interface for ALSA Hardware Dependent</entry> - <entry>typically, /dev/snd/hwC?D?</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_SEQUENCER</constant></entry> - <entry>Device node interface for ALSA Sequencer</entry> - <entry>typically, /dev/snd/seq</entry> - </row> - <row> - <entry><constant>MEDIA_INTF_T_ALSA_TIMER</constant></entry> - <entry>Device node interface for ALSA Timer</entry> - <entry>typically, /dev/snd/timer</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> - - <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> - - <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> - <row> - <entry><constant>MEDIA_LNK_FL_LINK_TYPE</constant></entry> - <entry><para>This is a bitmask that defines the type of the link. - Currently, two types of links are supported:</para> - <para><constant>MEDIA_LNK_FL_DATA_LINK</constant> - if the link is between two pads</para> - <para><constant>MEDIA_LNK_FL_INTERFACE_LINK</constant> - if the link is between an interface and an entity</para></entry> - </row> - </tbody> - </tgroup> - </table> - -</section> diff --git a/Documentation/DocBook/media/v4l/pipeline.pdf b/Documentation/DocBook/media/v4l/pipeline.pdf Binary files differdeleted file mode 100644 index ee3e37f04b6a..000000000000 --- a/Documentation/DocBook/media/v4l/pipeline.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/pixfmt-grey.xml b/Documentation/DocBook/media/v4l/pixfmt-grey.xml deleted file mode 100644 index bee970d3f76d..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-grey.xml +++ /dev/null @@ -1,62 +0,0 @@ - <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 deleted file mode 100644 index aadae92c5d04..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-m420.xml +++ /dev/null @@ -1,139 +0,0 @@ - <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 deleted file mode 100644 index 84dd4fd7cb80..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv12.xml +++ /dev/null @@ -1,143 +0,0 @@ - <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 deleted file mode 100644 index f3a3d459fcdf..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml +++ /dev/null @@ -1,153 +0,0 @@ - <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 deleted file mode 100644 index 8a70a1707b7a..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv12mt.xml +++ /dev/null @@ -1,66 +0,0 @@ - <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 deleted file mode 100644 index 8ae1f8a810d0..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv16.xml +++ /dev/null @@ -1,166 +0,0 @@ - <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 deleted file mode 100644 index fb2b5e35d665..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml +++ /dev/null @@ -1,170 +0,0 @@ - <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 deleted file mode 100644 index fb255f2ca9dd..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml +++ /dev/null @@ -1,121 +0,0 @@ - <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 deleted file mode 100644 index b60fb935b91b..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml +++ /dev/null @@ -1,937 +0,0 @@ -<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> - - <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-ARGB444"> - <entry><constant>V4L2_PIX_FMT_ARGB444</constant></entry> - <entry>'AR12'</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-XRGB444"> - <entry><constant>V4L2_PIX_FMT_XRGB444</constant></entry> - <entry>'XR12'</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>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</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-ARGB555"> - <entry><constant>V4L2_PIX_FMT_ARGB555</constant></entry> - <entry>'AR15'</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-XRGB555"> - <entry><constant>V4L2_PIX_FMT_XRGB555</constant></entry> - <entry>'XR15'</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>-</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-ARGB555X"> - <entry><constant>V4L2_PIX_FMT_ARGB555X</constant></entry> - <entry>'AR15' | (1 << 31)</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-XRGB555X"> - <entry><constant>V4L2_PIX_FMT_XRGB555X</constant></entry> - <entry>'XR15' | (1 << 31)</entry> - <entry></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>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-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-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> - <entry>-</entry> - </row> - <row id="V4L2-PIX-FMT-ABGR32"> - <entry><constant>V4L2_PIX_FMT_ABGR32</constant></entry> - <entry>'AR24'</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-XBGR32"> - <entry><constant>V4L2_PIX_FMT_XBGR32</constant></entry> - <entry>'XR24'</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>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - </row> - <row id="V4L2-PIX-FMT-ARGB32"> - <entry><constant>V4L2_PIX_FMT_ARGB32</constant></entry> - <entry>'BA24'</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> - <row id="V4L2-PIX-FMT-XRGB32"> - <entry><constant>V4L2_PIX_FMT_XRGB32</constant></entry> - <entry>'BX24'</entry> - <entry></entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</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> - <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.</para> - - <para>The usage and value of the alpha bits (a) in the ARGB and ABGR formats - (collectively referred to as alpha formats) depend on the device type and - hardware operation. <link linkend="capture">Capture</link> devices - (including capture queues of mem-to-mem devices) fill the alpha component in - memory. When the device outputs an alpha channel the alpha component will - have a meaningful value. Otherwise, when the device doesn't output an alpha - channel but can set the alpha bit to a user-configurable value, the <link - linkend="v4l2-alpha-component"><constant>V4L2_CID_ALPHA_COMPONENT</constant> - </link> control is used to specify that alpha value, and the alpha component - of all pixels will be set to the value specified by that control. Otherwise - a corresponding format without an alpha component (XRGB or XBGR) must be - used instead of an alpha format.</para> - - <para><link linkend="output">Output</link> devices (including output queues - of mem-to-mem devices and <link linkend="osd">video output overlay</link> - devices) read the alpha component from memory. When the device processes the - alpha channel the alpha component must be filled with meaningful values by - applications. Otherwise a corresponding format without an alpha component - (XRGB or XBGR) must be used instead of an alpha format.</para> - - <para>The XRGB and XBGR formats contain undefined bits (-). Applications, - devices and drivers must ignore those bits, for both <link - linkend="capture">capture</link> and <link linkend="output">output</link> - devices.</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>Formats defined in <xref linkend="rgb-formats-deprecated"/> are - deprecated and must not be used by new drivers. They are documented here for - reference. The meaning of their alpha bits (a) is ill-defined and - interpreted as in either the corresponding ARGB or XRGB format, depending on - the driver.</para> - - <table pgwide="1" frame="none" id="rgb-formats-deprecated"> - <title>Deprecated 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> - <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-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-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>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 deleted file mode 100644 index 33fa5a47a865..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-packed-yuv.xml +++ /dev/null @@ -1,236 +0,0 @@ -<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 deleted file mode 100644 index 6494b05d84a1..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sbggr16.xml +++ /dev/null @@ -1,83 +0,0 @@ -<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 deleted file mode 100644 index 5eaf2b42d3f7..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sbggr8.xml +++ /dev/null @@ -1,67 +0,0 @@ - <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-cs08.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cs08.xml deleted file mode 100644 index 6118d8f7a20c..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cs08.xml +++ /dev/null @@ -1,44 +0,0 @@ -<refentry id="V4L2-SDR-FMT-CS08"> - <refmeta> - <refentrytitle>V4L2_SDR_FMT_CS8 ('CS08')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname> - <constant>V4L2_SDR_FMT_CS8</constant> - </refname> - <refpurpose>Complex signed 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 signed number. I value comes first and Q value after -that. - </para> - <example> - <title><constant>V4L2_SDR_FMT_CS8</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-cs14le.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-cs14le.xml deleted file mode 100644 index e4b494ce1369..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cs14le.xml +++ /dev/null @@ -1,47 +0,0 @@ -<refentry id="V4L2-SDR-FMT-CS14LE"> - <refmeta> - <refentrytitle>V4L2_SDR_FMT_CS14LE ('CS14')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname> - <constant>V4L2_SDR_FMT_CS14LE</constant> - </refname> - <refpurpose>Complex signed 14-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 14 bit signed little endian number. I value comes first -and Q value after that. 14 bit value is stored in 16 bit space with unused -high bits padded with 0. - </para> - <example> - <title><constant>V4L2_SDR_FMT_CS14LE</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[13:8]</subscript></entry> - </row> - <row> - <entry>start + 2:</entry> - <entry>Q'<subscript>0[7:0]</subscript></entry> - <entry>Q'<subscript>0[13:8]</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 deleted file mode 100644 index 2d80104c178b..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu08.xml +++ /dev/null @@ -1,44 +0,0 @@ -<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 deleted file mode 100644 index 26288ffa9071..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-cu16le.xml +++ /dev/null @@ -1,46 +0,0 @@ -<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-sdr-ru12le.xml b/Documentation/DocBook/media/v4l/pixfmt-sdr-ru12le.xml deleted file mode 100644 index 3df076b99f94..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sdr-ru12le.xml +++ /dev/null @@ -1,40 +0,0 @@ -<refentry id="V4L2-SDR-FMT-RU12LE"> - <refmeta> - <refentrytitle>V4L2_SDR_FMT_RU12LE ('RU12')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname> - <constant>V4L2_SDR_FMT_RU12LE</constant> - </refname> - <refpurpose>Real unsigned 12-bit little endian sample</refpurpose> - </refnamediv> - <refsect1> - <title>Description</title> - <para> -This format contains sequence of real number samples. Each sample is -represented as a 12 bit unsigned little endian number. Sample is stored -in 16 bit space with unused high bits padded with 0. - </para> - <example> - <title><constant>V4L2_SDR_FMT_RU12LE</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[11: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 deleted file mode 100644 index fee65dca79c5..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sgbrg8.xml +++ /dev/null @@ -1,67 +0,0 @@ - <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 deleted file mode 100644 index 7803b8c41b45..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-sgrbg8.xml +++ /dev/null @@ -1,67 +0,0 @@ - <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>B<subscript>10</subscript></entry> - <entry>G<subscript>11</subscript></entry> - <entry>B<subscript>12</subscript></entry> - <entry>G<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>B<subscript>30</subscript></entry> - <entry>G<subscript>31</subscript></entry> - <entry>B<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-srggb10.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml deleted file mode 100644 index f34d03ebda3a..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10.xml +++ /dev/null @@ -1,90 +0,0 @@ - <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>These 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 deleted file mode 100644 index d2e5845e57fb..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10alaw8.xml +++ /dev/null @@ -1,34 +0,0 @@ - <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>These 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 deleted file mode 100644 index bde89878c5c5..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10dpcm8.xml +++ /dev/null @@ -1,28 +0,0 @@ - <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>These 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-srggb10p.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb10p.xml deleted file mode 100644 index a8cc102cde4f..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb10p.xml +++ /dev/null @@ -1,99 +0,0 @@ - <refentry id="pixfmt-srggb10p"> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_SRGGB10P ('pRAA'), - V4L2_PIX_FMT_SGRBG10P ('pgAA'), - V4L2_PIX_FMT_SGBRG10P ('pGAA'), - V4L2_PIX_FMT_SBGGR10P ('pBAA'), - </refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname id="V4L2-PIX-FMT-SRGGB10P"><constant>V4L2_PIX_FMT_SRGGB10P</constant></refname> - <refname id="V4L2-PIX-FMT-SGRBG10P"><constant>V4L2_PIX_FMT_SGRBG10P</constant></refname> - <refname id="V4L2-PIX-FMT-SGBRG10P"><constant>V4L2_PIX_FMT_SGBRG10P</constant></refname> - <refname id="V4L2-PIX-FMT-SBGGR10P"><constant>V4L2_PIX_FMT_SBGGR10P</constant></refname> - <refpurpose>10-bit packed Bayer formats</refpurpose> - </refnamediv> - <refsect1> - <title>Description</title> - - <para>These four pixel formats are packed raw sRGB / - Bayer formats with 10 bits per colour. Every four consecutive - colour components are packed into 5 bytes. Each of the first 4 - bytes contain the 8 high order bits of the pixels, and the - fifth byte contains the two least significants bits of each - pixel, in the same order.</para> - - <para>Each n-pixel row contains n/2 green samples and n/2 blue - or red samples, with alternating green-red and green-blue - rows. 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_SBGGR10P</constant> 4 × 4 - pixel image</title> - - <formalpara> - <title>Byte Order.</title> - <para>Each cell is one byte. - <informaltable frame="topbot" colsep="1" rowsep="1"> - <tgroup cols="5" align="center"> - <colspec align="left" colwidth="2*" /> - <tbody valign="top"> - <row> - <entry>start + 0:</entry> - <entry>B<subscript>00high</subscript></entry> - <entry>G<subscript>01high</subscript></entry> - <entry>B<subscript>02high</subscript></entry> - <entry>G<subscript>03high</subscript></entry> - <entry>B<subscript>00low</subscript>(bits 7--6) - G<subscript>01low</subscript>(bits 5--4) - B<subscript>02low</subscript>(bits 3--2) - G<subscript>03low</subscript>(bits 1--0) - </entry> - </row> - <row> - <entry>start + 5:</entry> - <entry>G<subscript>10high</subscript></entry> - <entry>R<subscript>11high</subscript></entry> - <entry>G<subscript>12high</subscript></entry> - <entry>R<subscript>13high</subscript></entry> - <entry>G<subscript>10low</subscript>(bits 7--6) - R<subscript>11low</subscript>(bits 5--4) - G<subscript>12low</subscript>(bits 3--2) - R<subscript>13low</subscript>(bits 1--0) - </entry> - </row> - <row> - <entry>start + 10:</entry> - <entry>B<subscript>20high</subscript></entry> - <entry>G<subscript>21high</subscript></entry> - <entry>B<subscript>22high</subscript></entry> - <entry>G<subscript>23high</subscript></entry> - <entry>B<subscript>20low</subscript>(bits 7--6) - G<subscript>21low</subscript>(bits 5--4) - B<subscript>22low</subscript>(bits 3--2) - G<subscript>23low</subscript>(bits 1--0) - </entry> - </row> - <row> - <entry>start + 15:</entry> - <entry>G<subscript>30high</subscript></entry> - <entry>R<subscript>31high</subscript></entry> - <entry>G<subscript>32high</subscript></entry> - <entry>R<subscript>33high</subscript></entry> - <entry>G<subscript>30low</subscript>(bits 7--6) - R<subscript>31low</subscript>(bits 5--4) - G<subscript>32low</subscript>(bits 3--2) - R<subscript>33low</subscript>(bits 1--0) - </entry> - </row> - </tbody> - </tgroup> - </informaltable> - </para> - </formalpara> - </example> - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml b/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml deleted file mode 100644 index 0c8e4adf417f..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb12.xml +++ /dev/null @@ -1,90 +0,0 @@ - <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>These four pixel formats are raw sRGB / Bayer formats with -12 bits per colour. Each colour component is stored in a 16-bit word, with 4 -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 deleted file mode 100644 index 2570e3be3cf1..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-srggb8.xml +++ /dev/null @@ -1,67 +0,0 @@ - <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 deleted file mode 100644 index c507c1f73cd0..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-uv8.xml +++ /dev/null @@ -1,62 +0,0 @@ - <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 deleted file mode 100644 index b1f6801a17ff..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-uyvy.xml +++ /dev/null @@ -1,120 +0,0 @@ - <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 deleted file mode 100644 index 82803408b389..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-vyuy.xml +++ /dev/null @@ -1,120 +0,0 @@ - <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 deleted file mode 100644 index d065043db8d8..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y10.xml +++ /dev/null @@ -1,79 +0,0 @@ -<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 deleted file mode 100644 index adb0ad808c93..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y10b.xml +++ /dev/null @@ -1,43 +0,0 @@ -<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 deleted file mode 100644 index ff417b858cc9..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y12.xml +++ /dev/null @@ -1,79 +0,0 @@ -<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-y12i.xml b/Documentation/DocBook/media/v4l/pixfmt-y12i.xml deleted file mode 100644 index 4a2d1e5f67e4..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y12i.xml +++ /dev/null @@ -1,49 +0,0 @@ -<refentry id="V4L2-PIX-FMT-Y12I"> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_Y12I ('Y12I')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname><constant>V4L2_PIX_FMT_Y12I</constant></refname> - <refpurpose>Interleaved grey-scale image, e.g. from a stereo-pair</refpurpose> - </refnamediv> - <refsect1> - <title>Description</title> - - <para>This is a grey-scale image with a depth of 12 bits per pixel, but with -pixels from 2 sources interleaved and bit-packed. Each pixel is stored in a -24-bit word in the little-endian order. On a little-endian machine these pixels -can be deinterlaced using</para> - -<para> -<programlisting> -__u8 *buf; -left0 = 0xfff & *(__u16 *)buf; -right0 = *(__u16 *)(buf + 1) >> 4; -</programlisting> -</para> - - <example> - <title><constant>V4L2_PIX_FMT_Y12I</constant> 2 pixel data stream taking 3 bytes</title> - - <formalpara> - <title>Bit-packed representation</title> - <para>pixels cross the byte boundary and have a ratio of 3 bytes for each - interleaved pixel. - <informaltable frame="all"> - <tgroup cols="3" align="center"> - <colspec align="left" colwidth="2*" /> - <tbody valign="top"> - <row> - <entry>Y'<subscript>0left[7:0]</subscript></entry> - <entry>Y'<subscript>0right[3:0]</subscript>Y'<subscript>0left[11:8]</subscript></entry> - <entry>Y'<subscript>0right[11:4]</subscript></entry> - </row> - </tbody> - </tgroup> - </informaltable> - </para> - </formalpara> - </example> - </refsect1> -</refentry> diff --git a/Documentation/DocBook/media/v4l/pixfmt-y16-be.xml b/Documentation/DocBook/media/v4l/pixfmt-y16-be.xml deleted file mode 100644 index cea53e1eaa43..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y16-be.xml +++ /dev/null @@ -1,81 +0,0 @@ -<refentry id="V4L2-PIX-FMT-Y16-BE"> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_Y16_BE ('Y16 ' | (1 << 31))</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname><constant>V4L2_PIX_FMT_Y16_BE</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 most significant byte is stored at lower memory addresses -(big-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_BE</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>00high</subscript></entry> - <entry>Y'<subscript>00low</subscript></entry> - <entry>Y'<subscript>01high</subscript></entry> - <entry>Y'<subscript>01low</subscript></entry> - <entry>Y'<subscript>02high</subscript></entry> - <entry>Y'<subscript>02low</subscript></entry> - <entry>Y'<subscript>03high</subscript></entry> - <entry>Y'<subscript>03low</subscript></entry> - </row> - <row> - <entry>start + 8:</entry> - <entry>Y'<subscript>10high</subscript></entry> - <entry>Y'<subscript>10low</subscript></entry> - <entry>Y'<subscript>11high</subscript></entry> - <entry>Y'<subscript>11low</subscript></entry> - <entry>Y'<subscript>12high</subscript></entry> - <entry>Y'<subscript>12low</subscript></entry> - <entry>Y'<subscript>13high</subscript></entry> - <entry>Y'<subscript>13low</subscript></entry> - </row> - <row> - <entry>start + 16:</entry> - <entry>Y'<subscript>20high</subscript></entry> - <entry>Y'<subscript>20low</subscript></entry> - <entry>Y'<subscript>21high</subscript></entry> - <entry>Y'<subscript>21low</subscript></entry> - <entry>Y'<subscript>22high</subscript></entry> - <entry>Y'<subscript>22low</subscript></entry> - <entry>Y'<subscript>23high</subscript></entry> - <entry>Y'<subscript>23low</subscript></entry> - </row> - <row> - <entry>start + 24:</entry> - <entry>Y'<subscript>30high</subscript></entry> - <entry>Y'<subscript>30low</subscript></entry> - <entry>Y'<subscript>31high</subscript></entry> - <entry>Y'<subscript>31low</subscript></entry> - <entry>Y'<subscript>32high</subscript></entry> - <entry>Y'<subscript>32low</subscript></entry> - <entry>Y'<subscript>33high</subscript></entry> - <entry>Y'<subscript>33low</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 deleted file mode 100644 index ff4f727d5624..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y16.xml +++ /dev/null @@ -1,81 +0,0 @@ -<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 deleted file mode 100644 index 98dcb91d2917..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y41p.xml +++ /dev/null @@ -1,149 +0,0 @@ - <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-y8i.xml b/Documentation/DocBook/media/v4l/pixfmt-y8i.xml deleted file mode 100644 index 99f389d4c6c8..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-y8i.xml +++ /dev/null @@ -1,80 +0,0 @@ -<refentry id="V4L2-PIX-FMT-Y8I"> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_Y8I ('Y8I ')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname><constant>V4L2_PIX_FMT_Y8I</constant></refname> - <refpurpose>Interleaved grey-scale image, e.g. from a stereo-pair</refpurpose> - </refnamediv> - <refsect1> - <title>Description</title> - - <para>This is a grey-scale image with a depth of 8 bits per pixel, but with -pixels from 2 sources interleaved. Each pixel is stored in a 16-bit word. E.g. -the R200 RealSense camera stores pixel from the left sensor in lower and from -the right sensor in the higher 8 bits.</para> - - <example> - <title><constant>V4L2_PIX_FMT_Y8I</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>00left</subscript></entry> - <entry>Y'<subscript>00right</subscript></entry> - <entry>Y'<subscript>01left</subscript></entry> - <entry>Y'<subscript>01right</subscript></entry> - <entry>Y'<subscript>02left</subscript></entry> - <entry>Y'<subscript>02right</subscript></entry> - <entry>Y'<subscript>03left</subscript></entry> - <entry>Y'<subscript>03right</subscript></entry> - </row> - <row> - <entry>start + 8:</entry> - <entry>Y'<subscript>10left</subscript></entry> - <entry>Y'<subscript>10right</subscript></entry> - <entry>Y'<subscript>11left</subscript></entry> - <entry>Y'<subscript>11right</subscript></entry> - <entry>Y'<subscript>12left</subscript></entry> - <entry>Y'<subscript>12right</subscript></entry> - <entry>Y'<subscript>13left</subscript></entry> - <entry>Y'<subscript>13right</subscript></entry> - </row> - <row> - <entry>start + 16:</entry> - <entry>Y'<subscript>20left</subscript></entry> - <entry>Y'<subscript>20right</subscript></entry> - <entry>Y'<subscript>21left</subscript></entry> - <entry>Y'<subscript>21right</subscript></entry> - <entry>Y'<subscript>22left</subscript></entry> - <entry>Y'<subscript>22right</subscript></entry> - <entry>Y'<subscript>23left</subscript></entry> - <entry>Y'<subscript>23right</subscript></entry> - </row> - <row> - <entry>start + 24:</entry> - <entry>Y'<subscript>30left</subscript></entry> - <entry>Y'<subscript>30right</subscript></entry> - <entry>Y'<subscript>31left</subscript></entry> - <entry>Y'<subscript>31right</subscript></entry> - <entry>Y'<subscript>32left</subscript></entry> - <entry>Y'<subscript>32right</subscript></entry> - <entry>Y'<subscript>33left</subscript></entry> - <entry>Y'<subscript>33right</subscript></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 deleted file mode 100644 index 0869dce5f92c..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv410.xml +++ /dev/null @@ -1,133 +0,0 @@ - <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 deleted file mode 100644 index 086dc731bf02..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv411p.xml +++ /dev/null @@ -1,147 +0,0 @@ - <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 deleted file mode 100644 index 48649fac1596..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv420.xml +++ /dev/null @@ -1,149 +0,0 @@ - <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 deleted file mode 100644 index 7d13fe96657d..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv420m.xml +++ /dev/null @@ -1,162 +0,0 @@ - <refentry> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12'), V4L2_PIX_FMT_YVU420M ('YM21')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname id="V4L2-PIX-FMT-YUV420M"><constant>V4L2_PIX_FMT_YUV420M</constant></refname> - <refname id="V4L2-PIX-FMT-YVU420M"><constant>V4L2_PIX_FMT_YVU420M</constant></refname> - <refpurpose>Variation of <constant>V4L2_PIX_FMT_YUV420</constant> and - <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.</para> - - <para>The Y plane is first. The Y plane has one byte per pixel. -For <constant>V4L2_PIX_FMT_YUV420M</constant> 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><constant>V4L2_PIX_FMT_YVU420M</constant> is the same except -the Cr data is stored in the second plane and the Cb data 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_YUV420M</constant> and -<constant>V4L2_PIX_FMT_YVU420M</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_YUV420M</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-yuv422m.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml deleted file mode 100644 index dd502802cb75..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml +++ /dev/null @@ -1,166 +0,0 @@ - <refentry> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_YUV422M ('YM16'), V4L2_PIX_FMT_YVU422M ('YM61')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname id="V4L2-PIX-FMT-YUV422M"><constant>V4L2_PIX_FMT_YUV422M</constant></refname> - <refname id="V4L2-PIX-FMT-YVU422M"><constant>V4L2_PIX_FMT_YVU422M</constant></refname> - <refpurpose>Planar formats with ½ horizontal resolution, also - known as YUV and YVU 4:2:2</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.</para> - - <para>The Y plane is first. The Y plane has one byte per pixel. -For <constant>V4L2_PIX_FMT_YUV422M</constant> the Cb data -constitutes the second plane which 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>. The Cr data, just like the Cb plane, is -in the third plane. </para> - - <para><constant>V4L2_PIX_FMT_YVU422M</constant> is the same except -the Cr data is stored in the second plane and the Cb data 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_YUV422M</constant> and -<constant>V4L2_PIX_FMT_YVU422M</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_YUV422M</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>start1 + 4:</entry> - <entry>Cb<subscript>20</subscript></entry> - <entry>Cb<subscript>21</subscript></entry> - </row> - <row> - <entry>start1 + 6:</entry> - <entry>Cb<subscript>30</subscript></entry> - <entry>Cb<subscript>31</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> - <row> - <entry>start2 + 4:</entry> - <entry>Cr<subscript>20</subscript></entry> - <entry>Cr<subscript>21</subscript></entry> - </row> - <row> - <entry>start2 + 6:</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-yuv422p.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml deleted file mode 100644 index 4ce6463fe0a5..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv422p.xml +++ /dev/null @@ -1,153 +0,0 @@ - <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-yuv444m.xml b/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml deleted file mode 100644 index 1b7335940bc7..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml +++ /dev/null @@ -1,177 +0,0 @@ - <refentry> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_YUV444M ('YM24'), V4L2_PIX_FMT_YVU444M ('YM42')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname id="V4L2-PIX-FMT-YUV444M"><constant>V4L2_PIX_FMT_YUV444M</constant></refname> - <refname id="V4L2-PIX-FMT-YVU444M"><constant>V4L2_PIX_FMT_YVU444M</constant></refname> - <refpurpose>Planar formats with full horizontal resolution, also - known as YUV and YVU 4:4:4</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.</para> - - <para>The Y plane is first. The Y plane has one byte per pixel. -For <constant>V4L2_PIX_FMT_YUV444M</constant> the Cb data -constitutes the second plane which is the same width and height as the Y plane -(and as the image). The Cr data, just like the Cb plane, is in the third plane. -</para> - - <para><constant>V4L2_PIX_FMT_YVU444M</constant> is the same except -the Cr data is stored in the second plane and the Cb data in the third plane. -</para> - <para>If the Y plane has pad bytes after each row, then the Cb -and Cr planes have the same number of pad bytes after their rows.</para> - - <para><constant>V4L2_PIX_FMT_YUV444M</constant> and -<constant>V4L2_PIX_FMT_YUV444M</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_YUV444M</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> - <entry>Cb<subscript>02</subscript></entry> - <entry>Cb<subscript>03</subscript></entry> - </row> - <row> - <entry>start1 + 4:</entry> - <entry>Cb<subscript>10</subscript></entry> - <entry>Cb<subscript>11</subscript></entry> - <entry>Cb<subscript>12</subscript></entry> - <entry>Cb<subscript>13</subscript></entry> - </row> - <row> - <entry>start1 + 8:</entry> - <entry>Cb<subscript>20</subscript></entry> - <entry>Cb<subscript>21</subscript></entry> - <entry>Cb<subscript>22</subscript></entry> - <entry>Cb<subscript>23</subscript></entry> - </row> - <row> - <entry>start1 + 12:</entry> - <entry>Cb<subscript>20</subscript></entry> - <entry>Cb<subscript>21</subscript></entry> - <entry>Cb<subscript>32</subscript></entry> - <entry>Cb<subscript>33</subscript></entry> - </row> - <row><entry></entry></row> - <row> - <entry>start2 + 0:</entry> - <entry>Cr<subscript>00</subscript></entry> - <entry>Cr<subscript>01</subscript></entry> - <entry>Cr<subscript>02</subscript></entry> - <entry>Cr<subscript>03</subscript></entry> - </row> - <row> - <entry>start2 + 4:</entry> - <entry>Cr<subscript>10</subscript></entry> - <entry>Cr<subscript>11</subscript></entry> - <entry>Cr<subscript>12</subscript></entry> - <entry>Cr<subscript>13</subscript></entry> - </row> - <row> - <entry>start2 + 8:</entry> - <entry>Cr<subscript>20</subscript></entry> - <entry>Cr<subscript>21</subscript></entry> - <entry>Cr<subscript>22</subscript></entry> - <entry>Cr<subscript>23</subscript></entry> - </row> - <row> - <entry>start2 + 12:</entry> - <entry>Cr<subscript>30</subscript></entry> - <entry>Cr<subscript>31</subscript></entry> - <entry>Cr<subscript>32</subscript></entry> - <entry>Cr<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>YC</entry><entry></entry><entry>YC</entry><entry></entry> - <entry>YC</entry><entry></entry><entry>YC</entry> - </row> - <row> - <entry>1</entry> - <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry> - <entry>YC</entry><entry></entry><entry>YC</entry> - </row> - <row> - <entry>2</entry> - <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry> - <entry>YC</entry><entry></entry><entry>YC</entry> - </row> - <row> - <entry>3</entry> - <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry> - <entry>YC</entry><entry></entry><entry>YC</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 deleted file mode 100644 index 58384092251a..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yuyv.xml +++ /dev/null @@ -1,120 +0,0 @@ - <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-yvyu.xml b/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml deleted file mode 100644 index bfffdc76d3da..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-yvyu.xml +++ /dev/null @@ -1,120 +0,0 @@ - <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-z16.xml b/Documentation/DocBook/media/v4l/pixfmt-z16.xml deleted file mode 100644 index 1d9cb1684bd3..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt-z16.xml +++ /dev/null @@ -1,81 +0,0 @@ -<refentry id="V4L2-PIX-FMT-Z16"> - <refmeta> - <refentrytitle>V4L2_PIX_FMT_Z16 ('Z16 ')</refentrytitle> - &manvol; - </refmeta> - <refnamediv> - <refname><constant>V4L2_PIX_FMT_Z16</constant></refname> - <refpurpose>16-bit depth data with distance values at each pixel</refpurpose> - </refnamediv> - <refsect1> - <title>Description</title> - - <para>This is a 16-bit format, representing depth data. Each pixel is a -distance to the respective point in the image coordinates. Distance unit can -vary and has to be negotiated with the device separately. Each pixel is stored -in a 16-bit word in the little endian byte order. -</para> - - <example> - <title><constant>V4L2_PIX_FMT_Z16</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>Z<subscript>00low</subscript></entry> - <entry>Z<subscript>00high</subscript></entry> - <entry>Z<subscript>01low</subscript></entry> - <entry>Z<subscript>01high</subscript></entry> - <entry>Z<subscript>02low</subscript></entry> - <entry>Z<subscript>02high</subscript></entry> - <entry>Z<subscript>03low</subscript></entry> - <entry>Z<subscript>03high</subscript></entry> - </row> - <row> - <entry>start + 8:</entry> - <entry>Z<subscript>10low</subscript></entry> - <entry>Z<subscript>10high</subscript></entry> - <entry>Z<subscript>11low</subscript></entry> - <entry>Z<subscript>11high</subscript></entry> - <entry>Z<subscript>12low</subscript></entry> - <entry>Z<subscript>12high</subscript></entry> - <entry>Z<subscript>13low</subscript></entry> - <entry>Z<subscript>13high</subscript></entry> - </row> - <row> - <entry>start + 16:</entry> - <entry>Z<subscript>20low</subscript></entry> - <entry>Z<subscript>20high</subscript></entry> - <entry>Z<subscript>21low</subscript></entry> - <entry>Z<subscript>21high</subscript></entry> - <entry>Z<subscript>22low</subscript></entry> - <entry>Z<subscript>22high</subscript></entry> - <entry>Z<subscript>23low</subscript></entry> - <entry>Z<subscript>23high</subscript></entry> - </row> - <row> - <entry>start + 24:</entry> - <entry>Z<subscript>30low</subscript></entry> - <entry>Z<subscript>30high</subscript></entry> - <entry>Z<subscript>31low</subscript></entry> - <entry>Z<subscript>31high</subscript></entry> - <entry>Z<subscript>32low</subscript></entry> - <entry>Z<subscript>32high</subscript></entry> - <entry>Z<subscript>33low</subscript></entry> - <entry>Z<subscript>33high</subscript></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 deleted file mode 100644 index 5a08aeea4360..000000000000 --- a/Documentation/DocBook/media/v4l/pixfmt.xml +++ /dev/null @@ -1,2003 +0,0 @@ - <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 first -plane and is divided by the same factor as the -<structfield>width</structfield> field for the other 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><para>This field indicates whether the remaining fields of the -<structname>v4l2_pix_format</structname> structure, also called the extended -fields, are valid. When set to <constant>V4L2_PIX_FMT_PRIV_MAGIC</constant>, it -indicates that the extended fields have been correctly initialized. When set to -any other value it indicates that the extended fields contain undefined values. -</para> -<para>Applications that wish to use the pixel format extended fields must first -ensure that the feature is supported by querying the device for the -<link linkend="querycap"><constant>V4L2_CAP_EXT_PIX_FORMAT</constant></link> -capability. If the capability isn't set the pixel format extended fields are not -supported and using the extended fields will lead to undefined results.</para> -<para>To use the extended fields, applications must set the -<structfield>priv</structfield> field to -<constant>V4L2_PIX_FMT_PRIV_MAGIC</constant>, initialize all the extended fields -and zero the unused bytes of the <structname>v4l2_format</structname> -<structfield>raw_data</structfield> field.</para> -<para>When the <structfield>priv</structfield> field isn't set to -<constant>V4L2_PIX_FMT_PRIV_MAGIC</constant> drivers must act as if all the -extended fields were set to zero. On return drivers must set the -<structfield>priv</structfield> field to -<constant>V4L2_PIX_FMT_PRIV_MAGIC</constant> and all the extended fields to -applicable values.</para></entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry>Flags set by the application or driver, see <xref -linkend="format-flags" />.</entry> - </row> - <row> - <entry>&v4l2-ycbcr-encoding;</entry> - <entry><structfield>ycbcr_enc</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>&v4l2-quantization;</entry> - <entry><structfield>quantization</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>&v4l2-xfer-func;</entry> - <entry><structfield>xfer_func</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</structfield> and must be set by the driver for -capture streams and by the application for output streams, -see <xref linkend="colorspaces" />.</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>__u32</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[6]</structfield></entry> - <entry>Reserved for future extensions. Should be zeroed by drivers and - applications.</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>flags</structfield></entry> - <entry>Flags set by the application or driver, see <xref -linkend="format-flags" />.</entry> - </row> - <row> - <entry>&v4l2-ycbcr-encoding;</entry> - <entry><structfield>ycbcr_enc</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>&v4l2-quantization;</entry> - <entry><structfield>quantization</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>&v4l2-xfer-func;</entry> - <entry><structfield>xfer_func</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>__u8</entry> - <entry><structfield>reserved[7]</structfield></entry> - <entry>Reserved for future extensions. Should be zeroed by drivers - and applications.</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">videodev2.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>'Color' is a very complex concept and depends on physics, chemistry and -biology. Just because you have three numbers that describe the 'red', 'green' -and 'blue' components of the color of a pixel does not mean that you can accurately -display that color. A colorspace defines what it actually <emphasis>means</emphasis> -to have an RGB value of e.g. (255, 0, 0). That is, which color should be -reproduced on the screen in a perfectly calibrated environment.</para> - - <para>In order to do that we first need to have a good definition of -color, i.e. some way to uniquely and unambiguously define a color so that someone -else can reproduce it. Human color vision is trichromatic since the human eye has -color receptors that are sensitive to three different wavelengths of light. Hence -the need to use three numbers to describe color. Be glad you are not a mantis shrimp -as those are sensitive to 12 different wavelengths, so instead of RGB we would be -using the ABCDEFGHIJKL colorspace...</para> - - <para>Color exists only in the eye and brain and is the result of how strongly -color receptors are stimulated. This is based on the Spectral -Power Distribution (SPD) which is a graph showing the intensity (radiant power) -of the light at wavelengths covering the visible spectrum as it enters the eye. -The science of colorimetry is about the relationship between the SPD and color as -perceived by the human brain.</para> - - <para>Since the human eye has only three color receptors it is perfectly -possible that different SPDs will result in the same stimulation of those receptors -and are perceived as the same color, even though the SPD of the light is -different.</para> - - <para>In the 1920s experiments were devised to determine the relationship -between SPDs and the perceived color and that resulted in the CIE 1931 standard -that defines spectral weighting functions that model the perception of color. -Specifically that standard defines functions that can take an SPD and calculate -the stimulus for each color receptor. After some further mathematical transforms -these stimuli are known as the <emphasis>CIE XYZ tristimulus</emphasis> values -and these X, Y and Z values describe a color as perceived by a human unambiguously. -These X, Y and Z values are all in the range [0…1].</para> - - <para>The Y value in the CIE XYZ colorspace corresponds to luminance. Often -the CIE XYZ colorspace is transformed to the normalized CIE xyY colorspace:</para> - - <para>x = X / (X + Y + Z)</para> - <para>y = Y / (X + Y + Z)</para> - - <para>The x and y values are the chromaticity coordinates and can be used to -define a color without the luminance component Y. It is very confusing to -have such similar names for these colorspaces. Just be aware that if colors -are specified with lower case 'x' and 'y', then the CIE xyY colorspace is -used. Upper case 'X' and 'Y' refer to the CIE XYZ colorspace. Also, y has nothing -to do with luminance. Together x and y specify a color, and Y the luminance. -That is really all you need to remember from a practical point of view. At -the end of this section you will find reading resources that go into much more -detail if you are interested. -</para> - - <para>A monitor or TV will reproduce colors by emitting light at three -different wavelengths, the combination of which will stimulate the color receptors -in the eye and thus cause the perception of color. Historically these wavelengths -were defined by the red, green and blue phosphors used in the displays. These -<emphasis>color primaries</emphasis> are part of what defines a colorspace.</para> - - <para>Different display devices will have different primaries and some -primaries are more suitable for some display technologies than others. This has -resulted in a variety of colorspaces that are used for different display -technologies or uses. To define a colorspace you need to define the three -color primaries (these are typically defined as x, y chromaticity coordinates -from the CIE xyY colorspace) but also the white reference: that is the color obtained -when all three primaries are at maximum power. This determines the relative power -or energy of the primaries. This is usually chosen to be close to daylight which has -been defined as the CIE D65 Illuminant.</para> - - <para>To recapitulate: the CIE XYZ colorspace uniquely identifies colors. -Other colorspaces are defined by three chromaticity coordinates defined in the -CIE xyY colorspace. Based on those a 3x3 matrix can be constructed that -transforms CIE XYZ colors to colors in the new colorspace. -</para> - - <para>Both the CIE XYZ and the RGB colorspace that are derived from the -specific chromaticity primaries are linear colorspaces. But neither the eye, -nor display technology is linear. Doubling the values of all components in -the linear colorspace will not be perceived as twice the intensity of the color. -So each colorspace also defines a transfer function that takes a linear color -component value and transforms it to the non-linear component value, which is a -closer match to the non-linear performance of both the eye and displays. Linear -component values are denoted RGB, non-linear are denoted as R'G'B'. In general -colors used in graphics are all R'G'B', except in openGL which uses linear RGB. -Special care should be taken when dealing with openGL to provide linear RGB colors -or to use the built-in openGL support to apply the inverse transfer function.</para> - - <para>The final piece that defines a colorspace is a function that -transforms non-linear R'G'B' to non-linear Y'CbCr. This function is determined -by the so-called luma coefficients. There may be multiple possible Y'CbCr -encodings allowed for the same colorspace. Many encodings of color -prefer to use luma (Y') and chroma (CbCr) instead of R'G'B'. Since the human -eye is more sensitive to differences in luminance than in color this encoding -allows one to reduce the amount of color information compared to the luma -data. Note that the luma (Y') is unrelated to the Y in the CIE XYZ colorspace. -Also note that Y'CbCr is often called YCbCr or YUV even though these are -strictly speaking wrong.</para> - - <para>Sometimes people confuse Y'CbCr as being a colorspace. This is not -correct, it is just an encoding of an R'G'B' color into luma and chroma -values. The underlying colorspace that is associated with the R'G'B' color -is also associated with the Y'CbCr color.</para> - - <para>The final step is how the RGB, R'G'B' or Y'CbCr values are -quantized. The CIE XYZ colorspace where X, Y and Z are in the range -[0…1] describes all colors that humans can perceive, but the transform to -another colorspace will produce colors that are outside the [0…1] range. -Once clamped to the [0…1] range those colors can no longer be reproduced -in that colorspace. This clamping is what reduces the extent or gamut of the -colorspace. How the range of [0…1] is translated to integer values in the -range of [0…255] (or higher, depending on the color depth) is called the -quantization. This is <emphasis>not</emphasis> part of the colorspace -definition. In practice RGB or R'G'B' values are full range, i.e. they -use the full [0…255] range. Y'CbCr values on the other hand are limited -range with Y' using [16…235] and Cb and Cr using [16…240].</para> - - <para>Unfortunately, in some cases limited range RGB is also used -where the components use the range [16…235]. And full range Y'CbCr also exists -using the [0…255] range.</para> - - <para>In order to correctly interpret a color you need to know the -quantization range, whether it is R'G'B' or Y'CbCr, the used Y'CbCr encoding -and the colorspace. -From that information you can calculate the corresponding CIE XYZ color -and map that again to whatever colorspace your display device uses.</para> - - <para>The colorspace definition itself consists of the three -chromaticity primaries, the white reference chromaticity, a transfer -function and the luma coefficients needed to transform R'G'B' to Y'CbCr. While -some colorspace standards correctly define all four, quite often the colorspace -standard only defines some, and you have to rely on other standards for -the missing pieces. The fact that colorspaces are often a mix of different -standards also led to very confusing naming conventions where the name of -a standard was used to name a colorspace when in fact that standard was -part of various other colorspaces as well.</para> - - <para>If you want to read more about colors and colorspaces, then the -following resources are useful: <xref linkend="poynton" /> is a good practical -book for video engineers, <xref linkend="colimg" /> has a much broader scope and -describes many more aspects of color (physics, chemistry, biology, etc.). -The <ulink url="http://www.brucelindbloom.com">http://www.brucelindbloom.com</ulink> -website is an excellent resource, especially with respect to the mathematics behind -colorspace conversions. The wikipedia <ulink url="http://en.wikipedia.org/wiki/CIE_1931_color_space#CIE_xy_chromaticity_diagram_and_the_CIE_xyY_color_space">CIE 1931 colorspace</ulink> article -is also very useful.</para> - </section> - - <section> - <title>Defining Colorspaces in V4L2</title> - <para>In V4L2 colorspaces are defined by four values. The first is the colorspace -identifier (&v4l2-colorspace;) which defines the chromaticities, the default transfer -function, the default Y'CbCr encoding and the default quantization method. The second -is the transfer function identifier (&v4l2-xfer-func;) to specify non-standard -transfer functions. The third is the Y'CbCr encoding identifier (&v4l2-ycbcr-encoding;) -to specify non-standard Y'CbCr encodings and the fourth is the quantization identifier -(&v4l2-quantization;) to specify non-standard quantization methods. Most of the time -only the colorspace field of &v4l2-pix-format; or &v4l2-pix-format-mplane; needs to -be filled in. Note that the default R'G'B' quantization is full range for all -colorspaces except for BT.2020 which uses limited range R'G'B' quantization.</para> - - <table pgwide="1" frame="none" id="v4l2-colorspace"> - <title>V4L2 Colorspaces</title> - <tgroup cols="2" align="left"> - &cs-def; - <thead> - <row> - <entry>Identifier</entry> - <entry>Details</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry><constant>V4L2_COLORSPACE_DEFAULT</constant></entry> - <entry>The default colorspace. This can be used by applications to let the - driver fill in the colorspace.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_SMPTE170M</constant></entry> - <entry>See <xref linkend="col-smpte-170m" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_REC709</constant></entry> - <entry>See <xref linkend="col-rec709" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_SRGB</constant></entry> - <entry>See <xref linkend="col-srgb" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_ADOBERGB</constant></entry> - <entry>See <xref linkend="col-adobergb" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_BT2020</constant></entry> - <entry>See <xref linkend="col-bt2020" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_DCI_P3</constant></entry> - <entry>See <xref linkend="col-dcip3" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_SMPTE240M</constant></entry> - <entry>See <xref linkend="col-smpte-240m" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_470_SYSTEM_M</constant></entry> - <entry>See <xref linkend="col-sysm" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_470_SYSTEM_BG</constant></entry> - <entry>See <xref linkend="col-sysbg" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_JPEG</constant></entry> - <entry>See <xref linkend="col-jpeg" />.</entry> - </row> - <row> - <entry><constant>V4L2_COLORSPACE_RAW</constant></entry> - <entry>The raw colorspace. This is used for raw image capture where - the image is minimally processed and is using the internal colorspace - of the device. The software that processes an image using this - 'colorspace' will have to know the internals of the capture device.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="v4l2-xfer-func"> - <title>V4L2 Transfer Function</title> - <tgroup cols="2" align="left"> - &cs-def; - <thead> - <row> - <entry>Identifier</entry> - <entry>Details</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry><constant>V4L2_XFER_FUNC_DEFAULT</constant></entry> - <entry>Use the default transfer function as defined by the colorspace.</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_709</constant></entry> - <entry>Use the Rec. 709 transfer function.</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_SRGB</constant></entry> - <entry>Use the sRGB transfer function.</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_ADOBERGB</constant></entry> - <entry>Use the AdobeRGB transfer function.</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_SMPTE240M</constant></entry> - <entry>Use the SMPTE 240M transfer function.</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_NONE</constant></entry> - <entry>Do not use a transfer function (i.e. use linear RGB values).</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_DCI_P3</constant></entry> - <entry>Use the DCI-P3 transfer function.</entry> - </row> - <row> - <entry><constant>V4L2_XFER_FUNC_SMPTE2084</constant></entry> - <entry>Use the SMPTE 2084 transfer function.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="v4l2-ycbcr-encoding"> - <title>V4L2 Y'CbCr Encodings</title> - <tgroup cols="2" align="left"> - &cs-def; - <thead> - <row> - <entry>Identifier</entry> - <entry>Details</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry><constant>V4L2_YCBCR_ENC_DEFAULT</constant></entry> - <entry>Use the default Y'CbCr encoding as defined by the colorspace.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_601</constant></entry> - <entry>Use the BT.601 Y'CbCr encoding.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_709</constant></entry> - <entry>Use the Rec. 709 Y'CbCr encoding.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_XV601</constant></entry> - <entry>Use the extended gamut xvYCC BT.601 encoding.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_XV709</constant></entry> - <entry>Use the extended gamut xvYCC Rec. 709 encoding.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_SYCC</constant></entry> - <entry>Use the extended gamut sYCC encoding.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_BT2020</constant></entry> - <entry>Use the default non-constant luminance BT.2020 Y'CbCr encoding.</entry> - </row> - <row> - <entry><constant>V4L2_YCBCR_ENC_BT2020_CONST_LUM</constant></entry> - <entry>Use the constant luminance BT.2020 Yc'CbcCrc encoding.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="v4l2-quantization"> - <title>V4L2 Quantization Methods</title> - <tgroup cols="2" align="left"> - &cs-def; - <thead> - <row> - <entry>Identifier</entry> - <entry>Details</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry><constant>V4L2_QUANTIZATION_DEFAULT</constant></entry> - <entry>Use the default quantization encoding as defined by the colorspace. -This is always full range for R'G'B' (except for the BT.2020 colorspace) and usually -limited range for Y'CbCr.</entry> - </row> - <row> - <entry><constant>V4L2_QUANTIZATION_FULL_RANGE</constant></entry> - <entry>Use the full range quantization encoding. I.e. the range [0…1] -is mapped to [0…255] (with possible clipping to [1…254] to avoid the -0x00 and 0xff values). Cb and Cr are mapped from [-0.5…0.5] to [0…255] -(with possible clipping to [1…254] to avoid the 0x00 and 0xff values).</entry> - </row> - <row> - <entry><constant>V4L2_QUANTIZATION_LIM_RANGE</constant></entry> - <entry>Use the limited range quantization encoding. I.e. the range [0…1] -is mapped to [16…235]. Cb and Cr are mapped from [-0.5…0.5] to [16…240]. -</entry> - </row> - </tbody> - </tgroup> - </table> - </section> - - <section> - <title>Detailed Colorspace Descriptions</title> - <section id="col-smpte-170m"> - <title>Colorspace SMPTE 170M (<constant>V4L2_COLORSPACE_SMPTE170M</constant>)</title> - <para>The <xref linkend="smpte170m" /> standard defines the colorspace used by NTSC and PAL and by SDTV -in general. The default transfer function is <constant>V4L2_XFER_FUNC_709</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_601</constant>. -The default Y'CbCr quantization is limited range. The chromaticities of the primary colors and -the white reference are:</para> - <table frame="none"> - <title>SMPTE 170M Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.630</entry> - <entry>0.340</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.310</entry> - <entry>0.595</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.155</entry> - <entry>0.070</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <para>The red, green and blue chromaticities are also often referred to -as the SMPTE C set, so this colorspace is sometimes called SMPTE C as well.</para> - <variablelist> - <varlistentry> - <term>The transfer function defined for SMPTE 170M is the same as the -one defined in Rec. 709.</term> - <listitem> - <para>L' = -1.099(-L)<superscript>0.45</superscript> + 0.099 for L ≤ -0.018</para> - <para>L' = 4.5L for -0.018 < L < 0.018</para> - <para>L' = 1.099L<superscript>0.45</superscript> - 0.099 for L ≥ 0.018</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = -((L' - 0.099) / -1.099)<superscript>1/0.45</superscript> for L' ≤ -0.081</para> - <para>L = L' / 4.5 for -0.081 < L' < 0.081</para> - <para>L = ((L' + 0.099) / 1.099)<superscript>1/0.45</superscript> for L' ≥ 0.081</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with -the following <constant>V4L2_YCBCR_ENC_601</constant> encoding:</term> - <listitem> - <para>Y' = 0.299R' + 0.587G' + 0.114B'</para> - <para>Cb = -0.169R' - 0.331G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.419G' - 0.081B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. This conversion to Y'CbCr is identical to the one -defined in the <xref linkend="itu601" /> standard and this colorspace is sometimes called BT.601 as well, even -though BT.601 does not mention any color primaries.</para> - <para>The default quantization is limited range, but full range is possible although -rarely seen.</para> - </section> - - <section id="col-rec709"> - <title>Colorspace Rec. 709 (<constant>V4L2_COLORSPACE_REC709</constant>)</title> - <para>The <xref linkend="itu709" /> standard defines the colorspace used by HDTV in general. -The default transfer function is <constant>V4L2_XFER_FUNC_709</constant>. The default -Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_709</constant>. The default Y'CbCr quantization is -limited range. The chromaticities of the primary colors and the white reference are:</para> - <table frame="none"> - <title>Rec. 709 Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.640</entry> - <entry>0.330</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.300</entry> - <entry>0.600</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.150</entry> - <entry>0.060</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <para>The full name of this standard is Rec. ITU-R BT.709-5.</para> - <variablelist> - <varlistentry> - <term>Transfer function. Normally L is in the range [0…1], but for the extended -gamut xvYCC encoding values outside that range are allowed.</term> - <listitem> - <para>L' = -1.099(-L)<superscript>0.45</superscript> + 0.099 for L ≤ -0.018</para> - <para>L' = 4.5L for -0.018 < L < 0.018</para> - <para>L' = 1.099L<superscript>0.45</superscript> - 0.099 for L ≥ 0.018</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = -((L' - 0.099) / -1.099)<superscript>1/0.45</superscript> for L' ≤ -0.081</para> - <para>L = L' / 4.5 for -0.081 < L' < 0.081</para> - <para>L = ((L' + 0.099) / 1.099)<superscript>1/0.45</superscript> for L' ≥ 0.081</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the following -<constant>V4L2_YCBCR_ENC_709</constant> encoding:</term> - <listitem> - <para>Y' = 0.2126R' + 0.7152G' + 0.0722B'</para> - <para>Cb = -0.1146R' - 0.3854G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.4542G' - 0.0458B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5].</para> - <para>The default quantization is limited range, but full range is possible although -rarely seen.</para> - <para>The <constant>V4L2_YCBCR_ENC_709</constant> encoding described above is the default -for this colorspace, but it can be overridden with <constant>V4L2_YCBCR_ENC_601</constant>, in which -case the BT.601 Y'CbCr encoding is used.</para> - <para>Two additional extended gamut Y'CbCr encodings are also possible with this colorspace:</para> - <variablelist> - <varlistentry> - <term>The xvYCC 709 encoding (<constant>V4L2_YCBCR_ENC_XV709</constant>, <xref linkend="xvycc" />) -is similar to the Rec. 709 encoding, but it allows for R', G' and B' values that are outside the range -[0…1]. The resulting Y', Cb and Cr values are scaled and offset:</term> - <listitem> - <para>Y' = (219 / 256) * (0.2126R' + 0.7152G' + 0.0722B') + (16 / 256)</para> - <para>Cb = (224 / 256) * (-0.1146R' - 0.3854G' + 0.5B')</para> - <para>Cr = (224 / 256) * (0.5R' - 0.4542G' - 0.0458B')</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The xvYCC 601 encoding (<constant>V4L2_YCBCR_ENC_XV601</constant>, <xref linkend="xvycc" />) is similar -to the BT.601 encoding, but it allows for R', G' and B' values that are outside the range -[0…1]. The resulting Y', Cb and Cr values are scaled and offset:</term> - <listitem> - <para>Y' = (219 / 256) * (0.299R' + 0.587G' + 0.114B') + (16 / 256)</para> - <para>Cb = (224 / 256) * (-0.169R' - 0.331G' + 0.5B')</para> - <para>Cr = (224 / 256) * (0.5R' - 0.419G' - 0.081B')</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are clamped -to the range [-0.5…0.5]. The non-standard xvYCC 709 or xvYCC 601 encodings can be used by -selecting <constant>V4L2_YCBCR_ENC_XV709</constant> or <constant>V4L2_YCBCR_ENC_XV601</constant>. -The xvYCC encodings always use full range quantization.</para> - </section> - - <section id="col-srgb"> - <title>Colorspace sRGB (<constant>V4L2_COLORSPACE_SRGB</constant>)</title> - <para>The <xref linkend="srgb" /> standard defines the colorspace used by most webcams -and computer graphics. The default transfer function is <constant>V4L2_XFER_FUNC_SRGB</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_SYCC</constant>. The default Y'CbCr -quantization is full range. The chromaticities of the primary colors and the white -reference are:</para> - <table frame="none"> - <title>sRGB Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.640</entry> - <entry>0.330</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.300</entry> - <entry>0.600</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.150</entry> - <entry>0.060</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <para>These chromaticities are identical to the Rec. 709 colorspace.</para> - <variablelist> - <varlistentry> - <term>Transfer function. Note that negative values for L are only used by the Y'CbCr conversion.</term> - <listitem> - <para>L' = -1.055(-L)<superscript>1/2.4</superscript> + 0.055 for L < -0.0031308</para> - <para>L' = 12.92L for -0.0031308 ≤ L ≤ 0.0031308</para> - <para>L' = 1.055L<superscript>1/2.4</superscript> - 0.055 for 0.0031308 < L ≤ 1</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = -((-L' + 0.055) / 1.055)<superscript>2.4</superscript> for L' < -0.04045</para> - <para>L = L' / 12.92 for -0.04045 ≤ L' ≤ 0.04045</para> - <para>L = ((L' + 0.055) / 1.055)<superscript>2.4</superscript> for L' > 0.04045</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the following -<constant>V4L2_YCBCR_ENC_SYCC</constant> encoding as defined by <xref linkend="sycc" />:</term> - <listitem> - <para>Y' = 0.2990R' + 0.5870G' + 0.1140B'</para> - <para>Cb = -0.1687R' - 0.3313G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.4187G' - 0.0813B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are clamped -to the range [-0.5…0.5]. The <constant>V4L2_YCBCR_ENC_SYCC</constant> quantization is always -full range. Although this Y'CbCr encoding looks very similar to the <constant>V4L2_YCBCR_ENC_XV601</constant> -encoding, it is not. The <constant>V4L2_YCBCR_ENC_XV601</constant> scales and offsets the Y'CbCr -values before quantization, but this encoding does not do that.</para> - </section> - - <section id="col-adobergb"> - <title>Colorspace Adobe RGB (<constant>V4L2_COLORSPACE_ADOBERGB</constant>)</title> - <para>The <xref linkend="adobergb" /> standard defines the colorspace used by computer graphics -that use the AdobeRGB colorspace. This is also known as the <xref linkend="oprgb" /> standard. -The default transfer function is <constant>V4L2_XFER_FUNC_ADOBERGB</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_601</constant>. The default Y'CbCr -quantization is limited range. The chromaticities of the primary colors and the white reference -are:</para> - <table frame="none"> - <title>Adobe RGB Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.6400</entry> - <entry>0.3300</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.2100</entry> - <entry>0.7100</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.1500</entry> - <entry>0.0600</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <variablelist> - <varlistentry> - <term>Transfer function:</term> - <listitem> - <para>L' = L<superscript>1/2.19921875</superscript></para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = L'<superscript>2.19921875</superscript></para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the -following <constant>V4L2_YCBCR_ENC_601</constant> encoding:</term> - <listitem> - <para>Y' = 0.299R' + 0.587G' + 0.114B'</para> - <para>Cb = -0.169R' - 0.331G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.419G' - 0.081B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. This transform is identical to one defined in -SMPTE 170M/BT.601. The Y'CbCr quantization is limited range.</para> - </section> - - <section id="col-bt2020"> - <title>Colorspace BT.2020 (<constant>V4L2_COLORSPACE_BT2020</constant>)</title> - <para>The <xref linkend="itu2020" /> standard defines the colorspace used by Ultra-high definition -television (UHDTV). The default transfer function is <constant>V4L2_XFER_FUNC_709</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_BT2020</constant>. -The default R'G'B' quantization is limited range (!), and so is the default Y'CbCr quantization. -The chromaticities of the primary colors and the white reference are:</para> - <table frame="none"> - <title>BT.2020 Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.708</entry> - <entry>0.292</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.170</entry> - <entry>0.797</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.131</entry> - <entry>0.046</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <variablelist> - <varlistentry> - <term>Transfer function (same as Rec. 709):</term> - <listitem> - <para>L' = 4.5L for 0 ≤ L < 0.018</para> - <para>L' = 1.099L<superscript>0.45</superscript> - 0.099 for 0.018 ≤ L ≤ 1</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = L' / 4.5 for L' < 0.081</para> - <para>L = ((L' + 0.099) / 1.099)<superscript>1/0.45</superscript> for L' ≥ 0.081</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the -following <constant>V4L2_YCBCR_ENC_BT2020</constant> encoding:</term> - <listitem> - <para>Y' = 0.2627R' + 0.6780G' + 0.0593B'</para> - <para>Cb = -0.1396R' - 0.3604G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.4598G' - 0.0402B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range.</para> - <para>There is also an alternate constant luminance R'G'B' to Yc'CbcCrc -(<constant>V4L2_YCBCR_ENC_BT2020_CONST_LUM</constant>) encoding:</para> - <variablelist> - <varlistentry> - <term>Luma:</term> - <listitem> - <para>Yc' = (0.2627R + 0.6780G + 0.0593B)'</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>B' - Yc' ≤ 0:</term> - <listitem> - <para>Cbc = (B' - Yc') / 1.9404</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>B' - Yc' > 0:</term> - <listitem> - <para>Cbc = (B' - Yc') / 1.5816</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>R' - Yc' ≤ 0:</term> - <listitem> - <para>Crc = (R' - Y') / 1.7184</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>R' - Yc' > 0:</term> - <listitem> - <para>Crc = (R' - Y') / 0.9936</para> - </listitem> - </varlistentry> - </variablelist> - <para>Yc' is clamped to the range [0…1] and Cbc and Crc are -clamped to the range [-0.5…0.5]. The Yc'CbcCrc quantization is limited range.</para> - </section> - - <section id="col-dcip3"> - <title>Colorspace DCI-P3 (<constant>V4L2_COLORSPACE_DCI_P3</constant>)</title> - <para>The <xref linkend="smpte431" /> standard defines the colorspace used by cinema -projectors that use the DCI-P3 colorspace. -The default transfer function is <constant>V4L2_XFER_FUNC_DCI_P3</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_709</constant>. Note that this -colorspace does not specify a Y'CbCr encoding since it is not meant to be encoded -to Y'CbCr. So this default Y'CbCr encoding was picked because it is the HDTV -encoding. The default Y'CbCr quantization is limited range. The chromaticities of -the primary colors and the white reference are:</para> - <table frame="none"> - <title>DCI-P3 Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.6800</entry> - <entry>0.3200</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.2650</entry> - <entry>0.6900</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.1500</entry> - <entry>0.0600</entry> - </row> - <row> - <entry>White Reference</entry> - <entry>0.3140</entry> - <entry>0.3510</entry> - </row> - </tbody> - </tgroup> - </table> - <variablelist> - <varlistentry> - <term>Transfer function:</term> - <listitem> - <para>L' = L<superscript>1/2.6</superscript></para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = L'<superscript>2.6</superscript></para> - </listitem> - </varlistentry> - </variablelist> - <para>Y'CbCr encoding is not specified. V4L2 defaults to Rec. 709.</para> - </section> - - <section id="col-smpte-240m"> - <title>Colorspace SMPTE 240M (<constant>V4L2_COLORSPACE_SMPTE240M</constant>)</title> - <para>The <xref linkend="smpte240m" /> standard was an interim standard used during -the early days of HDTV (1988-1998). It has been superseded by Rec. 709. -The default transfer function is <constant>V4L2_XFER_FUNC_SMPTE240M</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_SMPTE240M</constant>. -The default Y'CbCr quantization is limited range. The chromaticities of the primary colors and the -white reference are:</para> - <table frame="none"> - <title>SMPTE 240M Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.630</entry> - <entry>0.340</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.310</entry> - <entry>0.595</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.155</entry> - <entry>0.070</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <para>These chromaticities are identical to the SMPTE 170M colorspace.</para> - <variablelist> - <varlistentry> - <term>Transfer function:</term> - <listitem> - <para>L' = 4L for 0 ≤ L < 0.0228</para> - <para>L' = 1.1115L<superscript>0.45</superscript> - 0.1115 for 0.0228 ≤ L ≤ 1</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = L' / 4 for 0 ≤ L' < 0.0913</para> - <para>L = ((L' + 0.1115) / 1.1115)<superscript>1/0.45</superscript> for L' ≥ 0.0913</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the -following <constant>V4L2_YCBCR_ENC_SMPTE240M</constant> encoding:</term> - <listitem> - <para>Y' = 0.2122R' + 0.7013G' + 0.0865B'</para> - <para>Cb = -0.1161R' - 0.3839G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.4451G' - 0.0549B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Yc' is clamped to the range [0…1] and Cbc and Crc are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range.</para> - </section> - - <section id="col-sysm"> - <title>Colorspace NTSC 1953 (<constant>V4L2_COLORSPACE_470_SYSTEM_M</constant>)</title> - <para>This standard defines the colorspace used by NTSC in 1953. In practice this -colorspace is obsolete and SMPTE 170M should be used instead. -The default transfer function is <constant>V4L2_XFER_FUNC_709</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_601</constant>. -The default Y'CbCr quantization is limited range. -The chromaticities of the primary colors and the white reference are:</para> - <table frame="none"> - <title>NTSC 1953 Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.67</entry> - <entry>0.33</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.21</entry> - <entry>0.71</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.14</entry> - <entry>0.08</entry> - </row> - <row> - <entry>White Reference (C)</entry> - <entry>0.310</entry> - <entry>0.316</entry> - </row> - </tbody> - </tgroup> - </table> - <para>Note that this colorspace uses Illuminant C instead of D65 as the -white reference. To correctly convert an image in this colorspace to another -that uses D65 you need to apply a chromatic adaptation algorithm such as the -Bradford method.</para> - <variablelist> - <varlistentry> - <term>The transfer function was never properly defined for NTSC 1953. The -Rec. 709 transfer function is recommended in the literature:</term> - <listitem> - <para>L' = 4.5L for 0 ≤ L < 0.018</para> - <para>L' = 1.099L<superscript>0.45</superscript> - 0.099 for 0.018 ≤ L ≤ 1</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = L' / 4.5 for L' < 0.081</para> - <para>L = ((L' + 0.099) / 1.099)<superscript>1/0.45</superscript> for L' ≥ 0.081</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the -following <constant>V4L2_YCBCR_ENC_601</constant> encoding:</term> - <listitem> - <para>Y' = 0.299R' + 0.587G' + 0.114B'</para> - <para>Cb = -0.169R' - 0.331G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.419G' - 0.081B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range. -This transform is identical to one defined in SMPTE 170M/BT.601.</para> - </section> - - <section id="col-sysbg"> - <title>Colorspace EBU Tech. 3213 (<constant>V4L2_COLORSPACE_470_SYSTEM_BG</constant>)</title> - <para>The <xref linkend="tech3213" /> standard defines the colorspace used by PAL/SECAM in 1975. In practice this -colorspace is obsolete and SMPTE 170M should be used instead. -The default transfer function is <constant>V4L2_XFER_FUNC_709</constant>. -The default Y'CbCr encoding is <constant>V4L2_YCBCR_ENC_601</constant>. -The default Y'CbCr quantization is limited range. -The chromaticities of the primary colors and the white reference are:</para> - <table frame="none"> - <title>EBU Tech. 3213 Chromaticities</title> - <tgroup cols="3" align="left"> - &cs-str; - <thead> - <row> - <entry>Color</entry> - <entry>x</entry> - <entry>y</entry> - </row> - </thead> - <tbody valign="top"> - <row> - <entry>Red</entry> - <entry>0.64</entry> - <entry>0.33</entry> - </row> - <row> - <entry>Green</entry> - <entry>0.29</entry> - <entry>0.60</entry> - </row> - <row> - <entry>Blue</entry> - <entry>0.15</entry> - <entry>0.06</entry> - </row> - <row> - <entry>White Reference (D65)</entry> - <entry>0.3127</entry> - <entry>0.3290</entry> - </row> - </tbody> - </tgroup> - </table> - <variablelist> - <varlistentry> - <term>The transfer function was never properly defined for this colorspace. -The Rec. 709 transfer function is recommended in the literature:</term> - <listitem> - <para>L' = 4.5L for 0 ≤ L < 0.018</para> - <para>L' = 1.099L<superscript>0.45</superscript> - 0.099 for 0.018 ≤ L ≤ 1</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = L' / 4.5 for L' < 0.081</para> - <para>L = ((L' + 0.099) / 1.099)<superscript>1/0.45</superscript> for L' ≥ 0.081</para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>The luminance (Y') and color difference (Cb and Cr) are obtained with the -following <constant>V4L2_YCBCR_ENC_601</constant> encoding:</term> - <listitem> - <para>Y' = 0.299R' + 0.587G' + 0.114B'</para> - <para>Cb = -0.169R' - 0.331G' + 0.5B'</para> - <para>Cr = 0.5R' - 0.419G' - 0.081B'</para> - </listitem> - </varlistentry> - </variablelist> - <para>Y' is clamped to the range [0…1] and Cb and Cr are -clamped to the range [-0.5…0.5]. The Y'CbCr quantization is limited range. -This transform is identical to one defined in SMPTE 170M/BT.601.</para> - </section> - - <section id="col-jpeg"> - <title>Colorspace JPEG (<constant>V4L2_COLORSPACE_JPEG</constant>)</title> - <para>This colorspace defines the colorspace used by most (Motion-)JPEG formats. The chromaticities -of the primary colors and the white reference are identical to sRGB. The transfer -function use is <constant>V4L2_XFER_FUNC_SRGB</constant>. The Y'CbCr encoding is -<constant>V4L2_YCBCR_ENC_601</constant> with full range quantization where -Y' is scaled to [0…255] and Cb/Cr are scaled to [-128…128] and -then clipped to [-128…127].</para> - <para>Note that the JPEG standard does not actually store colorspace information. -So if something other than sRGB is used, then the driver will have to set that information -explicitly. Effectively <constant>V4L2_COLORSPACE_JPEG</constant> can be considered to be -an abbreviation for <constant>V4L2_COLORSPACE_SRGB</constant>, <constant>V4L2_YCBCR_ENC_601</constant> -and <constant>V4L2_QUANTIZATION_FULL_RANGE</constant>.</para> - </section> - - </section> - - <section> - <title>Detailed Transfer Function Descriptions</title> - <section id="xf-smpte-2084"> - <title>Transfer Function SMPTE 2084 (<constant>V4L2_XFER_FUNC_SMPTE2084</constant>)</title> - <para>The <xref linkend="smpte2084" /> standard defines the transfer function used by -High Dynamic Range content.</para> - <variablelist> - <varlistentry> - <term>Constants:</term> - <listitem> - <para>m1 = (2610 / 4096) / 4</para> - <para>m2 = (2523 / 4096) * 128</para> - <para>c1 = 3424 / 4096</para> - <para>c2 = (2413 / 4096) * 32</para> - <para>c3 = (2392 / 4096) * 32</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Transfer function:</term> - <listitem> - <para>L' = ((c1 + c2 * L<superscript>m1</superscript>) / (1 + c3 * L<superscript>m1</superscript>))<superscript>m2</superscript></para> - </listitem> - </varlistentry> - </variablelist> - <variablelist> - <varlistentry> - <term>Inverse Transfer function:</term> - <listitem> - <para>L = (max(L'<superscript>1/m2</superscript> - c1, 0) / (c2 - c3 * L'<superscript>1/m2</superscript>))<superscript>1/m1</superscript></para> - </listitem> - </varlistentry> - </variablelist> - </section> - </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-srggb10p; - &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-y16-be; - &sub-y8i; - &sub-y12i; - &sub-uv8; - &sub-yuyv; - &sub-uyvy; - &sub-yvyu; - &sub-vyuy; - &sub-y41p; - &sub-yuv420; - &sub-yuv420m; - &sub-yuv422m; - &sub-yuv444m; - &sub-yuv410; - &sub-yuv422p; - &sub-yuv411p; - &sub-nv12; - &sub-nv12m; - &sub-nv12mt; - &sub-nv16; - &sub-nv16m; - &sub-nv24; - &sub-m420; - </section> - - <section id="depth-formats"> - <title>Depth Formats</title> - <para>Depth data provides distance to points, mapped onto the image plane - </para> - - &sub-z16; - </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</link> -interface only.</para> - - &sub-sdr-cu08; - &sub-sdr-cu16le; - &sub-sdr-cs08; - &sub-sdr-cs14le; - &sub-sdr-ru12le; - - </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> - - <table frame="none" pgwide="1" id="format-flags"> - <title>Format Flags</title> - <tgroup cols="3"> - &cs-def; - <tbody valign="top"> - <row> - <entry><constant>V4L2_PIX_FMT_FLAG_PREMUL_ALPHA</constant></entry> - <entry>0x00000001</entry> - <entry>The color values are premultiplied by the alpha channel -value. For example, if a light blue pixel with 50% transparency was described by -RGBA values (128, 192, 255, 128), the same pixel described with premultiplied -colors would be described by RGBA values (64, 96, 128, 128) </entry> - </row> - </tbody> - </tgroup> - </table> - </section> diff --git a/Documentation/DocBook/media/v4l/planar-apis.xml b/Documentation/DocBook/media/v4l/planar-apis.xml deleted file mode 100644 index 878ce2040488..000000000000 --- a/Documentation/DocBook/media/v4l/planar-apis.xml +++ /dev/null @@ -1,62 +0,0 @@ -<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 deleted file mode 100644 index b86844e80257..000000000000 --- a/Documentation/DocBook/media/v4l/remote_controllers.xml +++ /dev/null @@ -1,320 +0,0 @@ -<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 noted 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 deleted file mode 100644 index b764cba150d1..000000000000 --- a/Documentation/DocBook/media/v4l/selection-api.xml +++ /dev/null @@ -1,317 +0,0 @@ -<section id="selection-api"> - - <title>API for cropping, composing and scaling</title> - - <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 deleted file mode 100644 index d6d56fb6f9c0..000000000000 --- a/Documentation/DocBook/media/v4l/selections-common.xml +++ /dev/null @@ -1,180 +0,0 @@ -<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_NATIVE_SIZE</constant></entry> - <entry>0x0003</entry> - <entry>The native size of the device, e.g. a sensor's - pixel array. <structfield>left</structfield> and - <structfield>top</structfield> fields are zero for this - target. Setting the native size will generally only make - sense for memory to memory devices where the software can - create a canvas of a given size in which for example a - video frame can be composed. In that case - V4L2_SEL_TGT_NATIVE_SIZE can be used to configure the size - of that canvas. - </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 deleted file mode 100644 index 199c84e3aede..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-formats.xml +++ /dev/null @@ -1,4040 +0,0 @@ -<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>&v4l2-ycbcr-encoding;</entry> - <entry><structfield>ycbcr_enc</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>&v4l2-quantization;</entry> - <entry><structfield>quantization</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>&v4l2-xfer-func;</entry> - <entry><structfield>xfer_func</structfield></entry> - <entry>This information supplements the -<structfield>colorspace</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>__u16</entry> - <entry><structfield>reserved</structfield>[11]</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). A "C" prefix is used for component-wise - padding in the most high order bits (CPADHI) or low order bits (CPADLO) - of each separate component.</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>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB444-1X12"> - <entry>MEDIA_BUS_FMT_RGB444_1X12</entry> - <entry>0x1016</entry> - <entry></entry> - &dash-ent-20; - <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>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="MEDIA-BUS-FMT-RGB444-2X8-PADHI-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB444-2X8-PADHI-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB555-2X8-PADHI-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB555-2X8-PADHI-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB565-1X16"> - <entry>MEDIA_BUS_FMT_RGB565_1X16</entry> - <entry>0x1017</entry> - <entry></entry> - &dash-ent-16; - <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>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="MEDIA-BUS-FMT-BGR565-2X8-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-BGR565-2X8-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB565-2X8-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB565-2X8-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB666-1X18"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RBG888-1X24"> - <entry>MEDIA_BUS_FMT_RBG888_1X24</entry> - <entry>0x100e</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>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>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="MEDIA-BUS-FMT-RGB666-1X24_CPADHI"> - <entry>MEDIA_BUS_FMT_RGB666_1X24_CPADHI</entry> - <entry>0x1015</entry> - <entry></entry> - &dash-ent-8; - <entry>0</entry> - <entry>0</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>0</entry> - <entry>0</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>0</entry> - <entry>0</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="MEDIA-BUS-FMT-BGR888-1X24"> - <entry>MEDIA_BUS_FMT_BGR888_1X24</entry> - <entry>0x1013</entry> - <entry></entry> - &dash-ent-8; - <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>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>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="MEDIA-BUS-FMT-GBR888-1X24"> - <entry>MEDIA_BUS_FMT_GBR888_1X24</entry> - <entry>0x1014</entry> - <entry></entry> - &dash-ent-8; - <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> - <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="MEDIA-BUS-FMT-RGB888-1X24"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB888-2X12-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-RGB888-2X12-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-ARGB888-1X32"> - <entry>MEDIA_BUS_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> - <row id="MEDIA-BUS-FMT-RGB888-1X32-PADHI"> - <entry>MEDIA_BUS_FMT_RGB888_1X32_PADHI</entry> - <entry>0x100f</entry> - <entry></entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</entry> - <entry>0</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> - - <para>On LVDS buses, usually each sample is transferred serialized in - seven time slots per pixel clock, on three (18-bit) or four (24-bit) - differential data pairs at the same time. The remaining bits are used for - control signals as defined by SPWG/PSWG/VESA or JEIDA standards. - The 24-bit RGB format serialized in seven time slots on four lanes using - JEIDA defined bit mapping will be named - <constant>MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA</constant>, for example. - </para> - - <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb-lvds"> - <title>LVDS RGB formats</title> - <tgroup cols="8"> - <colspec colname="id" align="left" /> - <colspec colname="code" align="center" /> - <colspec colname="slot" align="center" /> - <colspec colname="lane" /> - <colspec colnum="5" colname="l03" align="center" /> - <colspec colnum="6" colname="l02" align="center" /> - <colspec colnum="7" colname="l01" align="center" /> - <colspec colnum="8" colname="l00" align="center" /> - <spanspec namest="l03" nameend="l00" spanname="l0" /> - <thead> - <row> - <entry>Identifier</entry> - <entry>Code</entry> - <entry></entry> - <entry></entry> - <entry spanname="l0">Data organization</entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>Timeslot</entry> - <entry>Lane</entry> - <entry>3</entry> - <entry>2</entry> - <entry>1</entry> - <entry>0</entry> - </row> - </thead> - <tbody valign="top"> - <row id="MEDIA-BUS-FMT-RGB666-1X7X3-SPWG"> - <entry>MEDIA_BUS_FMT_RGB666_1X7X3_SPWG</entry> - <entry>0x1010</entry> - <entry>0</entry> - <entry></entry> - <entry>-</entry> - <entry>d</entry> - <entry>b<subscript>1</subscript></entry> - <entry>g<subscript>0</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>1</entry> - <entry></entry> - <entry>-</entry> - <entry>d</entry> - <entry>b<subscript>0</subscript></entry> - <entry>r<subscript>5</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>2</entry> - <entry></entry> - <entry>-</entry> - <entry>d</entry> - <entry>g<subscript>5</subscript></entry> - <entry>r<subscript>4</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>3</entry> - <entry></entry> - <entry>-</entry> - <entry>b<subscript>5</subscript></entry> - <entry>g<subscript>4</subscript></entry> - <entry>r<subscript>3</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>4</entry> - <entry></entry> - <entry>-</entry> - <entry>b<subscript>4</subscript></entry> - <entry>g<subscript>3</subscript></entry> - <entry>r<subscript>2</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>5</entry> - <entry></entry> - <entry>-</entry> - <entry>b<subscript>3</subscript></entry> - <entry>g<subscript>2</subscript></entry> - <entry>r<subscript>1</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>6</entry> - <entry></entry> - <entry>-</entry> - <entry>b<subscript>2</subscript></entry> - <entry>g<subscript>1</subscript></entry> - <entry>r<subscript>0</subscript></entry> - </row> - <row id="MEDIA-BUS-FMT-RGB888-1X7X4-SPWG"> - <entry>MEDIA_BUS_FMT_RGB888_1X7X4_SPWG</entry> - <entry>0x1011</entry> - <entry>0</entry> - <entry></entry> - <entry>d</entry> - <entry>d</entry> - <entry>b<subscript>1</subscript></entry> - <entry>g<subscript>0</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>1</entry> - <entry></entry> - <entry>b<subscript>7</subscript></entry> - <entry>d</entry> - <entry>b<subscript>0</subscript></entry> - <entry>r<subscript>5</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>2</entry> - <entry></entry> - <entry>b<subscript>6</subscript></entry> - <entry>d</entry> - <entry>g<subscript>5</subscript></entry> - <entry>r<subscript>4</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>3</entry> - <entry></entry> - <entry>g<subscript>7</subscript></entry> - <entry>b<subscript>5</subscript></entry> - <entry>g<subscript>4</subscript></entry> - <entry>r<subscript>3</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>4</entry> - <entry></entry> - <entry>g<subscript>6</subscript></entry> - <entry>b<subscript>4</subscript></entry> - <entry>g<subscript>3</subscript></entry> - <entry>r<subscript>2</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>5</entry> - <entry></entry> - <entry>r<subscript>7</subscript></entry> - <entry>b<subscript>3</subscript></entry> - <entry>g<subscript>2</subscript></entry> - <entry>r<subscript>1</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>6</entry> - <entry></entry> - <entry>r<subscript>6</subscript></entry> - <entry>b<subscript>2</subscript></entry> - <entry>g<subscript>1</subscript></entry> - <entry>r<subscript>0</subscript></entry> - </row> - <row id="MEDIA-BUS-FMT-RGB888-1X7X4-JEIDA"> - <entry>MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA</entry> - <entry>0x1012</entry> - <entry>0</entry> - <entry></entry> - <entry>d</entry> - <entry>d</entry> - <entry>b<subscript>3</subscript></entry> - <entry>g<subscript>2</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>1</entry> - <entry></entry> - <entry>b<subscript>1</subscript></entry> - <entry>d</entry> - <entry>b<subscript>2</subscript></entry> - <entry>r<subscript>7</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>2</entry> - <entry></entry> - <entry>b<subscript>0</subscript></entry> - <entry>d</entry> - <entry>g<subscript>7</subscript></entry> - <entry>r<subscript>6</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>3</entry> - <entry></entry> - <entry>g<subscript>1</subscript></entry> - <entry>b<subscript>7</subscript></entry> - <entry>g<subscript>6</subscript></entry> - <entry>r<subscript>5</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>4</entry> - <entry></entry> - <entry>g<subscript>0</subscript></entry> - <entry>b<subscript>6</subscript></entry> - <entry>g<subscript>5</subscript></entry> - <entry>r<subscript>4</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>5</entry> - <entry></entry> - <entry>r<subscript>1</subscript></entry> - <entry>b<subscript>5</subscript></entry> - <entry>g<subscript>4</subscript></entry> - <entry>r<subscript>3</subscript></entry> - </row> - <row> - <entry></entry> - <entry></entry> - <entry>6</entry> - <entry></entry> - <entry>r<subscript>0</subscript></entry> - <entry>b<subscript>4</subscript></entry> - <entry>g<subscript>3</subscript></entry> - <entry>r<subscript>2</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>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGBRG8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGRBG8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SRGGB8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-ALAW8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGBRG10-ALAW8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGRBG10-ALAW8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SRGGB10-ALAW8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-DPCM8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGBRG10-DPCM8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGRBG10-DPCM8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SRGGB10-DPCM8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-2X8-PADHI-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-2X8-PADHI-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-2X8-PADLO-BE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-2X8-PADLO-LE"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR10-1X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGBRG10-1X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGRBG10-1X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SRGGB10-1X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SBGGR12-1X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGBRG12-1X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SGRBG12-1X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-SRGGB12-1X12"> - <entry>MEDIA_BUS_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>MEDIA_BUS_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="MEDIA-BUS-FMT-Y8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UV8-1X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UYVY8-1_5X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY8-1_5X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV8-1_5X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU8-1_5X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UYVY8-2X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY8-2X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV8-2X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU8-2X8"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-Y10-1X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UYVY10-2X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY10-2X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV10-2X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU10-2X10"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-Y12-1X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UYVY12-2X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY12-2X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV12-2X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU12-2X12"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UYVY8-1X16"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY8-1X16"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV8-1X16"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU8-1X16"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YDYUYDYV8-1X16"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-UYVY10-1X20"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY10-1X20"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV10-1X20"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU10-1X20"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VUY8-1X24"> - <entry>MEDIA_BUS_FMT_VUY8_1X24</entry> - <entry>0x201a</entry> - <entry></entry> - &dash-ent-8; - <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>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="MEDIA-BUS-FMT-YUV8-1X24"> - <entry>MEDIA_BUS_FMT_YUV8_1X24</entry> - <entry>0x2025</entry> - <entry></entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</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>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="MEDIA-BUS-FMT-UYVY12-1X24"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-VYUY12-1X24"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YUYV12-1X24"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-YVYU12-1X24"> - <entry>MEDIA_BUS_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> - <row id="MEDIA-BUS-FMT-YUV10-1X30"> - <entry>MEDIA_BUS_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="MEDIA-BUS-FMT-AYUV8-1X32"> - <entry>MEDIA_BUS_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> - </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="MEDIA-BUS-FMT-AHSV8888-1X32"> - <entry>MEDIA_BUS_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>MEDIA_BUS_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="MEDIA-BUS-FMT-JPEG-1X8"> - <entry>MEDIA_BUS_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> - - <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="MEDIA-BUS-FMT-S5C-UYVY-JPEG-1X8"> - <entry>MEDIA_BUS_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 deleted file mode 100644 index e32ba5362e1d..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.dia +++ /dev/null @@ -1,614 +0,0 @@ -<?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 deleted file mode 100644 index 18b0f5de9ed2..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-crop.svg +++ /dev/null @@ -1,63 +0,0 @@ -<?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 deleted file mode 100644 index a0d782927840..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-full.dia +++ /dev/null @@ -1,1588 +0,0 @@ -<?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 deleted file mode 100644 index 3322cf4c0093..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-full.svg +++ /dev/null @@ -1,163 +0,0 @@ -<?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 deleted file mode 100644 index 0cd50a7bda80..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.dia +++ /dev/null @@ -1,1152 +0,0 @@ -<?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 deleted file mode 100644 index 2340c0f8bc92..000000000000 --- a/Documentation/DocBook/media/v4l/subdev-image-processing-scaling-multi-source.svg +++ /dev/null @@ -1,116 +0,0 @@ -<?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 deleted file mode 100644 index 42e626d6c936..000000000000 --- a/Documentation/DocBook/media/v4l/v4l2.xml +++ /dev/null @@ -1,728 +0,0 @@ - <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> - <year>2015</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>4.5</revnumber> - <date>2015-10-29</date> - <authorinitials>rr</authorinitials> - <revremark>Extend vidioc-g-ext-ctrls;. Replace ctrl_class with a new -union with ctrl_class and which. Which is used to select the current value of -the control or the default value. - </revremark> - </revision> - - <revision> - <revnumber>4.4</revnumber> - <date>2015-05-26</date> - <authorinitials>ap</authorinitials> - <revremark>Renamed V4L2_TUNER_ADC to V4L2_TUNER_SDR. -Added V4L2_CID_RF_TUNER_RF_GAIN control. -Added transmitter support for Software Defined Radio (SDR) Interface. - </revremark> - </revision> - - <revision> - <revnumber>4.1</revnumber> - <date>2015-02-13</date> - <authorinitials>mcc</authorinitials> - <revremark>Fix documentation for media controller device nodes and add support for DVB device nodes. -Add support for Tuner sub-device. - </revremark> - </revision> - <revision> - <revnumber>3.19</revnumber> - <date>2014-12-05</date> - <authorinitials>hv</authorinitials> - <revremark>Rewrote Colorspace chapter, added new &v4l2-ycbcr-encoding; and &v4l2-quantization; fields -to &v4l2-pix-format;, &v4l2-pix-format-mplane; and &v4l2-mbus-framefmt;. - </revremark> - </revision> - - <revision> - <revnumber>3.17</revnumber> - <date>2014-08-04</date> - <authorinitials>lp, hv</authorinitials> - <revremark>Extended &v4l2-pix-format;. Added format flags. Added compound control types -and VIDIOC_QUERY_EXT_CTRL. - </revremark> - </revision> - - <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 4.4</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 deleted file mode 100644 index bed12e40be27..000000000000 --- a/Documentation/DocBook/media/v4l/v4l2grab.c.xml +++ /dev/null @@ -1,164 +0,0 @@ -<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 differdeleted file mode 100644 index 9e72c25b208d..000000000000 --- a/Documentation/DocBook/media/v4l/vbi_525.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/vbi_625.pdf b/Documentation/DocBook/media/v4l/vbi_625.pdf Binary files differdeleted file mode 100644 index 765235e33a4d..000000000000 --- a/Documentation/DocBook/media/v4l/vbi_625.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/vbi_hsync.pdf b/Documentation/DocBook/media/v4l/vbi_hsync.pdf Binary files differdeleted file mode 100644 index 200b668189bf..000000000000 --- a/Documentation/DocBook/media/v4l/vbi_hsync.pdf +++ /dev/null diff --git a/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml b/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml deleted file mode 100644 index 6528e97b8990..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-create-bufs.xml +++ /dev/null @@ -1,158 +0,0 @@ -<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> - - <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 &VIDIOC-REQBUFS; 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 &VIDIOC-TRY-FMT; or &VIDIOC-G-FMT; ioctls -to ensure that the requested format is supported by the driver. -Based on the format's <structfield>type</structfield> field the requested buffer -size (for single-planar) or plane sizes (for multi-planar formats) will be -used for the allocated buffers. The driver may return an error if the size(s) -are not supported by the hardware (usually because they are too small).</para> - - <para>The buffers created by this ioctl will have as minimum size the size -defined by the <structfield>format.pix.sizeimage</structfield> field (or the -corresponding fields for other format types). Usually if the -<structfield>format.pix.sizeimage</structfield> field is less than the minimum -required for the given format, then an error will be returned since drivers will -typically not allow this. If it is larger, then the value will be used as-is. -In other words, the driver may reject the requested size, but if it is accepted -the driver will use it unchanged.</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.</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. Drivers and applications -must set the array to zero.</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 deleted file mode 100644 index 50cb940cbe5c..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-cropcap.xml +++ /dev/null @@ -1,166 +0,0 @@ -<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>Do not use the multiplanar buffer types. Use <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> -instead of <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> -and use <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> instead of -<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>.</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_OUTPUT</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 deleted file mode 100644 index f14a3bb1afaa..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dbg-g-chip-info.xml +++ /dev/null @@ -1,207 +0,0 @@ -<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="https://linuxtv.org/repo/">https://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 deleted file mode 100644 index 5877f68a5820..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dbg-g-register.xml +++ /dev/null @@ -1,227 +0,0 @@ -<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="https://linuxtv.org/repo/">https://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 deleted file mode 100644 index 73eb5cfe698a..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-decoder-cmd.xml +++ /dev/null @@ -1,259 +0,0 @@ -<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. mem2mem decoders will stop producing new frames altogether. They will send -a <constant>V4L2_EVENT_EOS</constant> event when the last frame has been decoded -and all frames are ready to be dequeued and will set the -<constant>V4L2_BUF_FLAG_LAST</constant> buffer flag on the last buffer of the -capture queue to indicate there will be no new buffers produced to dequeue. This -buffer may be empty, indicated by the driver setting the -<structfield>bytesused</structfield> field to 0. Once the -<constant>V4L2_BUF_FLAG_LAST</constant> flag was set, the -<link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl will not block anymore, -but return an &EPIPE;. -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 deleted file mode 100644 index c9c3c7713832..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dqevent.xml +++ /dev/null @@ -1,471 +0,0 @@ -<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, see <xref linkend="event-type" />.</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 <constant>V4L2_EVENT_VSYNC</constant>. - </entry> - </row> - <row> - <entry></entry> - <entry>&v4l2-event-ctrl;</entry> - <entry><structfield>ctrl</structfield></entry> - <entry>Event data for event <constant>V4L2_EVENT_CTRL</constant>. - </entry> - </row> - <row> - <entry></entry> - <entry>&v4l2-event-frame-sync;</entry> - <entry><structfield>frame_sync</structfield></entry> - <entry>Event data for event - <constant>V4L2_EVENT_FRAME_SYNC</constant>.</entry> - </row> - <row> - <entry></entry> - <entry>&v4l2-event-motion-det;</entry> - <entry><structfield>motion_det</structfield></entry> - <entry>Event data for event V4L2_EVENT_MOTION_DET.</entry> - </row> - <row> - <entry></entry> - <entry>&v4l2-event-src-change;</entry> - <entry><structfield>src_change</structfield></entry> - <entry>Event data for event V4L2_EVENT_SOURCE_CHANGE.</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. The 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>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="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_MOTION_DET</constant></entry> - <entry>6</entry> - <entry> - <para>Triggered whenever the motion detection state for one or more of the regions - changes. This event has a &v4l2-event-motion-det; associated with it.</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 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="ctrl-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 frame="none" pgwide="1" id="v4l2-event-motion-det"> - <title>struct <structname>v4l2_event_motion_det</structname></title> - <tgroup cols="3"> - &cs-str; - <tbody valign="top"> - <row> - <entry>__u32</entry> - <entry><structfield>flags</structfield></entry> - <entry> - Currently only one flag is available: if <constant>V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ</constant> - is set, then the <structfield>frame_sequence</structfield> field is valid, - otherwise that field should be ignored. - </entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>frame_sequence</structfield></entry> - <entry> - The sequence number of the frame being received. Only valid if the - <constant>V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ</constant> flag was set. - </entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>region_mask</structfield></entry> - <entry> - The bitmask of the regions that reported motion. There is at least one - region. If this field is 0, then no motion was detected at all. - If there is no <constant>V4L2_CID_DETECT_MD_REGION_GRID</constant> control - (see <xref linkend="detect-controls" />) to assign a different region - to each cell in the motion detection grid, then that all cells - are automatically assigned to the default region 0. - </entry> - </row> - </tbody> - </tgroup> - </table> - - <table pgwide="1" frame="none" id="ctrl-changes-flags"> - <title>Control 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 cases: Volatile controls do no generate this event; - If a control has the <constant>V4L2_CTRL_FLAG_EXECUTE_ON_WRITE</constant> - flag set, then this event is sent as well, regardless its value.</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 deleted file mode 100644 index ca9ffce9b4c1..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-dv-timings-cap.xml +++ /dev/null @@ -1,210 +0,0 @@ -<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> - - <para>To query the capabilities of the DV receiver/transmitter applications initialize the -<structfield>pad</structfield> field to 0, zero the reserved array of &v4l2-dv-timings-cap; -and 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 and zero the <structfield>reserved</structfield> array. 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 and applications 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> diff --git a/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml b/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml deleted file mode 100644 index 70a4a08e9404..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-encoder-cmd.xml +++ /dev/null @@ -1,197 +0,0 @@ -<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. mem2mem encoders will send a <constant>V4L2_EVENT_EOS</constant> event -when the last frame has been encoded and all frames are ready to be dequeued and -will set the <constant>V4L2_BUF_FLAG_LAST</constant> buffer flag on the last -buffer of the capture queue to indicate there will be no new buffers produced to -dequeue. This buffer may be empty, indicated by the driver setting the -<structfield>bytesused</structfield> field to 0. Once the -<constant>V4L2_BUF_FLAG_LAST</constant> flag was set, the -<link linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl will not block anymore, -but return an &EPIPE;.</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 deleted file mode 100644 index 9b3d42018b69..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-dv-timings.xml +++ /dev/null @@ -1,128 +0,0 @@ -<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> - - <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, set the <structfield>pad</structfield> field to 0, -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> diff --git a/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml b/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml deleted file mode 100644 index f8dfeed34fca..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-fmt.xml +++ /dev/null @@ -1,159 +0,0 @@ -<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 deleted file mode 100644 index 7c839ab0afbb..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-frameintervals.xml +++ /dev/null @@ -1,260 +0,0 @@ -<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. Must be zeroed by drivers and - applications.</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 deleted file mode 100644 index 9ed68ac8f474..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-framesizes.xml +++ /dev/null @@ -1,265 +0,0 @@ -<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. Must be zeroed by drivers and - applications.</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 deleted file mode 100644 index a0608abc1ab8..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enum-freq-bands.xml +++ /dev/null @@ -1,175 +0,0 @@ -<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> - - <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 deleted file mode 100644 index ea816ab2e49e..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumaudio.xml +++ /dev/null @@ -1,76 +0,0 @@ -<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 deleted file mode 100644 index 2e87cedb0d32..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumaudioout.xml +++ /dev/null @@ -1,79 +0,0 @@ -<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 deleted file mode 100644 index 603fecef9083..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enuminput.xml +++ /dev/null @@ -1,316 +0,0 @@ -<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> - <row> - <entry><constant>V4L2_IN_CAP_NATIVE_SIZE</constant></entry> - <entry>0x00000008</entry> - <entry>This input supports setting the native size using - the <constant>V4L2_SEL_TGT_NATIVE_SIZE</constant> - selection target, see <xref - linkend="v4l2-selections-common"/>.</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 deleted file mode 100644 index 773fb1258c24..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumoutput.xml +++ /dev/null @@ -1,201 +0,0 @@ -<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> - <row> - <entry><constant>V4L2_OUT_CAP_NATIVE_SIZE</constant></entry> - <entry>0x00000008</entry> - <entry>This output supports setting the native size using - the <constant>V4L2_SEL_TGT_NATIVE_SIZE</constant> - selection target, see <xref - linkend="v4l2-selections-common"/>.</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 deleted file mode 100644 index f18454e91752..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-enumstd.xml +++ /dev/null @@ -1,389 +0,0 @@ -<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="https://linuxtv.org">https://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 deleted file mode 100644 index a6558a676ef3..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml +++ /dev/null @@ -1,205 +0,0 @@ -<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> - -<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. 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>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 deleted file mode 100644 index d7bb9b3738f6..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-audio.xml +++ /dev/null @@ -1,172 +0,0 @@ -<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 deleted file mode 100644 index 200a2704a970..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-audioout.xml +++ /dev/null @@ -1,138 +0,0 @@ -<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 deleted file mode 100644 index e6c4efb9e8b4..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-crop.xml +++ /dev/null @@ -1,129 +0,0 @@ -<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>Do not use the multiplanar buffer types. Use <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> -instead of <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> -and use <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> instead of -<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>.</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 deleted file mode 100644 index ee2820d6ca66..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-ctrl.xml +++ /dev/null @@ -1,133 +0,0 @@ -<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 deleted file mode 100644 index 06952d7cc770..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-dv-timings.xml +++ /dev/null @@ -1,343 +0,0 @@ -<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> - <refname>VIDIOC_SUBDEV_G_DV_TIMINGS</refname> - <refname>VIDIOC_SUBDEV_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, VIDIOC_SUBDEV_G_DV_TIMINGS, VIDIOC_SUBDEV_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 the vertical frontporch -of field 1 (aka the odd field) is really one half-line longer and the vertical backporch -of 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> - <row> - <entry>V4L2_DV_FL_IS_CE_VIDEO</entry> - <entry>If set, then this is a Consumer Electronics (CE) video format. -Such formats differ from other formats (commonly called IT formats) in that if -R'G'B' encoding is used then by default the R'G'B' values use limited range -(i.e. 16-235) as opposed to full range (i.e. 0-255). All formats defined in CEA-861 -except for the 640x480p59.94 format are CE formats. - </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 deleted file mode 100644 index b7602d30f596..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-edid.xml +++ /dev/null @@ -1,173 +0,0 @@ -<refentry id="vidioc-g-edid"> - <refmeta> - <refentrytitle>ioctl VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>VIDIOC_G_EDID</refname> - <refname>VIDIOC_S_EDID</refname> - <refname>VIDIOC_SUBDEV_G_EDID</refname> - <refname>VIDIOC_SUBDEV_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>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, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_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, zero the <structfield>reserved</structfield> array 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>If <structfield>start_block</structfield> and <structfield>blocks</structfield> are - both set to 0 when <constant>VIDIOC_G_EDID</constant> is called, then the driver will - set <structfield>blocks</structfield> to the total number of available EDID blocks - and it will return 0 without copying any data. This is an easy way to discover how many - EDID blocks there are. Note that if there are no EDID blocks available at all, then - the driver will set <structfield>blocks</structfield> to 0 and it returns 0.</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, set - <structfield>start_block</structfield> to 0 and zero the <structfield>reserved</structfield> array. - 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>__u32</entry> - <entry><structfield>reserved</structfield>[5]</entry> - <entry>Reserved for future extensions. Applications and drivers must - set the array to zero.</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> - </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 deleted file mode 100644 index be25029a16f1..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-enc-index.xml +++ /dev/null @@ -1,189 +0,0 @@ -<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 deleted file mode 100644 index eb82f7e7d06b..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml +++ /dev/null @@ -1,456 +0,0 @@ -<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>which</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. Controls -of compound types (<constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is set) -must set the <structfield>ptr</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 -memory to this new size and try again. For the string type 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>N-dimensional arrays are set and retrieved row-by-row. You cannot set a partial -array, all elements have to be set or retrieved. The total size is calculated -as <structfield>elems</structfield> * <structfield>elem_size</structfield>. -These values can be obtained by calling &VIDIOC-QUERY-EXT-CTRL;.</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/value64/string/ptr</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/value64/string/ptr</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>which</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. Valid if this control is not of -type <constant>V4L2_CTRL_TYPE_INTEGER64</constant> and -<constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is not set.</entry> - </row> - <row> - <entry></entry> - <entry>__s64</entry> - <entry><structfield>value64</structfield></entry> - <entry>New value or current value. Valid if this control is of -type <constant>V4L2_CTRL_TYPE_INTEGER64</constant> and -<constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is not set.</entry> - </row> - <row> - <entry></entry> - <entry>char *</entry> - <entry><structfield>string</structfield></entry> - <entry>A pointer to a string. Valid if this control is of -type <constant>V4L2_CTRL_TYPE_STRING</constant>.</entry> - </row> - <row> - <entry></entry> - <entry>__u8 *</entry> - <entry><structfield>p_u8</structfield></entry> - <entry>A pointer to a matrix control of unsigned 8-bit values. -Valid if this control is of type <constant>V4L2_CTRL_TYPE_U8</constant>.</entry> - </row> - <row> - <entry></entry> - <entry>__u16 *</entry> - <entry><structfield>p_u16</structfield></entry> - <entry>A pointer to a matrix control of unsigned 16-bit values. -Valid if this control is of type <constant>V4L2_CTRL_TYPE_U16</constant>.</entry> - </row> - <row> - <entry></entry> - <entry>__u32 *</entry> - <entry><structfield>p_u32</structfield></entry> - <entry>A pointer to a matrix control of unsigned 32-bit values. -Valid if this control is of type <constant>V4L2_CTRL_TYPE_U32</constant>.</entry> - </row> - <row> - <entry></entry> - <entry>void *</entry> - <entry><structfield>ptr</structfield></entry> - <entry>A pointer to a compound type which can be an N-dimensional array and/or a -compound type (the control's type is >= <constant>V4L2_CTRL_COMPOUND_TYPES</constant>). -Valid if <constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is set for this control. -</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>union</entry> - <entry>(anonymous)</entry> - </row> - <row> - <entry></entry> - <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></entry> - <entry>__u32</entry> - <entry><structfield>which</structfield></entry> - <entry><para>Which value of the control to get/set/try. <constant>V4L2_CTRL_WHICH_CUR_VAL</constant> -will return the current value of the control and <constant>V4L2_CTRL_WHICH_DEF_VAL</constant> will -return the default value of the control. Please note that you can only get the default value of the -control, you cannot set or try it.</para> -<para>For backwards compatibility you can also use a control class here (see -<xref linkend="ctrl-class" />). In that case all controls have to belong to that -control class. This usage is deprecated, instead just use <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>. -There are some very old drivers that do not yet support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant> -and that require a control class here. You can test for such drivers by setting ctrl_class to -<constant>V4L2_CTRL_WHICH_CUR_VAL</constant> and calling VIDIOC_TRY_EXT_CTRLS with a count of 0. -If that fails, then the driver does not support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.</para> -</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>which</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 deleted file mode 100644 index 77607cc19688..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-fbuf.xml +++ /dev/null @@ -1,459 +0,0 @@ -<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>struct</entry> - <entry><structfield>fmt</structfield></entry> - <entry></entry> - <entry>Layout of the frame buffer.</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 first -plane and is divided by the same factor as the -<structfield>width</structfield> field for the other 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. 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 deleted file mode 100644 index ffcb448251f0..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-fmt.xml +++ /dev/null @@ -1,204 +0,0 @@ -<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 and output 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 deleted file mode 100644 index d1034fb61d15..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml +++ /dev/null @@ -1,148 +0,0 @@ -<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 deleted file mode 100644 index 1d43065090dd..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-input.xml +++ /dev/null @@ -1,83 +0,0 @@ -<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 deleted file mode 100644 index 098ff483802e..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-jpegcomp.xml +++ /dev/null @@ -1,175 +0,0 @@ -<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 deleted file mode 100644 index 96e17b344c5d..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-modulator.xml +++ /dev/null @@ -1,252 +0,0 @@ -<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><link linkend="sdr">SDR</link> specific modulator types are -<constant>V4L2_TUNER_SDR</constant> and <constant>V4L2_TUNER_RF</constant>. -For SDR devices <structfield>txsubchans</structfield> field must be -initialized to zero. -The term 'modulator' means SDR transmitter in this context.</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>type</structfield></entry> - <entry spanname="hspan">Type of the modulator, see <xref - linkend="v4l2-tuner-type" />.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield>[3]</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 deleted file mode 100644 index 4533068ecb8a..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-output.xml +++ /dev/null @@ -1,85 +0,0 @@ -<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 deleted file mode 100644 index 721728745407..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-parm.xml +++ /dev/null @@ -1,314 +0,0 @@ -<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 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 deleted file mode 100644 index 6a81b4fe9538..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-priority.xml +++ /dev/null @@ -1,135 +0,0 @@ -<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 deleted file mode 100644 index 997f4e96f297..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-selection.xml +++ /dev/null @@ -1,233 +0,0 @@ -<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> - - <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 the multiplanar buffer types. Use <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> -instead of <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and 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. Drivers and applications must zero this array.</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 constraints 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 deleted file mode 100644 index d05623c55403..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml +++ /dev/null @@ -1,255 +0,0 @@ -<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="cea608" /></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 deleted file mode 100644 index 4a898417de28..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-std.xml +++ /dev/null @@ -1,98 +0,0 @@ -<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 deleted file mode 100644 index 459b7e561f3c..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml +++ /dev/null @@ -1,594 +0,0 @@ -<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><link linkend="sdr">SDR</link> specific tuner types are -<constant>V4L2_TUNER_SDR</constant> and <constant>V4L2_TUNER_RF</constant>. -For SDR devices <structfield>audmode</structfield> field must be -initialized to zero. -The term 'tuner' means SDR receiver in this context.</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> - <row> - <entry><constant>V4L2_TUNER_SDR</constant></entry> - <entry>4</entry> - <entry></entry> - </row> - <row> - <entry><constant>V4L2_TUNER_RF</constant></entry> - <entry>5</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 deleted file mode 100644 index 5ded7d35e27b..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-log-status.xml +++ /dev/null @@ -1,41 +0,0 @@ -<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 deleted file mode 100644 index 250a7de1877f..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-overlay.xml +++ /dev/null @@ -1,74 +0,0 @@ -<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 deleted file mode 100644 index 7bde698760e4..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml +++ /dev/null @@ -1,88 +0,0 @@ -<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> - - <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 deleted file mode 100644 index 8b98a0e421fc..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-qbuf.xml +++ /dev/null @@ -1,202 +0,0 @@ -<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> - <varlistentry> - <term><errorcode>EPIPE</errorcode></term> - <listitem> - <para><constant>VIDIOC_DQBUF</constant> returns this on an empty -capture queue for mem2mem codecs if a buffer with the -<constant>V4L2_BUF_FLAG_LAST</constant> was already dequeued and no new buffers -are expected to become available. - </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 deleted file mode 100644 index d41bf47ee5a2..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-query-dv-timings.xml +++ /dev/null @@ -1,115 +0,0 @@ -<refentry id="vidioc-query-dv-timings"> - <refmeta> - <refentrytitle>ioctl VIDIOC_QUERY_DV_TIMINGS</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>VIDIOC_QUERY_DV_TIMINGS</refname> - <refname>VIDIOC_SUBDEV_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, VIDIOC_SUBDEV_QUERY_DV_TIMINGS</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 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.</para> - -<para>Please note that drivers shall <emphasis>not</emphasis> switch timings automatically -if new timings are detected. Instead, drivers should send the -<constant>V4L2_EVENT_SOURCE_CHANGE</constant> event (if they support this) and expect -that userspace will take action by calling <constant>VIDIOC_QUERY_DV_TIMINGS</constant>. -The reason is that new timings usually mean different buffer sizes as well, and you -cannot change buffer sizes on the fly. In general, applications that receive the -Source Change event will have to call <constant>VIDIOC_QUERY_DV_TIMINGS</constant>, -and if the detected timings are valid they will have to stop streaming, set the new -timings, allocate new buffers and start streaming again.</para> - -<para>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 deleted file mode 100644 index 50bfcb5e8508..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-querybuf.xml +++ /dev/null @@ -1,106 +0,0 @@ -<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> and <structfield>reserved2 </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 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 deleted file mode 100644 index cd82148dedd7..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-querycap.xml +++ /dev/null @@ -1,350 +0,0 @@ -<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 with kernel 3.1, the version reported is provided by the -V4L2 subsystem following the kernel numbering scheme. However, it -may not always return the same version as the kernel if, for example, -a 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_EXT_PIX_FORMAT</constant></entry> - <entry>0x00200000</entry> - <entry>The device supports the &v4l2-pix-format; extended -fields.</entry> - </row> - <row> - <entry><constant>V4L2_CAP_SDR_OUTPUT</constant></entry> - <entry>0x00400000</entry> - <entry>The device supports the -<link linkend="sdr">SDR Output</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 deleted file mode 100644 index 55b7582cf314..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-queryctrl.xml +++ /dev/null @@ -1,661 +0,0 @@ -<refentry id="vidioc-queryctrl"> - <refmeta> - <refentrytitle>ioctl VIDIOC_QUERYCTRL, VIDIOC_QUERY_EXT_CTRL, VIDIOC_QUERYMENU</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>VIDIOC_QUERYCTRL</refname> - <refname>VIDIOC_QUERY_EXT_CTRL</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_query_ext_ctrl *<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_QUERY_EXT_CTRL, 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_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 non-compound control, or <errorcode>EINVAL</errorcode> -if there is none. In addition, the <constant>V4L2_CTRL_FLAG_NEXT_COMPOUND</constant> -flag can be specified to enumerate all compound controls (i.e. controls -with type ≥ <constant>V4L2_CTRL_COMPOUND_TYPES</constant> and/or array -control, in other words controls that contain more than one value). -Specify both <constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant> and -<constant>V4L2_CTRL_FLAG_NEXT_COMPOUND</constant> in order to enumerate -all controls, compound or not. Drivers which do not support these flags yet -always return <errorcode>EINVAL</errorcode>.</para> - - <para>The <constant>VIDIOC_QUERY_EXT_CTRL</constant> ioctl was -introduced in order to better support controls that can use compound -types, and to expose additional control information that cannot be -returned in &v4l2-queryctrl; since that structure is full.</para> - - <para><constant>VIDIOC_QUERY_EXT_CTRL</constant> is used in the -same way as <constant>VIDIOC_QUERYCTRL</constant>, except that the -<structfield>reserved</structfield> array must be zeroed as well.</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 the control. See &v4l2-ctrl-type; how the minimum value is to -be used for each possible control type. Note that this a signed 32-bit value.</entry> - </row> - <row> - <entry>__s32</entry> - <entry><structfield>maximum</structfield></entry> - <entry>Maximum value, inclusive. This field gives an upper -bound for the control. See &v4l2-ctrl-type; how the maximum value is to -be used for each possible control type. Note that this a signed 32-bit value.</entry> - </row> - <row> - <entry>__s32</entry> - <entry><structfield>step</structfield></entry> - <entry><para>This field gives a step size for the control. -See &v4l2-ctrl-type; how the step value is to be used for each possible -control type. Note that this an unsigned 32-bit value. -</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>, <constant>_BITMASK</constant>, -<constant>_MENU</constant> or <constant>_INTEGER_MENU</constant> control. -Not valid for other types of controls. -Note that drivers reset controls to their default value only when the -driver is first loaded, never afterwards.</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-query-ext-ctrl"> - <title>struct <structname>v4l2_query_ext_ctrl</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 <constant>V4L2_CTRL_FLAG_NEXT_CTRL</constant> the driver clears the -flag and returns the first non-compound control with a higher ID. When the -ID is ORed with <constant>V4L2_CTRL_FLAG_NEXT_COMPOUND</constant> the driver -clears the flag and returns the first compound control with a higher ID. -Set both to get the first control (compound or not) with a higher ID.</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>char</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>__s64</entry> - <entry><structfield>minimum</structfield></entry> - <entry>Minimum value, inclusive. This field gives a lower -bound for the control. See &v4l2-ctrl-type; how the minimum value is to -be used for each possible control type. Note that this a signed 64-bit value.</entry> - </row> - <row> - <entry>__s64</entry> - <entry><structfield>maximum</structfield></entry> - <entry>Maximum value, inclusive. This field gives an upper -bound for the control. See &v4l2-ctrl-type; how the maximum value is to -be used for each possible control type. Note that this a signed 64-bit value.</entry> - </row> - <row> - <entry>__u64</entry> - <entry><structfield>step</structfield></entry> - <entry><para>This field gives a step size for the control. -See &v4l2-ctrl-type; how the step value is to be used for each possible -control type. Note that this an unsigned 64-bit value. -</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></entry> - </row> - <row> - <entry>__s64</entry> - <entry><structfield>default_value</structfield></entry> - <entry>The default value of a -<constant>V4L2_CTRL_TYPE_INTEGER</constant>, <constant>_INTEGER64</constant>, -<constant>_BOOLEAN</constant>, <constant>_BITMASK</constant>, -<constant>_MENU</constant>, <constant>_INTEGER_MENU</constant>, -<constant>_U8</constant> or <constant>_U16</constant> control. -Not valid for other types of controls. -Note that drivers reset controls to their default value only when the -driver is first loaded, never afterwards. -</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>elem_size</structfield></entry> - <entry>The size in bytes of a single element of the array. -Given a char pointer <constant>p</constant> to a 3-dimensional array you can find the -position of cell <constant>(z, y, x)</constant> as follows: -<constant>p + ((z * dims[1] + y) * dims[0] + x) * elem_size</constant>. <structfield>elem_size</structfield> -is always valid, also when the control isn't an array. For string controls -<structfield>elem_size</structfield> is equal to <structfield>maximum + 1</structfield>. -</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>elems</structfield></entry> - <entry>The number of elements in the N-dimensional array. If this control -is not an array, then <structfield>elems</structfield> is 1. The <structfield>elems</structfield> -field can never be 0.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>nr_of_dims</structfield></entry> - <entry>The number of dimension in the N-dimensional array. If this control -is not an array, then this field is 0.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>dims[V4L2_CTRL_MAX_DIMS]</structfield></entry> - <entry>The size of each dimension. The first <structfield>nr_of_dims</structfield> -elements of this array must be non-zero, all remaining elements must be zero.</entry> - </row> - <row> - <entry>__u32</entry> - <entry><structfield>reserved</structfield>[32]</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-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.</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>any</entry> - <entry>any</entry> - <entry>any</entry> - <entry>A 64-bit integer valued control. Minimum, maximum -and step size cannot be queried using <constant>VIDIOC_QUERYCTRL</constant>. -Only <constant>VIDIOC_QUERY_EXT_CTRL</constant> can retrieve the 64-bit -min/max/step values, they should be interpreted as n/a when using -<constant>VIDIOC_QUERYCTRL</constant>.</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> - <row> - <entry><constant>V4L2_CTRL_TYPE_U8</constant></entry> - <entry>any</entry> - <entry>any</entry> - <entry>any</entry> - <entry>An unsigned 8-bit valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. -</entry> - </row> - <row> - <entry><constant>V4L2_CTRL_TYPE_U16</constant></entry> - <entry>any</entry> - <entry>any</entry> - <entry>any</entry> - <entry>An unsigned 16-bit valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. -</entry> - </row> - <row> - <entry><constant>V4L2_CTRL_TYPE_U32</constant></entry> - <entry>any</entry> - <entry>any</entry> - <entry>any</entry> - <entry>An unsigned 32-bit valued control ranging from minimum to -maximum inclusive. The step value indicates the increment between -values. -</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 and no <constant>V4L2_EVENT_CTRL_CH_VALUE</constant> -will be sent, unless the <constant>V4L2_CTRL_FLAG_EXECUTE_ON_WRITE</constant> flag -(see below) is also set. Otherwise the new value will just be ignored.</entry> - </row> - <row> - <entry><constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant></entry> - <entry>0x0100</entry> - <entry>This control has a pointer type, so its value has to be accessed -using one of the pointer fields of &v4l2-ext-control;. This flag is set for controls -that are an array, string, or have a compound type. In all cases you have to set a -pointer to memory containing the payload of the control.</entry> - </row> - <row> - <entry><constant>V4L2_CTRL_FLAG_EXECUTE_ON_WRITE</constant></entry> - <entry>0x0200</entry> - <entry>The value provided to the control will be propagated to the driver -even if it remains constant. This is required when the control represents an action -on the hardware. For example: clearing an error flag or triggering the flash. All the -controls of the type <constant>V4L2_CTRL_TYPE_BUTTON</constant> have this flag set.</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 deleted file mode 100644 index 3ceae35fab03..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-querystd.xml +++ /dev/null @@ -1,85 +0,0 @@ -<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> - -<para>Please note that drivers shall <emphasis>not</emphasis> switch the video standard -automatically if a new video standard is detected. Instead, drivers should send the -<constant>V4L2_EVENT_SOURCE_CHANGE</constant> event (if they support this) and expect -that userspace will take action by calling <constant>VIDIOC_QUERYSTD</constant>. -The reason is that a new video standard can mean different buffer sizes as well, and you -cannot change buffer sizes on the fly. In general, applications that receive the -Source Change event will have to call <constant>VIDIOC_QUERYSTD</constant>, -and if the detected video standard is valid they will have to stop streaming, set the new -standard, allocate new buffers and start streaming again.</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 deleted file mode 100644 index 6f529e100ea4..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-reqbufs.xml +++ /dev/null @@ -1,137 +0,0 @@ -<refentry id="vidioc-reqbufs"> - <refmeta> - <refentrytitle>ioctl VIDIOC_REQBUFS</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>VIDIOC_REQBUFS</refname> - <refpurpose>Initiate Memory Mapping, 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_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. 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 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 deleted file mode 100644 index a5fc4c4880f3..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-s-hw-freq-seek.xml +++ /dev/null @@ -1,188 +0,0 @@ -<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 deleted file mode 100644 index 89fd7ce964f9..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-streamon.xml +++ /dev/null @@ -1,136 +0,0 @@ -<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> - <varlistentry> - <term><errorcode>ENOLINK</errorcode></term> - <listitem> - <para>The driver implements Media Controller interface and - the pipeline link 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 deleted file mode 100644 index 9d0251a27e5f..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-interval.xml +++ /dev/null @@ -1,151 +0,0 @@ -<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> - - <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>which</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>which</structfield></entry> - <entry>Frame intervals to be enumerated, from &v4l2-subdev-format-whence;.</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>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 deleted file mode 100644 index 9b91b8332ba9..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-frame-size.xml +++ /dev/null @@ -1,153 +0,0 @@ -<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> - - <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>which</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>which</structfield></entry> - <entry>Frame sizes to be enumerated, from &v4l2-subdev-format-whence;.</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>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 deleted file mode 100644 index c67256ada87a..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-enum-mbus-code.xml +++ /dev/null @@ -1,118 +0,0 @@ -<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> - - <para>To enumerate media bus formats available at a given sub-device pad - applications initialize the <structfield>pad</structfield>, <structfield>which</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>which</structfield></entry> - <entry>Media bus format codes to be enumerated, from &v4l2-subdev-format-whence;.</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>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 deleted file mode 100644 index 4cddd788c589..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-crop.xml +++ /dev/null @@ -1,158 +0,0 @@ -<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 deleted file mode 100644 index 781089cba453..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-fmt.xml +++ /dev/null @@ -1,177 +0,0 @@ -<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> - - <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 deleted file mode 100644 index 848ec789ddaa..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-frame-interval.xml +++ /dev/null @@ -1,135 +0,0 @@ -<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> - - <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 deleted file mode 100644 index 8346b2e4a703..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml +++ /dev/null @@ -1,159 +0,0 @@ -<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> - - <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>r</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 deleted file mode 100644 index 5fd0ee78f880..000000000000 --- a/Documentation/DocBook/media/v4l/vidioc-subscribe-event.xml +++ /dev/null @@ -1,130 +0,0 @@ -<refentry id="vidioc-subscribe-event"> - <refmeta> - <refentrytitle>ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT</refentrytitle> - &manvol; - </refmeta> - - <refnamediv> - <refname>VIDIOC_SUBSCRIBE_EVENT</refname> - <refname>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, see <xref linkend="event-type" />. Note that -<constant>V4L2_EVENT_ALL</constant> can be used with VIDIOC_UNSUBSCRIBE_EVENT -for unsubscribing all events at once.</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 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> diff --git a/Documentation/DocBook/media/vbi_525.gif.b64 b/Documentation/DocBook/media/vbi_525.gif.b64 deleted file mode 100644 index d5dcf06f2aef..000000000000 --- a/Documentation/DocBook/media/vbi_525.gif.b64 +++ /dev/null @@ -1,84 +0,0 @@ -R0lGODlhKgPIAIAAAAAAAP///yH5BAEAAAEALAAAAAAqA8gAAAL+jI+py+0Po5y02ouz3rz7D4bi -SJbmiabqWgJs475LLCt0fdy4oeN9/QPuEEFZkXVcJZXDXNP5pC0TgGrMSrRMidhA1/uNbB9j2CZ8 -Kc+qHDXDTT2jK3BuPau13vFpdmc/p6Uh5SeYoXMHyFNomEeYiNEVKCFFx8Wz2Eh56YWp2bfnGXk1 -OEhaKnem2rYa6vp3KIqaBhULmsk4Ufc1KTbq4rfbhxkcOQx22limZ4P8STYH3PsGu8pqe439aw36 -eji9qT1rGCpraf5MkQynyJeuG0c73imvLYzuUAwF/P6WTK8vHDdj2Qia8hYL4bF2o/CpmydOXa6I -uqQNPFepny/+d+cM0qsH8qNGCI8M3gvG7KG8iSJJVoNIp1w5h/C+gSPjgWE9hR0Lqmzp0RFPjLV+ -hoRki2XNPJyCVmy2U6KnHm6WnboRcOPFkS59xqQpEKZRpkDHfi1rdqlXgTMVKVVL7h/cnmi1rtxq -t27Yn1n5xrySUi81iYAlvR2MN23Fm/nkyHzp9G9iSof3Ps1pE3PmyV2dhaSL1Jiee3/ZjI5Mkhlj -xDPXGnkClgns1pxV0K6d4rbYF7pRv44CW7Dtojt6f/YxO7hxrrmVJ3/eZDnd4tCjVw+OPbv27dy7 -e/8OPrz48eTLmz+PPr369ezbu38PP778+fTr27+PP7/+/fz++/v/D2CAAg5IYIEGHohgggouSNFv -1l2HHIRCACehgw9eOIR0001I4YVq8MJIVZItUpJiG564GG75VJaXb5aVthtljwnV1mauyXijVqtB -FVRoK7Foxi0kNphaYdhYNRUxQMZDWZKd9IXTQTmmFluUDQln5TcqBrnlYEOhaGJXNZrUpR24sLPN -kC6uaBGWMywERpWISeUZacIE5iZH8OApJ3FrtvhnY5AdR1iZVOw4p1BTZhljlGNG1aijfgIKl4+f -kNZjoIL2ySOacX4kYlyyfDgooWBSWmikOH15mU5ksfqiqUVqNsySXN7FqZ5jWdoTr7sSqaOtTH6Y -EajMNZX+kbC53qopDDMuymhprgLbGaTUbgrtm8smCqOqQRYbZrV58vijtzZgNW2TTHZEag7rHFuU -Pp4aSq6sc9EJa7jinpVuq/Ruy+xSj9KibL0YyRXrXr7WlC+242qrDMJsEYYSVvAiUzGJwg7c7BqI -GjyiuQ5f7PG/7j57VqkpqryyyJ0WDDBxC29ymr3+YFEzyRpLE5qG91qYYYVAR4hh0B0WTbTRR1Mn -NBKTDs0h0lErTTXTSyddNdZabw311ET7nLDTTct2tddmn82bc2V3zbbYazMId9xyz0133XbfjXfe -eu/Nd99+/w144IIPTnjhhh+OeOKKczcR2CYvDnnkkgf+XoTF2eUCs9uTb85554MrVUjmJGDuuMue -n4566gKyxM+T2L37cNqqz0577QG2/ikpVxEie7LflW578MIPL1vroVdifOy3outkscD/THz00k+v -ne46ApQT70o2ZWz1RT5Pffji2w4YWcqLkrzvMhNT/Wjuvy/6+PLPL/w/854vr+t58gP+vufySb8A -CnB8phEBmo7nhDHwz3vQGKADH0jAT4UgVGZQILjeBsEManB6GqKgP+h0vtFtcIQk5KAJpqAa/znL -Xc4CXv9KCMP2fMyA8fvDDCdYwzbg7IQbwZ0IqeHCGArRbj4UwgvxgDJSHXEfIUQVEpuIqiLycIhU -jJv+FNO2RCeJQ4kPuuIHUMi+Kb4piFUso4K8yIQsYm8cIlKj9VrQQyiqUH9mrOPm0DgcN8YsXoLQ -Ix1HAMY/ArKCdiyk5PDYHD+6qo1dlOPItIXIG0XSkJT02yR5qEg2EqyRHYyjzyrnyEqK8oyhTEgj -7bFJo13SI2EwzCdDhDP4yXKWtKxYLWWJsVu+L5e6rFkv4bezX9pSmDd0XzdgZkwa7SJnFDMNMX35 -TFdGM5jE5GU1o4kn1WDzmXbg2TaFaSZrgvNks+ymOL9Jy3DesGUiSd5wmEhGt5SiHUipp+naCZL7 -6ZOV+WyixMJhT1MKlJ+CFCP2nmexf9plCZZbJWT+3Cm7MJIxSfGcp0WTglGC9CtL+9RERz3aT3pm -FFeiuShBHcqNN75ToqjkaBhXqr8XJnSPIC0oHP2JU5FqdKQ2g5jyLNerfgo1qDolKTlMmsqTlrJa -Km1OAmOGCKa+1KkstRBEUdDQpUpqoEk1KlF2ei2fftQoYyVrSFERUK9aQp4tRakmbXrTqtbUpXD9 -oVw1d9UTZLWiXO0jWnn61Y7xca5mJWxhifpXsKr1IWxV6kQPitc1GnZOTcVqFhRq0Lxmdqp6palb -L5vYxQL0nkA9rGnVgql9FvWoiu2qX9uqVWxVtrNP/em6lsdZ2t6VbE9ap1B9y9qS9jWwwS2uzvD+ -OdmFDjWoIF0tcZ+7VqTWFLjMpS5Ri6krsaoJpt6M2hFLK7bGuha6DAPsqSi7XNSmV73NDa1xVSLe -1xLUqlaLbViWCF7vJu27ns2pe8k72rCSq6z3XW+B22ve8rZWvuM9LW/xm13LPo2q9mUufScU3+gm -OMCiDRtukytVEIcYsRuO44I1LNz5RrTCytXvfo/G3wnTNsOM/S98S+zED1vYwS0WsWxxGkLMbjXF -DWbvhV185CS/GMm9ky6KOywmHM/xxz7WMY97bFbn3vjENR7ulSVM05QumcljXnGMabwnGysYylO2 -spG/TOUqo1fLa35vl4ksZ7uyeMRmrq8akav+5OI5+c5sFlRaezpgA/P5zXDGLZ05bOc0e5nRD/Zz -mfscHWYiQdNKAK6n4wfAxSTi09wk5zipqctunvqct1T1L8P5i1GLLtTsdMRBrBvrHNoE18fEL6dH -CexgC3vYxC62sY+N7GQre9nMbraznw3taEt72tSutrWvje1sa3vb3O62t78N7nCLe9zkLre5z43u -dKt73exut7vfDe94y3ve9K63ve9t7SBkNdH47re/9Qq6CAP63wQvuGZ2mYneFoPWBm+4w8VUWiMB -5IIPr7jFX2a/YCZ8zxfvuLnf1VB5QcnjJDd4YTKucN3xuuQsb7nLXw7zmMt85jSvuc1vjvP+nOt8 -5zzvuc9/DvSgC33oRC+60Y+O9KQrfelMb7rTnw71qEt96lSvutWvjvWsa33rXO+6178O9rCLfexk -L7vZz472scG0vllD24rZzrW28bbtcl873N2uObUfqkQzJFaJPAO9Fm53W34/mcbO+7/t9j1ksfzY -MiUO+DaXDPCLT9VpKr8yZnpQDM50JcmkyTOdNT5Enx8mxhAPaxApq/CULxjFV9S8kT9yhWts0zL4 -JVnX44uigl1481Cf8KsI3Kf+Er6biMXS18/+gy2JJfBzFw/Mc35U0NcXJxAh+4A1ENC69xdoER38 -34Mf+sZvF/5OP3yQ+QKAt8+14Z9/2dH+H3dnh4d/Als5f1MzMcdsCoj5SfwwqXVb/Mca6qd9WBaA -R/J+1qddDHeAUZZy85c+mOcp/ndc5QMqGyMawrd5ACVx/8dYKrcsFQg7DAhEu6NAG7g9q3cU3RN4 -zBJV9jdwsXM/GQiCRuZWNWh7Msh3QmaAhoYSIyhja1ALbQJ/obM+L0iExvJry8d8LpiAuPdSN7h9 -3VOD3kdHW1AVsOOAxEclTySEIIQOHViF7XSFZQgUVFiGj8CCYpiGR+g8Axgt24c8Q9gpvTJbHjZg -IjguFJQVZChbH2h/2rODJjgqxieDGTiFevgyFKWGAYOBj8gtVPF564IpLRKJgziAgAj+ieFniNxX -fUo4LPcXhn2YEqMnif+TMYNHgKoWeTTYTGoifZzXeAsoivpXJ2f4PaHHik7oMZ1ni4yIi8fDib+I -gen3g6pohE34gMa4cbO4ixJkh8m4d0HYi5Lniq1XjMqojcqgd2AmNXVnd3g3juRIYXT3dnGXjuZ4 -jl/zjboVjuvIjvB4d/NoUOiYd+qYj/Z4j+6IQXNXj/IojuAYkAK5j/yoZwV5kAa5kA2Zdg8JkREp -kRNJkRVpkT73ZxwnjASpjwCJkIP0jv3Yke34kSAZjww5kPQ4kiSZkipZkhOkNifpkOWIkjQ5kzZJ -NqyXi9uYeIrXho8TZtTlCjnEMfn+Z07jN3n3hIuC1ZNKeY2JiD6Zs0gC5iWzliav+Inv51vKx3wo -WIrTV3uh2IqC9zjZN5ZL2DBgSZW+iI2GBpTT2IwmtpajqJSGIY232JRbuQ1myZZoKZZZmTt8ySV3 -ggapWEHRAJjU2JaL6YVMKYepMpe/GJlH6ZTI2Jdu6ZRcuZGQBJePqTCTmYRG2XyO6Q52Ui5QuJn7 -sA4amC2XOYeJCWukWVugeX2y+ZeiGZSO0ZrncpdGWYKwOZq2mV94SXwzEyymCULIo4u0h5rt95ZD -uZuuyS2xSJuNeZZ3WJlhBmRQBAhCGVrLmRfGCXF1yTyg2ThkQlZ5eJ3lWYipOZ3+UKmd/uSDrwmf -ciSY76kuacmY+Hk9lWmEwumJ8BmDSBl9/zKgpEmI6CkjGcOM/MmN3QicnRmX0OBpuvmW3GlD4jkr -QEmUFuqfHXokUjkPGtoYDSqd+meiE+qMehmf0ZmQComTHtmScSWTMWqjHPmSMPmPMhpRGemjMYmP -N4mjM0qjMHqjLkmkL5qjIPCjLXqhLqqkSWqSQXqkSFqTLHmlVpqlIrmkF+mlXwqmYSqmY7puiEim -Zzogj4GEaMqmAIIQmtmmcTofbyqhcqp0GSlD1gCndvpvuqYldSU3dOqkfJpun/VFt1md5sFQjOKn -hFpu+dObKVMXUnSMx5AfDBX+agfqqH0qQQtkCrMZf81gqBvnmemBTZtacuCyp98yFbyAD/NJSLiD -p4dKoSuHqu62qJHqlpTYJ5AgcvKBqbfqclroUOUZBynoFP/pHrMqrI8KL2CErB1YQPHBrM06bjwJ -lxsDJCkkqgD3WNZ6Ro16lT5gq0JCnBPGrfs5SerJcaOKm+BaH+4KC5kkZoR2nTTBrixToKCESTwK -r2mqkatySi1lr/uJr7nFpJ6kooMWpf8KsHpErwQraed6sIAKLez6SQHrsHAjr6wQsSpGMzzIqp0U -ZfwKR9W6sfzRsarwsXnWrYDJryurohjbWSibsvohs5MmaBI7se45qQhLq5L+YrIiZLM3ix85i2e/ -oRMHJLJesmfoArVPyWqldnivNrW1hGqvhk5Xi7VcW05ei0u9JrbKNLbS8nioyE1bC7bAtLYIt7Xo -BLfmBLdWW7Vz20vq9E2mFrZ1u2qihrcdRHq19Vj5CoaFVqIMC2kAdq/U57KWqGh0hWBJu2WG67Q6 -y11AO6WEq6O71WjIhbRSBaubG1OVZrH7R7lAhLhyGWmLO4MHtmOUhoDqhWaJO7mru34YorlBC1mV -Frr8RmWf61K9q7uaRaO5K1m26xKzq7qKa7CM+7qu27nadVaWC4GnCxXKS2HG+1CYm7nHG717FVnC -Syuje7mlq0XIK7DUO2T+6Luwvhu97gu7iya7qVu97Fu5khtZ5ju+2ru94uu8v6ux1Oe/BUG8ema8 -A+y9T8Zg9suZCGqZjtu4pfm4wUu/68u8FqzAFwa8H7bBjgZVyAi+vDuo8xvAIVy/F5y++Eu7dZaI -wym/sQvDL6xc2IvBLFy7C6zBJfxECPV9BIZe+ru/CZy96DfEWHm/DDxGFYyZ1luqcfa+EPy8MQy6 -SsyqXLbCPeti5fq74gq62JWtSMTFwavFUgyPFShlKVxkV7y8ienCkPvEEhzBEkzDS4zEBaq+ZXxp -+RtopEs1MQYwCIzAQJzEZ1zFBPq/8evGiOzEWUbFR4zChZzG5bvHkoz+aWRmyZRsw5mMxRl8w51M -sYcMvYrsZqFMwiq8xpp8yptcyavMynw8yXrcyqksy7d7x5D8yA46ymScyzKcyKUcySfsyWpMy5Z2 -yZjsyrGMzOBoxlYcsrXsyMHMum28yKSsyz8cub9cw8Kczc1MzK+szHl8zMX8zXVcuNh8uIT8zJ/c -utUsvVHMyxTszA3MxOWMw8mMx+BcxOIczsY8y9s8zOZsy9DcvOv8zrvcy+zcgI0sz+RsugBdvPic -z/Z8zxmSoqNT0aq4a1JiI92Q0bm2aqeqt3cb0qk20q1W0iYttbR4ax3N0RsNBBdNQ114QjCNQzLd -AjRttDmt0zvN0z1u7dM/DdRBLdRDTdRFbdRHjdRJrdRLzdRN7dRPDdVRLdVTTdVVbdVXjdVfVBkx -+APSnNU5bZaaCsVfPdQnR8TkJwlnTdZAnSwXJIidutZBHbhrqpqnuKpx/a9c3RdvndZ43dO+pCSY -E9gqF8bNWgAAOw== diff --git a/Documentation/DocBook/media/vbi_625.gif.b64 b/Documentation/DocBook/media/vbi_625.gif.b64 deleted file mode 100644 index 831f49a02821..000000000000 --- a/Documentation/DocBook/media/vbi_625.gif.b64 +++ /dev/null @@ -1,90 +0,0 @@ -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 -0Adtyay8rcRcXsY8yW56buKsptPTzwkX0C6Xzx03zy1MzcccngxdcfDcbNE8yyatziSdbSFdzgX9 -yxqdaRxdZIpm0b/+iaY+PcgeJs2UEW3KjKeQGMmPDM2cHNHJbMv1DNKAbMpYLNKJ2kH1I9W5TNWk -nNWwTHJ9M9SKnNDL7Mgq7YpevdTa/NJuUNRPjXNvbWQKt3NwPdc8nSNhjRdtTc9wqtQOjdZ+PclN -jc4TrdBy/dV0bdcjp62SZNYEdtdr3RF6jdKH2s6VLYqN/cuCDdOETdYX2G6f7dmGfdg3F9c7gtex -FdOXvNCWrV6sDZF3KNGqbNT6FNqKDWyiXdqkXdeL/diazdYnDdXsfNmuXWVq7duRDdznPNqJrdvM -vdu8XdG4DWan3bypTdFlTdzmNm4ufdzTbN2FbdvFLN3OvdzkHd7RF93bJf3b393ZKZ3dSY3Z2AzZ -3s3ZAhzd551mNv3Ozw3U5lHGpfPfl3NGA351Rmfgj6XHd7xYUKdZCR51rGE2vVJ1E04eAU45Fl7F -1htMGv5LHN7hXZ3EIS7iI07iJW7iJ47iKa7iK87iLe7iLw7jMS7jM07jNW7jN47jOa7jO87jPe7j -Pw7kQV68E+EQhqrAQs6aZmirzYzkQC4aAmmIygHlTS7kP0G3gRJ8VB7kAGCRbQB8uqflTu6Ci4jl -ehjmPs7laf58XB7Fau6DR56aBQAAOw== diff --git a/Documentation/DocBook/media/vbi_hsync.gif.b64 b/Documentation/DocBook/media/vbi_hsync.gif.b64 deleted file mode 100644 index cdafabed5c11..000000000000 --- a/Documentation/DocBook/media/vbi_hsync.gif.b64 +++ /dev/null @@ -1,43 +0,0 @@ -R0lGODlhBwHJAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O -Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh -ISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0 -NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdH -R0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpa -WltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1t -bW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CA -gIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOT -k5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaam -pqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5 -ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM -zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f -3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy -8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///ywAAAAABwHJAAAI/gD/CRxI -sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bN -mzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVqyQBYN1aVSvXr1C9gh2rVOxCsV4B -mE2b0GxDt2TjtnWo9l9du2rrar2bl+BavQL3ApZLeC5du3j77g2MF/FAtIv1AoZb+Gfey5gza97M -ua/ByJ4XI8b8+PHl0ZkrE6XsuCDr1xD5ip7d2m9pv6IZqxYK+zPC3g/T0mabGLdk4YEH7wYK3PZB -yqyXSw/++3l139OzS4R+Hbtr7eCp/nv/bp18+PMKuZcfj7792fXm47ufz/52fd308zu/X3u/fv3N -+Sfgf/MFaJ98BLpnIH4IJojegv0d6GB7EEI4oXYVdnfhgxoOyOCG4WXIH4jTidggiSV2KOGHKGa3 -oIUtqvaiijEuNyN8NUp344g5EqYef9H1KNePJwYpJFlEehjhkT7iuCKLTMZl4olRgjWlklV+deWT -WWpJ45JgdrnVllCKOeaXMJrZFZpfqmkVmWG6SRWcRsoZFZl12hkWmzxemCdXeAr555lOgjnof4de -tSOVG0KWaFl3GVponH52ZumlmGaq6aaY0pjmhJppmRqQbTaKm6gewgnio2uSOumq/jpO+qmDrE5F -p6AtSZZeSrf2WOtEoZEmm2C/Astnn6CapKtjbClWZki95lhsbLcRtxmlHkVb47TBWcuYcGvxeiyj -fp7kGbOJEZscStrGyK1T7bb4blPxojgvU4Hiulu+vto4Lpck3rvUoljCuq+npZp6cKGz0uovwwmX -u3CRESc7sZINJyhwWbJW7PDFXGZM4MZI1WsvyCF7rDHKZYqMKMuSvmqwS5yOypHJAcP0K8k4z5xr -RTz/C7DPLO2crdDPEr2S0R31rDDNQB/dMbISQ01R0FOT+/TPV0vtqtZVc21s0wjLLONFJG8XNdkQ -y5z2UNy+TW3XbN8Ho9xBxa3z/to3lz0i3nljBPhbfG+UZMoqG5db2+KJ9O7gDDHd99dUstpscsgR -x6CzqC0O0uN70z05xVlHdNpwgvUHGWrFef5RppGHPjawNddue3nB5nYufsKmu/vrhL/3kuRqq1Tr -6pd/G+6HymGLdvC7Dl+46cYD7aywoSleXGOtj5RnnZALP3vx7Bb2J/iyk6++subTZanz2ZJ2te2R -st8+9NaFHx/x1Jff5GFz0Z9/+Dc3c9EnSK4ryfLG1z89GaY6AjwQARvnQLfBr24XpFrizGSk+tlv -aOJbXwULxj3/gTB6DBwhCD2oQLBtkIR66mAEVTe9AqqQhCzMigvNhsIbrnCG/m6ZIAB9+MPqwfCB -IryhDI14QiQ2kIiUyqH3dqhBHtoJfSZs4gu16CYsGpCKYDyinLz4QS5W8YwcjF0WkxbCJxKRjC0M -oxnlmCU46tA19BPiCO04xZjM8IBq/GL63hjIMloNitiS4uv+aMUxRk5/ihQXIhMJSUaiUUzgq6RM -LEmhR5qLk2LsoieVBco5YnKUCiwlG2OIyqyoMoNpPIsm/TjJRMKya698JYZiB7kELq2W6OvlLT8H -TF62MJfM+R3+lnnIAB5zk8zBHOZks7/BqEuXwXwmLS1DzestDnmNud5MsqlDZPKGWMkzT+9CBc33 -5PGd8IynPOfJwkilLp37/gniN8dZyDgOcienCadudnc6anavnT30p/SKokvH9fOO/+RmqxIK0YUi -EosBNVz2tnnRR9KzUxyFYjAzqpHehZSQbdxYEBEqUhcVM0WTbGhNZBor+7xNj8SMaT7TJc1Tgcug -Bf2LNZnlKODp1KYCbR64ujcZ0OBxe5FR3jAfqsSdNiujucMnPnl3uaxiraNI3ep3hro8161uNLbB -G00fNk3abG+aAiXqcKqlGG8Oy6hgLang+HnUjERyiBFV4VpZitKa5rWEgKJjldgpKs5d9KOQjeym -XkrSMdnzpYatpWY3y1l6NXGB3RlsZ9eDzp7ydKmnW1dAlTnaQ94zruEkS2tUnfra1iIUdRvlHueu -iS7N2daic1VncEEz3N/6MbVyNU1TV0tUdL3VuF6aKnQhJdrpWve62M2udrfL3e5697vgDa94x0ve -8lIkIAA7 diff --git a/Documentation/DocBook/media_api.tmpl b/Documentation/DocBook/media_api.tmpl deleted file mode 100644 index a2765d8ad05c..000000000000 --- a/Documentation/DocBook/media_api.tmpl +++ /dev/null @@ -1,121 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ -<!ENTITY % media-entities SYSTEM "./media-entities.tmpl"> %media-entities; -<!ENTITY media-indices SYSTEM "./media-indices.tmpl"> - -<!ENTITY eg "e. g."> -<!ENTITY ie "i. e."> -<!ENTITY fd "File descriptor returned by <link linkend='func-open'><function>open()</function></link>."> -<!ENTITY fe_fd "File descriptor returned by <link linkend='frontend_f_open'><function>open()</function></link>."> -<!ENTITY i2c "I<superscript>2</superscript>C"> -<!ENTITY return-value "<title>Return Value</title><para>On success <returnvalue>0</returnvalue> is returned, on error <returnvalue>-1</returnvalue> and the <varname>errno</varname> variable is set appropriately. The generic error codes are described at the <link linkend='gen-errors'>Generic Error Codes</link> chapter.</para>"> -<!ENTITY return-value-dvb "<para>RETURN VALUE</para><para>On success <returnvalue>0</returnvalue> is returned, on error <returnvalue>-1</returnvalue> and the <varname>errno</varname> variable is set appropriately. The generic error codes are described at the <link linkend='gen-errors'>Generic Error Codes</link> chapter.</para>"> -<!ENTITY manvol "<manvolnum>2</manvolnum>"> - -<!-- Table templates: structs, structs w/union, defines. --> -<!ENTITY cs-str "<colspec colname='c1' colwidth='1*' /><colspec colname='c2' colwidth='1*' /><colspec colname='c3' colwidth='2*' /><spanspec spanname='hspan' namest='c1' nameend='c3' />"> -<!ENTITY cs-ustr "<colspec colname='c1' colwidth='1*' /><colspec colname='c2' colwidth='1*' /><colspec colname='c3' colwidth='1*' /><colspec colname='c4' colwidth='2*' /><spanspec spanname='hspan' namest='c1' nameend='c4' />"> -<!ENTITY cs-def "<colspec colname='c1' colwidth='3*' /><colspec colname='c2' colwidth='1*' /><colspec colname='c3' colwidth='4*' /><spanspec spanname='hspan' namest='c1' nameend='c3' />"> - -<!-- Video for Linux mailing list address. --> -<!ENTITY v4l-ml "<ulink url='https://linuxtv.org/lists.php'>https://linuxtv.org/lists.php</ulink>"> - -<!-- LinuxTV v4l-dvb repository. --> -<!ENTITY v4l-dvb "<ulink url='https://linuxtv.org/repo/'>https://linuxtv.org/repo/</ulink>"> -<!ENTITY dash-ent-8 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> -<!ENTITY dash-ent-10 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> -<!ENTITY dash-ent-12 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> -<!ENTITY dash-ent-14 "<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>"> -<!ENTITY dash-ent-16 "<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>-</entry><entry>-</entry>"> -<!ENTITY dash-ent-20 "<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>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> -<!ENTITY dash-ent-22 "<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>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> -<!ENTITY dash-ent-24 "<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>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> -]> - -<book id="media_api" lang="en"> -<bookinfo> - <title>LINUX MEDIA INFRASTRUCTURE API</title> - - <copyright> - <year>2009-2015</year> - <holder>LinuxTV Developers</holder> - </copyright> - - <legalnotice> - <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. A copy of the license is included in the chapter entitled - "GNU Free Documentation License"</para> - </legalnotice> -</bookinfo> - -<toc></toc> <!-- autogenerated --> - -<preface> - <title>Introduction</title> - - <para>This document covers the Linux Kernel to Userspace API's used by - video and radio streaming devices, including video cameras, - analog and digital TV receiver cards, AM/FM receiver cards, - streaming capture and output devices, codec devices and remote - controllers.</para> - <para>A typical media device hardware is shown at - <xref linkend="typical_media_device" />.</para> - <figure id="typical_media_device"> - <title>Typical Media Device</title> - <mediaobject> - <imageobject> - <imagedata fileref="typical_media_device.svg" format="SVG" /> - </imageobject> - <textobject> - <phrase>Typical Media Device Block Diagram</phrase> - </textobject> - </mediaobject> - </figure> - <para>The media infrastructure API was designed to control such - devices. It is divided into five parts.</para> - <para>The first part covers radio, video capture and output, - cameras, analog TV devices and codecs.</para> - <para>The second part covers the - API used for digital TV and Internet reception via one of the - several digital tv standards. While it is called as DVB API, - in fact it covers several different video standards including - DVB-T/T2, DVB-S/S2, DVB-C, ATSC, ISDB-T, ISDB-S,etc. The complete - list of supported standards can be found at - <xref linkend="fe-delivery-system-t" />.</para> - <para>The third part covers the Remote Controller API.</para> - <para>The fourth part covers the Media Controller API.</para> - <para>The fifth part covers the CEC (Consumer Electronics Control) API.</para> - <para>It should also be noted that a media device may also have audio - components, like mixers, PCM capture, PCM playback, etc, which - are controlled via ALSA API.</para> - <para>For additional information and for the latest development code, - see: <ulink url="https://linuxtv.org">https://linuxtv.org</ulink>.</para> - <para>For discussing improvements, reporting troubles, sending new drivers, etc, please mail to: <ulink url="http://vger.kernel.org/vger-lists.html#linux-media">Linux Media Mailing List (LMML).</ulink>.</para> -</preface> - -<part id="v4l2spec"> -&sub-v4l2; -</part> -<part id="dvbapi"> -&sub-dvbapi; -</part> -<part id="remotes"> -&sub-remote_controllers; -</part> -<part id="media_common"> -&sub-media-controller; -</part> -<part id="cec"> -&sub-cec-api; -</part> - -<chapter id="gen_errors"> -&sub-gen-errors; -</chapter> - -&sub-fdl-appendix; - -</book> diff --git a/Documentation/Makefile.sphinx b/Documentation/Makefile.sphinx index fd565e1f1368..857f1e273418 100644 --- a/Documentation/Makefile.sphinx +++ b/Documentation/Makefile.sphinx @@ -63,11 +63,12 @@ sgmldocs: psdocs: mandocs: installmandocs: -cleanmediadocs: cleandocs: $(Q)rm -rf $(BUILDDIR) +endif # HAVE_SPHINX + dochelp: @echo ' Linux kernel internal documentation in different formats (Sphinx):' @echo ' htmldocs - HTML' @@ -75,5 +76,3 @@ dochelp: @echo ' epubdocs - EPUB' @echo ' xmldocs - XML' @echo ' cleandocs - clean all generated files' - -endif # HAVE_SPHINX diff --git a/Documentation/PCI/MSI-HOWTO.txt b/Documentation/PCI/MSI-HOWTO.txt index 1179850f453c..c55df2911136 100644 --- a/Documentation/PCI/MSI-HOWTO.txt +++ b/Documentation/PCI/MSI-HOWTO.txt @@ -78,422 +78,111 @@ CONFIG_PCI_MSI option. 4.2 Using MSI -Most of the hard work is done for the driver in the PCI layer. It simply -has to request that the PCI layer set up the MSI capability for this +Most of the hard work is done for the driver in the PCI layer. The driver +simply has to request that the PCI layer set up the MSI capability for this device. -4.2.1 pci_enable_msi +To automatically use MSI or MSI-X interrupt vectors, use the following +function: -int pci_enable_msi(struct pci_dev *dev) + int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs, + unsigned int max_vecs, unsigned int flags); -A successful call allocates ONE interrupt to the device, regardless -of how many MSIs the device supports. The device is switched from -pin-based interrupt mode to MSI mode. The dev->irq number is changed -to a new number which represents the message signaled interrupt; -consequently, this function should be called before the driver calls -request_irq(), because an MSI is delivered via a vector that is -different from the vector of a pin-based interrupt. +which allocates up to max_vecs interrupt vectors for a PCI device. It +returns the number of vectors allocated or a negative error. If the device +has a requirements for a minimum number of vectors the driver can pass a +min_vecs argument set to this limit, and the PCI core will return -ENOSPC +if it can't meet the minimum number of vectors. -4.2.2 pci_enable_msi_range +The flags argument should normally be set to 0, but can be used to pass the +PCI_IRQ_NOMSI and PCI_IRQ_NOMSIX flag in case a device claims to support +MSI or MSI-X, but the support is broken, or to pass PCI_IRQ_NOLEGACY in +case the device does not support legacy interrupt lines. -int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec) +By default this function will spread the interrupts around the available +CPUs, but this feature can be disabled by passing the PCI_IRQ_NOAFFINITY +flag. -This function allows a device driver to request any number of MSI -interrupts within specified range from 'minvec' to 'maxvec'. +To get the Linux IRQ numbers passed to request_irq() and free_irq() and the +vectors, use the following function: -If this function returns a positive number it indicates the number of -MSI interrupts that have been successfully allocated. In this case -the device is switched from pin-based interrupt mode to MSI mode and -updates dev->irq to be the lowest of the new interrupts assigned to it. -The other interrupts assigned to the device are in the range dev->irq -to dev->irq + returned value - 1. Device driver can use the returned -number of successfully allocated MSI interrupts to further allocate -and initialize device resources. + int pci_irq_vector(struct pci_dev *dev, unsigned int nr); -If this function returns a negative number, it indicates an error and -the driver should not attempt to request any more MSI interrupts for -this device. +Any allocated resources should be freed before removing the device using +the following function: -This function should be called before the driver calls request_irq(), -because MSI interrupts are delivered via vectors that are different -from the vector of a pin-based interrupt. + void pci_free_irq_vectors(struct pci_dev *dev); -It is ideal if drivers can cope with a variable number of MSI interrupts; -there are many reasons why the platform may not be able to provide the -exact number that a driver asks for. +If a device supports both MSI-X and MSI capabilities, this API will use the +MSI-X facilities in preference to the MSI facilities. MSI-X supports any +number of interrupts between 1 and 2048. In contrast, MSI is restricted to +a maximum of 32 interrupts (and must be a power of two). In addition, the +MSI interrupt vectors must be allocated consecutively, so the system might +not be able to allocate as many vectors for MSI as it could for MSI-X. On +some platforms, MSI interrupts must all be targeted at the same set of CPUs +whereas MSI-X interrupts can all be targeted at different CPUs. -There could be devices that can not operate with just any number of MSI -interrupts within a range. See chapter 4.3.1.3 to get the idea how to -handle such devices for MSI-X - the same logic applies to MSI. +If a device supports neither MSI-X or MSI it will fall back to a single +legacy IRQ vector. -4.2.1.1 Maximum possible number of MSI interrupts +The typical usage of MSI or MSI-X interrupts is to allocate as many vectors +as possible, likely up to the limit supported by the device. If nvec is +larger than the number supported by the device it will automatically be +capped to the supported limit, so there is no need to query the number of +vectors supported beforehand: -The typical usage of MSI interrupts is to allocate as many vectors as -possible, likely up to the limit returned by pci_msi_vec_count() function: - -static int foo_driver_enable_msi(struct pci_dev *pdev, int nvec) -{ - return pci_enable_msi_range(pdev, 1, nvec); -} - -Note the value of 'minvec' parameter is 1. As 'minvec' is inclusive, -the value of 0 would be meaningless and could result in error. - -Some devices have a minimal limit on number of MSI interrupts. -In this case the function could look like this: - -static int foo_driver_enable_msi(struct pci_dev *pdev, int nvec) -{ - return pci_enable_msi_range(pdev, FOO_DRIVER_MINIMUM_NVEC, nvec); -} - -4.2.1.2 Exact number of MSI interrupts + nvec = pci_alloc_irq_vectors(pdev, 1, nvec, 0); + if (nvec < 0) + goto out_err; If a driver is unable or unwilling to deal with a variable number of MSI -interrupts it could request a particular number of interrupts by passing -that number to pci_enable_msi_range() function as both 'minvec' and 'maxvec' -parameters: - -static int foo_driver_enable_msi(struct pci_dev *pdev, int nvec) -{ - return pci_enable_msi_range(pdev, nvec, nvec); -} - -Note, unlike pci_enable_msi_exact() function, which could be also used to -enable a particular number of MSI-X interrupts, pci_enable_msi_range() -returns either a negative errno or 'nvec' (not negative errno or 0 - as -pci_enable_msi_exact() does). - -4.2.1.3 Single MSI mode - -The most notorious example of the request type described above is -enabling the single MSI mode for a device. It could be done by passing -two 1s as 'minvec' and 'maxvec': - -static int foo_driver_enable_single_msi(struct pci_dev *pdev) -{ - return pci_enable_msi_range(pdev, 1, 1); -} - -Note, unlike pci_enable_msi() function, which could be also used to -enable the single MSI mode, pci_enable_msi_range() returns either a -negative errno or 1 (not negative errno or 0 - as pci_enable_msi() -does). - -4.2.3 pci_enable_msi_exact - -int pci_enable_msi_exact(struct pci_dev *dev, int nvec) - -This variation on pci_enable_msi_range() call allows a device driver to -request exactly 'nvec' MSIs. - -If this function returns a negative number, it indicates an error and -the driver should not attempt to request any more MSI interrupts for -this device. - -By contrast with pci_enable_msi_range() function, pci_enable_msi_exact() -returns zero in case of success, which indicates MSI interrupts have been -successfully allocated. - -4.2.4 pci_disable_msi - -void pci_disable_msi(struct pci_dev *dev) - -This function should be used to undo the effect of pci_enable_msi_range(). -Calling it restores dev->irq to the pin-based interrupt number and frees -the previously allocated MSIs. The interrupts may subsequently be assigned -to another device, so drivers should not cache the value of dev->irq. - -Before calling this function, a device driver must always call free_irq() -on any interrupt for which it previously called request_irq(). -Failure to do so results in a BUG_ON(), leaving the device with -MSI enabled and thus leaking its vector. - -4.2.4 pci_msi_vec_count - -int pci_msi_vec_count(struct pci_dev *dev) - -This function could be used to retrieve the number of MSI vectors the -device requested (via the Multiple Message Capable register). The MSI -specification only allows the returned value to be a power of two, -up to a maximum of 2^5 (32). - -If this function returns a negative number, it indicates the device is -not capable of sending MSIs. - -If this function returns a positive number, it indicates the maximum -number of MSI interrupt vectors that could be allocated. - -4.3 Using MSI-X - -The MSI-X capability is much more flexible than the MSI capability. -It supports up to 2048 interrupts, each of which can be controlled -independently. To support this flexibility, drivers must use an array of -`struct msix_entry': - -struct msix_entry { - u16 vector; /* kernel uses to write alloc vector */ - u16 entry; /* driver uses to specify entry */ -}; - -This allows for the device to use these interrupts in a sparse fashion; -for example, it could use interrupts 3 and 1027 and yet allocate only a -two-element array. The driver is expected to fill in the 'entry' value -in each element of the array to indicate for which entries the kernel -should assign interrupts; it is invalid to fill in two entries with the -same number. - -4.3.1 pci_enable_msix_range - -int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, - int minvec, int maxvec) - -Calling this function asks the PCI subsystem to allocate any number of -MSI-X interrupts within specified range from 'minvec' to 'maxvec'. -The 'entries' argument is a pointer to an array of msix_entry structs -which should be at least 'maxvec' entries in size. - -On success, the device is switched into MSI-X mode and the function -returns the number of MSI-X interrupts that have been successfully -allocated. In this case the 'vector' member in entries numbered from -0 to the returned value - 1 is populated with the interrupt number; -the driver should then call request_irq() for each 'vector' that it -decides to use. The device driver is responsible for keeping track of the -interrupts assigned to the MSI-X vectors so it can free them again later. -Device driver can use the returned number of successfully allocated MSI-X -interrupts to further allocate and initialize device resources. - -If this function returns a negative number, it indicates an error and -the driver should not attempt to allocate any more MSI-X interrupts for -this device. - -This function, in contrast with pci_enable_msi_range(), does not adjust -dev->irq. The device will not generate interrupts for this interrupt -number once MSI-X is enabled. - -Device drivers should normally call this function once per device -during the initialization phase. - -It is ideal if drivers can cope with a variable number of MSI-X interrupts; -there are many reasons why the platform may not be able to provide the -exact number that a driver asks for. - -There could be devices that can not operate with just any number of MSI-X -interrupts within a range. E.g., an network adapter might need let's say -four vectors per each queue it provides. Therefore, a number of MSI-X -interrupts allocated should be a multiple of four. In this case interface -pci_enable_msix_range() can not be used alone to request MSI-X interrupts -(since it can allocate any number within the range, without any notion of -the multiple of four) and the device driver should master a custom logic -to request the required number of MSI-X interrupts. - -4.3.1.1 Maximum possible number of MSI-X interrupts - -The typical usage of MSI-X interrupts is to allocate as many vectors as -possible, likely up to the limit returned by pci_msix_vec_count() function: - -static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) -{ - return pci_enable_msix_range(adapter->pdev, adapter->msix_entries, - 1, nvec); -} - -Note the value of 'minvec' parameter is 1. As 'minvec' is inclusive, -the value of 0 would be meaningless and could result in error. - -Some devices have a minimal limit on number of MSI-X interrupts. -In this case the function could look like this: - -static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) -{ - return pci_enable_msix_range(adapter->pdev, adapter->msix_entries, - FOO_DRIVER_MINIMUM_NVEC, nvec); -} - -4.3.1.2 Exact number of MSI-X interrupts - -If a driver is unable or unwilling to deal with a variable number of MSI-X -interrupts it could request a particular number of interrupts by passing -that number to pci_enable_msix_range() function as both 'minvec' and 'maxvec' -parameters: - -static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) -{ - return pci_enable_msix_range(adapter->pdev, adapter->msix_entries, - nvec, nvec); -} - -Note, unlike pci_enable_msix_exact() function, which could be also used to -enable a particular number of MSI-X interrupts, pci_enable_msix_range() -returns either a negative errno or 'nvec' (not negative errno or 0 - as -pci_enable_msix_exact() does). - -4.3.1.3 Specific requirements to the number of MSI-X interrupts - -As noted above, there could be devices that can not operate with just any -number of MSI-X interrupts within a range. E.g., let's assume a device that -is only capable sending the number of MSI-X interrupts which is a power of -two. A routine that enables MSI-X mode for such device might look like this: - -/* - * Assume 'minvec' and 'maxvec' are non-zero - */ -static int foo_driver_enable_msix(struct foo_adapter *adapter, - int minvec, int maxvec) -{ - int rc; - - minvec = roundup_pow_of_two(minvec); - maxvec = rounddown_pow_of_two(maxvec); - - if (minvec > maxvec) - return -ERANGE; - -retry: - rc = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, - maxvec, maxvec); - /* - * -ENOSPC is the only error code allowed to be analyzed - */ - if (rc == -ENOSPC) { - if (maxvec == 1) - return -ENOSPC; - - maxvec /= 2; - - if (minvec > maxvec) - return -ENOSPC; - - goto retry; - } - - return rc; -} - -Note how pci_enable_msix_range() return value is analyzed for a fallback - -any error code other than -ENOSPC indicates a fatal error and should not -be retried. - -4.3.2 pci_enable_msix_exact - -int pci_enable_msix_exact(struct pci_dev *dev, - struct msix_entry *entries, int nvec) - -This variation on pci_enable_msix_range() call allows a device driver to -request exactly 'nvec' MSI-Xs. - -If this function returns a negative number, it indicates an error and -the driver should not attempt to allocate any more MSI-X interrupts for -this device. - -By contrast with pci_enable_msix_range() function, pci_enable_msix_exact() -returns zero in case of success, which indicates MSI-X interrupts have been -successfully allocated. - -Another version of a routine that enables MSI-X mode for a device with -specific requirements described in chapter 4.3.1.3 might look like this: - -/* - * Assume 'minvec' and 'maxvec' are non-zero - */ -static int foo_driver_enable_msix(struct foo_adapter *adapter, - int minvec, int maxvec) -{ - int rc; - - minvec = roundup_pow_of_two(minvec); - maxvec = rounddown_pow_of_two(maxvec); - - if (minvec > maxvec) - return -ERANGE; - -retry: - rc = pci_enable_msix_exact(adapter->pdev, - adapter->msix_entries, maxvec); - - /* - * -ENOSPC is the only error code allowed to be analyzed - */ - if (rc == -ENOSPC) { - if (maxvec == 1) - return -ENOSPC; - - maxvec /= 2; - - if (minvec > maxvec) - return -ENOSPC; - - goto retry; - } else if (rc < 0) { - return rc; - } - - return maxvec; -} - -4.3.3 pci_disable_msix - -void pci_disable_msix(struct pci_dev *dev) - -This function should be used to undo the effect of pci_enable_msix_range(). -It frees the previously allocated MSI-X interrupts. The interrupts may -subsequently be assigned to another device, so drivers should not cache -the value of the 'vector' elements over a call to pci_disable_msix(). - -Before calling this function, a device driver must always call free_irq() -on any interrupt for which it previously called request_irq(). -Failure to do so results in a BUG_ON(), leaving the device with -MSI-X enabled and thus leaking its vector. - -4.3.3 The MSI-X Table - -The MSI-X capability specifies a BAR and offset within that BAR for the -MSI-X Table. This address is mapped by the PCI subsystem, and should not -be accessed directly by the device driver. If the driver wishes to -mask or unmask an interrupt, it should call disable_irq() / enable_irq(). +interrupts it can request a particular number of interrupts by passing that +number to pci_alloc_irq_vectors() function as both 'min_vecs' and +'max_vecs' parameters: -4.3.4 pci_msix_vec_count + ret = pci_alloc_irq_vectors(pdev, nvec, nvec, 0); + if (ret < 0) + goto out_err; -int pci_msix_vec_count(struct pci_dev *dev) +The most notorious example of the request type described above is enabling +the single MSI mode for a device. It could be done by passing two 1s as +'min_vecs' and 'max_vecs': -This function could be used to retrieve number of entries in the device -MSI-X table. + ret = pci_alloc_irq_vectors(pdev, 1, 1, 0); + if (ret < 0) + goto out_err; -If this function returns a negative number, it indicates the device is -not capable of sending MSI-Xs. +Some devices might not support using legacy line interrupts, in which case +the PCI_IRQ_NOLEGACY flag can be used to fail the request if the platform +can't provide MSI or MSI-X interrupts: -If this function returns a positive number, it indicates the maximum -number of MSI-X interrupt vectors that could be allocated. + nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_NOLEGACY); + if (nvec < 0) + goto out_err; -4.4 Handling devices implementing both MSI and MSI-X capabilities +4.3 Legacy APIs -If a device implements both MSI and MSI-X capabilities, it can -run in either MSI mode or MSI-X mode, but not both simultaneously. -This is a requirement of the PCI spec, and it is enforced by the -PCI layer. Calling pci_enable_msi_range() when MSI-X is already -enabled or pci_enable_msix_range() when MSI is already enabled -results in an error. If a device driver wishes to switch between MSI -and MSI-X at runtime, it must first quiesce the device, then switch -it back to pin-interrupt mode, before calling pci_enable_msi_range() -or pci_enable_msix_range() and resuming operation. This is not expected -to be a common operation but may be useful for debugging or testing -during development. +The following old APIs to enable and disable MSI or MSI-X interrupts should +not be used in new code: -4.5 Considerations when using MSIs + pci_enable_msi() /* deprecated */ + pci_enable_msi_range() /* deprecated */ + pci_enable_msi_exact() /* deprecated */ + pci_disable_msi() /* deprecated */ + pci_enable_msix_range() /* deprecated */ + pci_enable_msix_exact() /* deprecated */ + pci_disable_msix() /* deprecated */ -4.5.1 Choosing between MSI-X and MSI +Additionally there are APIs to provide the number of supported MSI or MSI-X +vectors: pci_msi_vec_count() and pci_msix_vec_count(). In general these +should be avoided in favor of letting pci_alloc_irq_vectors() cap the +number of vectors. If you have a legitimate special use case for the count +of vectors we might have to revisit that decision and add a +pci_nr_irq_vectors() helper that handles MSI and MSI-X transparently. -If your device supports both MSI-X and MSI capabilities, you should use -the MSI-X facilities in preference to the MSI facilities. As mentioned -above, MSI-X supports any number of interrupts between 1 and 2048. -In contrast, MSI is restricted to a maximum of 32 interrupts (and -must be a power of two). In addition, the MSI interrupt vectors must -be allocated consecutively, so the system might not be able to allocate -as many vectors for MSI as it could for MSI-X. On some platforms, MSI -interrupts must all be targeted at the same set of CPUs whereas MSI-X -interrupts can all be targeted at different CPUs. +4.4 Considerations when using MSIs -4.5.2 Spinlocks +4.4.1 Spinlocks Most device drivers have a per-device spinlock which is taken in the interrupt handler. With pin-based interrupts or a single MSI, it is not @@ -505,7 +194,7 @@ acquire the spinlock. Such deadlocks can be avoided by using spin_lock_irqsave() or spin_lock_irq() which disable local interrupts and acquire the lock (see Documentation/DocBook/kernel-locking). -4.6 How to tell whether MSI/MSI-X is enabled on a device +4.5 How to tell whether MSI/MSI-X is enabled on a device Using 'lspci -v' (as root) may show some devices with "MSI", "Message Signalled Interrupts" or "MSI-X" capabilities. Each of these capabilities diff --git a/Documentation/arm/Atmel/README b/Documentation/arm/Atmel/README index 0931cf7e2e56..6ca78f818dbf 100644 --- a/Documentation/arm/Atmel/README +++ b/Documentation/arm/Atmel/README @@ -91,9 +91,15 @@ the Atmel website: http://www.atmel.com. http://www.atmel.com/Images/Atmel-11238-32-bit-Cortex-A5-Microcontroller-SAMA5D4_Datasheet.pdf - sama5d2 family - - sama5d27 + - sama5d21 + - sama5d22 + - sama5d23 + - sama5d24 + - sama5d26 + - sama5d27 (device superset) + - sama5d28 (device superset + environmental monitors) + Datasheet - Coming soon + http://www.atmel.com/Images/Atmel-11267-32-bit-Cortex-A5-Microcontroller-SAMA5D2_Datasheet.pdf Linux kernel information diff --git a/Documentation/binfmt_misc.txt b/Documentation/binfmt_misc.txt index 6b1de7058371..ec83bbce547a 100644 --- a/Documentation/binfmt_misc.txt +++ b/Documentation/binfmt_misc.txt @@ -66,6 +66,13 @@ Here is what the fields mean: This feature should be used with care as the interpreter will run with root permissions when a setuid binary owned by root is run with binfmt_misc. + 'F' - fix binary. The usual behaviour of binfmt_misc is to spawn the + binary lazily when the misc format file is invoked. However, + this doesn't work very well in the face of mount namespaces and + changeroots, so the F mode opens the binary as soon as the + emulation is installed and uses the opened image to spawn the + emulator, meaning it is always available once installed, + regardless of how the environment changes. There are some restrictions: diff --git a/Documentation/block/biodoc.txt b/Documentation/block/biodoc.txt index 026d13362aca..bcdb2b4c1f12 100644 --- a/Documentation/block/biodoc.txt +++ b/Documentation/block/biodoc.txt @@ -269,7 +269,7 @@ Arjan's proposed request priority scheme allows higher levels some broad requests which haven't aged too much on the queue. Potentially this priority could even be exposed to applications in some manner, providing higher level tunability. Time based aging avoids starvation of lower priority - requests. Some bits in the bi_rw flags field in the bio structure are + requests. Some bits in the bi_opf flags field in the bio structure are intended to be used for this priority information. @@ -432,7 +432,7 @@ struct bio { struct bio *bi_next; /* request queue link */ struct block_device *bi_bdev; /* target device */ unsigned long bi_flags; /* status, command, etc */ - unsigned long bi_rw; /* low bits: r/w, high: priority */ + unsigned long bi_opf; /* low bits: r/w, high: priority */ unsigned int bi_vcnt; /* how may bio_vec's */ struct bvec_iter bi_iter; /* current index into bio_vec array */ diff --git a/Documentation/cgroup-v1/cgroups.txt b/Documentation/cgroup-v1/cgroups.txt index 947e6fe31ef9..308e5ff7207a 100644 --- a/Documentation/cgroup-v1/cgroups.txt +++ b/Documentation/cgroup-v1/cgroups.txt @@ -2,7 +2,7 @@ ------- Written by Paul Menage <menage@google.com> based on -Documentation/cgroups/cpusets.txt +Documentation/cgroup-v1/cpusets.txt Original copyright statements from cpusets.txt: Portions Copyright (C) 2004 BULL SA. @@ -72,7 +72,7 @@ On their own, the only use for cgroups is for simple job tracking. The intention is that other subsystems hook into the generic cgroup support to provide new attributes for cgroups, such as accounting/limiting the resources which processes in a cgroup can -access. For example, cpusets (see Documentation/cgroups/cpusets.txt) allow +access. For example, cpusets (see Documentation/cgroup-v1/cpusets.txt) allow you to associate a set of CPUs and a set of memory nodes with the tasks in each cgroup. diff --git a/Documentation/cgroup-v1/cpusets.txt b/Documentation/cgroup-v1/cpusets.txt index e5cdcd445615..e5ac5da86682 100644 --- a/Documentation/cgroup-v1/cpusets.txt +++ b/Documentation/cgroup-v1/cpusets.txt @@ -48,7 +48,7 @@ hooks, beyond what is already present, required to manage dynamic job placement on large systems. Cpusets use the generic cgroup subsystem described in -Documentation/cgroups/cgroups.txt. +Documentation/cgroup-v1/cgroups.txt. Requests by a task, using the sched_setaffinity(2) system call to include CPUs in its CPU affinity mask, and using the mbind(2) and diff --git a/Documentation/cgroup-v1/memcg_test.txt b/Documentation/cgroup-v1/memcg_test.txt index 78a8c2963b38..5c7f310f32bb 100644 --- a/Documentation/cgroup-v1/memcg_test.txt +++ b/Documentation/cgroup-v1/memcg_test.txt @@ -6,7 +6,7 @@ Because VM is getting complex (one of reasons is memcg...), memcg's behavior is complex. This is a document for memcg's internal behavior. Please note that implementation details can be changed. -(*) Topics on API should be in Documentation/cgroups/memory.txt) +(*) Topics on API should be in Documentation/cgroup-v1/memory.txt) 0. How to record usage ? 2 objects are used. @@ -256,7 +256,7 @@ Under below explanation, we assume CONFIG_MEM_RES_CTRL_SWAP=y. You can see charges have been moved by reading *.usage_in_bytes or memory.stat of both A and B. - See 8.2 of Documentation/cgroups/memory.txt to see what value should be + See 8.2 of Documentation/cgroup-v1/memory.txt to see what value should be written to move_charge_at_immigrate. 9.10 Memory thresholds diff --git a/Documentation/coccinelle.txt b/Documentation/coccinelle.txt index 7f773d51fdd9..01fb1dae3163 100644 --- a/Documentation/coccinelle.txt +++ b/Documentation/coccinelle.txt @@ -38,6 +38,15 @@ as a regular user, and install it with sudo make install + Supplemental documentation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For supplemental documentation refer to the wiki: + +https://bottest.wiki.kernel.org/coccicheck + +The wiki documentation always refers to the linux-next version of the script. + Using Coccinelle on the Linux kernel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -94,11 +103,26 @@ To enable verbose messages set the V= variable, for example: make coccicheck MODE=report V=1 + Coccinelle parallelization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + By default, coccicheck tries to run as parallel as possible. To change the parallelism, set the J= variable. For example, to run across 4 CPUs: make coccicheck MODE=report J=4 +As of Coccinelle 1.0.2 Coccinelle uses Ocaml parmap for parallelization, +if support for this is detected you will benefit from parmap parallelization. + +When parmap is enabled coccicheck will enable dynamic load balancing by using +'--chunksize 1' argument, this ensures we keep feeding threads with work +one by one, so that we avoid the situation where most work gets done by only +a few threads. With dynamic load balancing, if a thread finishes early we keep +feeding it more work. + +When parmap is enabled, if an error occurs in Coccinelle, this error +value is propagated back, the return value of the 'make coccicheck' +captures this return value. Using Coccinelle with a single semantic patch ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -142,15 +166,118 @@ semantic patch as shown in the previous section. The "report" mode is the default. You can select another one with the MODE variable explained above. + Debugging Coccinelle SmPL patches +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Using coccicheck is best as it provides in the spatch command line +include options matching the options used when we compile the kernel. +You can learn what these options are by using V=1, you could then +manually run Coccinelle with debug options added. + +Alternatively you can debug running Coccinelle against SmPL patches +by asking for stderr to be redirected to stderr, by default stderr +is redirected to /dev/null, if you'd like to capture stderr you +can specify the DEBUG_FILE="file.txt" option to coccicheck. For +instance: + + rm -f cocci.err + make coccicheck COCCI=scripts/coccinelle/free/kfree.cocci MODE=report DEBUG_FILE=cocci.err + cat cocci.err + +You can use SPFLAGS to add debugging flags, for instance you may want to +add both --profile --show-trying to SPFLAGS when debugging. For instance +you may want to use: + + rm -f err.log + export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci + make coccicheck DEBUG_FILE="err.log" MODE=report SPFLAGS="--profile --show-trying" M=./drivers/mfd/arizona-irq.c + +err.log will now have the profiling information, while stdout will +provide some progress information as Coccinelle moves forward with +work. + +DEBUG_FILE support is only supported when using coccinelle >= 1.2. + + .cocciconfig support +~~~~~~~~~~~~~~~~~~~~~~ + +Coccinelle supports reading .cocciconfig for default Coccinelle options that +should be used every time spatch is spawned, the order of precedence for +variables for .cocciconfig is as follows: + + o Your current user's home directory is processed first + o Your directory from which spatch is called is processed next + o The directory provided with the --dir option is processed last, if used + +Since coccicheck runs through make, it naturally runs from the kernel +proper dir, as such the second rule above would be implied for picking up a +.cocciconfig when using 'make coccicheck'. + +'make coccicheck' also supports using M= targets.If you do not supply +any M= target, it is assumed you want to target the entire kernel. +The kernel coccicheck script has: + + if [ "$KBUILD_EXTMOD" = "" ] ; then + OPTIONS="--dir $srctree $COCCIINCLUDE" + else + OPTIONS="--dir $KBUILD_EXTMOD $COCCIINCLUDE" + fi + +KBUILD_EXTMOD is set when an explicit target with M= is used. For both cases +the spatch --dir argument is used, as such third rule applies when whether M= +is used or not, and when M= is used the target directory can have its own +.cocciconfig file. When M= is not passed as an argument to coccicheck the +target directory is the same as the directory from where spatch was called. + +If not using the kernel's coccicheck target, keep the above precedence +order logic of .cocciconfig reading. If using the kernel's coccicheck target, +override any of the kernel's .coccicheck's settings using SPFLAGS. + +We help Coccinelle when used against Linux with a set of sensible defaults +options for Linux with our own Linux .cocciconfig. This hints to coccinelle +git can be used for 'git grep' queries over coccigrep. A timeout of 200 +seconds should suffice for now. + +The options picked up by coccinelle when reading a .cocciconfig do not appear +as arguments to spatch processes running on your system, to confirm what +options will be used by Coccinelle run: + + spatch --print-options-only + +You can override with your own preferred index option by using SPFLAGS. Take +note that when there are conflicting options Coccinelle takes precedence for +the last options passed. Using .cocciconfig is possible to use idutils, however +given the order of precedence followed by Coccinelle, since the kernel now +carries its own .cocciconfig, you will need to use SPFLAGS to use idutils if +desired. See below section "Additional flags" for more details on how to use +idutils. + Additional flags ~~~~~~~~~~~~~~~~~~ Additional flags can be passed to spatch through the SPFLAGS -variable. +variable. This works as Coccinelle respects the last flags +given to it when options are in conflict. make SPFLAGS=--use-glimpse coccicheck + +Coccinelle supports idutils as well but requires coccinelle >= 1.0.6. +When no ID file is specified coccinelle assumes your ID database file +is in the file .id-utils.index on the top level of the kernel, coccinelle +carries a script scripts/idutils_index.sh which creates the database with + + mkid -i C --output .id-utils.index + +If you have another database filename you can also just symlink with this +name. + make SPFLAGS=--use-idutils coccicheck +Alternatively you can specify the database filename explicitly, for +instance: + + make SPFLAGS="--use-idutils /full-path/to/ID" coccicheck + See spatch --help to learn more about spatch options. Note that the '--use-glimpse' and '--use-idutils' options @@ -159,6 +286,25 @@ thus active by default. However, by indexing the code with one of these tools, and according to the cocci file used, spatch could proceed the entire code base more quickly. + SmPL patch specific options +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SmPL patches can have their own requirements for options passed +to Coccinelle. SmPL patch specific options can be provided by +providing them at the top of the SmPL patch, for instance: + +// Options: --no-includes --include-headers + + SmPL patch Coccinelle requirements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As Coccinelle features get added some more advanced SmPL patches +may require newer versions of Coccinelle. If an SmPL patch requires +at least a version of Coccinelle, this can be specified as follows, +as an example if requiring at least Coccinelle >= 1.0.5: + +// Requires: 1.0.5 + Proposing new semantic patches ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/Documentation/device-mapper/dm-flakey.txt b/Documentation/device-mapper/dm-flakey.txt index 6ff5c2327227..c43030718cef 100644 --- a/Documentation/device-mapper/dm-flakey.txt +++ b/Documentation/device-mapper/dm-flakey.txt @@ -42,7 +42,7 @@ Optional feature parameters: <direction>: Either 'r' to corrupt reads or 'w' to corrupt writes. 'w' is incompatible with drop_writes. <value>: The value (from 0-255) to write. - <flags>: Perform the replacement only if bio->bi_rw has all the + <flags>: Perform the replacement only if bio->bi_opf has all the selected flags set. Examples: diff --git a/Documentation/devicetree/bindings/arm/arm,scpi.txt b/Documentation/devicetree/bindings/arm/arm,scpi.txt index 313dabdc14f9..faa4b44572e3 100644 --- a/Documentation/devicetree/bindings/arm/arm,scpi.txt +++ b/Documentation/devicetree/bindings/arm/arm,scpi.txt @@ -87,10 +87,33 @@ Required properties: implementation for the IDs to use. For Juno R0 and Juno R1 refer to [3]. +Power domain bindings for the power domains based on SCPI Message Protocol +------------------------------------------------------------ + +This binding uses the generic power domain binding[4]. + +PM domain providers +=================== + +Required properties: + - #power-domain-cells : Should be 1. Contains the device or the power + domain ID value used by SCPI commands. + - num-domains: Total number of power domains provided by SCPI. This is + needed as the SCPI message protocol lacks a mechanism to + query this information at runtime. + +PM domain consumers +=================== + +Required properties: + - power-domains : A phandle and PM domain specifier as defined by bindings of + the power controller specified by phandle. + [0] http://infocenter.arm.com/help/topic/com.arm.doc.dui0922b/index.html [1] Documentation/devicetree/bindings/clock/clock-bindings.txt [2] Documentation/devicetree/bindings/thermal/thermal.txt [3] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0922b/apas03s22.html +[4] Documentation/devicetree/bindings/power/power_domain.txt Example: @@ -144,6 +167,12 @@ scpi_protocol: scpi@2e000000 { compatible = "arm,scpi-sensors"; #thermal-sensor-cells = <1>; }; + + scpi_devpd: scpi-power-domains { + compatible = "arm,scpi-power-domains"; + num-domains = <2>; + #power-domain-cells = <1>; + }; }; cpu@0 { @@ -156,6 +185,7 @@ hdlcd@7ff60000 { ... reg = <0 0x7ff60000 0 0x1000>; clocks = <&scpi_clk 4>; + power-domains = <&scpi_devpd 1>; }; thermal-zones { @@ -186,3 +216,7 @@ The thermal-sensors property in the soc_thermal node uses the temperature sensor provided by SCP firmware to setup a thermal zone. The ID "3" is the sensor identifier for the temperature sensor as used by the firmware. + +The num-domains property in scpi-power-domains domain specifies that +SCPI provides 2 power domains. The hdlcd node uses the power domain with +domain ID 1. diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm11351-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm11351-cpu-method.txt index 8240c023e202..e3f996920403 100644 --- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm11351-cpu-method.txt +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm11351-cpu-method.txt @@ -5,7 +5,7 @@ CPUs in the following Broadcom SoCs: BCM11130, BCM11140, BCM11351, BCM28145, BCM28155, BCM21664 The enable method is specified by defining the following required -properties in the "cpus" device tree node: +properties in the "cpu" device tree node: - enable-method = "brcm,bcm11351-cpu-method"; - secondary-boot-reg = <...>; @@ -19,8 +19,6 @@ Example: cpus { #address-cells = <1>; #size-cells = <0>; - enable-method = "brcm,bcm11351-cpu-method"; - secondary-boot-reg = <0x3500417c>; cpu0: cpu@0 { device_type = "cpu"; @@ -32,5 +30,7 @@ Example: device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <1>; + enable-method = "brcm,bcm11351-cpu-method"; + secondary-boot-reg = <0x3500417c>; }; }; diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm23550-cpu-method.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm23550-cpu-method.txt new file mode 100644 index 000000000000..a3af54c0e404 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm23550-cpu-method.txt @@ -0,0 +1,36 @@ +Broadcom Kona Family CPU Enable Method +-------------------------------------- +This binding defines the enable method used for starting secondary +CPUs in the following Broadcom SoCs: + BCM23550 + +The enable method is specified by defining the following required +properties in the "cpu" device tree node: + - enable-method = "brcm,bcm23550"; + - secondary-boot-reg = <...>; + +The secondary-boot-reg property is a u32 value that specifies the +physical address of the register used to request the ROM holding pen +code release a secondary CPU. The value written to the register is +formed by encoding the target CPU id into the low bits of the +physical start address it should jump to. + +Example: + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a9"; + reg = <0>; + }; + + cpu1: cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a9"; + reg = <1>; + enable-method = "brcm,bcm23550"; + secondary-boot-reg = <0x3500417c>; + }; + }; diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm23550.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm23550.txt new file mode 100644 index 000000000000..080baad923d6 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm23550.txt @@ -0,0 +1,15 @@ +Broadcom BCM23550 device tree bindings +-------------------------------------- + +This document describes the device tree bindings for boards with the BCM23550 +SoC. + +Required root node property: + - compatible: brcm,bcm23550 + +Example: + / { + model = "BCM23550 SoC"; + compatible = "brcm,bcm23550"; + [...] + } diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt index 11d3056dc2bd..6ffe08778465 100644 --- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt @@ -30,6 +30,10 @@ Raspberry Pi 2 Model B Required root node properties: compatible = "raspberrypi,2-model-b", "brcm,bcm2836"; +Raspberry Pi 3 Model B +Required root node properties: +compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; + Raspberry Pi Compute Module Required root node properties: compatible = "raspberrypi,compute-module", "brcm,bcm2835"; diff --git a/Documentation/devicetree/bindings/arm/cpus.txt b/Documentation/devicetree/bindings/arm/cpus.txt index 3f0cbbb8395f..e6782d50cbcd 100644 --- a/Documentation/devicetree/bindings/arm/cpus.txt +++ b/Documentation/devicetree/bindings/arm/cpus.txt @@ -193,6 +193,8 @@ nodes to be present and contain the properties described below. "allwinner,sun6i-a31" "allwinner,sun8i-a23" "arm,realview-smp" + "brcm,bcm11351-cpu-method" + "brcm,bcm23550" "brcm,bcm-nsp-smp" "brcm,brahma-b15" "marvell,armada-375-smp" @@ -204,6 +206,7 @@ nodes to be present and contain the properties described below. "qcom,gcc-msm8660" "qcom,kpss-acc-v1" "qcom,kpss-acc-v2" + "renesas,apmu" "rockchip,rk3036-smp" "rockchip,rk3066-smp" "ste,dbx500-smp" diff --git a/Documentation/devicetree/bindings/arm/hisilicon/hi3519-sysctrl.txt b/Documentation/devicetree/bindings/arm/hisilicon/hi3519-sysctrl.txt new file mode 100644 index 000000000000..115c5be0bd0b --- /dev/null +++ b/Documentation/devicetree/bindings/arm/hisilicon/hi3519-sysctrl.txt @@ -0,0 +1,14 @@ +* Hisilicon Hi3519 System Controller Block + +This bindings use the following binding: +Documentation/devicetree/bindings/mfd/syscon.txt + +Required properties: +- compatible: "hisilicon,hi3519-sysctrl". +- reg: the register region of this block + +Examples: +sysctrl: system-controller@12010000 { + compatible = "hisilicon,hi3519-sysctrl", "syscon"; + reg = <0x12010000 0x1000>; +}; diff --git a/Documentation/devicetree/bindings/arm/mediatek.txt b/Documentation/devicetree/bindings/arm/mediatek.txt index d9c2a37a4090..c860b245d8c8 100644 --- a/Documentation/devicetree/bindings/arm/mediatek.txt +++ b/Documentation/devicetree/bindings/arm/mediatek.txt @@ -10,6 +10,7 @@ compatible: Must contain one of "mediatek,mt6580" "mediatek,mt6589" "mediatek,mt6592" + "mediatek,mt6755" "mediatek,mt6795" "mediatek,mt7623" "mediatek,mt8127" @@ -31,6 +32,9 @@ Supported boards: - Evaluation board for MT6592: Required root node properties: - compatible = "mediatek,mt6592-evb", "mediatek,mt6592"; +- Evaluation phone for MT6755(Helio P10): + Required root node properties: + - compatible = "mediatek,mt6755-evb", "mediatek,mt6755"; - Evaluation board for MT6795(Helio X10): Required root node properties: - compatible = "mediatek,mt6795-evb", "mediatek,mt6795"; diff --git a/Documentation/devicetree/bindings/arm/olimex.txt b/Documentation/devicetree/bindings/arm/olimex.txt index 007fb5c685a1..d726aeca56be 100644 --- a/Documentation/devicetree/bindings/arm/olimex.txt +++ b/Documentation/devicetree/bindings/arm/olimex.txt @@ -1,5 +1,9 @@ -Olimex i.MX Platforms Device Tree Bindings ------------------------------------------- +Olimex Device Tree Bindings +--------------------------- + +SAM9-L9260 Board +Required root node properties: + - compatible = "olimex,sam9-l9260", "atmel,at91sam9260"; i.MX23 Olinuxino Low Cost Board Required root node properties: diff --git a/Documentation/devicetree/bindings/arm/rockchip.txt b/Documentation/devicetree/bindings/arm/rockchip.txt index 715d960d5eea..666864517069 100644 --- a/Documentation/devicetree/bindings/arm/rockchip.txt +++ b/Documentation/devicetree/bindings/arm/rockchip.txt @@ -107,6 +107,9 @@ Rockchip platforms device tree bindings Required root node properties: - compatible = "rockchip,rk3228-evb", "rockchip,rk3228"; +- Rockchip RK3229 Evaluation board: + - compatible = "rockchip,rk3229-evb", "rockchip,rk3229"; + - Rockchip RK3399 evb: Required root node properties: - compatible = "rockchip,rk3399-evb", "rockchip,rk3399"; diff --git a/Documentation/devicetree/bindings/arm/samsung/samsung-boards.txt b/Documentation/devicetree/bindings/arm/samsung/samsung-boards.txt index f5deace2b380..0ea7f14ef294 100644 --- a/Documentation/devicetree/bindings/arm/samsung/samsung-boards.txt +++ b/Documentation/devicetree/bindings/arm/samsung/samsung-boards.txt @@ -47,6 +47,7 @@ Required root node properties: - "hardkernel,odroid-u3" - for Exynos4412-based Hardkernel Odroid U3. - "hardkernel,odroid-x" - for Exynos4412-based Hardkernel Odroid X. - "hardkernel,odroid-x2" - for Exynos4412-based Hardkernel Odroid X2. + - "hardkernel,odroid-xu" - for Exynos5410-based Hardkernel Odroid XU. - "hardkernel,odroid-xu3" - for Exynos5422-based Hardkernel Odroid XU3. - "hardkernel,odroid-xu3-lite" - for Exynos5422-based Hardkernel Odroid XU3 Lite board. diff --git a/Documentation/devicetree/bindings/arm/shmobile.txt b/Documentation/devicetree/bindings/arm/shmobile.txt index 9cf67e48f222..1df32d339da5 100644 --- a/Documentation/devicetree/bindings/arm/shmobile.txt +++ b/Documentation/devicetree/bindings/arm/shmobile.txt @@ -29,6 +29,8 @@ SoCs: compatible = "renesas,r8a7794" - R-Car H3 (R8A77950) compatible = "renesas,r8a7795" + - R-Car M3-W (R8A77960) + compatible = "renesas,r8a7796" Boards: @@ -39,6 +41,8 @@ Boards: compatible = "renesas,ape6evm", "renesas,r8a73a4" - Atmark Techno Armadillo-800 EVA compatible = "renesas,armadillo800eva" + - Blanche (RTP0RC7792SEB00010S) + compatible = "renesas,blanche", "renesas,r8a7792" - BOCK-W compatible = "renesas,bockw", "renesas,r8a7778" - Genmai (RTK772100BC00000BR) @@ -61,5 +65,7 @@ Boards: compatible = "renesas,porter", "renesas,r8a7791" - Salvator-X (RTP0RC7795SIPB0010S) compatible = "renesas,salvator-x", "renesas,r8a7795"; + - Salvator-X + compatible = "renesas,salvator-x", "renesas,r8a7796"; - SILK (RTP0RC7794LCB00011S) compatible = "renesas,silk", "renesas,r8a7794" diff --git a/Documentation/devicetree/bindings/arm/tegra.txt b/Documentation/devicetree/bindings/arm/tegra.txt index 73278c6d2dc3..b5a4342c1d46 100644 --- a/Documentation/devicetree/bindings/arm/tegra.txt +++ b/Documentation/devicetree/bindings/arm/tegra.txt @@ -32,7 +32,11 @@ board-specific compatible values: nvidia,whistler toradex,apalis_t30 toradex,apalis_t30-eval + toradex,apalis-tk1 + toradex,apalis-tk1-eval toradex,colibri_t20-512 + toradex,colibri_t30 + toradex,colibri_t30-eval-v3 toradex,iris Trusted Foundations diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 87adfb227ca9..fedc213b5f1a 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -10,6 +10,7 @@ PHYs. Required properties: - compatible : compatible string, one of: - "allwinner,sun4i-a10-ahci" + - "brcm,iproc-ahci" - "hisilicon,hisi-ahci" - "cavium,octeon-7130-ahci" - "ibm,476gtr-ahci" diff --git a/Documentation/devicetree/bindings/bus/nvidia,tegra210-aconnect.txt b/Documentation/devicetree/bindings/bus/nvidia,tegra210-aconnect.txt new file mode 100644 index 000000000000..7ff13be1750b --- /dev/null +++ b/Documentation/devicetree/bindings/bus/nvidia,tegra210-aconnect.txt @@ -0,0 +1,45 @@ +NVIDIA Tegra ACONNECT Bus + +The Tegra ACONNECT bus is an AXI switch which is used to connnect various +components inside the Audio Processing Engine (APE). All CPU accesses to +the APE subsystem go through the ACONNECT via an APB to AXI wrapper. + +Required properties: +- compatible: Must be "nvidia,tegra210-aconnect". +- clocks: Must contain the entries for the APE clock (TEGRA210_CLK_APE), + and APE interface clock (TEGRA210_CLK_APB2APE). +- clock-names: Must contain the names "ape" and "apb2ape" for the corresponding + 'clocks' entries. +- power-domains: Must contain a phandle that points to the audio powergate + (namely 'aud') for Tegra210. +- #address-cells: The number of cells used to represent physical base addresses + in the aconnect address space. Should be 1. +- #size-cells: The number of cells used to represent the size of an address + range in the aconnect address space. Should be 1. +- ranges: Mapping of the aconnect address space to the CPU address space. + +All devices accessed via the ACONNNECT are described by child-nodes. + +Example: + + aconnect@702c0000 { + compatible = "nvidia,tegra210-aconnect"; + clocks = <&tegra_car TEGRA210_CLK_APE>, + <&tegra_car TEGRA210_CLK_APB2APE>; + clock-names = "ape", "apb2ape"; + power-domains = <&pd_audio>; + + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x702c0000 0x0 0x702c0000 0x00040000>; + + status = "disabled"; + + child1 { + ... + }; + + child2 { + ... + }; + }; diff --git a/Documentation/devicetree/bindings/clock/clps711x-clock.txt b/Documentation/devicetree/bindings/clock/clps711x-clock.txt index ce5a7476f05d..f1bd53f79d91 100644 --- a/Documentation/devicetree/bindings/clock/clps711x-clock.txt +++ b/Documentation/devicetree/bindings/clock/clps711x-clock.txt @@ -1,7 +1,7 @@ * Clock bindings for the Cirrus Logic CLPS711X CPUs Required properties: -- compatible : Shall contain "cirrus,clps711x-clk". +- compatible : Shall contain "cirrus,ep7209-clk". - reg : Address of the internal register set. - startup-frequency: Factory set CPU startup frequency in HZ. - #clock-cells : Should be <1>. @@ -13,7 +13,7 @@ for the full list of CLPS711X clock IDs. Example: clks: clks@80000000 { #clock-cells = <1>; - compatible = "cirrus,ep7312-clk", "cirrus,clps711x-clk"; + compatible = "cirrus,ep7312-clk", "cirrus,ep7209-clk"; reg = <0x80000000 0xc000>; startup-frequency = <73728000>; }; diff --git a/Documentation/devicetree/bindings/display/arm,malidp.txt b/Documentation/devicetree/bindings/display/arm,malidp.txt new file mode 100644 index 000000000000..2f7870983ef1 --- /dev/null +++ b/Documentation/devicetree/bindings/display/arm,malidp.txt @@ -0,0 +1,65 @@ +ARM Mali-DP + +The following bindings apply to a family of Display Processors sold as +licensable IP by ARM Ltd. The bindings describe the Mali DP500, DP550 and +DP650 processors that offer multiple composition layers, support for +rotation and scaling output. + +Required properties: + - compatible: should be one of + "arm,mali-dp500" + "arm,mali-dp550" + "arm,mali-dp650" + depending on the particular implementation present in the hardware + - reg: Physical base address and size of the block of registers used by + the processor. + - interrupts: Interrupt list, as defined in ../interrupt-controller/interrupts.txt, + interrupt client nodes. + - interrupt-names: name of the engine inside the processor that will + use the corresponding interrupt. Should be one of "DE" or "SE". + - clocks: A list of phandle + clock-specifier pairs, one for each entry + in 'clock-names' + - clock-names: A list of clock names. It should contain: + - "pclk": for the APB interface clock + - "aclk": for the AXI interface clock + - "mclk": for the main processor clock + - "pxlclk": for the pixel clock feeding the output PLL of the processor. + - arm,malidp-output-port-lines: Array of u8 values describing the number + of output lines per channel (R, G and B). + +Required sub-nodes: + - port: The Mali DP connection to an encoder input port. The connection + is modelled using the OF graph bindings specified in + Documentation/devicetree/bindings/graph.txt + +Optional properties: + - memory-region: phandle to a node describing memory (see + Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt) + to be used for the framebuffer; if not present, the framebuffer may + be located anywhere in memory. + + +Example: + +/ { + ... + + dp0: malidp@6f200000 { + compatible = "arm,mali-dp650"; + reg = <0 0x6f200000 0 0x20000>; + memory-region = <&display_reserved>; + interrupts = <0 168 IRQ_TYPE_LEVEL_HIGH>, + <0 168 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "DE", "SE"; + clocks = <&oscclk2>, <&fpgaosc0>, <&fpgaosc1>, <&fpgaosc1>; + clock-names = "pxlclk", "mclk", "aclk", "pclk"; + arm,malidp-output-port-lines = /bits/ 8 <8 8 8>; + port { + dp0_output: endpoint { + remote-endpoint = <&tda998x_2_input>; + }; + }; + }; + + ... +}; diff --git a/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt b/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt index 96c25ee01501..6532a59c9b43 100644 --- a/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt +++ b/Documentation/devicetree/bindings/display/bridge/adi,adv7511.txt @@ -1,13 +1,19 @@ -Analog Device ADV7511(W)/13 HDMI Encoders +Analog Device ADV7511(W)/13/33 HDMI Encoders ----------------------------------------- -The ADV7511, ADV7511W and ADV7513 are HDMI audio and video transmitters +The ADV7511, ADV7511W, ADV7513 and ADV7533 are HDMI audio and video transmitters compatible with HDMI 1.4 and DVI 1.0. They support color space conversion, -S/PDIF, CEC and HDCP. +S/PDIF, CEC and HDCP. ADV7533 supports the DSI interface for input pixels, while +the others support RGB interface. Required properties: -- compatible: Should be one of "adi,adv7511", "adi,adv7511w" or "adi,adv7513" +- compatible: Should be one of: + "adi,adv7511" + "adi,adv7511w" + "adi,adv7513" + "adi,adv7533" + - reg: I2C slave address The ADV7511 supports a large number of input data formats that differ by their @@ -32,6 +38,11 @@ The following input format properties are required except in "rgb 1x" and - adi,input-justification: The input bit justification ("left", "evenly", "right"). +The following properties are required for ADV7533: + +- adi,dsi-lanes: Number of DSI data lanes connected to the DSI host. It should + be one of 1, 2, 3 or 4. + Optional properties: - interrupts: Specifier for the ADV7511 interrupt @@ -42,13 +53,18 @@ Optional properties: - adi,embedded-sync: The input uses synchronization signals embedded in the data stream (similar to BT.656). Defaults to separate H/V synchronization signals. +- adi,disable-timing-generator: Only for ADV7533. Disables the internal timing + generator. The chip will rely on the sync signals in the DSI data lanes, + rather than generate its own timings for HDMI output. Required nodes: The ADV7511 has two video ports. Their connections are modelled using the OF graph bindings specified in Documentation/devicetree/bindings/graph.txt. -- Video port 0 for the RGB or YUV input +- Video port 0 for the RGB, YUV or DSI input. In the case of ADV7533, the + remote endpoint phandle should be a reference to a valid mipi_dsi_host device + node. - Video port 1 for the HDMI output diff --git a/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt b/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt index 4f2ba8c13d92..4a0f4f7682ad 100644 --- a/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt +++ b/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt @@ -5,6 +5,7 @@ Required properties for dp-controller: platform specific such as: * "samsung,exynos5-dp" * "rockchip,rk3288-dp" + * "rockchip,rk3399-edp" -reg: physical base address of the controller and length of memory mapped region. diff --git a/Documentation/devicetree/bindings/display/bridge/sii902x.txt b/Documentation/devicetree/bindings/display/bridge/sii902x.txt new file mode 100644 index 000000000000..56a3e68ccb80 --- /dev/null +++ b/Documentation/devicetree/bindings/display/bridge/sii902x.txt @@ -0,0 +1,35 @@ +sii902x HDMI bridge bindings + +Required properties: + - compatible: "sil,sii9022" + - reg: i2c address of the bridge + +Optional properties: + - interrupts-extended or interrupt-parent + interrupts: describe + the interrupt line used to inform the host about hotplug events. + - reset-gpios: OF device-tree gpio specification for RST_N pin. + +Optional subnodes: + - video input: this subnode can contain a video input port node + to connect the bridge to a display controller output (See this + documentation [1]). + +[1]: Documentation/devicetree/bindings/media/video-interfaces.txt + +Example: + hdmi-bridge@39 { + compatible = "sil,sii9022"; + reg = <0x39>; + reset-gpios = <&pioA 1 0>; + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + bridge_in: endpoint { + remote-endpoint = <&dc_out>; + }; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/display/bridge/toshiba,tc358767.txt b/Documentation/devicetree/bindings/display/bridge/toshiba,tc358767.txt new file mode 100644 index 000000000000..e3f6aa6a214d --- /dev/null +++ b/Documentation/devicetree/bindings/display/bridge/toshiba,tc358767.txt @@ -0,0 +1,53 @@ +Toshiba TC358767 eDP bridge bindings + +Required properties: + - compatible: "toshiba,tc358767" + - reg: i2c address of the bridge, 0x68 or 0x0f, depending on bootstrap pins + - clock-names: should be "ref" + - clocks: OF device-tree clock specification for refclk input. The reference + clock rate must be 13 MHz, 19.2 MHz, 26 MHz, or 38.4 MHz. + +Optional properties: + - shutdown-gpios: OF device-tree gpio specification for SD pin + (active high shutdown input) + - reset-gpios: OF device-tree gpio specification for RSTX pin + (active low system reset) + - ports: the ports node can contain video interface port nodes to connect + to a DPI/DSI source and to an eDP/DP sink according to [1][2]: + - port@0: DSI input port + - port@1: DPI input port + - port@2: eDP/DP output port + +[1]: Documentation/devicetree/bindings/graph.txt +[2]: Documentation/devicetree/bindings/media/video-interfaces.txt + +Example: + edp-bridge@68 { + compatible = "toshiba,tc358767"; + reg = <0x68>; + shutdown-gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio3 24 GPIO_ACTIVE_LOW>; + clock-names = "ref"; + clocks = <&edp_refclk>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@1 { + reg = <1>; + + bridge_in: endpoint { + remote-endpoint = <&dpi_out>; + }; + }; + + port@2 { + reg = <2>; + + bridge_out: endpoint { + remote-endpoint = <&panel_in>; + }; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/display/cirrus,clps711x-fb.txt b/Documentation/devicetree/bindings/display/cirrus,clps711x-fb.txt index d685be898d0c..e9c65746e2f1 100644 --- a/Documentation/devicetree/bindings/display/cirrus,clps711x-fb.txt +++ b/Documentation/devicetree/bindings/display/cirrus,clps711x-fb.txt @@ -1,7 +1,7 @@ * Currus Logic CLPS711X Framebuffer Required properties: -- compatible: Shall contain "cirrus,clps711x-fb". +- compatible: Shall contain "cirrus,ep7209-fb". - reg : Physical base address and length of the controller's registers + location and size of the framebuffer memory. - clocks : phandle + clock specifier pair of the FB reference clock. @@ -18,7 +18,7 @@ Optional properties: Example: fb: fb@800002c0 { - compatible = "cirrus,ep7312-fb", "cirrus,clps711x-fb"; + compatible = "cirrus,ep7312-fb", "cirrus,ep7209-fb"; reg = <0x800002c0 0xd44>, <0x60000000 0xc000>; clocks = <&clks 2>; lcd-supply = <®5v0>; diff --git a/Documentation/devicetree/bindings/display/connector/hdmi-connector.txt b/Documentation/devicetree/bindings/display/connector/hdmi-connector.txt index acd5668b1ce1..508aee461e0d 100644 --- a/Documentation/devicetree/bindings/display/connector/hdmi-connector.txt +++ b/Documentation/devicetree/bindings/display/connector/hdmi-connector.txt @@ -8,6 +8,7 @@ Required properties: Optional properties: - label: a symbolic name for the connector - hpd-gpios: HPD GPIO number +- ddc-i2c-bus: phandle link to the I2C controller used for DDC EDID probing Required nodes: - Video port for HDMI input diff --git a/Documentation/devicetree/bindings/display/fsl,dcu.txt b/Documentation/devicetree/bindings/display/fsl,dcu.txt index ae55cde1b69e..63ec2a624aa9 100644 --- a/Documentation/devicetree/bindings/display/fsl,dcu.txt +++ b/Documentation/devicetree/bindings/display/fsl,dcu.txt @@ -12,7 +12,7 @@ Required properties: - clock-names: Should be "dcu" and "pix" See ../clocks/clock-bindings.txt for details. - big-endian Boolean property, LS1021A DCU registers are big-endian. -- fsl,panel: The phandle to panel node. +- port Video port for the panel output Optional properties: - fsl,tcon: The phandle to the timing controller node. @@ -24,6 +24,11 @@ dcu: dcu@2ce0000 { clocks = <&platform_clk 0>, <&platform_clk 0>; clock-names = "dcu", "pix"; big-endian; - fsl,panel = <&panel>; fsl,tcon = <&tcon>; + + port { + dcu_out: endpoint { + remote-endpoint = <&panel_out>; + }; + }; }; diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,hdmi.txt b/Documentation/devicetree/bindings/display/mediatek/mediatek,hdmi.txt new file mode 100644 index 000000000000..7b124242b0c5 --- /dev/null +++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,hdmi.txt @@ -0,0 +1,148 @@ +Mediatek HDMI Encoder +===================== + +The Mediatek HDMI encoder can generate HDMI 1.4a or MHL 2.0 signals from +its parallel input. + +Required properties: +- compatible: Should be "mediatek,<chip>-hdmi". +- reg: Physical base address and length of the controller's registers +- interrupts: The interrupt signal from the function block. +- clocks: device clocks + See Documentation/devicetree/bindings/clock/clock-bindings.txt for details. +- clock-names: must contain "pixel", "pll", "bclk", and "spdif". +- phys: phandle link to the HDMI PHY node. + See Documentation/devicetree/bindings/phy/phy-bindings.txt for details. +- phy-names: must contain "hdmi" +- mediatek,syscon-hdmi: phandle link and register offset to the system + configuration registers. For mt8173 this must be offset 0x900 into the + MMSYS_CONFIG region: <&mmsys 0x900>. +- ports: A node containing input and output port nodes with endpoint + definitions as documented in Documentation/devicetree/bindings/graph.txt. +- port@0: The input port in the ports node should be connected to a DPI output + port. +- port@1: The output port in the ports node should be connected to the input + port of a connector node that contains a ddc-i2c-bus property, or to the + input port of an attached bridge chip, such as a SlimPort transmitter. + +HDMI CEC +======== + +The HDMI CEC controller handles hotplug detection and CEC communication. + +Required properties: +- compatible: Should be "mediatek,<chip>-cec" +- reg: Physical base address and length of the controller's registers +- interrupts: The interrupt signal from the function block. +- clocks: device clock + +HDMI DDC +======== + +The HDMI DDC i2c controller is used to interface with the HDMI DDC pins. +The Mediatek's I2C controller is used to interface with I2C devices. + +Required properties: +- compatible: Should be "mediatek,<chip>-hdmi-ddc" +- reg: Physical base address and length of the controller's registers +- clocks: device clock +- clock-names: Should be "ddc-i2c". + +HDMI PHY +======== + +The HDMI PHY serializes the HDMI encoder's three channel 10-bit parallel +output and drives the HDMI pads. + +Required properties: +- compatible: "mediatek,<chip>-hdmi-phy" +- reg: Physical base address and length of the module's registers +- clocks: PLL reference clock +- clock-names: must contain "pll_ref" +- clock-output-names: must be "hdmitx_dig_cts" on mt8173 +- #phy-cells: must be <0> +- #clock-cells: must be <0> + +Optional properties: +- mediatek,ibias: TX DRV bias current for <1.65Gbps, defaults to 0xa +- mediatek,ibias_up: TX DRV bias current for >1.65Gbps, defaults to 0x1c + +Example: + +cec: cec@10013000 { + compatible = "mediatek,mt8173-cec"; + reg = <0 0x10013000 0 0xbc>; + interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_LOW>; + clocks = <&infracfg CLK_INFRA_CEC>; +}; + +hdmi_phy: hdmi-phy@10209100 { + compatible = "mediatek,mt8173-hdmi-phy"; + reg = <0 0x10209100 0 0x24>; + clocks = <&apmixedsys CLK_APMIXED_HDMI_REF>; + clock-names = "pll_ref"; + clock-output-names = "hdmitx_dig_cts"; + mediatek,ibias = <0xa>; + mediatek,ibias_up = <0x1c>; + #clock-cells = <0>; + #phy-cells = <0>; +}; + +hdmi_ddc0: i2c@11012000 { + compatible = "mediatek,mt8173-hdmi-ddc"; + reg = <0 0x11012000 0 0x1c>; + interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_LOW>; + clocks = <&pericfg CLK_PERI_I2C5>; + clock-names = "ddc-i2c"; +}; + +hdmi0: hdmi@14025000 { + compatible = "mediatek,mt8173-hdmi"; + reg = <0 0x14025000 0 0x400>; + interrupts = <GIC_SPI 206 IRQ_TYPE_LEVEL_LOW>; + clocks = <&mmsys CLK_MM_HDMI_PIXEL>, + <&mmsys CLK_MM_HDMI_PLLCK>, + <&mmsys CLK_MM_HDMI_AUDIO>, + <&mmsys CLK_MM_HDMI_SPDIF>; + clock-names = "pixel", "pll", "bclk", "spdif"; + pinctrl-names = "default"; + pinctrl-0 = <&hdmi_pin>; + phys = <&hdmi_phy>; + phy-names = "hdmi"; + mediatek,syscon-hdmi = <&mmsys 0x900>; + assigned-clocks = <&topckgen CLK_TOP_HDMI_SEL>; + assigned-clock-parents = <&hdmi_phy>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + hdmi0_in: endpoint { + remote-endpoint = <&dpi0_out>; + }; + }; + + port@1 { + reg = <1>; + + hdmi0_out: endpoint { + remote-endpoint = <&hdmi_con_in>; + }; + }; + }; +}; + +connector { + compatible = "hdmi-connector"; + type = "a"; + ddc-i2c-bus = <&hdmiddc0>; + + port { + hdmi_con_in: endpoint { + remote-endpoint = <&hdmi0_out>; + }; + }; +}; diff --git a/Documentation/devicetree/bindings/display/msm/dsi.txt b/Documentation/devicetree/bindings/display/msm/dsi.txt index f5948c48b9a2..6b1cab17f52d 100644 --- a/Documentation/devicetree/bindings/display/msm/dsi.txt +++ b/Documentation/devicetree/bindings/display/msm/dsi.txt @@ -11,8 +11,7 @@ Required properties: be 0 or 1, since we have 2 DSI controllers at most for now. - interrupts: The interrupt signal from the DSI block. - power-domains: Should be <&mmcc MDSS_GDSC>. -- clocks: device clocks - See Documentation/devicetree/bindings/clocks/clock-bindings.txt for details. +- clocks: Phandles to device clocks. - clock-names: the following clocks are required: * "mdp_core_clk" * "iface_clk" @@ -23,16 +22,21 @@ Required properties: * "core_clk" For DSIv2, we need an additional clock: * "src_clk" +- assigned-clocks: Parents of "byte_clk" and "pixel_clk" for the given platform. +- assigned-clock-parents: The Byte clock and Pixel clock PLL outputs provided + by a DSI PHY block. See [1] for details on clock bindings. - vdd-supply: phandle to vdd regulator device node - vddio-supply: phandle to vdd-io regulator device node - vdda-supply: phandle to vdda regulator device node -- qcom,dsi-phy: phandle to DSI PHY device node +- phys: phandle to DSI PHY device node +- phy-names: the name of the corresponding PHY device - syscon-sfpb: A phandle to mmss_sfpb syscon node (only for DSIv2) +- ports: Contains 2 DSI controller ports as child nodes. Each port contains + an endpoint subnode as defined in [2] and [3]. Optional properties: - panel@0: Node of panel connected to this DSI controller. - See files in Documentation/devicetree/bindings/display/panel/ for each supported - panel. + See files in [4] for each supported panel. - qcom,dual-dsi-mode: Boolean value indicating if the DSI controller is driving a panel which needs 2 DSI links. - qcom,master-dsi: Boolean value indicating if the DSI controller is driving @@ -44,34 +48,38 @@ Optional properties: - pinctrl-names: the pin control state names; should contain "default" - pinctrl-0: the default pinctrl state (active) - pinctrl-n: the "sleep" pinctrl state -- port: DSI controller output port, containing one endpoint subnode. +- ports: contains DSI controller input and output ports as children, each + containing one endpoint subnode. DSI Endpoint properties: - - remote-endpoint: set to phandle of the connected panel's endpoint. - See Documentation/devicetree/bindings/graph.txt for device graph info. - - qcom,data-lane-map: this describes how the logical DSI lanes are mapped - to the physical lanes on the given platform. The value contained in - index n describes what logical data lane is mapped to the physical data - lane n (DATAn, where n lies between 0 and 3). + - remote-endpoint: For port@0, set to phandle of the connected panel/bridge's + input endpoint. For port@1, set to the MDP interface output. See [2] for + device graph info. + + - data-lanes: this describes how the physical DSI data lanes are mapped + to the logical lanes on the given platform. The value contained in + index n describes what physical lane is mapped to the logical lane n + (DATAn, where n lies between 0 and 3). The clock lane position is fixed + and can't be changed. Hence, they aren't a part of the DT bindings. See + [3] for more info on the data-lanes property. For example: - qcom,data-lane-map = <3 0 1 2>; + data-lanes = <3 0 1 2>; - The above mapping describes that the logical data lane DATA3 is mapped to - the physical data lane DATA0, logical DATA0 to physical DATA1, logic DATA1 - to phys DATA2 and logic DATA2 to phys DATA3. + The above mapping describes that the logical data lane DATA0 is mapped to + the physical data lane DATA3, logical DATA1 to physical DATA0, logic DATA2 + to phys DATA1 and logic DATA3 to phys DATA2. There are only a limited number of physical to logical mappings possible: - - "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic 3->Phys 3; - "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic 2->Phys 3; - "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic 1->Phys 3; - "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic 0->Phys 3; - "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic 1->Phys 3; - "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic 2->Phys 3; - "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic 3->Phys 3; - "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic 0->Phys 3; + <0 1 2 3> + <1 2 3 0> + <2 3 0 1> + <3 0 1 2> + <0 3 2 1> + <1 0 3 2> + <2 1 0 3> + <3 2 1 0> DSI PHY: Required properties: @@ -86,11 +94,12 @@ Required properties: * "dsi_pll" * "dsi_phy" * "dsi_phy_regulator" +- clock-cells: Must be 1. The DSI PHY block acts as a clock provider, creating + 2 clocks: A byte clock (index 0), and a pixel clock (index 1). - qcom,dsi-phy-index: The ID of DSI PHY hardware instance. This should be 0 or 1, since we have 2 DSI PHYs at most for now. - power-domains: Should be <&mmcc MDSS_GDSC>. -- clocks: device clocks - See Documentation/devicetree/bindings/clocks/clock-bindings.txt for details. +- clocks: Phandles to device clocks. See [1] for details on clock bindings. - clock-names: the following clocks are required: * "iface_clk" - vddio-supply: phandle to vdd-io regulator device node @@ -99,11 +108,16 @@ Optional properties: - qcom,dsi-phy-regulator-ldo-mode: Boolean value indicating if the LDO mode PHY regulator is wanted. +[1] Documentation/devicetree/bindings/clocks/clock-bindings.txt +[2] Documentation/devicetree/bindings/graph.txt +[3] Documentation/devicetree/bindings/media/video-interfaces.txt +[4] Documentation/devicetree/bindings/display/panel/ + Example: - mdss_dsi0: qcom,mdss_dsi@fd922800 { + dsi0: dsi@fd922800 { compatible = "qcom,mdss-dsi-ctrl"; qcom,dsi-host-index = <0>; - interrupt-parent = <&mdss_mdp>; + interrupt-parent = <&mdp>; interrupts = <4 0>; reg-names = "dsi_ctrl"; reg = <0xfd922800 0x200>; @@ -124,19 +138,48 @@ Example: <&mmcc MDSS_AHB_CLK>, <&mmcc MDSS_MDP_CLK>, <&mmcc MDSS_PCLK0_CLK>; + + assigned-clocks = + <&mmcc BYTE0_CLK_SRC>, + <&mmcc PCLK0_CLK_SRC>; + assigned-clock-parents = + <&dsi_phy0 0>, + <&dsi_phy0 1>; + vdda-supply = <&pma8084_l2>; vdd-supply = <&pma8084_l22>; vddio-supply = <&pma8084_l12>; - qcom,dsi-phy = <&mdss_dsi_phy0>; + phys = <&dsi_phy0>; + phy-names ="dsi-phy"; qcom,dual-dsi-mode; qcom,master-dsi; qcom,sync-dual-dsi; pinctrl-names = "default", "sleep"; - pinctrl-0 = <&mdss_dsi_active>; - pinctrl-1 = <&mdss_dsi_suspend>; + pinctrl-0 = <&dsi_active>; + pinctrl-1 = <&dsi_suspend>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + dsi0_in: endpoint { + remote-endpoint = <&mdp_intf1_out>; + }; + }; + + port@1 { + reg = <1>; + dsi0_out: endpoint { + remote-endpoint = <&panel_in>; + data-lanes = <0 1 2 3>; + }; + }; + }; panel: panel@0 { compatible = "sharp,lq101r1sx01"; @@ -152,16 +195,9 @@ Example: }; }; }; - - port { - dsi0_out: endpoint { - remote-endpoint = <&panel_in>; - lanes = <0 1 2 3>; - }; - }; }; - mdss_dsi_phy0: qcom,mdss_dsi_phy@fd922a00 { + dsi_phy0: dsi-phy@fd922a00 { compatible = "qcom,dsi-phy-28nm-hpm"; qcom,dsi-phy-index = <0>; reg-names = @@ -173,6 +209,7 @@ Example: <0xfd922d80 0x7b>; clock-names = "iface_clk"; clocks = <&mmcc MDSS_AHB_CLK>; + #clock-cells = <1>; vddio-supply = <&pma8084_l12>; qcom,dsi-phy-regulator-ldo-mode; diff --git a/Documentation/devicetree/bindings/display/msm/mdp.txt b/Documentation/devicetree/bindings/display/msm/mdp.txt deleted file mode 100644 index a214f6cd0363..000000000000 --- a/Documentation/devicetree/bindings/display/msm/mdp.txt +++ /dev/null @@ -1,59 +0,0 @@ -Qualcomm adreno/snapdragon display controller - -Required properties: -- compatible: - * "qcom,mdp4" - mdp4 - * "qcom,mdp5" - mdp5 -- reg: Physical base address and length of the controller's registers. -- interrupts: The interrupt signal from the display controller. -- connectors: array of phandles for output device(s) -- clocks: device clocks - See ../clocks/clock-bindings.txt for details. -- clock-names: the following clocks are required. - For MDP4: - * "core_clk" - * "iface_clk" - * "lut_clk" - * "src_clk" - * "hdmi_clk" - * "mdp_clk" - For MDP5: - * "bus_clk" - * "iface_clk" - * "core_clk_src" - * "core_clk" - * "lut_clk" (some MDP5 versions may not need this) - * "vsync_clk" - -Optional properties: -- gpus: phandle for gpu device -- clock-names: the following clocks are optional: - * "lut_clk" - -Example: - -/ { - ... - - mdp: qcom,mdp@5100000 { - compatible = "qcom,mdp4"; - reg = <0x05100000 0xf0000>; - interrupts = <GIC_SPI 75 0>; - connectors = <&hdmi>; - gpus = <&gpu>; - clock-names = - "core_clk", - "iface_clk", - "lut_clk", - "src_clk", - "hdmi_clk", - "mdp_clk"; - clocks = - <&mmcc MDP_SRC>, - <&mmcc MDP_AHB_CLK>, - <&mmcc MDP_LUT_CLK>, - <&mmcc TV_SRC>, - <&mmcc HDMI_TV_CLK>, - <&mmcc MDP_TV_CLK>; - }; -}; diff --git a/Documentation/devicetree/bindings/display/msm/mdp4.txt b/Documentation/devicetree/bindings/display/msm/mdp4.txt new file mode 100644 index 000000000000..3c341a15ccdc --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/mdp4.txt @@ -0,0 +1,112 @@ +Qualcomm adreno/snapdragon MDP4 display controller + +Description: + +This is the bindings documentation for the MDP4 display controller found in +SoCs like MSM8960, APQ8064 and MSM8660. + +Required properties: +- compatible: + * "qcom,mdp4" - mdp4 +- reg: Physical base address and length of the controller's registers. +- interrupts: The interrupt signal from the display controller. +- clocks: device clocks + See ../clocks/clock-bindings.txt for details. +- clock-names: the following clocks are required. + * "core_clk" + * "iface_clk" + * "bus_clk" + * "lut_clk" + * "hdmi_clk" + * "tv_clk" +- ports: contains the list of output ports from MDP. These connect to interfaces + that are external to the MDP hardware, such as HDMI, DSI, EDP etc (LVDS is a + special case since it is a part of the MDP block itself). + + Each output port contains an endpoint that describes how it is connected to an + external interface. These are described by the standard properties documented + here: + Documentation/devicetree/bindings/graph.txt + Documentation/devicetree/bindings/media/video-interfaces.txt + + The output port mappings are: + Port 0 -> LCDC/LVDS + Port 1 -> DSI1 Cmd/Video + Port 2 -> DSI2 Cmd/Video + Port 3 -> DTV + +Optional properties: +- clock-names: the following clocks are optional: + * "lut_clk" + +Example: + +/ { + ... + + hdmi: hdmi@4a00000 { + ... + ports { + ... + port@0 { + reg = <0>; + hdmi_in: endpoint { + remote-endpoint = <&mdp_dtv_out>; + }; + }; + ... + }; + ... + }; + + ... + + mdp: mdp@5100000 { + compatible = "qcom,mdp4"; + reg = <0x05100000 0xf0000>; + interrupts = <GIC_SPI 75 0>; + clock-names = + "core_clk", + "iface_clk", + "lut_clk", + "hdmi_clk", + "tv_clk"; + clocks = + <&mmcc MDP_CLK>, + <&mmcc MDP_AHB_CLK>, + <&mmcc MDP_AXI_CLK>, + <&mmcc MDP_LUT_CLK>, + <&mmcc HDMI_TV_CLK>, + <&mmcc MDP_TV_CLK>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + mdp_lvds_out: endpoint { + }; + }; + + port@1 { + reg = <1>; + mdp_dsi1_out: endpoint { + }; + }; + + port@2 { + reg = <2>; + mdp_dsi2_out: endpoint { + }; + }; + + port@3 { + reg = <3>; + mdp_dtv_out: endpoint { + remote-endpoint = <&hdmi_in>; + }; + }; + }; + }; +}; diff --git a/Documentation/devicetree/bindings/display/msm/mdp5.txt b/Documentation/devicetree/bindings/display/msm/mdp5.txt new file mode 100644 index 000000000000..30c11ea83754 --- /dev/null +++ b/Documentation/devicetree/bindings/display/msm/mdp5.txt @@ -0,0 +1,160 @@ +Qualcomm adreno/snapdragon MDP5 display controller + +Description: + +This is the bindings documentation for the Mobile Display Subsytem(MDSS) that +encapsulates sub-blocks like MDP5, DSI, HDMI, eDP etc, and the MDP5 display +controller found in SoCs like MSM8974, APQ8084, MSM8916, MSM8994 and MSM8996. + +MDSS: +Required properties: +- compatible: + * "qcom,mdss" - MDSS +- reg: Physical base address and length of the controller's registers. +- reg-names: The names of register regions. The following regions are required: + * "mdss_phys" + * "vbif_phys" +- interrupts: The interrupt signal from MDSS. +- interrupt-controller: identifies the node as an interrupt controller. +- #interrupt-cells: specifies the number of cells needed to encode an interrupt + source, should be 1. +- power-domains: a power domain consumer specifier according to + Documentation/devicetree/bindings/power/power_domain.txt +- clocks: device clocks. See ../clocks/clock-bindings.txt for details. +- clock-names: the following clocks are required. + * "iface_clk" + * "bus_clk" + * "vsync_clk" +- #address-cells: number of address cells for the MDSS children. Should be 1. +- #size-cells: Should be 1. +- ranges: parent bus address space is the same as the child bus address space. + +Optional properties: +- clock-names: the following clocks are optional: + * "lut_clk" + +MDP5: +Required properties: +- compatible: + * "qcom,mdp5" - MDP5 +- reg: Physical base address and length of the controller's registers. +- reg-names: The names of register regions. The following regions are required: + * "mdp_phys" +- interrupts: Interrupt line from MDP5 to MDSS interrupt controller. +- interrupt-parent: phandle to the MDSS block + through MDP block +- clocks: device clocks. See ../clocks/clock-bindings.txt for details. +- clock-names: the following clocks are required. +- * "bus_clk" +- * "iface_clk" +- * "core_clk" +- * "vsync_clk" +- ports: contains the list of output ports from MDP. These connect to interfaces + that are external to the MDP hardware, such as HDMI, DSI, EDP etc (LVDS is a + special case since it is a part of the MDP block itself). + + Each output port contains an endpoint that describes how it is connected to an + external interface. These are described by the standard properties documented + here: + Documentation/devicetree/bindings/graph.txt + Documentation/devicetree/bindings/media/video-interfaces.txt + + The availability of output ports can vary across SoC revisions: + + For MSM8974 and APQ8084: + Port 0 -> MDP_INTF0 (eDP) + Port 1 -> MDP_INTF1 (DSI1) + Port 2 -> MDP_INTF2 (DSI2) + Port 3 -> MDP_INTF3 (HDMI) + + For MSM8916: + Port 0 -> MDP_INTF1 (DSI1) + + For MSM8994 and MSM8996: + Port 0 -> MDP_INTF1 (DSI1) + Port 1 -> MDP_INTF2 (DSI2) + Port 2 -> MDP_INTF3 (HDMI) + +Optional properties: +- clock-names: the following clocks are optional: + * "lut_clk" + +Example: + +/ { + ... + + mdss: mdss@1a00000 { + compatible = "qcom,mdss"; + reg = <0x1a00000 0x1000>, + <0x1ac8000 0x3000>; + reg-names = "mdss_phys", "vbif_phys"; + + power-domains = <&gcc MDSS_GDSC>; + + clocks = <&gcc GCC_MDSS_AHB_CLK>, + <&gcc GCC_MDSS_AXI_CLK>, + <&gcc GCC_MDSS_VSYNC_CLK>; + clock-names = "iface_clk", + "bus_clk", + "vsync_clk" + + interrupts = <0 72 0>; + + interrupt-controller; + #interrupt-cells = <1>; + + #address-cells = <1>; + #size-cells = <1>; + ranges; + + mdp: mdp@1a01000 { + compatible = "qcom,mdp5"; + reg = <0x1a01000 0x90000>; + reg-names = "mdp_phys"; + + interrupt-parent = <&mdss>; + interrupts = <0 0>; + + clocks = <&gcc GCC_MDSS_AHB_CLK>, + <&gcc GCC_MDSS_AXI_CLK>, + <&gcc GCC_MDSS_MDP_CLK>, + <&gcc GCC_MDSS_VSYNC_CLK>; + clock-names = "iface_clk", + "bus_clk", + "core_clk", + "vsync_clk"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + mdp5_intf1_out: endpoint { + remote-endpoint = <&dsi0_in>; + }; + }; + }; + }; + + dsi0: dsi@1a98000 { + ... + ports { + ... + port@0 { + reg = <0>; + dsi0_in: endpoint { + remote-endpoint = <&mdp5_intf1_out>; + }; + }; + ... + }; + ... + }; + + dsi_phy0: dsi-phy@1a98300 { + ... + }; + }; +}; diff --git a/Documentation/devicetree/bindings/display/panel/lg,lp079qx1-sp0v.txt b/Documentation/devicetree/bindings/display/panel/lg,lp079qx1-sp0v.txt new file mode 100644 index 000000000000..b9877acad012 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/lg,lp079qx1-sp0v.txt @@ -0,0 +1,7 @@ +LG LP079QX1-SP0V 7.9" (1536x2048 pixels) TFT LCD panel + +Required properties: +- compatible: should be "lg,lp079qx1-sp0v" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/display/panel/lg,lp097qx1-spa1.txt b/Documentation/devicetree/bindings/display/panel/lg,lp097qx1-spa1.txt new file mode 100644 index 000000000000..42141516f078 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/lg,lp097qx1-spa1.txt @@ -0,0 +1,7 @@ +LG 9.7" (2048x1536 pixels) TFT LCD panel + +Required properties: +- compatible: should be "lg,lp097qx1-spa1" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/display/panel/panel-dpi.txt b/Documentation/devicetree/bindings/display/panel/panel-dpi.txt index 216c894d4f99..b52ac52757df 100644 --- a/Documentation/devicetree/bindings/display/panel/panel-dpi.txt +++ b/Documentation/devicetree/bindings/display/panel/panel-dpi.txt @@ -7,6 +7,8 @@ Required properties: Optional properties: - label: a symbolic name for the panel - enable-gpios: panel enable gpio +- reset-gpios: GPIO to control the RESET pin +- vcc-supply: phandle of regulator that will be used to enable power to the display Required nodes: - "panel-timing" containing video timings diff --git a/Documentation/devicetree/bindings/display/panel/samsung,lsn122dl01-c01.txt b/Documentation/devicetree/bindings/display/panel/samsung,lsn122dl01-c01.txt new file mode 100644 index 000000000000..dba298b43b24 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/samsung,lsn122dl01-c01.txt @@ -0,0 +1,7 @@ +Samsung 12.2" (2560x1600 pixels) TFT LCD panel + +Required properties: +- compatible: should be "samsung,lsn122dl01-c01" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/display/panel/sharp,lq101k1ly04.txt b/Documentation/devicetree/bindings/display/panel/sharp,lq101k1ly04.txt new file mode 100644 index 000000000000..4aff25b8dfe6 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/sharp,lq101k1ly04.txt @@ -0,0 +1,7 @@ +Sharp Display Corp. LQ101K1LY04 10.07" WXGA TFT LCD panel + +Required properties: +- compatible: should be "sharp,lq101k1ly04" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/display/panel/sharp,lq123p1jx31.txt b/Documentation/devicetree/bindings/display/panel/sharp,lq123p1jx31.txt new file mode 100644 index 000000000000..bcb0e8a29f71 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/sharp,lq123p1jx31.txt @@ -0,0 +1,7 @@ +Sharp 12.3" (2400x1600 pixels) TFT LCD panel + +Required properties: +- compatible: should be "sharp,lq123p1jx31" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/display/panel/starry,kr122ea0sra.txt b/Documentation/devicetree/bindings/display/panel/starry,kr122ea0sra.txt new file mode 100644 index 000000000000..1e87fe6078af --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/starry,kr122ea0sra.txt @@ -0,0 +1,7 @@ +Starry 12.2" (1920x1200 pixels) TFT LCD panel + +Required properties: +- compatible: should be "starry,kr122ea0sra" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt index e832ff98fd61..01cced1c2a18 100644 --- a/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt +++ b/Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt @@ -2,7 +2,8 @@ Rockchip RK3288 specific extensions to the Analogix Display Port ================================ Required properties: -- compatible: "rockchip,rk3288-edp"; +- compatible: "rockchip,rk3288-dp", + "rockchip,rk3399-edp"; - reg: physical base address of the controller and length @@ -27,6 +28,12 @@ Required properties: Port 0: contained 2 endpoints, connecting to the output of vop. Port 1: contained 1 endpoint, connecting to the input of panel. +Optional property for different chips: +- clocks: from common clock binding: handle to grf_vio clock. + +- clock-names: from common clock binding: + Required elements: "grf" + For the below properties, please refer to Analogix DP binding document: * Documentation/devicetree/bindings/drm/bridge/analogix_dp.txt - phys (required) diff --git a/Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.txt b/Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.txt index a3bd8c050c4e..0fad7ed2ea19 100644 --- a/Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.txt +++ b/Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.txt @@ -208,6 +208,7 @@ of the following host1x client modules: See ../clocks/clock-bindings.txt for details. - clock-names: Must include the following entries: - sor: clock input for the SOR hardware + - source: source clock for the SOR clock - parent: input for the pixel clock - dp: reference clock for the SOR clock - safe: safe reference for the SOR clock during power up @@ -226,9 +227,9 @@ of the following host1x client modules: - nvidia,dpaux: phandle to a DispayPort AUX interface - dpaux: DisplayPort AUX interface - - compatible: For Tegra124, must contain "nvidia,tegra124-dpaux". Otherwise, - must contain '"nvidia,<chip>-dpaux", "nvidia,tegra124-dpaux"', where - <chip> is tegra132. + - compatible : Should contain one of the following: + - "nvidia,tegra124-dpaux": for Tegra124 and Tegra132 + - "nvidia,tegra210-dpaux": for Tegra210 - reg: Physical base address and length of the controller's registers. - interrupts: The interrupt outputs from the controller. - clocks: Must contain an entry for each entry in clock-names. @@ -241,6 +242,12 @@ of the following host1x client modules: - reset-names: Must include the following entries: - dpaux - vdd-supply: phandle of a supply that powers the DisplayPort link + - i2c-bus: Subnode where I2C slave devices are listed. This subnode + must be always present. If there are no I2C slave devices, an empty + node should be added. See ../../i2c/i2c.txt for more information. + + See ../pinctrl/nvidia,tegra124-dpaux-padctl.txt for information + regarding the DPAUX pad controller bindings. Example: diff --git a/Documentation/devicetree/bindings/dma/ti-edma.txt b/Documentation/devicetree/bindings/dma/ti-edma.txt index 079b42a81d7c..18090e7226b4 100644 --- a/Documentation/devicetree/bindings/dma/ti-edma.txt +++ b/Documentation/devicetree/bindings/dma/ti-edma.txt @@ -15,7 +15,7 @@ Required properties: - reg: Memory map of eDMA CC - reg-names: "edma3_cc" - interrupts: Interrupt lines for CCINT, MPERR and CCERRINT. -- interrupt-names: "edma3_ccint", "emda3_mperr" and "edma3_ccerrint" +- interrupt-names: "edma3_ccint", "edma3_mperr" and "edma3_ccerrint" - ti,tptcs: List of TPTCs associated with the eDMA in the following form: <&tptc_phandle TC_priority_number>. The highest priority is 0. @@ -48,7 +48,7 @@ edma: edma@49000000 { reg = <0x49000000 0x10000>; reg-names = "edma3_cc"; interrupts = <12 13 14>; - interrupt-names = "edma3_ccint", "emda3_mperr", "edma3_ccerrint"; + interrupt-names = "edma3_ccint", "edma3_mperr", "edma3_ccerrint"; dma-requests = <64>; #dma-cells = <2>; diff --git a/Documentation/devicetree/bindings/firmware/qcom,scm.txt b/Documentation/devicetree/bindings/firmware/qcom,scm.txt new file mode 100644 index 000000000000..3b4436e56865 --- /dev/null +++ b/Documentation/devicetree/bindings/firmware/qcom,scm.txt @@ -0,0 +1,28 @@ +QCOM Secure Channel Manager (SCM) + +Qualcomm processors include an interface to communicate to the secure firmware. +This interface allows for clients to request different types of actions. These +can include CPU power up/down, HDCP requests, loading of firmware, and other +assorted actions. + +Required properties: +- compatible: must contain one of the following: + * "qcom,scm-apq8064" for APQ8064 platforms + * "qcom,scm-msm8660" for MSM8660 platforms + * "qcom,scm-msm8690" for MSM8690 platforms + * "qcom,scm" for later processors (MSM8916, APQ8084, MSM8974, etc) +- clocks: One to three clocks may be required based on compatible. + * Only core clock required for "qcom,scm-apq8064", "qcom,scm-msm8660", and "qcom,scm-msm8960" + * Core, iface, and bus clocks required for "qcom,scm" +- clock-names: Must contain "core" for the core clock, "iface" for the interface + clock and "bus" for the bus clock per the requirements of the compatible. + +Example for MSM8916: + + firmware { + scm { + compatible = "qcom,scm"; + clocks = <&gcc GCC_CRYPTO_CLK> , <&gcc GCC_CRYPTO_AXI_CLK>, <&gcc GCC_CRYPTO_AHB_CLK>; + clock-names = "core", "bus", "iface"; + }; + }; diff --git a/Documentation/devicetree/bindings/iio/adc/at91_adc.txt b/Documentation/devicetree/bindings/iio/adc/at91_adc.txt index 0f813dec5e08..f65b04fb7962 100644 --- a/Documentation/devicetree/bindings/iio/adc/at91_adc.txt +++ b/Documentation/devicetree/bindings/iio/adc/at91_adc.txt @@ -59,28 +59,24 @@ adc0: adc@fffb0000 { atmel,adc-res-names = "lowres", "highres"; atmel,adc-use-res = "lowres"; - trigger@0 { - reg = <0>; + trigger0 { trigger-name = "external-rising"; trigger-value = <0x1>; trigger-external; }; - trigger@1 { - reg = <1>; + trigger1 { trigger-name = "external-falling"; trigger-value = <0x2>; trigger-external; }; - trigger@2 { - reg = <2>; + trigger2 { trigger-name = "external-any"; trigger-value = <0x3>; trigger-external; }; - trigger@3 { - reg = <3>; + trigger3 { trigger-name = "continuous"; trigger-value = <0x6>; }; diff --git a/Documentation/devicetree/bindings/input/clps711x-keypad.txt b/Documentation/devicetree/bindings/input/clps711x-keypad.txt index e68d2bbc6c07..3eed8819d05d 100644 --- a/Documentation/devicetree/bindings/input/clps711x-keypad.txt +++ b/Documentation/devicetree/bindings/input/clps711x-keypad.txt @@ -1,7 +1,7 @@ * Cirrus Logic CLPS711X matrix keypad device tree bindings Required Properties: -- compatible: Shall contain "cirrus,clps711x-keypad". +- compatible: Shall contain "cirrus,ep7209-keypad". - row-gpios: List of GPIOs used as row lines. - poll-interval: Poll interval time in milliseconds. - linux,keymap: The definition can be found at @@ -12,7 +12,7 @@ Optional Properties: Example: keypad { - compatible = "cirrus,ep7312-keypad", "cirrus,clps711x-keypad"; + compatible = "cirrus,ep7312-keypad", "cirrus,ep7209-keypad"; autorepeat; poll-interval = <120>; row-gpios = <&porta 0 0>, diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt index 6c9f0c8a846c..e85ce3dea480 100644 --- a/Documentation/devicetree/bindings/input/rotary-encoder.txt +++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt @@ -20,6 +20,8 @@ Optional properties: 2: Half-period mode 4: Quarter-period mode - wakeup-source: Boolean, rotary encoder can wake up the system. +- rotary-encoder,encoding: String, the method used to encode steps. + Supported are "gray" (the default and more common) and "binary". Deprecated properties: - rotary-encoder,half-period: Makes the driver work on half-period mode. @@ -34,6 +36,7 @@ Example: compatible = "rotary-encoder"; gpios = <&gpio 19 1>, <&gpio 20 0>; /* GPIO19 is inverted */ linux,axis = <0>; /* REL_X */ + rotary-encoder,encoding = "gray"; rotary-encoder,relative-axis; }; @@ -42,5 +45,6 @@ Example: gpios = <&gpio 21 0>, <&gpio 22 0>; linux,axis = <1>; /* ABS_Y */ rotary-encoder,steps = <24>; + rotary-encoder,encoding = "binary"; rotary-encoder,rollover; }; diff --git a/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt b/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt new file mode 100644 index 000000000000..1112e0d794e1 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt @@ -0,0 +1,36 @@ +* GSL 1680 touchscreen controller + +Required properties: +- compatible : "silead,gsl1680" +- reg : I2C slave address of the chip (0x40) +- interrupt-parent : a phandle pointing to the interrupt controller + serving the interrupt for this chip +- interrupts : interrupt specification for the gsl1680 interrupt +- power-gpios : Specification for the pin connected to the gsl1680's + shutdown input. This needs to be driven high to take the + gsl1680 out of its low power state +- touchscreen-size-x : See touchscreen.txt +- touchscreen-size-y : See touchscreen.txt + +Optional properties: +- touchscreen-inverted-x : See touchscreen.txt +- touchscreen-inverted-y : See touchscreen.txt +- touchscreen-swapped-x-y : See touchscreen.txt +- silead,max-fingers : maximum number of fingers the touchscreen can detect + +Example: + +i2c@00000000 { + gsl1680: touchscreen@40 { + compatible = "silead,gsl1680"; + reg = <0x40>; + interrupt-parent = <&pio>; + interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>; + power-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; + touchscreen-size-x = <480>; + touchscreen-size-y = <800>; + touchscreen-inverted-x; + touchscreen-swapped-x-y; + silead,max-fingers = <5>; + }; +}; diff --git a/Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt b/Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt new file mode 100644 index 000000000000..d87ad14f1efe --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/sis_i2c.txt @@ -0,0 +1,33 @@ +* SiS I2C Multiple Touch Controller + +Required properties: +- compatible: must be "sis,9200-ts" +- reg: i2c slave address +- interrupt-parent: the phandle for the interrupt controller + (see interrupt binding [0]) +- interrupts: touch controller interrupt (see interrupt + binding [0]) + +Optional properties: +- pinctrl-names: should be "default" (see pinctrl binding [1]). +- pinctrl-0: a phandle pointing to the pin settings for the + device (see pinctrl binding [1]). +- attn-gpios: the gpio pin used as attention line +- reset-gpios: the gpio pin used to reset the controller +- wakeup-source: touchscreen can be used as a wakeup source + +[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt +[1]: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt + +Example: + + sis9255@5c { + compatible = "sis,9200-ts"; + reg = <0x5c>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_sis>; + interrupt-parent = <&gpio3>; + interrupts = <19 IRQ_TYPE_EDGE_FALLING>; + irq-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>; + reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; + }; diff --git a/Documentation/devicetree/bindings/interrupt-controller/cirrus,clps711x-intc.txt b/Documentation/devicetree/bindings/interrupt-controller/cirrus,clps711x-intc.txt index 759339c34e4f..969b4582ec60 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/cirrus,clps711x-intc.txt +++ b/Documentation/devicetree/bindings/interrupt-controller/cirrus,clps711x-intc.txt @@ -2,7 +2,7 @@ Cirrus Logic CLPS711X Interrupt Controller Required properties: -- compatible: Should be "cirrus,clps711x-intc". +- compatible: Should be "cirrus,ep7209-intc". - reg: Specifies base physical address of the registers set. - interrupt-controller: Identifies the node as an interrupt controller. - #interrupt-cells: Specifies the number of cells needed to encode an @@ -34,7 +34,7 @@ ID Name Description Example: intc: interrupt-controller { - compatible = "cirrus,clps711x-intc"; + compatible = "cirrus,ep7312-intc", "cirrus,ep7209-intc"; reg = <0x80000000 0x4000>; interrupt-controller; #interrupt-cells = <1>; diff --git a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt index 8cf564d083d2..9d1d72c65489 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt +++ b/Documentation/devicetree/bindings/interrupt-controller/mediatek,sysirq.txt @@ -9,6 +9,7 @@ Required properties: "mediatek,mt8135-sysirq" "mediatek,mt8127-sysirq" "mediatek,mt6795-sysirq" + "mediatek,mt6755-sysirq" "mediatek,mt6592-sysirq" "mediatek,mt6589-sysirq" "mediatek,mt6582-sysirq" diff --git a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt index 947863acc2d4..7b94c88cf2ee 100644 --- a/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt +++ b/Documentation/devicetree/bindings/iommu/arm,smmu-v3.txt @@ -1,6 +1,6 @@ * ARM SMMUv3 Architecture Implementation -The SMMUv3 architecture is a significant deparature from previous +The SMMUv3 architecture is a significant departure from previous revisions, replacing the MMIO register interface with in-memory command and event queues and adding support for the ATS and PRI components of the PCIe specification. diff --git a/Documentation/devicetree/bindings/iommu/mediatek,iommu.txt b/Documentation/devicetree/bindings/iommu/mediatek,iommu.txt index cd1b1cd7b5c4..53c20cae309f 100644 --- a/Documentation/devicetree/bindings/iommu/mediatek,iommu.txt +++ b/Documentation/devicetree/bindings/iommu/mediatek,iommu.txt @@ -1,7 +1,9 @@ * Mediatek IOMMU Architecture Implementation - Some Mediatek SOCs contain a Multimedia Memory Management Unit (M4U) which -uses the ARM Short-Descriptor translation table format for address translation. + Some Mediatek SOCs contain a Multimedia Memory Management Unit (M4U), and +this M4U have two generations of HW architecture. Generation one uses flat +pagetable, and only supports 4K size page mapping. Generation two uses the +ARM Short-Descriptor translation table format for address translation. About the M4U Hardware Block Diagram, please check below: @@ -36,7 +38,9 @@ in each larb. Take a example, There are many ports like MC, PP, VLD in the video decode local arbiter, all these ports are according to the video HW. Required properties: -- compatible : must be "mediatek,mt8173-m4u". +- compatible : must be one of the following string: + "mediatek,mt2701-m4u" for mt2701 which uses generation one m4u HW. + "mediatek,mt8173-m4u" for mt8173 which uses generation two m4u HW. - reg : m4u register base and size. - interrupts : the interrupt of m4u. - clocks : must contain one entry for each clock-names. @@ -46,7 +50,8 @@ Required properties: according to the local arbiter index, like larb0, larb1, larb2... - iommu-cells : must be 1. This is the mtk_m4u_id according to the HW. Specifies the mtk_m4u_id as defined in - dt-binding/memory/mt8173-larb-port.h. + dt-binding/memory/mt2701-larb-port.h for mt2701 and + dt-binding/memory/mt8173-larb-port.h for mt8173 Example: iommu: iommu@10205000 { diff --git a/Documentation/devicetree/bindings/iommu/msm,iommu-v0.txt b/Documentation/devicetree/bindings/iommu/msm,iommu-v0.txt new file mode 100644 index 000000000000..20236385f26e --- /dev/null +++ b/Documentation/devicetree/bindings/iommu/msm,iommu-v0.txt @@ -0,0 +1,64 @@ +* QCOM IOMMU + +The MSM IOMMU is an implementation compatible with the ARM VMSA short +descriptor page tables. It provides address translation for bus masters outside +of the CPU, each connected to the IOMMU through a port called micro-TLB. + +Required Properties: + + - compatible: Must contain "qcom,apq8064-iommu". + - reg: Base address and size of the IOMMU registers. + - interrupts: Specifiers for the MMU fault interrupts. For instances that + support secure mode two interrupts must be specified, for non-secure and + secure mode, in that order. For instances that don't support secure mode a + single interrupt must be specified. + - #iommu-cells: The number of cells needed to specify the stream id. This + is always 1. + - qcom,ncb: The total number of context banks in the IOMMU. + - clocks : List of clocks to be used during SMMU register access. See + Documentation/devicetree/bindings/clock/clock-bindings.txt + for information about the format. For each clock specified + here, there must be a corresponding entry in clock-names + (see below). + + - clock-names : List of clock names corresponding to the clocks specified in + the "clocks" property (above). + Should be "smmu_pclk" for specifying the interface clock + required for iommu's register accesses. + Should be "smmu_clk" for specifying the functional clock + required by iommu for bus accesses. + +Each bus master connected to an IOMMU must reference the IOMMU in its device +node with the following property: + + - iommus: A reference to the IOMMU in multiple cells. The first cell is a + phandle to the IOMMU and the second cell is the stream id. + A single master device can be connected to more than one iommu + and multiple contexts in each of the iommu. So multiple entries + are required to list all the iommus and the stream ids that the + master is connected to. + +Example: mdp iommu and its bus master + + mdp_port0: iommu@7500000 { + compatible = "qcom,apq8064-iommu"; + #iommu-cells = <1>; + clock-names = + "smmu_pclk", + "smmu_clk"; + clocks = + <&mmcc SMMU_AHB_CLK>, + <&mmcc MDP_AXI_CLK>; + reg = <0x07500000 0x100000>; + interrupts = + <GIC_SPI 63 0>, + <GIC_SPI 64 0>; + qcom,ncb = <2>; + }; + + mdp: qcom,mdp@5100000 { + compatible = "qcom,mdp"; + ... + iommus = <&mdp_port0 0 + &mdp_port0 2>; + }; diff --git a/Documentation/devicetree/bindings/leds/backlight/lp855x.txt b/Documentation/devicetree/bindings/leds/backlight/lp855x.txt index 0a3ecbc3a1b9..88f56641fc28 100644 --- a/Documentation/devicetree/bindings/leds/backlight/lp855x.txt +++ b/Documentation/devicetree/bindings/leds/backlight/lp855x.txt @@ -13,6 +13,7 @@ Optional properties: - rom-addr: Register address of ROM area to be updated (u8) - rom-val: Register value to be updated (u8) - power-supply: Regulator which controls the 3V rail + - enable-supply: Regulator which controls the EN/VDDIO input Example: @@ -57,6 +58,7 @@ Example: backlight@2c { compatible = "ti,lp8557"; reg = <0x2c>; + enable-supply = <&backlight_vddio>; power-supply = <&backlight_vdd>; dev-ctrl = /bits/ 8 <0x41>; diff --git a/Documentation/devicetree/bindings/mailbox/brcm,iproc-pdc-mbox.txt b/Documentation/devicetree/bindings/mailbox/brcm,iproc-pdc-mbox.txt new file mode 100644 index 000000000000..411ccf421584 --- /dev/null +++ b/Documentation/devicetree/bindings/mailbox/brcm,iproc-pdc-mbox.txt @@ -0,0 +1,23 @@ +The PDC driver manages data transfer to and from various offload engines +on some Broadcom SoCs. An SoC may have multiple PDC hardware blocks. There is +one device tree entry per block. + +Required properties: +- compatible : Should be "brcm,iproc-pdc-mbox". +- reg: Should contain PDC registers location and length. +- interrupts: Should contain the IRQ line for the PDC. +- #mbox-cells: 1 +- brcm,rx-status-len: Length of metadata preceding received frames, in bytes. + +Optional properties: +- brcm,use-bcm-hdr: present if a BCM header precedes each frame. + +Example: + pdc0: iproc-pdc0@0x612c0000 { + compatible = "brcm,iproc-pdc-mbox"; + reg = <0 0x612c0000 0 0x445>; /* PDC FS0 regs */ + interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>; + #mbox-cells = <1>; /* one cell per mailbox channel */ + brcm,rx-status-len = <32>; + brcm,use-bcm-hdr; + }; diff --git a/Documentation/devicetree/bindings/media/nokia,n900-ir b/Documentation/devicetree/bindings/media/nokia,n900-ir new file mode 100644 index 000000000000..13a18ce37dd1 --- /dev/null +++ b/Documentation/devicetree/bindings/media/nokia,n900-ir @@ -0,0 +1,20 @@ +Device-Tree bindings for LIRC TX driver for Nokia N900(RX51) + +Required properties: + - compatible: should be "nokia,n900-ir". + - pwms: specifies PWM used for IR signal transmission. + +Example node: + + pwm9: dmtimer-pwm@9 { + compatible = "ti,omap-dmtimer-pwm"; + ti,timers = <&timer9>; + ti,clock-source = <0x00>; /* timer_sys_ck */ + #pwm-cells = <3>; + }; + + ir: n900-ir { + compatible = "nokia,n900-ir"; + + pwms = <&pwm9 0 26316 0>; /* 38000 Hz */ + }; diff --git a/Documentation/devicetree/bindings/memory-controllers/atmel,ebi.txt b/Documentation/devicetree/bindings/memory-controllers/atmel,ebi.txt new file mode 100644 index 000000000000..9bb5f57e2066 --- /dev/null +++ b/Documentation/devicetree/bindings/memory-controllers/atmel,ebi.txt @@ -0,0 +1,136 @@ +* Device tree bindings for Atmel EBI + +The External Bus Interface (EBI) controller is a bus where you can connect +asynchronous (NAND, NOR, SRAM, ....) and synchronous memories (SDR/DDR SDRAMs). +The EBI provides a glue-less interface to asynchronous memories through the SMC +(Static Memory Controller). + +Required properties: + +- compatible: "atmel,at91sam9260-ebi" + "atmel,at91sam9261-ebi" + "atmel,at91sam9263-ebi0" + "atmel,at91sam9263-ebi1" + "atmel,at91sam9rl-ebi" + "atmel,at91sam9g45-ebi" + "atmel,at91sam9x5-ebi" + "atmel,sama5d3-ebi" + +- reg: Contains offset/length value for EBI memory mapping. + This property might contain several entries if the EBI + memory range is not contiguous + +- #address-cells: Must be 2. + The first cell encodes the CS. + The second cell encode the offset into the CS memory + range. + +- #size-cells: Must be set to 1. + +- ranges: Encodes CS to memory region association. + +- clocks: Clock feeding the EBI controller. + See clock-bindings.txt + +Children device nodes are representing device connected to the EBI bus. + +Required device node properties: + +- reg: Contains the chip-select id, the offset and the length + of the memory region requested by the device. + +EBI bus configuration will be defined directly in the device subnode. + +Optional EBI/SMC properties: + +- atmel,smc-bus-width: width of the asynchronous device's data bus + 8, 16 or 32. + Default to 8 when undefined. + +- atmel,smc-byte-access-type "write" or "select" (see Atmel datasheet). + Default to "select" when undefined. + +- atmel,smc-read-mode "nrd" or "ncs". + Default to "ncs" when undefined. + +- atmel,smc-write-mode "nwe" or "ncs". + Default to "ncs" when undefined. + +- atmel,smc-exnw-mode "disabled", "frozen" or "ready". + Default to "disabled" when undefined. + +- atmel,smc-page-mode enable page mode if present. The provided value + defines the page size (supported values: 4, 8, + 16 and 32). + +- atmel,smc-tdf-mode: "normal" or "optimized". When set to + "optimized" the data float time is optimized + depending on the next device being accessed + (next device setup time is subtracted to the + current device data float time). + Default to "normal" when undefined. + +If at least one atmel,smc- property is defined the following SMC timing +properties become mandatory. In the other hand, if none of the atmel,smc- +properties are specified, we assume that the EBI bus configuration will be +handled by the sub-device driver, and none of those properties should be +defined. + +All the timings are expressed in nanoseconds (see Atmel datasheet for a full +description). + +- atmel,smc-ncs-rd-setup-ns +- atmel,smc-nrd-setup-ns +- atmel,smc-ncs-wr-setup-ns +- atmel,smc-nwe-setup-ns +- atmel,smc-ncs-rd-pulse-ns +- atmel,smc-nrd-pulse-ns +- atmel,smc-ncs-wr-pulse-ns +- atmel,smc-nwe-pulse-ns +- atmel,smc-nwe-cycle-ns +- atmel,smc-nrd-cycle-ns +- atmel,smc-tdf-ns + +Example: + + ebi: ebi@10000000 { + compatible = "atmel,sama5d3-ebi"; + #address-cells = <2>; + #size-cells = <1>; + atmel,smc = <&hsmc>; + atmel,matrix = <&matrix>; + reg = <0x10000000 0x10000000 + 0x40000000 0x30000000>; + ranges = <0x0 0x0 0x10000000 0x10000000 + 0x1 0x0 0x40000000 0x10000000 + 0x2 0x0 0x50000000 0x10000000 + 0x3 0x0 0x60000000 0x10000000>; + clocks = <&mck>; + + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ebi_addr>; + + nor: flash@0,0 { + compatible = "cfi-flash"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x0 0x0 0x1000000>; + bank-width = <2>; + + atmel,smc-read-mode = "nrd"; + atmel,smc-write-mode = "nwe"; + atmel,smc-bus-width = <16>; + atmel,smc-ncs-rd-setup-ns = <0>; + atmel,smc-ncs-wr-setup-ns = <0>; + atmel,smc-nwe-setup-ns = <8>; + atmel,smc-nrd-setup-ns = <16>; + atmel,smc-ncs-rd-pulse-ns = <84>; + atmel,smc-ncs-wr-pulse-ns = <84>; + atmel,smc-nrd-pulse-ns = <76>; + atmel,smc-nwe-pulse-ns = <76>; + atmel,smc-nrd-cycle-ns = <107>; + atmel,smc-nwe-cycle-ns = <84>; + atmel,smc-tdf-ns = <16>; + }; + }; + diff --git a/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-common.txt b/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-common.txt index 06a83ceebba7..aa614b2d7cab 100644 --- a/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-common.txt +++ b/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-common.txt @@ -2,16 +2,31 @@ SMI (Smart Multimedia Interface) Common The hardware block diagram please check bindings/iommu/mediatek,iommu.txt +Mediatek SMI have two generations of HW architecture, mt8173 uses the second +generation of SMI HW while mt2701 uses the first generation HW of SMI. + +There's slight differences between the two SMI, for generation 2, the +register which control the iommu port is at each larb's register base. But +for generation 1, the register is at smi ao base(smi always on register +base). Besides that, the smi async clock should be prepared and enabled for +SMI generation 1 to transform the smi clock into emi clock domain, but that is +not needed for SMI generation 2. + Required properties: -- compatible : must be "mediatek,mt8173-smi-common" +- compatible : must be one of : + "mediatek,mt2701-smi-common" + "mediatek,mt8173-smi-common" - reg : the register and size of the SMI block. - power-domains : a phandle to the power domain of this local arbiter. - clocks : Must contain an entry for each entry in clock-names. -- clock-names : must contain 2 entries, as follows: +- clock-names : must contain 3 entries for generation 1 smi HW and 2 entries + for generation 2 smi HW as follows: - "apb" : Advanced Peripheral Bus clock, It's the clock for setting the register. - "smi" : It's the clock for transfer data and command. - They may be the same if both source clocks are the same. + They may be the same if both source clocks are the same. + - "async" : asynchronous clock, it help transform the smi clock into the emi + clock domain, this clock is only needed by generation 1 smi HW. Example: smi_common: smi@14022000 { diff --git a/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt b/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt index 55ff3b7e0bb9..21277a56e94c 100644 --- a/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt +++ b/Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt @@ -3,7 +3,9 @@ SMI (Smart Multimedia Interface) Local Arbiter The hardware block diagram please check bindings/iommu/mediatek,iommu.txt Required properties: -- compatible : must be "mediatek,mt8173-smi-larb" +- compatible : must be one of : + "mediatek,mt8173-smi-larb" + "mediatek,mt2701-smi-larb" - reg : the register and size of this local arbiter. - mediatek,smi : a phandle to the smi_common node. - power-domains : a phandle to the power domain of this local arbiter. diff --git a/Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt b/Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt index 21055e210234..c1359f4d48d7 100644 --- a/Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt +++ b/Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt @@ -46,6 +46,10 @@ Required properties: 0 maps to GPMC_WAIT0 pin. - gpio-cells: Must be set to 2 +Required properties when using NAND prefetch dma: + - dmas GPMC NAND prefetch dma channel + - dma-names Must be set to "rxtx" + Timing properties for child nodes. All are optional and default to 0. - gpmc,sync-clk-ps: Minimum clock period for synchronous mode, in picoseconds @@ -137,7 +141,8 @@ Example for an AM33xx board: ti,hwmods = "gpmc"; reg = <0x50000000 0x2000>; interrupts = <100>; - + dmas = <&edma 52 0>; + dma-names = "rxtx"; gpmc,num-cs = <8>; gpmc,num-waitpins = <2>; #address-cells = <2>; diff --git a/Documentation/devicetree/bindings/mfd/twl6040.txt b/Documentation/devicetree/bindings/mfd/twl6040.txt index a41157b5d930..e6afdfa3543d 100644 --- a/Documentation/devicetree/bindings/mfd/twl6040.txt +++ b/Documentation/devicetree/bindings/mfd/twl6040.txt @@ -19,8 +19,8 @@ Required properties: Optional properties, nodes: - enable-active-high: To power on the twl6040 during boot. -- clocks: phandle to the clk32k clock provider -- clock-names: Must be "clk32k" +- clocks: phandle to the clk32k and/or to mclk clock provider +- clock-names: Must be "clk32k" for the 32K clock and "mclk" for the MCLK. Vibra functionality Required properties: diff --git a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt index 31b35c3a5e47..3404afa9b938 100644 --- a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt +++ b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt @@ -9,8 +9,12 @@ Device Tree Bindings for the Arasan SDHCI Controller [4] Documentation/devicetree/bindings/phy/phy-bindings.txt Required Properties: - - compatible: Compatibility string. Must be 'arasan,sdhci-8.9a' or - 'arasan,sdhci-4.9a' or 'arasan,sdhci-5.1' + - compatible: Compatibility string. One of: + - "arasan,sdhci-8.9a": generic Arasan SDHCI 8.9a PHY + - "arasan,sdhci-4.9a": generic Arasan SDHCI 4.9a PHY + - "arasan,sdhci-5.1": generic Arasan SDHCI 5.1 PHY + - "rockchip,rk3399-sdhci-5.1", "arasan,sdhci-5.1": rk3399 eMMC PHY + For this device it is strongly suggested to include arasan,soc-ctl-syscon. - reg: From mmc bindings: Register location and length. - clocks: From clock bindings: Handles to clock inputs. - clock-names: From clock bindings: Tuple including "clk_xin" and "clk_ahb" @@ -22,6 +26,17 @@ Required Properties for "arasan,sdhci-5.1": - phys: From PHY bindings: Phandle for the Generic PHY for arasan. - phy-names: MUST be "phy_arasan". +Optional Properties: + - arasan,soc-ctl-syscon: A phandle to a syscon device (see ../mfd/syscon.txt) + used to access core corecfg registers. Offsets of registers in this + syscon are determined based on the main compatible string for the device. + - clock-output-names: If specified, this will be the name of the card clock + which will be exposed by this device. Required if #clock-cells is + specified. + - #clock-cells: If specified this should be the value <0>. With this property + in place we will export a clock representing the Card Clock. This clock + is expected to be consumed by our PHY. You must also specify + Example: sdhci@e0100000 { compatible = "arasan,sdhci-8.9a"; @@ -42,3 +57,19 @@ Example: phys = <&emmc_phy>; phy-names = "phy_arasan"; } ; + + sdhci: sdhci@fe330000 { + compatible = "rockchip,rk3399-sdhci-5.1", "arasan,sdhci-5.1"; + reg = <0x0 0xfe330000 0x0 0x10000>; + interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&cru SCLK_EMMC>, <&cru ACLK_EMMC>; + clock-names = "clk_xin", "clk_ahb"; + arasan,soc-ctl-syscon = <&grf>; + assigned-clocks = <&cru SCLK_EMMC>; + assigned-clock-rates = <200000000>; + clock-output-names = "emmc_cardclock"; + phys = <&emmc_phy>; + phy-names = "phy_arasan"; + #clock-cells = <0>; + status = "disabled"; + }; diff --git a/Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhci.txt b/Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhci.txt deleted file mode 100644 index 59476fbdbfa1..000000000000 --- a/Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhci.txt +++ /dev/null @@ -1,18 +0,0 @@ -Broadcom BCM2835 SDHCI controller - -This file documents differences between the core properties described -by mmc.txt and the properties that represent the BCM2835 controller. - -Required properties: -- compatible : Should be "brcm,bcm2835-sdhci". -- clocks : The clock feeding the SDHCI controller. - -Example: - -sdhci: sdhci { - compatible = "brcm,bcm2835-sdhci"; - reg = <0x7e300000 0x100>; - interrupts = <2 30>; - clocks = <&clk_mmc>; - bus-width = <4>; -}; diff --git a/Documentation/devicetree/bindings/mmc/brcm,bcm7425-sdhci.txt b/Documentation/devicetree/bindings/mmc/brcm,bcm7425-sdhci.txt new file mode 100644 index 000000000000..82847174c37d --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/brcm,bcm7425-sdhci.txt @@ -0,0 +1,36 @@ +* BROADCOM BRCMSTB/BMIPS SDHCI Controller + +This file documents differences between the core properties in mmc.txt +and the properties used by the sdhci-brcmstb driver. + +NOTE: The driver disables all UHS speed modes by default and depends +on Device Tree properties to enable them for SoC/Board combinations +that support them. + +Required properties: +- compatible: "brcm,bcm7425-sdhci" + +Refer to clocks/clock-bindings.txt for generic clock consumer properties. + +Example: + + sdhci@f03e0100 { + compatible = "brcm,bcm7425-sdhci"; + reg = <0xf03e0000 0x100>; + interrupts = <0x0 0x26 0x0>; + sdhci,auto-cmd12; + clocks = <&sw_sdio>; + sd-uhs-sdr50; + sd-uhs-ddr50; + }; + + sdhci@f03e0300 { + non-removable; + bus-width = <0x8>; + compatible = "brcm,bcm7425-sdhci"; + reg = <0xf03e0200 0x100>; + interrupts = <0x0 0x27 0x0>; + sdhci,auto-cmd12; + clocks = <sw_sdio>; + mmc-hs200-1_8v; + }; diff --git a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt index dca56d6248f5..3e29050ec769 100644 --- a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt +++ b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt @@ -28,6 +28,8 @@ Optional properties: transparent level shifters on the outputs of the controller. Two cells are required, first cell specifies minimum slot voltage (mV), second cell specifies maximum slot voltage (mV). Several ranges could be specified. +- fsl,tuning-start-tap: Specify the start dealy cell point when send first CMD19 + in tuning procedure. - fsl,tuning-step: Specify the increasing delay cell steps in tuning procedure. The uSDHC use one delay cell as default increasing step to do tuning process. This property allows user to change the tuning step to more than one delay diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt b/Documentation/devicetree/bindings/mmc/mmc.txt index ed23b9bedfdc..22d1e1f3f38b 100644 --- a/Documentation/devicetree/bindings/mmc/mmc.txt +++ b/Documentation/devicetree/bindings/mmc/mmc.txt @@ -46,8 +46,12 @@ Optional properties: - mmc-hs200-1_2v: eMMC HS200 mode(1.2V I/O) is supported - mmc-hs400-1_8v: eMMC HS400 mode(1.8V I/O) is supported - mmc-hs400-1_2v: eMMC HS400 mode(1.2V I/O) is supported +- mmc-hs400-enhanced-strobe: eMMC HS400 enhanced strobe mode is supported - dsr: Value the card's (optional) Driver Stage Register (DSR) should be programmed with. Valid range: [0 .. 0xffff]. +- no-sdio: controller is limited to send sdio cmd during initialization +- no-sd: controller is limited to send sd cmd during initialization +- no-mmc: controller is limited to send mmc cmd during initialization *NOTE* on CD and WP polarity. To use common for all SD/MMC host controllers line polarity properties, we have to fix the meaning of the "normal" and "inverted" diff --git a/Documentation/devicetree/bindings/mtd/atmel-quadspi.txt b/Documentation/devicetree/bindings/mtd/atmel-quadspi.txt new file mode 100644 index 000000000000..489807005eda --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/atmel-quadspi.txt @@ -0,0 +1,32 @@ +* Atmel Quad Serial Peripheral Interface (QSPI) + +Required properties: +- compatible: Should be "atmel,sama5d2-qspi". +- reg: Should contain the locations and lengths of the base registers + and the mapped memory. +- reg-names: Should contain the resource reg names: + - qspi_base: configuration register address space + - qspi_mmap: memory mapped address space +- interrupts: Should contain the interrupt for the device. +- clocks: The phandle of the clock needed by the QSPI controller. +- #address-cells: Should be <1>. +- #size-cells: Should be <0>. + +Example: + +spi@f0020000 { + compatible = "atmel,sama5d2-qspi"; + reg = <0xf0020000 0x100>, <0xd0000000 0x8000000>; + reg-names = "qspi_base", "qspi_mmap"; + interrupts = <52 IRQ_TYPE_LEVEL_HIGH 7>; + clocks = <&spi0_clk>; + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_spi0_default>; + status = "okay"; + + m25p80@0 { + ... + }; +}; diff --git a/Documentation/devicetree/bindings/mtd/brcm,brcmnand.txt b/Documentation/devicetree/bindings/mtd/brcm,brcmnand.txt index 7066597c9a81..b40f3a492800 100644 --- a/Documentation/devicetree/bindings/mtd/brcm,brcmnand.txt +++ b/Documentation/devicetree/bindings/mtd/brcm,brcmnand.txt @@ -27,6 +27,7 @@ Required properties: brcm,brcmnand-v6.2 brcm,brcmnand-v7.0 brcm,brcmnand-v7.1 + brcm,brcmnand-v7.2 brcm,brcmnand - reg : the register start and length for NAND register region. (optional) Flash DMA register range (if present) diff --git a/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt b/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt new file mode 100644 index 000000000000..f248056da24c --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt @@ -0,0 +1,56 @@ +* Cadence Quad SPI controller + +Required properties: +- compatible : Should be "cdns,qspi-nor". +- reg : Contains two entries, each of which is a tuple consisting of a + physical address and length. The first entry is the address and + length of the controller register set. The second entry is the + address and length of the QSPI Controller data area. +- interrupts : Unit interrupt specifier for the controller interrupt. +- clocks : phandle to the Quad SPI clock. +- cdns,fifo-depth : Size of the data FIFO in words. +- cdns,fifo-width : Bus width of the data FIFO in bytes. +- cdns,trigger-address : 32-bit indirect AHB trigger address. + +Optional properties: +- cdns,is-decoded-cs : Flag to indicate whether decoder is used or not. + +Optional subnodes: +Subnodes of the Cadence Quad SPI controller are spi slave nodes with additional +custom properties: +- cdns,read-delay : Delay for read capture logic, in clock cycles +- cdns,tshsl-ns : Delay in nanoseconds for the length that the master + mode chip select outputs are de-asserted between + transactions. +- cdns,tsd2d-ns : Delay in nanoseconds between one chip select being + de-activated and the activation of another. +- cdns,tchsh-ns : Delay in nanoseconds between last bit of current + transaction and deasserting the device chip select + (qspi_n_ss_out). +- cdns,tslch-ns : Delay in nanoseconds between setting qspi_n_ss_out low + and first bit transfer. + +Example: + + qspi: spi@ff705000 { + compatible = "cdns,qspi-nor"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0xff705000 0x1000>, + <0xffa00000 0x1000>; + interrupts = <0 151 4>; + clocks = <&qspi_clk>; + cdns,is-decoded-cs; + cdns,fifo-depth = <128>; + cdns,fifo-width = <4>; + cdns,trigger-address = <0x00000000>; + + flash0: n25q00@0 { + ... + cdns,read-delay = <4>; + cdns,tshsl-ns = <50>; + cdns,tsd2d-ns = <50>; + cdns,tchsh-ns = <4>; + cdns,tslch-ns = <4>; + }; + }; diff --git a/Documentation/devicetree/bindings/mtd/gpmc-nand.txt b/Documentation/devicetree/bindings/mtd/gpmc-nand.txt index 3ee7e202657c..174f68c26c1b 100644 --- a/Documentation/devicetree/bindings/mtd/gpmc-nand.txt +++ b/Documentation/devicetree/bindings/mtd/gpmc-nand.txt @@ -39,7 +39,7 @@ Optional properties: "prefetch-polled" Prefetch polled mode (default) "polled" Polled mode, without prefetch - "prefetch-dma" Prefetch enabled sDMA mode + "prefetch-dma" Prefetch enabled DMA mode "prefetch-irq" Prefetch enabled irq mode - elm_id: <deprecated> use "ti,elm-id" instead diff --git a/Documentation/devicetree/bindings/mtd/hisilicon,fmc-spi-nor.txt b/Documentation/devicetree/bindings/mtd/hisilicon,fmc-spi-nor.txt new file mode 100644 index 000000000000..74981520d6dd --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/hisilicon,fmc-spi-nor.txt @@ -0,0 +1,24 @@ +HiSilicon SPI-NOR Flash Controller + +Required properties: +- compatible : Should be "hisilicon,fmc-spi-nor" and one of the following strings: + "hisilicon,hi3519-spi-nor" +- address-cells : Should be 1. +- size-cells : Should be 0. +- reg : Offset and length of the register set for the controller device. +- reg-names : Must include the following two entries: "control", "memory". +- clocks : handle to spi-nor flash controller clock. + +Example: +spi-nor-controller@10000000 { + compatible = "hisilicon,hi3519-spi-nor", "hisilicon,fmc-spi-nor"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x10000000 0x1000>, <0x14000000 0x1000000>; + reg-names = "control", "memory"; + clocks = <&clock HI3519_FMC_CLK>; + spi-nor@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + }; +}; diff --git a/Documentation/devicetree/bindings/mtd/mtk-nand.txt b/Documentation/devicetree/bindings/mtd/mtk-nand.txt new file mode 100644 index 000000000000..069c192ed5c2 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/mtk-nand.txt @@ -0,0 +1,160 @@ +MTK SoCs NAND FLASH controller (NFC) DT binding + +This file documents the device tree bindings for MTK SoCs NAND controllers. +The functional split of the controller requires two drivers to operate: +the nand controller interface driver and the ECC engine driver. + +The hardware description for both devices must be captured as device +tree nodes. + +1) NFC NAND Controller Interface (NFI): +======================================= + +The first part of NFC is NAND Controller Interface (NFI) HW. +Required NFI properties: +- compatible: Should be "mediatek,mtxxxx-nfc". +- reg: Base physical address and size of NFI. +- interrupts: Interrupts of NFI. +- clocks: NFI required clocks. +- clock-names: NFI clocks internal name. +- status: Disabled default. Then set "okay" by platform. +- ecc-engine: Required ECC Engine node. +- #address-cells: NAND chip index, should be 1. +- #size-cells: Should be 0. + +Example: + + nandc: nfi@1100d000 { + compatible = "mediatek,mt2701-nfc"; + reg = <0 0x1100d000 0 0x1000>; + interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>; + clocks = <&pericfg CLK_PERI_NFI>, + <&pericfg CLK_PERI_NFI_PAD>; + clock-names = "nfi_clk", "pad_clk"; + status = "disabled"; + ecc-engine = <&bch>; + #address-cells = <1>; + #size-cells = <0>; + }; + +Platform related properties, should be set in {platform_name}.dts: +- children nodes: NAND chips. + +Children nodes properties: +- reg: Chip Select Signal, default 0. + Set as reg = <0>, <1> when need 2 CS. +Optional: +- nand-on-flash-bbt: Store BBT on NAND Flash. +- nand-ecc-mode: the NAND ecc mode (check driver for supported modes) +- nand-ecc-step-size: Number of data bytes covered by a single ECC step. + valid values: 512 and 1024. + 1024 is recommended for large page NANDs. +- nand-ecc-strength: Number of bits to correct per ECC step. + The valid values that the controller supports are: 4, 6, + 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36, 40, 44, + 48, 52, 56, 60. + The strength should be calculated as follows: + E = (S - F) * 8 / 14 + S = O / (P / Q) + E : nand-ecc-strength. + S : spare size per sector. + F : FDM size, should be in the range [1,8]. + It is used to store free oob data. + O : oob size. + P : page size. + Q : nand-ecc-step-size. + If the result does not match any one of the listed + choices above, please select the smaller valid value from + the list. + (otherwise the driver will do the adjustment at runtime) +- pinctrl-names: Default NAND pin GPIO setting name. +- pinctrl-0: GPIO setting node. + +Example: + &pio { + nand_pins_default: nanddefault { + pins_dat { + pinmux = <MT2701_PIN_111_MSDC0_DAT7__FUNC_NLD7>, + <MT2701_PIN_112_MSDC0_DAT6__FUNC_NLD6>, + <MT2701_PIN_114_MSDC0_DAT4__FUNC_NLD4>, + <MT2701_PIN_118_MSDC0_DAT3__FUNC_NLD3>, + <MT2701_PIN_121_MSDC0_DAT0__FUNC_NLD0>, + <MT2701_PIN_120_MSDC0_DAT1__FUNC_NLD1>, + <MT2701_PIN_113_MSDC0_DAT5__FUNC_NLD5>, + <MT2701_PIN_115_MSDC0_RSTB__FUNC_NLD8>, + <MT2701_PIN_119_MSDC0_DAT2__FUNC_NLD2>; + input-enable; + drive-strength = <MTK_DRIVE_8mA>; + bias-pull-up; + }; + + pins_we { + pinmux = <MT2701_PIN_117_MSDC0_CLK__FUNC_NWEB>; + drive-strength = <MTK_DRIVE_8mA>; + bias-pull-up = <MTK_PUPD_SET_R1R0_10>; + }; + + pins_ale { + pinmux = <MT2701_PIN_116_MSDC0_CMD__FUNC_NALE>; + drive-strength = <MTK_DRIVE_8mA>; + bias-pull-down = <MTK_PUPD_SET_R1R0_10>; + }; + }; + }; + + &nandc { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&nand_pins_default>; + nand@0 { + reg = <0>; + nand-on-flash-bbt; + nand-ecc-mode = "hw"; + nand-ecc-strength = <24>; + nand-ecc-step-size = <1024>; + }; + }; + +NAND chip optional subnodes: +- Partitions, see Documentation/devicetree/bindings/mtd/partition.txt + +Example: + nand@0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + preloader@0 { + label = "pl"; + read-only; + reg = <0x00000000 0x00400000>; + }; + android@0x00400000 { + label = "android"; + reg = <0x00400000 0x12c00000>; + }; + }; + }; + +2) ECC Engine: +============== + +Required BCH properties: +- compatible: Should be "mediatek,mtxxxx-ecc". +- reg: Base physical address and size of ECC. +- interrupts: Interrupts of ECC. +- clocks: ECC required clocks. +- clock-names: ECC clocks internal name. +- status: Disabled default. Then set "okay" by platform. + +Example: + + bch: ecc@1100e000 { + compatible = "mediatek,mt2701-ecc"; + reg = <0 0x1100e000 0 0x1000>; + interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>; + clocks = <&pericfg CLK_PERI_NFI_ECC>; + clock-names = "nfiecc_clk"; + status = "disabled"; + }; diff --git a/Documentation/devicetree/bindings/mtd/sunxi-nand.txt b/Documentation/devicetree/bindings/mtd/sunxi-nand.txt index 086d6f44c4b9..f322f56aef74 100644 --- a/Documentation/devicetree/bindings/mtd/sunxi-nand.txt +++ b/Documentation/devicetree/bindings/mtd/sunxi-nand.txt @@ -11,10 +11,16 @@ Required properties: * "ahb" : AHB gating clock * "mod" : nand controller clock +Optional properties: +- dmas : shall reference DMA channel associated to the NAND controller. +- dma-names : shall be "rxtx". + Optional children nodes: Children nodes represent the available nand chips. Optional properties: +- reset : phandle + reset specifier pair +- reset-names : must contain "ahb" - allwinner,rb : shall contain the native Ready/Busy ids. or - rb-gpios : shall contain the gpios used as R/B pins. diff --git a/Documentation/devicetree/bindings/net/apm-xgene-enet.txt b/Documentation/devicetree/bindings/net/apm-xgene-enet.txt index 05f705e32a4a..e41b2d59ca7f 100644 --- a/Documentation/devicetree/bindings/net/apm-xgene-enet.txt +++ b/Documentation/devicetree/bindings/net/apm-xgene-enet.txt @@ -59,8 +59,8 @@ Example: compatible = "apm,xgene-enet"; status = "disabled"; reg = <0x0 0x17020000 0x0 0xd100>, - <0x0 0X17030000 0x0 0X400>, - <0x0 0X10000000 0x0 0X200>; + <0x0 0x17030000 0x0 0x400>, + <0x0 0x10000000 0x0 0x200>; reg-names = "enet_csr", "ring_csr", "ring_cmd"; interrupts = <0x0 0x3c 0x4>; port-id = <0>; diff --git a/Documentation/devicetree/bindings/net/fsl-fec.txt b/Documentation/devicetree/bindings/net/fsl-fec.txt index b037a9d78d93..a1e3693cca16 100644 --- a/Documentation/devicetree/bindings/net/fsl-fec.txt +++ b/Documentation/devicetree/bindings/net/fsl-fec.txt @@ -27,6 +27,9 @@ Optional properties: number to 1. - fsl,magic-packet : If present, indicates that the hardware supports waking up via magic packet. +- fsl,err006687-workaround-present: If present indicates that the system has + the hardware workaround for ERR006687 applied and does not need a software + workaround. Optional subnodes: - mdio : specifies the mdio bus in the FEC, used as a container for phy nodes diff --git a/Documentation/devicetree/bindings/pci/aardvark-pci.txt b/Documentation/devicetree/bindings/pci/aardvark-pci.txt new file mode 100644 index 000000000000..bbcd9f4c501f --- /dev/null +++ b/Documentation/devicetree/bindings/pci/aardvark-pci.txt @@ -0,0 +1,56 @@ +Aardvark PCIe controller + +This PCIe controller is used on the Marvell Armada 3700 ARM64 SoC. + +The Device Tree node describing an Aardvark PCIe controller must +contain the following properties: + + - compatible: Should be "marvell,armada-3700-pcie" + - reg: range of registers for the PCIe controller + - interrupts: the interrupt line of the PCIe controller + - #address-cells: set to <3> + - #size-cells: set to <2> + - device_type: set to "pci" + - ranges: ranges for the PCI memory and I/O regions + - #interrupt-cells: set to <1> + - msi-controller: indicates that the PCIe controller can itself + handle MSI interrupts + - msi-parent: pointer to the MSI controller to be used + - interrupt-map-mask and interrupt-map: standard PCI properties to + define the mapping of the PCIe interface to interrupt numbers. + - bus-range: PCI bus numbers covered + +In addition, the Device Tree describing an Aardvark PCIe controller +must include a sub-node that describes the legacy interrupt controller +built into the PCIe controller. This sub-node must have the following +properties: + + - interrupt-controller + - #interrupt-cells: set to <1> + +Example: + + pcie0: pcie@d0070000 { + compatible = "marvell,armada-3700-pcie"; + device_type = "pci"; + status = "disabled"; + reg = <0 0xd0070000 0 0x20000>; + #address-cells = <3>; + #size-cells = <2>; + bus-range = <0x00 0xff>; + interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; + #interrupt-cells = <1>; + msi-controller; + msi-parent = <&pcie0>; + ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x1000000 /* Port 0 MEM */ + 0x81000000 0 0xe9000000 0 0xe9000000 0 0x10000>; /* Port 0 IO*/ + interrupt-map-mask = <0 0 0 7>; + interrupt-map = <0 0 0 1 &pcie_intc 0>, + <0 0 0 2 &pcie_intc 1>, + <0 0 0 3 &pcie_intc 2>, + <0 0 0 4 &pcie_intc 3>; + pcie_intc: interrupt-controller { + interrupt-controller; + #interrupt-cells = <1>; + }; + }; diff --git a/Documentation/devicetree/bindings/pci/axis,artpec6-pcie.txt b/Documentation/devicetree/bindings/pci/axis,artpec6-pcie.txt new file mode 100644 index 000000000000..330a45b5f0b5 --- /dev/null +++ b/Documentation/devicetree/bindings/pci/axis,artpec6-pcie.txt @@ -0,0 +1,46 @@ +* Axis ARTPEC-6 PCIe interface + +This PCIe host controller is based on the Synopsys DesignWare PCIe IP +and thus inherits all the common properties defined in designware-pcie.txt. + +Required properties: +- compatible: "axis,artpec6-pcie", "snps,dw-pcie" +- reg: base addresses and lengths of the PCIe controller (DBI), + the phy controller, and configuration address space. +- reg-names: Must include the following entries: + - "dbi" + - "phy" + - "config" +- interrupts: A list of interrupt outputs of the controller. Must contain an + entry for each entry in the interrupt-names property. +- interrupt-names: Must include the following entries: + - "msi": The interrupt that is asserted when an MSI is received +- axis,syscon-pcie: A phandle pointing to the ARTPEC-6 system controller, + used to enable and control the Synopsys IP. + +Example: + + pcie@f8050000 { + compatible = "axis,artpec6-pcie", "snps,dw-pcie"; + reg = <0xf8050000 0x2000 + 0xf8040000 0x1000 + 0xc0000000 0x1000>; + reg-names = "dbi", "phy", "config"; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; + /* downstream I/O */ + ranges = <0x81000000 0 0x00010000 0xc0010000 0 0x00010000 + /* non-prefetchable memory */ + 0x82000000 0 0xc0020000 0xc0020000 0 0x1ffe0000>; + num-lanes = <2>; + interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "msi"; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 2 &intc GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 3 &intc GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 4 &intc GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>; + axis,syscon-pcie = <&syscon>; + }; diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2fd23a..41e9f55a1467 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -24,6 +24,9 @@ Required properties: The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. This is used to get SCFG PEXN registers +- dma-coherent: Indicates that the hardware IP block can ensure the coherency + of the data transferred from/to the IP block. This can avoid the software + cache flush/invalid actions, and improve the performance significantly. Example: @@ -38,6 +41,7 @@ Example: #address-cells = <3>; #size-cells = <2>; device_type = "pci"; + dma-coherent; num-lanes = <4>; bus-range = <0x0 0xff>; ranges = <0x81000000 0x0 0x00000000 0x40 0x00010000 0x0 0x00010000 /* downstream I/O */ diff --git a/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt b/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt index 0bf1ae243552..3742c152c467 100644 --- a/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt +++ b/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt @@ -124,7 +124,7 @@ For Tegra124 and Tegra132, the list of valid PHY nodes is given below: - functions: "usb3-ss", "sata" For Tegra210, the list of valid PHY nodes is given below: -- utmi: utmi-0, utmi-1, utmi-2, utmi-3 +- usb2: usb2-0, usb2-1, usb2-2, usb2-3 - functions: "snps", "xusb", "uart" - hsic: hsic-0, hsic-1 - functions: "snps", "xusb" diff --git a/Documentation/devicetree/bindings/phy/rockchip-emmc-phy.txt b/Documentation/devicetree/bindings/phy/rockchip-emmc-phy.txt index 555cb0f40690..e3ea55763b0a 100644 --- a/Documentation/devicetree/bindings/phy/rockchip-emmc-phy.txt +++ b/Documentation/devicetree/bindings/phy/rockchip-emmc-phy.txt @@ -7,6 +7,13 @@ Required properties: - reg: PHY register address offset and length in "general register files" +Optional clocks using the clock bindings (see ../clock/clock-bindings.txt), +specified by name: + - clock-names: Should contain "emmcclk". Although this is listed as optional + (because most boards can get basic functionality without having + access to it), it is strongly suggested. + - clocks: Should have a phandle to the card clock exported by the SDHCI driver. + Example: @@ -20,6 +27,8 @@ grf: syscon@ff770000 { emmcphy: phy@f780 { compatible = "rockchip,rk3399-emmc-phy"; reg = <0xf780 0x20>; + clocks = <&sdhci>; + clock-names = "emmcclk"; #phy-cells = <0>; }; }; diff --git a/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt index 32f4a2d6d0b3..fe7fe0b03cfb 100644 --- a/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt +++ b/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt @@ -5,6 +5,8 @@ Required properties for the root node: "amlogic,meson8b-cbus-pinctrl" "amlogic,meson8-aobus-pinctrl" "amlogic,meson8b-aobus-pinctrl" + "amlogic,meson-gxbb-periphs-pinctrl" + "amlogic,meson-gxbb-aobus-pinctrl" - reg: address and size of registers controlling irq functionality === GPIO sub-nodes === diff --git a/Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-dpaux-padctl.txt b/Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-dpaux-padctl.txt new file mode 100644 index 000000000000..f2abdaee9022 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-dpaux-padctl.txt @@ -0,0 +1,60 @@ +Device tree binding for NVIDIA Tegra DPAUX pad controller +======================================================== + +The Tegra Display Port Auxiliary (DPAUX) pad controller manages two pins +which can be assigned to either the DPAUX channel or to an I2C +controller. + +This document defines the device-specific binding for the DPAUX pad +controller. Refer to pinctrl-bindings.txt in this directory for generic +information about pin controller device tree bindings. Please refer to +the binding document ../display/tegra/nvidia,tegra20-host1x.txt for more +details on the DPAUX binding. + +Pin muxing: +----------- + +Child nodes contain the pinmux configurations following the conventions +from the pinctrl-bindings.txt document. + +Since only three configurations are possible, only three child nodes are +needed to describe the pin mux'ing options for the DPAUX pads. +Furthermore, given that the pad functions are only applicable to a +single set of pads, the child nodes only need to describe the pad group +the functions are being applied to rather than the individual pads. + +Required properties: +- groups: Must be "dpaux-io" +- function: Must be either "aux", "i2c" or "off". + +Example: +-------- + + dpaux@545c0000 { + ... + + state_dpaux_aux: pinmux-aux { + groups = "dpaux-io"; + function = "aux"; + }; + + state_dpaux_i2c: pinmux-i2c { + groups = "dpaux-io"; + function = "i2c"; + }; + + state_dpaux_off: pinmux-off { + groups = "dpaux-io"; + function = "off"; + }; + }; + + ... + + i2c@7000d100 { + ... + pinctrl-0 = <&state_dpaux_i2c>; + pinctrl-1 = <&state_dpaux_off>; + pinctrl-names = "default", "idle"; + status = "disabled"; + }; diff --git a/Documentation/devicetree/bindings/power/renesas,apmu.txt b/Documentation/devicetree/bindings/power/renesas,apmu.txt new file mode 100644 index 000000000000..84404c9edff7 --- /dev/null +++ b/Documentation/devicetree/bindings/power/renesas,apmu.txt @@ -0,0 +1,31 @@ +DT bindings for the Renesas Advanced Power Management Unit + +Renesas R-Car line of SoCs utilize one or more APMU hardware units +for CPU core power domain control including SMP boot and CPU Hotplug. + +Required properties: + +- compatible: Should be "renesas,<soctype>-apmu", "renesas,apmu" as fallback. + Examples with soctypes are: + - "renesas,r8a7790-apmu" (R-Car H2) + - "renesas,r8a7791-apmu" (R-Car M2-W) + - "renesas,r8a7792-apmu" (R-Car V2H) + - "renesas,r8a7793-apmu" (R-Car M2-N) + - "renesas,r8a7794-apmu" (R-Car E2) + +- reg: Base address and length of the I/O registers used by the APMU. + +- cpus: This node contains a list of CPU cores, which should match the order + of CPU cores used by the WUPCR and PSTR registers in the Advanced Power + Management Unit section of the device's datasheet. + + +Example: + +This shows the r8a7791 APMU that can control CPU0 and CPU1. + + apmu@e6152000 { + compatible = "renesas,r8a7791-apmu", "renesas,apmu"; + reg = <0 0xe6152000 0 0x188>; + cpus = <&cpu0 &cpu1>; + }; diff --git a/Documentation/devicetree/bindings/power/renesas,rcar-sysc.txt b/Documentation/devicetree/bindings/power/renesas,rcar-sysc.txt index b74e4d4785ab..0725fb37a973 100644 --- a/Documentation/devicetree/bindings/power/renesas,rcar-sysc.txt +++ b/Documentation/devicetree/bindings/power/renesas,rcar-sysc.txt @@ -14,6 +14,7 @@ Required properties: - "renesas,r8a7793-sysc" (R-Car M2-N) - "renesas,r8a7794-sysc" (R-Car E2) - "renesas,r8a7795-sysc" (R-Car H3) + - "renesas,r8a7796-sysc" (R-Car M3-W) - reg: Address start and address range for the device. - #power-domain-cells: Must be 1. diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt b/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt deleted file mode 100644 index 29b28b8f9a89..000000000000 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/network.txt +++ /dev/null @@ -1,43 +0,0 @@ -* Network - -Currently defined compatibles: -- fsl,cpm1-scc-enet -- fsl,cpm2-scc-enet -- fsl,cpm1-fec-enet -- fsl,cpm2-fcc-enet (third resource is GFEMR) -- fsl,qe-enet - -Example: - - ethernet@11300 { - compatible = "fsl,mpc8272-fcc-enet", - "fsl,cpm2-fcc-enet"; - reg = <11300 20 8400 100 11390 1>; - local-mac-address = [ 00 00 00 00 00 00 ]; - interrupts = <20 8>; - interrupt-parent = <&PIC>; - phy-handle = <&PHY0>; - fsl,cpm-command = <12000300>; - }; - -* MDIO - -Currently defined compatibles: -fsl,pq1-fec-mdio (reg is same as first resource of FEC device) -fsl,cpm2-mdio-bitbang (reg is port C registers) - -Properties for fsl,cpm2-mdio-bitbang: -fsl,mdio-pin : pin of port C controlling mdio data -fsl,mdc-pin : pin of port C controlling mdio clock - -Example: - mdio@10d40 { - compatible = "fsl,mpc8272ads-mdio-bitbang", - "fsl,mpc8272-mdio-bitbang", - "fsl,cpm2-mdio-bitbang"; - reg = <10d40 14>; - #address-cells = <1>; - #size-cells = <0>; - fsl,mdio-pin = <12>; - fsl,mdc-pin = <13>; - }; diff --git a/Documentation/devicetree/bindings/powerpc/opal/oppanel-opal.txt b/Documentation/devicetree/bindings/powerpc/opal/oppanel-opal.txt new file mode 100644 index 000000000000..dffb79108b61 --- /dev/null +++ b/Documentation/devicetree/bindings/powerpc/opal/oppanel-opal.txt @@ -0,0 +1,14 @@ +IBM OPAL Operator Panel Binding +------------------------------- + +Required properties: +- compatible : Should be "ibm,opal-oppanel". +- #lines : Number of lines on the operator panel e.g. <0x2>. +- #length : Number of characters per line of the operator panel e.g. <0x10>. + +Example: + oppanel { + compatible = "ibm,opal-oppanel"; + #lines = <0x2>; + #length = <0x10>; + }; diff --git a/Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt b/Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt new file mode 100644 index 000000000000..21f75bbd6dae --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/brcm,iproc-pwm.txt @@ -0,0 +1,21 @@ +Broadcom iProc PWM controller device tree bindings + +This controller has 4 channels. + +Required Properties : +- compatible: must be "brcm,iproc-pwm" +- reg: physical base address and length of the controller's registers +- clocks: phandle + clock specifier pair for the external clock +- #pwm-cells: Should be 3. See pwm.txt in this directory for a + description of the cells format. + +Refer to clocks/clock-bindings.txt for generic clock consumer properties. + +Example: + +pwm: pwm@18031000 { + compatible = "brcm,iproc-pwm"; + reg = <0x18031000 0x28>; + clocks = <&osc>; + #pwm-cells = <3>; +}; diff --git a/Documentation/devicetree/bindings/pwm/cirrus,clps711x-pwm.txt b/Documentation/devicetree/bindings/pwm/cirrus,clps711x-pwm.txt index a183db48f910..c0b2028238d6 100644 --- a/Documentation/devicetree/bindings/pwm/cirrus,clps711x-pwm.txt +++ b/Documentation/devicetree/bindings/pwm/cirrus,clps711x-pwm.txt @@ -1,15 +1,14 @@ * Cirris Logic CLPS711X PWM controller Required properties: -- compatible: Shall contain "cirrus,clps711x-pwm". +- compatible: Shall contain "cirrus,ep7209-pwm". - reg: Physical base address and length of the controller's registers. - clocks: phandle + clock specifier pair of the PWM reference clock. - #pwm-cells: Should be 1. The cell specifies the index of the channel. Example: pwm: pwm@80000400 { - compatible = "cirrus,ep7312-pwm", - "cirrus,clps711x-pwm"; + compatible = "cirrus,ep7312-pwm", "cirrus,ep7209-pwm"; reg = <0x80000400 0x4>; clocks = <&clks 8>; #pwm-cells = <1>; diff --git a/Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt b/Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt new file mode 100644 index 000000000000..472bd46ab5a4 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/google,cros-ec-pwm.txt @@ -0,0 +1,23 @@ +* PWM controlled by ChromeOS EC + +Google's ChromeOS EC PWM is a simple PWM attached to the Embedded Controller +(EC) and controlled via a host-command interface. + +An EC PWM node should be only found as a sub-node of the EC node (see +Documentation/devicetree/bindings/mfd/cros-ec.txt). + +Required properties: +- compatible: Must contain "google,cros-ec-pwm" +- #pwm-cells: Should be 1. The cell specifies the PWM index. + +Example: + cros-ec@0 { + compatible = "google,cros-ec-spi"; + + ... + + cros_ec_pwm: ec-pwm { + compatible = "google,cros-ec-pwm"; + #pwm-cells = <1>; + }; + }; diff --git a/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt b/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt index c52f03b5032f..b4e73778dda3 100644 --- a/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt +++ b/Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.txt @@ -1,10 +1,14 @@ Tegra SoC PWFM controller Required properties: -- compatible: For Tegra20, must contain "nvidia,tegra20-pwm". For Tegra30, - must contain "nvidia,tegra30-pwm". Otherwise, must contain - "nvidia,<chip>-pwm", plus one of the above, where <chip> is tegra114, - tegra124, tegra132, or tegra210. +- compatible: Must be: + - "nvidia,tegra20-pwm": for Tegra20 + - "nvidia,tegra30-pwm", "nvidia,tegra20-pwm": for Tegra30 + - "nvidia,tegra114-pwm", "nvidia,tegra20-pwm": for Tegra114 + - "nvidia,tegra124-pwm", "nvidia,tegra20-pwm": for Tegra124 + - "nvidia,tegra132-pwm", "nvidia,tegra20-pwm": for Tegra132 + - "nvidia,tegra210-pwm", "nvidia,tegra20-pwm": for Tegra210 + - "nvidia,tegra186-pwm": for Tegra186 - reg: physical base address and length of the controller's registers - #pwm-cells: should be 2. See pwm.txt in this directory for a description of the cells format. diff --git a/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt b/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt index 5befb538db95..2e53324fb720 100644 --- a/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt +++ b/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt @@ -9,6 +9,10 @@ Required properties: Optional properties: - ti,prescaler: Should be a value between 0 and 7, see the timers datasheet +- ti,clock-source: Set dmtimer parent clock, values between 0 and 2: + - 0x00 - high-frequency system clock (timer_sys_ck) + - 0x01 - 32-kHz always-on clock (timer_32k_ck) + - 0x02 - external clock (timer_ext_ck, OMAP2 only) Example: pwm9: dmtimer-pwm@9 { diff --git a/Documentation/devicetree/bindings/pwm/pwm-tiecap.txt b/Documentation/devicetree/bindings/pwm/pwm-tiecap.txt index fb81179dce37..8007e839a716 100644 --- a/Documentation/devicetree/bindings/pwm/pwm-tiecap.txt +++ b/Documentation/devicetree/bindings/pwm/pwm-tiecap.txt @@ -2,28 +2,48 @@ TI SOC ECAP based APWM controller Required properties: - compatible: Must be "ti,<soc>-ecap". - for am33xx - compatible = "ti,am33xx-ecap"; - for da850 - compatible = "ti,da850-ecap", "ti,am33xx-ecap"; + for am33xx - compatible = "ti,am3352-ecap", "ti,am33xx-ecap"; + for am4372 - compatible = "ti,am4372-ecap", "ti,am3352-ecap", "ti,am33xx-ecap"; + for da850 - compatible = "ti,da850-ecap", "ti,am3352-ecap", "ti,am33xx-ecap"; + for dra746 - compatible = "ti,dra746-ecap", "ti,am3352-ecap"; - #pwm-cells: should be 3. See pwm.txt in this directory for a description of the cells format. The PWM channel index ranges from 0 to 4. The only third cell flag supported by this binding is PWM_POLARITY_INVERTED. - reg: physical base address and size of the registers map. Optional properties: -- ti,hwmods: Name of the hwmod associated to the ECAP: - "ecap<x>", <x> being the 0-based instance number from the HW spec +- clocks: Handle to the ECAP's functional clock. +- clock-names: Must be set to "fck". Example: -ecap0: ecap@0 { /* ECAP on am33xx */ - compatible = "ti,am33xx-ecap"; +ecap0: ecap@48300100 { /* ECAP on am33xx */ + compatible = "ti,am3352-ecap", "ti,am33xx-ecap"; + #pwm-cells = <3>; + reg = <0x48300100 0x80>; + clocks = <&l4ls_gclk>; + clock-names = "fck"; +}; + +ecap0: ecap@48300100 { /* ECAP on am4372 */ + compatible = "ti,am4372-ecap", "ti,am3352-ecap", "ti,am33xx-ecap"; #pwm-cells = <3>; reg = <0x48300100 0x80>; ti,hwmods = "ecap0"; + clocks = <&l4ls_gclk>; + clock-names = "fck"; +}; + +ecap0: ecap@1f06000 { /* ECAP on da850 */ + compatible = "ti,da850-ecap", "ti,am3352-ecap", "ti,am33xx-ecap"; + #pwm-cells = <3>; + reg = <0x1f06000 0x80>; }; -ecap0: ecap@0 { /* ECAP on da850 */ - compatible = "ti,da850-ecap", "ti,am33xx-ecap"; +ecap0: ecap@4843e100 { + compatible = "ti,dra746-ecap", "ti,am3352-ecap"; #pwm-cells = <3>; - reg = <0x306000 0x80>; + reg = <0x4843e100 0x80>; + clocks = <&l4_root_clk_div>; + clock-names = "fck"; }; diff --git a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt index 9c100b2c5b23..944fe356bb45 100644 --- a/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt +++ b/Documentation/devicetree/bindings/pwm/pwm-tiehrpwm.txt @@ -2,28 +2,48 @@ TI SOC EHRPWM based PWM controller Required properties: - compatible: Must be "ti,<soc>-ehrpwm". - for am33xx - compatible = "ti,am33xx-ehrpwm"; - for da850 - compatible = "ti,da850-ehrpwm", "ti,am33xx-ehrpwm"; + for am33xx - compatible = "ti,am3352-ehrpwm", "ti,am33xx-ehrpwm"; + for am4372 - compatible = "ti,am4372-ehrpwm", "ti-am3352-ehrpwm", "ti,am33xx-ehrpwm"; + for da850 - compatible = "ti,da850-ehrpwm", "ti-am3352-ehrpwm", "ti,am33xx-ehrpwm"; + for dra746 - compatible = "ti,dra746-ehrpwm", "ti-am3352-ehrpwm"; - #pwm-cells: should be 3. See pwm.txt in this directory for a description of the cells format. The only third cell flag supported by this binding is PWM_POLARITY_INVERTED. - reg: physical base address and size of the registers map. Optional properties: -- ti,hwmods: Name of the hwmod associated to the EHRPWM: - "ehrpwm<x>", <x> being the 0-based instance number from the HW spec +- clocks: Handle to the PWM's time-base and functional clock. +- clock-names: Must be set to "tbclk" and "fck". Example: -ehrpwm0: ehrpwm@0 { /* EHRPWM on am33xx */ - compatible = "ti,am33xx-ehrpwm"; +ehrpwm0: pwm@48300200 { /* EHRPWM on am33xx */ + compatible = "ti,am3352-ehrpwm", "ti,am33xx-ehrpwm"; #pwm-cells = <3>; reg = <0x48300200 0x100>; + clocks = <&ehrpwm0_tbclk>, <&l4ls_gclk>; + clock-names = "tbclk", "fck"; +}; + +ehrpwm0: pwm@48300200 { /* EHRPWM on am4372 */ + compatible = "ti,am4372-ehrpwm", "ti,am3352-ehrpwm", "ti,am33xx-ehrpwm"; + #pwm-cells = <3>; + reg = <0x48300200 0x80>; + clocks = <&ehrpwm0_tbclk>, <&l4ls_gclk>; + clock-names = "tbclk", "fck"; ti,hwmods = "ehrpwm0"; }; -ehrpwm0: ehrpwm@0 { /* EHRPWM on da850 */ - compatible = "ti,da850-ehrpwm", "ti,am33xx-ehrpwm"; +ehrpwm0: pwm@1f00000 { /* EHRPWM on da850 */ + compatible = "ti,da850-ehrpwm", "ti,am3352-ehrpwm", "ti,am33xx-ehrpwm"; + #pwm-cells = <3>; + reg = <0x1f00000 0x2000>; +}; + +ehrpwm0: pwm@4843e200 { /* EHRPWM on dra746 */ + compatible = "ti,dra746-ehrpwm", "ti,am3352-ehrpwm"; #pwm-cells = <3>; - reg = <0x300000 0x2000>; + reg = <0x4843e200 0x80>; + clocks = <&ehrpwm0_tbclk>, <&l4_root_clk_div>; + clock-names = "tbclk", "fck"; }; diff --git a/Documentation/devicetree/bindings/pwm/pwm-tipwmss.txt b/Documentation/devicetree/bindings/pwm/pwm-tipwmss.txt index f7eae77f8354..1a5d7b71db89 100644 --- a/Documentation/devicetree/bindings/pwm/pwm-tipwmss.txt +++ b/Documentation/devicetree/bindings/pwm/pwm-tipwmss.txt @@ -1,7 +1,11 @@ TI SOC based PWM Subsystem Required properties: -- compatible: Must be "ti,am33xx-pwmss"; +- compatible: Must be "ti,<soc>-pwmss". + for am33xx - compatible = "ti,am33xx-pwmss"; + for am4372 - compatible = "ti,am4372-pwmss","ti,am33xx-pwmss"; + for dra746 - compatible = "ti,dra746-pwmss", "ti,am33xx-pwmss" + - reg: physical base address and size of the registers map. - address-cells: Specify the number of u32 entries needed in child nodes. Should set to 1. @@ -16,7 +20,7 @@ Required properties: Also child nodes should also populated under PWMSS DT node. Example: -pwmss0: pwmss@48300000 { +epwmss0: epwmss@48300000 { /* PWMSS for am33xx */ compatible = "ti,am33xx-pwmss"; reg = <0x48300000 0x10>; ti,hwmods = "epwmss0"; @@ -29,3 +33,28 @@ pwmss0: pwmss@48300000 { /* child nodes go here */ }; + +epwmss0: epwmss@48300000 { /* PWMSS for am4372 */ + compatible = "ti,am4372-pwmss","ti,am33xx-pwmss" + reg = <0x48300000 0x10>; + ti,hwmods = "epwmss0"; + #address-cells = <1>; + #size-cells = <1>; + status = "disabled"; + ranges = <0x48300100 0x48300100 0x80 /* ECAP */ + 0x48300180 0x48300180 0x80 /* EQEP */ + 0x48300200 0x48300200 0x80>; /* EHRPWM */ + + /* child nodes go here */ +}; + +epwmss0: epwmss@4843e000 { /* PWMSS for DRA7xx */ + compatible = "ti,dra746-pwmss", "ti,am33xx-pwmss"; + reg = <0x4843e000 0x30>; + ti,hwmods = "epwmss0"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + /* child nodes go here */ +}; diff --git a/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt b/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt index 0822a083fc57..d6de64335022 100644 --- a/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt +++ b/Documentation/devicetree/bindings/pwm/renesas,pwm-rcar.txt @@ -7,6 +7,7 @@ Required Properties: - "renesas,pwm-r8a7790": for R-Car H2 - "renesas,pwm-r8a7791": for R-Car M2-W - "renesas,pwm-r8a7794": for R-Car E2 + - "renesas,pwm-r8a7795": for R-Car H3 - reg: base address and length of the registers block for the PWM. - #pwm-cells: should be 2. See pwm.txt in this directory for a description of the cells format. diff --git a/Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt b/Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt new file mode 100644 index 000000000000..cb209646bf13 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/st,stmpe-pwm.txt @@ -0,0 +1,18 @@ +== ST STMPE PWM controller == + +This is a PWM block embedded in the ST Microelectronics STMPE +(ST Multi-Purpose Expander) chips. The PWM is registered as a +subdevices of the STMPE MFD device. + +Required properties: +- compatible: should be: + - "st,stmpe-pwm" +- #pwm-cells: should be 2. See pwm.txt in this directory for a description of + the cells format. + +Example: + +pwm0: pwm { + compatible = "st,stmpe-pwm"; + #pwm-cells = <2>; +}; diff --git a/Documentation/devicetree/bindings/regulator/pwm-regulator.txt b/Documentation/devicetree/bindings/regulator/pwm-regulator.txt index dd6f59cf1455..3aeba9f86ed8 100644 --- a/Documentation/devicetree/bindings/regulator/pwm-regulator.txt +++ b/Documentation/devicetree/bindings/regulator/pwm-regulator.txt @@ -34,6 +34,18 @@ Only required for Voltage Table Mode: First cell is voltage in microvolts (uV) Second cell is duty-cycle in percent (%) +Optional properties for Continuous mode: +- pwm-dutycycle-unit: Integer value encoding the duty cycle unit. If not + defined, <100> is assumed, meaning that + pwm-dutycycle-range contains values expressed in + percent. + +- pwm-dutycycle-range: Should contain 2 entries. The first entry is encoding + the dutycycle for regulator-min-microvolt and the + second one the dutycycle for regulator-max-microvolt. + Duty cycle values are expressed in pwm-dutycycle-unit. + If not defined, <0 100> is assumed. + NB: To be clear, if voltage-table is provided, then the device will be used in Voltage Table Mode. If no voltage-table is provided, then the device will be used in Continuous Voltage Mode. @@ -53,6 +65,13 @@ Continuous Voltage With Enable GPIO Example: regulator-min-microvolt = <1016000>; regulator-max-microvolt = <1114000>; regulator-name = "vdd_logic"; + /* unit == per-mille */ + pwm-dutycycle-unit = <1000>; + /* + * Inverted PWM logic, and the duty cycle range is limited + * to 30%-70%. + */ + pwm-dutycycle-range <700 300>; /* */ }; Voltage Table Example: diff --git a/Documentation/devicetree/bindings/misc/ramoops.txt b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt index cd02cec67d38..e81f821a2135 100644 --- a/Documentation/devicetree/bindings/misc/ramoops.txt +++ b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt @@ -2,8 +2,9 @@ Ramoops oops/panic logger ========================= ramoops provides persistent RAM storage for oops and panics, so they can be -recovered after a reboot. It is a backend to pstore, so this node is named -"ramoops" after the backend, rather than "pstore" which is the subsystem. +recovered after a reboot. This is a child-node of "/reserved-memory", and +is named "ramoops" after the backend, rather than "pstore" which is the +subsystem. Parts of this storage may be set aside for other persistent log buffers, such as kernel log messages, or for optional ECC error-correction data. The total @@ -21,8 +22,7 @@ Required properties: - compatible: must be "ramoops" -- memory-region: phandle to a region of memory that is preserved between - reboots +- reg: region of memory that is preserved between reboots Optional properties: diff --git a/Documentation/devicetree/bindings/reset/amlogic,meson-reset.txt b/Documentation/devicetree/bindings/reset/amlogic,meson-reset.txt new file mode 100644 index 000000000000..e746b631793a --- /dev/null +++ b/Documentation/devicetree/bindings/reset/amlogic,meson-reset.txt @@ -0,0 +1,18 @@ +Amlogic Meson SoC Reset Controller +======================================= + +Please also refer to reset.txt in this directory for common reset +controller binding usage. + +Required properties: +- compatible: Should be "amlogic,meson8b-reset" or "amlogic,meson-gxbb-reset" +- reg: should contain the register address base +- #reset-cells: 1, see below + +example: + +reset: reset-controller { + compatible = "amlogic,meson-gxbb-reset"; + reg = <0x0 0x04404 0x0 0x20>; + #reset-cells = <1>; +}; diff --git a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt index e0b185a944ba..c25da39df707 100644 --- a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt +++ b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt @@ -8,7 +8,9 @@ The reset controller registers are part of the system-ctl block on hi6220 SoC. Required properties: -- compatible: may be "hisilicon,hi6220-sysctrl" +- compatible: should be one of the following: + - "hisilicon,hi6220-sysctrl", "syscon" : For peripheral reset controller. + - "hisilicon,hi6220-mediactrl", "syscon" : For media reset controller. - reg: should be register base and length as documented in the datasheet - #reset-cells: 1, see below diff --git a/Documentation/devicetree/bindings/reset/ti-syscon-reset.txt b/Documentation/devicetree/bindings/reset/ti-syscon-reset.txt new file mode 100644 index 000000000000..164c7f34c451 --- /dev/null +++ b/Documentation/devicetree/bindings/reset/ti-syscon-reset.txt @@ -0,0 +1,91 @@ +TI SysCon Reset Controller +======================= + +Almost all SoCs have hardware modules that require reset control in addition +to clock and power control for their functionality. The reset control is +typically provided by means of memory-mapped I/O registers. These registers are +sometimes a part of a larger register space region implementing various +functionalities. This register range is best represented as a syscon node to +allow multiple entities to access their relevant registers in the common +register space. + +A SysCon Reset Controller node defines a device that uses a syscon node +and provides reset management functionality for various hardware modules +present on the SoC. + +SysCon Reset Controller Node +============================ +Each of the reset provider/controller nodes should be a child of a syscon +node and have the following properties. + +Required properties: +-------------------- + - compatible : Should be, + "ti,k2e-pscrst" + "ti,k2l-pscrst" + "ti,k2hk-pscrst" + "ti,syscon-reset" + - #reset-cells : Should be 1. Please see the reset consumer node below + for usage details + - ti,reset-bits : Contains the reset control register information + Should contain 7 cells for each reset exposed to + consumers, defined as: + Cell #1 : offset of the reset assert control + register from the syscon register base + Cell #2 : bit position of the reset in the reset + assert control register + Cell #3 : offset of the reset deassert control + register from the syscon register base + Cell #4 : bit position of the reset in the reset + deassert control register + Cell #5 : offset of the reset status register + from the syscon register base + Cell #6 : bit position of the reset in the + reset status register + Cell #7 : Flags used to control reset behavior, + availible flags defined in the DT include + file <dt-bindings/reset/ti-syscon.h> + +SysCon Reset Consumer Nodes +=========================== +Each of the reset consumer nodes should have the following properties, +in addition to their own properties. + +Required properties: +-------------------- + - resets : A phandle to the reset controller node and an index number + to a reset specifier as defined above. + +Please also refer to Documentation/devicetree/bindings/reset/reset.txt for +common reset controller usage by consumers. + +Example: +-------- +The following example demonstrates a syscon node, the reset controller node +using the syscon node, and a consumer (a DSP device) on the TI Keystone 2 +Edison SoC. + +/ { + soc { + psc: power-sleep-controller@02350000 { + compatible = "syscon", "simple-mfd"; + reg = <0x02350000 0x1000>; + + pscrst: psc-reset { + compatible = "ti,k2e-pscrst", "ti,syscon-reset"; + #reset-cells = <1>; + + ti,reset-bits = < + 0xa3c 8 0xa3c 8 0x83c 8 (ASSERT_SET|DEASSERT_CLEAR|STATUS_SET) /* 0: pcrst-dsp0 */ + 0xa40 5 0xa44 3 0 0 (ASSERT_SET|DEASSERT_CLEAR|STATUS_NONE) /* 1: pcrst-example */ + >; + }; + }; + + dsp0: dsp0 { + ... + resets = <&pscrst 0>; + ... + }; + }; +}; diff --git a/Documentation/devicetree/bindings/rng/amlogic,meson-rng.txt b/Documentation/devicetree/bindings/rng/amlogic,meson-rng.txt new file mode 100644 index 000000000000..202f2d09a23f --- /dev/null +++ b/Documentation/devicetree/bindings/rng/amlogic,meson-rng.txt @@ -0,0 +1,14 @@ +Amlogic Meson Random number generator +===================================== + +Required properties: + +- compatible : should be "amlogic,meson-rng" +- reg : Specifies base physical address and size of the registers. + +Example: + +rng { + compatible = "amlogic,meson-rng"; + reg = <0x0 0xc8834000 0x0 0x4>; +}; diff --git a/Documentation/devicetree/bindings/rtc/rtc-opal.txt b/Documentation/devicetree/bindings/rtc/rtc-opal.txt index a1734e5cb75b..2340938cd0f5 100644 --- a/Documentation/devicetree/bindings/rtc/rtc-opal.txt +++ b/Documentation/devicetree/bindings/rtc/rtc-opal.txt @@ -2,7 +2,7 @@ IBM OPAL real-time clock ------------------------ Required properties: -- comapatible: Should be "ibm,opal-rtc" +- compatible: Should be "ibm,opal-rtc" Optional properties: - wakeup-source: Decides if the wakeup is supported or not diff --git a/Documentation/devicetree/bindings/serial/cirrus,clps711x-uart.txt b/Documentation/devicetree/bindings/serial/cirrus,clps711x-uart.txt index caaeb2583579..07013fa60a48 100644 --- a/Documentation/devicetree/bindings/serial/cirrus,clps711x-uart.txt +++ b/Documentation/devicetree/bindings/serial/cirrus,clps711x-uart.txt @@ -1,7 +1,7 @@ * Cirrus Logic CLPS711X Universal Asynchronous Receiver/Transmitter (UART) Required properties: -- compatible: Should be "cirrus,clps711x-uart". +- compatible: Should be "cirrus,ep7209-uart". - reg: Address and length of the register set for the device. - interrupts: Should contain UART TX and RX interrupt. - clocks: Should contain UART core clock number. @@ -20,7 +20,7 @@ Example: }; uart1: uart@80000480 { - compatible = "cirrus,clps711x-uart"; + compatible = "cirrus,ep7312-uart","cirrus,ep7209-uart"; reg = <0x80000480 0x80>; interrupts = <12 13>; clocks = <&clks 11>; diff --git a/Documentation/devicetree/bindings/serial/mtk-uart.txt b/Documentation/devicetree/bindings/serial/mtk-uart.txt index e99e10ab9ecb..0015c722be7b 100644 --- a/Documentation/devicetree/bindings/serial/mtk-uart.txt +++ b/Documentation/devicetree/bindings/serial/mtk-uart.txt @@ -6,6 +6,7 @@ Required properties: * "mediatek,mt6580-uart" for MT6580 compatible UARTS * "mediatek,mt6582-uart" for MT6582 compatible UARTS * "mediatek,mt6589-uart" for MT6589 compatible UARTS + * "mediatek,mt6755-uart" for MT6755 compatible UARTS * "mediatek,mt6795-uart" for MT6795 compatible UARTS * "mediatek,mt7623-uart" for MT7623 compatible UARTS * "mediatek,mt8127-uart" for MT8127 compatible UARTS diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm.txt index 160c752484b4..160c752484b4 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/brg.txt index 4c7d45eaf025..4c7d45eaf025 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/brg.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/brg.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/i2c.txt index 87bc6048667e..87bc6048667e 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/i2c.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/i2c.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/pic.txt index 8e3ee1681618..8e3ee1681618 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/pic.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/pic.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/usb.txt index 74bfda4bb824..74bfda4bb824 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/cpm/usb.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/cpm/usb.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/gpio.txt index 349f79fd7076..349f79fd7076 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/gpio.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/gpio.txt diff --git a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt new file mode 100644 index 000000000000..03c741602c6d --- /dev/null +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt @@ -0,0 +1,124 @@ +* Network + +Currently defined compatibles: +- fsl,cpm1-scc-enet +- fsl,cpm2-scc-enet +- fsl,cpm1-fec-enet +- fsl,cpm2-fcc-enet (third resource is GFEMR) +- fsl,qe-enet + +Example: + + ethernet@11300 { + compatible = "fsl,mpc8272-fcc-enet", + "fsl,cpm2-fcc-enet"; + reg = <11300 20 8400 100 11390 1>; + local-mac-address = [ 00 00 00 00 00 00 ]; + interrupts = <20 8>; + interrupt-parent = <&PIC>; + phy-handle = <&PHY0>; + fsl,cpm-command = <12000300>; + }; + +* MDIO + +Currently defined compatibles: +fsl,pq1-fec-mdio (reg is same as first resource of FEC device) +fsl,cpm2-mdio-bitbang (reg is port C registers) + +Properties for fsl,cpm2-mdio-bitbang: +fsl,mdio-pin : pin of port C controlling mdio data +fsl,mdc-pin : pin of port C controlling mdio clock + +Example: + mdio@10d40 { + compatible = "fsl,mpc8272ads-mdio-bitbang", + "fsl,mpc8272-mdio-bitbang", + "fsl,cpm2-mdio-bitbang"; + reg = <10d40 14>; + #address-cells = <1>; + #size-cells = <0>; + fsl,mdio-pin = <12>; + fsl,mdc-pin = <13>; + }; + +* HDLC + +Currently defined compatibles: +- fsl,ucc-hdlc + +Properties for fsl,ucc-hdlc: +- rx-clock-name +- tx-clock-name + Usage: required + Value type: <string> + Definition : Must be "brg1"-"brg16" for internal clock source, + Must be "clk1"-"clk24" for external clock source. + +- fsl,tdm-interface + Usage: optional + Value type: <empty> + Definition : Specify that hdlc is based on tdm-interface + +The property below is dependent on fsl,tdm-interface: +- fsl,rx-sync-clock + Usage: required + Value type: <string> + Definition : Must be "none", "rsync_pin", "brg9-11" and "brg13-15". + +- fsl,tx-sync-clock + Usage: required + Value type: <string> + Definition : Must be "none", "tsync_pin", "brg9-11" and "brg13-15". + +- fsl,tdm-framer-type + Usage: required for tdm interface + Value type: <string> + Definition : "e1" or "t1".Now e1 and t1 are used, other framer types + are not supported. + +- fsl,tdm-id + Usage: required for tdm interface + Value type: <u32> + Definition : number of TDM ID + +- fsl,tx-timeslot-mask +- fsl,rx-timeslot-mask + Usage: required for tdm interface + Value type: <u32> + Definition : time slot mask for TDM operation. Indicates which time + slots used for transmitting and receiving. + +- fsl,siram-entry-id + Usage: required for tdm interface + Value type: <u32> + Definition : Must be 0,2,4...64. the number of TDM entry. + +- fsl,tdm-internal-loopback + usage: optional for tdm interface + value type: <empty> + Definition : Internal loopback connecting on TDM layer. + +Example for tdm interface: + + ucc@2000 { + compatible = "fsl,ucc-hdlc"; + rx-clock-name = "clk8"; + tx-clock-name = "clk9"; + fsl,rx-sync-clock = "rsync_pin"; + fsl,tx-sync-clock = "tsync_pin"; + fsl,tx-timeslot-mask = <0xfffffffe>; + fsl,rx-timeslot-mask = <0xfffffffe>; + fsl,tdm-framer-type = "e1"; + fsl,tdm-id = <0>; + fsl,siram-entry-id = <0>; + fsl,tdm-interface; + }; + +Example for hdlc without tdm interface: + + ucc@2000 { + compatible = "fsl,ucc-hdlc"; + rx-clock-name = "brg1"; + tx-clock-name = "brg1"; + }; diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe.txt index 4f8930263dd9..d7afaff5faff 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe.txt @@ -69,6 +69,58 @@ Example: }; }; +* Interrupt Controller (IC) + +Required properties: +- compatible : should be "fsl,qe-ic". +- reg : Address range of IC register set. +- interrupts : interrupts generated by the device. +- interrupt-controller : this device is a interrupt controller. + +Example: + + qeic: interrupt-controller@80 { + interrupt-controller; + compatible = "fsl,qe-ic"; + #address-cells = <0>; + #interrupt-cells = <1>; + reg = <0x80 0x80>; + interrupts = <95 2 0 0 94 2 0 0>; + }; + +* Serial Interface Block (SI) + +The SI manages the routing of eight TDM lines to the QE block serial drivers +, the MCC and the UCCs, for receive and transmit. + +Required properties: +- compatible : must be "fsl,<chip>-qe-si". For t1040, must contain + "fsl,t1040-qe-si". +- reg : Address range of SI register set. + +Example: + + si1: si@700 { + compatible = "fsl,t1040-qe-si"; + reg = <0x700 0x80>; + }; + +* Serial Interface Block RAM(SIRAM) + +store the routing entries of SI + +Required properties: +- compatible : should be "fsl,<chip>-qe-siram". For t1040, must contain + "fsl,t1040-qe-siram". +- reg : Address range of SI RAM. + +Example: + + siram1: siram@1000 { + compatible = "fsl,t1040-qe-siram"; + reg = <0x1000 0x800>; + }; + * QE Firmware Node This node defines a firmware binary that is embedded in the device tree, for diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/firmware.txt index 249db3a15d15..249db3a15d15 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/firmware.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/firmware.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/par_io.txt index 60984260207b..60984260207b 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/par_io.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/par_io.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/pincfg.txt index ec6ee2e864a2..ec6ee2e864a2 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/pincfg.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/pincfg.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/ucc.txt index e47734bee3f0..e47734bee3f0 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/ucc.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/ucc.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/usb.txt index 9ccd5f30405b..9ccd5f30405b 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/qe/usb.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/qe/usb.txt diff --git a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/serial.txt index 2ea76d9d137c..2ea76d9d137c 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/cpm_qe/serial.txt +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/serial.txt diff --git a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/uqe_serial.txt b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/uqe_serial.txt new file mode 100644 index 000000000000..8823c86c8085 --- /dev/null +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/uqe_serial.txt @@ -0,0 +1,17 @@ +* Serial + +Required Properties: +compatible : must be "fsl,<chip>-ucc-uart". For t1040, must be +"fsl,t1040-ucc-uart". +port-number : port number of UCC-UART +tx/rx-clock-name : should be "brg1"-"brg16" for internal clock source, + should be "clk1"-"clk28" for external clock source. + +Example: + + ucc_serial: ucc@2200 { + compatible = "fsl,t1040-ucc-uart"; + port-number = <0>; + rx-clock-name = "brg2"; + tx-clock-name = "brg2"; + }; diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt index 5cc82b8353d8..af9ca37221ce 100644 --- a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt @@ -68,7 +68,7 @@ important. Value type: <u32> Definition: must be 2 - denoting the bit in the entry and IRQ flags -- #qcom,state-cells: +- #qcom,smem-state-cells: Usage: required for outgoing entries Value type: <u32> Definition: must be 1 - denoting the bit in the entry @@ -92,7 +92,7 @@ wcnss-smp2p { wcnss_smp2p_out: master-kernel { qcom,entry-name = "master-kernel"; - #qcom,state-cells = <1>; + #qcom,smem-state-cells = <1>; }; wcnss_smp2p_in: slave-kernel { diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,smsm.txt b/Documentation/devicetree/bindings/soc/qcom/qcom,smsm.txt index a6634c70850d..2993b5a97dd6 100644 --- a/Documentation/devicetree/bindings/soc/qcom/qcom,smsm.txt +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,smsm.txt @@ -51,7 +51,7 @@ important. Definition: specifies the offset, in words, of the first bit for this entry -- #qcom,state-cells: +- #qcom,smem-state-cells: Usage: required for local entry Value type: <u32> Definition: must be 1 - denotes bit number @@ -91,7 +91,7 @@ smsm { apps_smsm: apps@0 { reg = <0>; - #qcom,state-cells = <1>; + #qcom,smem-state-cells = <1>; }; wcnss_smsm: wcnss@7 { diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,wcnss.txt b/Documentation/devicetree/bindings/soc/qcom/qcom,wcnss.txt new file mode 100644 index 000000000000..4ea39e9186a7 --- /dev/null +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,wcnss.txt @@ -0,0 +1,116 @@ +Qualcomm WCNSS Binding + +This binding describes the Qualcomm WCNSS hardware. It consists of control +block and a BT, WiFi and FM radio block, all using SMD as command channels. + +- compatible: + Usage: required + Value type: <string> + Definition: must be: "qcom,wcnss", + +- qcom,smd-channel: + Usage: required + Value type: <string> + Definition: standard SMD property specifying the SMD channel used for + communication with the WiFi firmware. + Should be "WCNSS_CTRL". + +- qcom,mmio: + Usage: required + Value type: <prop-encoded-array> + Definition: reference to a node specifying the wcnss "ccu" and "dxe" + register blocks. The node must be compatible with one of + the following: + "qcom,riva", + "qcom,pronto" + += SUBNODES +The subnodes of the wcnss node are optional and describe the individual blocks in +the WCNSS. + +== Bluetooth +The following properties are defined to the bluetooth node: + +- compatible: + Usage: required + Value type: <string> + Definition: must be: + "qcom,wcnss-bt" + +== WiFi +The following properties are defined to the WiFi node: + +- compatible: + Usage: required + Value type: <string> + Definition: must be one of: + "qcom,wcnss-wlan", + +- interrupts: + Usage: required + Value type: <prop-encoded-array> + Definition: should specify the "rx" and "tx" interrupts + +- interrupt-names: + Usage: required + Value type: <stringlist> + Definition: must contain "rx" and "tx" + +- qcom,smem-state: + Usage: required + Value type: <prop-encoded-array> + Definition: should reference the tx-enable and tx-rings-empty SMEM states + +- qcom,smem-state-names: + Usage: required + Value type: <stringlist> + Definition: must contain "tx-enable" and "tx-rings-empty" + += EXAMPLE +The following example represents a SMD node, with one edge representing the +"pronto" subsystem, with the wcnss device and its wcn3680 BT and WiFi blocks +described; as found on the 8974 platform. + +smd { + compatible = "qcom,smd"; + + pronto-edge { + interrupts = <0 142 1>; + + qcom,ipc = <&apcs 8 17>; + qcom,smd-edge = <6>; + + wcnss { + compatible = "qcom,wcnss"; + qcom,smd-channels = "WCNSS_CTRL"; + + #address-cells = <1>; + #size-cells = <1>; + + qcom,mmio = <&pronto>; + + bt { + compatible = "qcom,wcnss-bt"; + }; + + wlan { + compatible = "qcom,wcnss-wlan"; + + interrupts = <0 145 0>, <0 146 0>; + interrupt-names = "tx", "rx"; + + qcom,smem-state = <&apps_smsm 10>, <&apps_smsm 9>; + qcom,smem-state-names = "tx-enable", "tx-rings-empty"; + }; + }; + }; +}; + +soc { + pronto: pronto { + compatible = "qcom,pronto"; + + reg = <0xfb204000 0x2000>, <0xfb202000 0x1000>, <0xfb21b000 0x3000>; + reg-names = "ccu", "dxe", "pmu"; + }; +}; diff --git a/Documentation/devicetree/bindings/sound/adi,adau17x1.txt b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt index 8dbce0e18dda..1447dec28125 100644 --- a/Documentation/devicetree/bindings/sound/adi,adau17x1.txt +++ b/Documentation/devicetree/bindings/sound/adi,adau17x1.txt @@ -13,6 +13,11 @@ Required properties: - reg: The i2c address. Value depends on the state of ADDR0 and ADDR1, as wired in hardware. +Optional properties: + - clock-names: If provided must be "mclk". + - clocks: phandle + clock-specifiers for the clock that provides + the audio master clock for the device. + Examples: #include <dt-bindings/sound/adau17x1.h> @@ -20,5 +25,8 @@ Examples: adau1361@38 { compatible = "adi,adau1761"; reg = <0x38>; + + clock-names = "mclk"; + clocks = <&audio_clock>; }; }; diff --git a/Documentation/devicetree/bindings/sound/adi,adau7002.txt b/Documentation/devicetree/bindings/sound/adi,adau7002.txt new file mode 100644 index 000000000000..f144ee1abf85 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/adi,adau7002.txt @@ -0,0 +1,19 @@ +Analog Devices ADAU7002 Stereo PDM-to-I2S/TDM Converter + +Required properties: + + - compatible: Must be "adi,adau7002" + +Optional properties: + + - IOVDD-supply: Phandle and specifier for the power supply providing the IOVDD + supply as covered in Documentation/devicetree/bindings/regulator/regulator.txt + + If this property is not present it is assumed that the supply pin is + hardwired to always on. + +Example: + adau7002: pdm-to-i2s { + compatible = "adi,adau7002"; + IOVDD-supply = <&supply>; + }; diff --git a/Documentation/devicetree/bindings/sound/brcm,cygnus-audio.txt b/Documentation/devicetree/bindings/sound/brcm,cygnus-audio.txt new file mode 100644 index 000000000000..b139e66d2a11 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/brcm,cygnus-audio.txt @@ -0,0 +1,67 @@ +BROADCOM Cygnus Audio I2S/TDM/SPDIF controller + +Required properties: + - compatible : "brcm,cygnus-audio" + - #address-cells: 32bit valued, 1 cell. + - #size-cells: 32bit valued, 0 cell. + - reg : Should contain audio registers location and length + - reg-names: names of the registers listed in "reg" property + Valid names are "aud" and "i2s_in". "aud" contains a + set of DMA, I2S_OUT and SPDIF registers. "i2s_in" contains + a set of I2S_IN registers. + - clocks: PLL and leaf clocks used by audio ports + - assigned-clocks: PLL and leaf clocks + - assigned-clock-parents: parent clocks of the assigned clocks + (usually the PLL) + - assigned-clock-rates: List of clock frequencies of the + assigned clocks + - clock-names: names of 3 leaf clocks used by audio ports + Valid names are "ch0_audio", "ch1_audio", "ch2_audio" + - interrupts: audio DMA interrupt number + +SSP Subnode properties: +- reg: The index of ssp port interface to use + Valid value are 0, 1, 2, or 3 (for spdif) + +Example: + cygnus_audio: audio@180ae000 { + compatible = "brcm,cygnus-audio"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x180ae000 0xafd>, <0x180aec00 0x1f8>; + reg-names = "aud", "i2s_in"; + clocks = <&audiopll BCM_CYGNUS_AUDIOPLL_CH0>, + <&audiopll BCM_CYGNUS_AUDIOPLL_CH1>, + <&audiopll BCM_CYGNUS_AUDIOPLL_CH2>; + assigned-clocks = <&audiopll BCM_CYGNUS_AUDIOPLL>, + <&audiopll BCM_CYGNUS_AUDIOPLL_CH0>, + <&audiopll BCM_CYGNUS_AUDIOPLL_CH1>, + <&audiopll BCM_CYGNUS_AUDIOPLL_CH2>; + assigned-clock-parents = <&audiopll BCM_CYGNUS_AUDIOPLL>; + assigned-clock-rates = <1769470191>, + <0>, + <0>, + <0>; + clock-names = "ch0_audio", "ch1_audio", "ch2_audio"; + interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>; + + ssp0: ssp_port@0 { + reg = <0>; + status = "okay"; + }; + + ssp1: ssp_port@1 { + reg = <1>; + status = "disabled"; + }; + + ssp2: ssp_port@2 { + reg = <2>; + status = "disabled"; + }; + + spdif: spdif_port@3 { + reg = <3>; + status = "disabled"; + }; + }; diff --git a/Documentation/devicetree/bindings/sound/bt-sco.txt b/Documentation/devicetree/bindings/sound/bt-sco.txt index 29b8e5d40203..641edf75e184 100644 --- a/Documentation/devicetree/bindings/sound/bt-sco.txt +++ b/Documentation/devicetree/bindings/sound/bt-sco.txt @@ -4,7 +4,7 @@ This device support generic Bluetooth SCO link. Required properties: - - compatible : "delta,dfbmcs320" + - compatible : "delta,dfbmcs320" or "linux,bt-sco" Example: diff --git a/Documentation/devicetree/bindings/sound/cs35l33.txt b/Documentation/devicetree/bindings/sound/cs35l33.txt new file mode 100644 index 000000000000..acfb47525b49 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/cs35l33.txt @@ -0,0 +1,126 @@ +CS35L33 Speaker Amplifier + +Required properties: + + - compatible : "cirrus,cs35l33" + + - reg : the I2C address of the device for I2C + + - VA-supply, VP-supply : power supplies for the device, + as covered in + Documentation/devicetree/bindings/regulator/regulator.txt. + +Optional properties: + + - reset-gpios : gpio used to reset the amplifier + + - interrupt-parent : Specifies the phandle of the interrupt controller to + which the IRQs from CS35L33 are delivered to. + - interrupts : IRQ line info CS35L33. + (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt + for further information relating to interrupt properties) + + - cirrus,boost-ctl : Booster voltage use to supply the amp. If the value is + 0, then VBST = VP. If greater than 0, the boost voltage will be 3300mV with + a value of 1 and will increase at a step size of 100mV until a maximum of + 8000mV. + + - cirrus,ramp-rate : On power up, it affects the time from when the power + up sequence begins to the time the audio reaches a full-scale output. + On power down, it affects the time from when the power-down sequence + begins to when the amplifier disables the PWM outputs. If this property + is not set then soft ramping will be disabled and ramp time would be + 20ms. If this property is set to 0,1,2,3 then ramp times would be 40ms, + 60ms,100ms,175ms respectively for 48KHz sample rate. + + - cirrus,boost-ipk : The maximum current allowed for the boost converter. + The range starts at 1850000uA and goes to a maximum of 3600000uA + with a step size of 15625uA. The default is 2500000uA. + + - cirrus,imon-adc-scale : Configures the scaling of data bits from the IMON + ADC data word. This property can be set as a value of 0 for bits 15 down + to 0, 6 for 21 down to 6, 7, for 22 down to 7, 8 for 23 down to 8. + + +Optional H/G Algorithm sub-node: + +The cs35l33 node can have a single "cirrus,hg-algo" sub-node that will enable +the internal H/G Algorithm. + + - cirrus,hg-algo : Sub-node for internal Class H/G algorithm that + controls the amplifier supplies. + +Optional properties for the "cirrus,hg-algo" sub-node: + + - cirrus,mem-depth : Memory depth for the Class H/G algorithm measured in + LRCLK cycles. If this property is set to 0, 1, 2, or 3 then the memory + depths will be 1, 4, 8, 16 LRCLK cycles. The default is 16 LRCLK cycles. + + cirrus,release-rate : The number of consecutive LRCLK periods before + allowing release condition tracking updates. The number of LRCLK periods + start at 3 to a maximum of 255. + + - cirrus,ldo-thld : Configures the signal threshold at which the PWM output + stage enters LDO operation. Starts as a default value of 50mV for a value + of 1 and increases with a step size of 50mV to a maximum of 750mV (value of + 0xF). + + - cirrus,ldo-path-disable : This is a boolean property. If present, the H/G + algorithm uses the max detection path. If not present, the LDO + detection path is used. + + - cirrus,ldo-entry-delay : The LDO entry delay in milliseconds before the H/G + algorithm switches to the LDO voltage. This property can be set to values + from 0 to 7 for delays of 5ms, 10ms, 50ms, 100ms, 200ms, 500ms, 1000ms. + The default is 100ms. + + - cirrus,vp-hg-auto : This is a boolean property. When set, class H/G VPhg + automatic updating is enabled. + + - cirrus,vp-hg : Class H/G algorithm VPhg. Controls the H/G algorithm's + reference to the VP voltage for when to start generating a boosted VBST. + The reference voltage starts at 3000mV with a value of 0x3 and is increased + by 100mV per step to a maximum of 5500mV. + + - cirrus,vp-hg-rate : The rate (number of LRCLK periods) at which the VPhg is + allowed to increase to a higher voltage when using VPhg automatic + tracking. This property can be set to values from 0 to 3 with rates of 128 + periods, 2048 periods, 32768 periods, and 524288 periods. + The default is 32768 periods. + + - cirrus,vp-hg-va : VA calculation reference for automatic VPhg tracking + using VPMON. This property can be set to values from 0 to 6 starting at + 1800mV with a step size of 50mV up to a maximum value of 1750mV. + Default is 1800mV. + +Example: + +cs35l33: cs35l33@40 { + compatible = "cirrus,cs35l33"; + reg = <0x40>; + + VA-supply = <&ldo5_reg>; + VP-supply = <&ldo5_reg>; + + interrupt-parent = <&gpio8>; + interrupts = <3 IRQ_TYPE_LEVEL_LOW>; + + reset-gpios = <&cs47l91 34 0>; + + cirrus,ramp-rate = <0x0>; + cirrus,boost-ctl = <0x30>; /* VBST = 8000mV */ + cirrus,boost-ipk = <0xE0>; /* 3600mA */ + cirrus,imon-adc-scale = <0> /* Bits 15 down to 0 */ + + cirrus,hg-algo { + cirrus,mem-depth = <0x3>; + cirrus,release-rate = <0x3>; + cirrus,ldo-thld = <0x1>; + cirrus,ldo-path-disable = <0x0>; + cirrus,ldo-entry-delay=<0x4>; + cirrus,vp-hg-auto; + cirrus,vp-hg=<0xF>; + cirrus,vp-hg-rate=<0x2>; + cirrus,vp-hg-va=<0x0>; + }; +}; diff --git a/Documentation/devicetree/bindings/sound/cs53l30.txt b/Documentation/devicetree/bindings/sound/cs53l30.txt new file mode 100644 index 000000000000..4dbfb8274cd9 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/cs53l30.txt @@ -0,0 +1,44 @@ +CS53L30 audio CODEC + +Required properties: + + - compatible : "cirrus,cs53l30" + + - reg : the I2C address of the device + + - VA-supply, VP-supply : power supplies for the device, + as covered in Documentation/devicetree/bindings/regulator/regulator.txt. + +Optional properties: + + - reset-gpios : a GPIO spec for the reset pin. + + - mute-gpios : a GPIO spec for the MUTE pin. The active state can be either + GPIO_ACTIVE_HIGH or GPIO_ACTIVE_LOW, which would be handled + by the driver automatically. + + - cirrus,micbias-lvl : Set the output voltage level on the MICBIAS Pin. + 0 = Hi-Z + 1 = 1.80 V + 2 = 2.75 V + + - cirrus,use-sdout2 : This is a boolean property. If present, it indicates + the hardware design connects both SDOUT1 and SDOUT2 + pins to output data. Otherwise, it indicates that + only SDOUT1 is connected for data output. + * CS53l30 supports 4-channel data output in the same + * frame using two different ways: + * 1) Normal I2S mode on two data pins -- each SDOUT + * carries 2-channel data in the same time. + * 2) TDM mode on one signle data pin -- SDOUT1 carries + * 4-channel data per frame. + +Example: + +codec: cs53l30@48 { + compatible = "cirrus,cs53l30"; + reg = <0x48>; + reset-gpios = <&gpio 54 0>; + VA-supply = <&cs53l30_va>; + VP-supply = <&cs53l30_vp>; +}; diff --git a/Documentation/devicetree/bindings/sound/designware-i2s.txt b/Documentation/devicetree/bindings/sound/designware-i2s.txt index 7bb54247f8e8..6a536d570e29 100644 --- a/Documentation/devicetree/bindings/sound/designware-i2s.txt +++ b/Documentation/devicetree/bindings/sound/designware-i2s.txt @@ -12,6 +12,10 @@ Required properties: one for receive. - dma-names : "tx" for the transmit channel, "rx" for the receive channel. +Optional properties: + - interrupts: The interrupt line number for the I2S controller. Add this + parameter if the I2S controller that you are using does not support DMA. + For more details on the 'dma', 'dma-names', 'clock' and 'clock-names' properties please check: * resource-names.txt diff --git a/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt b/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt index ceaef5126989..f749e2744824 100644 --- a/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt +++ b/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt @@ -58,7 +58,7 @@ Required properties: * DMIC (stands for Digital Microphone Jack) Note: The "Mic Jack" and "AMIC" are redundant while - coexsiting in order to support the old bindings + coexisting in order to support the old bindings of wm8962 and sgtl5000. Optional properties: diff --git a/Documentation/devicetree/bindings/sound/max98504.txt b/Documentation/devicetree/bindings/sound/max98504.txt new file mode 100644 index 000000000000..583ed5fdfb28 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/max98504.txt @@ -0,0 +1,44 @@ +Maxim MAX98504 class D mono speaker amplifier + +This device supports I2C control interface and an IRQ output signal. It features +a PCM and PDM digital audio interface (DAI) and a differential analog input. + +Required properties: + + - compatible : "maxim,max98504" + - reg : should contain the I2C slave device address + - DVDD-supply, DIOVDD-supply, PVDD-supply: power supplies for the device, + as covered in ../regulator/regulator.txt + - interrupts : should specify the interrupt line the device is connected to, + as described in ../interrupt-controller/interrupts.txt + +Optional properties: + + - maxim,brownout-threshold - the PVDD brownout threshold, the value must be + from 0, 1...21 range, corresponding to 2.6V, 2.65V...3.65V voltage range + - maxim,brownout-attenuation - the brownout attenuation to the speaker gain + applied during the "attack hold" and "timed hold" phase, the value must be + from 0...6 (dB) range + - maxim,brownout-attack-hold-ms - the brownout attack hold phase time in ms, + 0...255 (VBATBROWN_ATTK_HOLD, register 0x0018) + - maxim,brownout-timed-hold-ms - the brownout timed hold phase time in ms, + 0...255 (VBATBROWN_TIME_HOLD, register 0x0019) + - maxim,brownout-release-rate-ms - the brownout release phase step time in ms, + 0...255 (VBATBROWN_RELEASE, register 0x001A) + +The default value when the above properties are not specified is 0, +the maxim,brownout-threshold property must be specified to actually enable +the PVDD brownout protection. + +Example: + + max98504@31 { + compatible = "maxim,max98504"; + reg = <0x31>; + interrupt-parent = <&gpio_bank_0>; + interrupts = <2 0>; + + DVDD-supply = <®ulator>; + DIOVDD-supply = <®ulator>; + PVDD-supply = <®ulator>; +}; diff --git a/Documentation/devicetree/bindings/sound/max9860.txt b/Documentation/devicetree/bindings/sound/max9860.txt new file mode 100644 index 000000000000..e0d4e95e31b3 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/max9860.txt @@ -0,0 +1,28 @@ +MAX9860 Mono Audio Voice Codec + +Required properties: + + - compatible : "maxim,max9860" + + - reg : the I2C address of the device + + - AVDD-supply, DVDD-supply and DVDDIO-supply : power supplies for + the device, as covered in bindings/regulator/regulator.txt + + - clock-names : Required element: "mclk". + + - clocks : A clock specifier for the clock connected as MCLK. + +Examples: + + max9860: max9860@10 { + compatible = "maxim,max9860"; + reg = <0x10>; + + AVDD-supply = <®_1v8>; + DVDD-supply = <®_1v8>; + DVDDIO-supply = <®_3v0>; + + clock-names = "mclk"; + clocks = <&pck2>; + }; diff --git a/Documentation/devicetree/bindings/sound/mt2701-afe-pcm.txt b/Documentation/devicetree/bindings/sound/mt2701-afe-pcm.txt new file mode 100644 index 000000000000..3e623a724e55 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/mt2701-afe-pcm.txt @@ -0,0 +1,150 @@ +Mediatek AFE PCM controller for mt2701 + +Required properties: +- compatible = "mediatek,mt2701-audio"; +- reg: register location and size +- interrupts: Should contain AFE interrupt +- clock-names: should have these clock names: + "infra_sys_audio_clk", + "top_audio_mux1_sel", + "top_audio_mux2_sel", + "top_audio_mux1_div", + "top_audio_mux2_div", + "top_audio_48k_timing", + "top_audio_44k_timing", + "top_audpll_mux_sel", + "top_apll_sel", + "top_aud1_pll_98M", + "top_aud2_pll_90M", + "top_hadds2_pll_98M", + "top_hadds2_pll_294M", + "top_audpll", + "top_audpll_d4", + "top_audpll_d8", + "top_audpll_d16", + "top_audpll_d24", + "top_audintbus_sel", + "clk_26m", + "top_syspll1_d4", + "top_aud_k1_src_sel", + "top_aud_k2_src_sel", + "top_aud_k3_src_sel", + "top_aud_k4_src_sel", + "top_aud_k5_src_sel", + "top_aud_k6_src_sel", + "top_aud_k1_src_div", + "top_aud_k2_src_div", + "top_aud_k3_src_div", + "top_aud_k4_src_div", + "top_aud_k5_src_div", + "top_aud_k6_src_div", + "top_aud_i2s1_mclk", + "top_aud_i2s2_mclk", + "top_aud_i2s3_mclk", + "top_aud_i2s4_mclk", + "top_aud_i2s5_mclk", + "top_aud_i2s6_mclk", + "top_asm_m_sel", + "top_asm_h_sel", + "top_univpll2_d4", + "top_univpll2_d2", + "top_syspll_d5"; + +Example: + + afe: mt2701-afe-pcm@11220000 { + compatible = "mediatek,mt2701-audio"; + reg = <0 0x11220000 0 0x2000>, + <0 0x112A0000 0 0x20000>; + interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_LOW>, + <GIC_SPI 132 IRQ_TYPE_LEVEL_LOW>; + clocks = <&infracfg CLK_INFRA_AUDIO>, + <&topckgen CLK_TOP_AUD_MUX1_SEL>, + <&topckgen CLK_TOP_AUD_MUX2_SEL>, + <&topckgen CLK_TOP_AUD_MUX1_DIV>, + <&topckgen CLK_TOP_AUD_MUX2_DIV>, + <&topckgen CLK_TOP_AUD_48K_TIMING>, + <&topckgen CLK_TOP_AUD_44K_TIMING>, + <&topckgen CLK_TOP_AUDPLL_MUX_SEL>, + <&topckgen CLK_TOP_APLL_SEL>, + <&topckgen CLK_TOP_AUD1PLL_98M>, + <&topckgen CLK_TOP_AUD2PLL_90M>, + <&topckgen CLK_TOP_HADDS2PLL_98M>, + <&topckgen CLK_TOP_HADDS2PLL_294M>, + <&topckgen CLK_TOP_AUDPLL>, + <&topckgen CLK_TOP_AUDPLL_D4>, + <&topckgen CLK_TOP_AUDPLL_D8>, + <&topckgen CLK_TOP_AUDPLL_D16>, + <&topckgen CLK_TOP_AUDPLL_D24>, + <&topckgen CLK_TOP_AUDINTBUS_SEL>, + <&clk26m>, + <&topckgen CLK_TOP_SYSPLL1_D4>, + <&topckgen CLK_TOP_AUD_K1_SRC_SEL>, + <&topckgen CLK_TOP_AUD_K2_SRC_SEL>, + <&topckgen CLK_TOP_AUD_K3_SRC_SEL>, + <&topckgen CLK_TOP_AUD_K4_SRC_SEL>, + <&topckgen CLK_TOP_AUD_K5_SRC_SEL>, + <&topckgen CLK_TOP_AUD_K6_SRC_SEL>, + <&topckgen CLK_TOP_AUD_K1_SRC_DIV>, + <&topckgen CLK_TOP_AUD_K2_SRC_DIV>, + <&topckgen CLK_TOP_AUD_K3_SRC_DIV>, + <&topckgen CLK_TOP_AUD_K4_SRC_DIV>, + <&topckgen CLK_TOP_AUD_K5_SRC_DIV>, + <&topckgen CLK_TOP_AUD_K6_SRC_DIV>, + <&topckgen CLK_TOP_AUD_I2S1_MCLK>, + <&topckgen CLK_TOP_AUD_I2S2_MCLK>, + <&topckgen CLK_TOP_AUD_I2S3_MCLK>, + <&topckgen CLK_TOP_AUD_I2S4_MCLK>, + <&topckgen CLK_TOP_AUD_I2S5_MCLK>, + <&topckgen CLK_TOP_AUD_I2S6_MCLK>, + <&topckgen CLK_TOP_ASM_M_SEL>, + <&topckgen CLK_TOP_ASM_H_SEL>, + <&topckgen CLK_TOP_UNIVPLL2_D4>, + <&topckgen CLK_TOP_UNIVPLL2_D2>, + <&topckgen CLK_TOP_SYSPLL_D5>; + + clock-names = "infra_sys_audio_clk", + "top_audio_mux1_sel", + "top_audio_mux2_sel", + "top_audio_mux1_div", + "top_audio_mux2_div", + "top_audio_48k_timing", + "top_audio_44k_timing", + "top_audpll_mux_sel", + "top_apll_sel", + "top_aud1_pll_98M", + "top_aud2_pll_90M", + "top_hadds2_pll_98M", + "top_hadds2_pll_294M", + "top_audpll", + "top_audpll_d4", + "top_audpll_d8", + "top_audpll_d16", + "top_audpll_d24", + "top_audintbus_sel", + "clk_26m", + "top_syspll1_d4", + "top_aud_k1_src_sel", + "top_aud_k2_src_sel", + "top_aud_k3_src_sel", + "top_aud_k4_src_sel", + "top_aud_k5_src_sel", + "top_aud_k6_src_sel", + "top_aud_k1_src_div", + "top_aud_k2_src_div", + "top_aud_k3_src_div", + "top_aud_k4_src_div", + "top_aud_k5_src_div", + "top_aud_k6_src_div", + "top_aud_i2s1_mclk", + "top_aud_i2s2_mclk", + "top_aud_i2s3_mclk", + "top_aud_i2s4_mclk", + "top_aud_i2s5_mclk", + "top_aud_i2s6_mclk", + "top_asm_m_sel", + "top_asm_h_sel", + "top_univpll2_d4", + "top_univpll2_d2", + "top_syspll_d5"; + }; diff --git a/Documentation/devicetree/bindings/sound/mt2701-cs42448.txt b/Documentation/devicetree/bindings/sound/mt2701-cs42448.txt new file mode 100644 index 000000000000..05574446ceb6 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/mt2701-cs42448.txt @@ -0,0 +1,43 @@ +MT2701 with CS42448 CODEC + +Required properties: +- compatible: "mediatek,mt2701-cs42448-machine" +- mediatek,platform: the phandle of MT2701 ASoC platform +- audio-routing: a list of the connections between audio +- mediatek,audio-codec: the phandles of cs42448 codec +- mediatek,audio-codec-bt-mrg the phandles of bt-sco dummy codec +- pinctrl-names: Should contain only one value - "default" +- pinctrl-0: Should specify pin control groups used for this controller. +- i2s1-in-sel-gpio1, i2s1-in-sel-gpio2: Should specify two gpio pins to + control I2S1-in mux. + +Example: + + sound:sound { + compatible = "mediatek,mt2701-cs42448-machine"; + mediatek,platform = <&afe>; + /* CS42448 Machine name */ + audio-routing = + "Line Out Jack", "AOUT1L", + "Line Out Jack", "AOUT1R", + "Line Out Jack", "AOUT2L", + "Line Out Jack", "AOUT2R", + "Line Out Jack", "AOUT3L", + "Line Out Jack", "AOUT3R", + "Line Out Jack", "AOUT4L", + "Line Out Jack", "AOUT4R", + "AIN1L", "AMIC", + "AIN1R", "AMIC", + "AIN2L", "Tuner In", + "AIN2R", "Tuner In", + "AIN3L", "Satellite Tuner In", + "AIN3R", "Satellite Tuner In", + "AIN3L", "AUX In", + "AIN3R", "AUX In"; + mediatek,audio-codec = <&cs42448>; + mediatek,audio-codec-bt-mrg = <&bt_sco_codec>; + pinctrl-names = "default"; + pinctrl-0 = <&aud_pins_default>; + i2s1-in-sel-gpio1 = <&pio 53 0>; + i2s1-in-sel-gpio2 = <&pio 54 0>; + }; diff --git a/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt b/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt index 5bfa6b60530b..29dce2ac8773 100644 --- a/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt +++ b/Documentation/devicetree/bindings/sound/mt8173-rt5650.txt @@ -1,8 +1,9 @@ -MT8173 with RT5650 CODECS +MT8173 with RT5650 CODECS and HDMI via I2S Required properties: - compatible : "mediatek,mt8173-rt5650" - mediatek,audio-codec: the phandles of rt5650 codecs + and of the hdmi encoder node - mediatek,platform: the phandle of MT8173 ASoC platform Optional subnodes: @@ -12,12 +13,17 @@ Required codec-capture subnode properties: <&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1) <&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2) +- mediatek,mclk: the MCLK source + 0 : external oscillator, MCLK = 12.288M + 1 : internal source from mt8173, MCLK = sampling rate*256 + Example: sound { compatible = "mediatek,mt8173-rt5650"; - mediatek,audio-codec = <&rt5650>; + mediatek,audio-codec = <&rt5650 &hdmi0>; mediatek,platform = <&afe>; + mediatek,mclk = <0>; codec-capture { sound-dai = <&rt5650 1>; }; diff --git a/Documentation/devicetree/bindings/sound/omap-mcpdm.txt b/Documentation/devicetree/bindings/sound/omap-mcpdm.txt index 0741dff048dd..6f6c2f8e908d 100644 --- a/Documentation/devicetree/bindings/sound/omap-mcpdm.txt +++ b/Documentation/devicetree/bindings/sound/omap-mcpdm.txt @@ -8,6 +8,8 @@ Required properties: - interrupts: Interrupt number for McPDM - interrupt-parent: The parent interrupt controller - ti,hwmods: Name of the hwmod associated to the McPDM +- clocks: phandle for the pdmclk provider, likely <&twl6040> +- clock-names: Must be "pdmclk" Example: @@ -19,3 +21,11 @@ mcpdm: mcpdm@40132000 { interrupt-parent = <&gic>; ti,hwmods = "mcpdm"; }; + +In board DTS file the pdmclk needs to be added: + +&mcpdm { + clocks = <&twl6040>; + clock-names = "pdmclk"; + status = "okay"; +}; diff --git a/Documentation/devicetree/bindings/sound/renesas,rsnd.txt b/Documentation/devicetree/bindings/sound/renesas,rsnd.txt index c7b29df4a963..15a7316e4c91 100644 --- a/Documentation/devicetree/bindings/sound/renesas,rsnd.txt +++ b/Documentation/devicetree/bindings/sound/renesas,rsnd.txt @@ -373,6 +373,8 @@ Optional properties: - #clock-cells : it must be 0 if your system has audio_clkout it must be 1 if your system has audio_clkout0/1/2/3 - clock-frequency : for all audio_clkout0/1/2/3 +- clkout-lr-asynchronous : boolean property. it indicates that audio_clkoutn + is asynchronizes with lr-clock. SSI subnode properties: - interrupts : Should contain SSI interrupt for PIO transfer diff --git a/Documentation/devicetree/bindings/sound/rockchip-i2s.txt b/Documentation/devicetree/bindings/sound/rockchip-i2s.txt index 6e86d8aa29b4..4ea29aa9af59 100644 --- a/Documentation/devicetree/bindings/sound/rockchip-i2s.txt +++ b/Documentation/devicetree/bindings/sound/rockchip-i2s.txt @@ -23,6 +23,11 @@ Required properties: - rockchip,playback-channels: max playback channels, if not set, 8 channels default. - rockchip,capture-channels: max capture channels, if not set, 2 channels default. +Required properties for controller which support multi channels +playback/capture: + +- rockchip,grf: the phandle of the syscon node for GRF register. + Example for rk3288 I2S controller: i2s@ff890000 { diff --git a/Documentation/devicetree/bindings/sound/rt5514.txt b/Documentation/devicetree/bindings/sound/rt5514.txt index e24436fc5ea9..9cabfc18cb57 100644 --- a/Documentation/devicetree/bindings/sound/rt5514.txt +++ b/Documentation/devicetree/bindings/sound/rt5514.txt @@ -8,6 +8,11 @@ Required properties: - reg : The I2C address of the device. +Optional properties: + +- clocks: The phandle of the master clock to the CODEC +- clock-names: Should be "mclk" + Pins on the device (for linking into audio routes) for RT5514: * DMIC1L diff --git a/Documentation/devicetree/bindings/sound/samsung,odroidx2-max98090.txt b/Documentation/devicetree/bindings/sound/samsung,odroidx2-max98090.txt deleted file mode 100644 index 9148f72319e1..000000000000 --- a/Documentation/devicetree/bindings/sound/samsung,odroidx2-max98090.txt +++ /dev/null @@ -1,35 +0,0 @@ -Samsung Exynos Odroid X2/U3 audio complex with MAX98090 codec - -Required properties: - - compatible : "samsung,odroidx2-audio" - for Odroid X2 board, - "samsung,odroidu3-audio" - for Odroid U3 board - - samsung,model : the user-visible name of this sound complex - - samsung,i2s-controller : the phandle of the I2S controller - - samsung,audio-codec : the phandle of the MAX98090 audio codec - - samsung,audio-routing : a list of the connections between audio - components; each entry is a pair of strings, the first being the - connection's sink, the second being the connection's source; - valid names for sources and sinks are the MAX98090's pins (as - documented in its binding), and the jacks on the board - For Odroid X2: - * Headphone Jack - * Mic Jack - * DMIC - - For Odroid U3: - * Headphone Jack - * Speakers - -Example: - -sound { - compatible = "samsung,odroidu3-audio"; - samsung,i2s-controller = <&i2s0>; - samsung,audio-codec = <&max98090>; - samsung,model = "Odroid-X2"; - samsung,audio-routing = - "Headphone Jack", "HPL", - "Headphone Jack", "HPR", - "IN1", "Mic Jack", - "Mic Jack", "MICBIAS"; -}; diff --git a/Documentation/devicetree/bindings/sound/sgtl5000.txt b/Documentation/devicetree/bindings/sound/sgtl5000.txt index 0e5e4eb3ef1b..5666da7b8605 100644 --- a/Documentation/devicetree/bindings/sound/sgtl5000.txt +++ b/Documentation/devicetree/bindings/sound/sgtl5000.txt @@ -7,6 +7,14 @@ Required properties: - clocks : the clock provider of SYS_MCLK +- VDDA-supply : the regulator provider of VDDA + +- VDDIO-supply: the regulator provider of VDDIO + +Optional properties: + +- VDDD-supply : the regulator provider of VDDD + - micbias-resistor-k-ohms : the bias resistor to be used in kOmhs The resistor can take values of 2k, 4k or 8k. If set to 0 it will be off. @@ -15,17 +23,9 @@ Required properties: - micbias-voltage-m-volts : the bias voltage to be used in mVolts The voltage can take values from 1.25V to 3V by 250mV steps - If this node is not mentionned or the value is unknown, then + If this node is not mentioned or the value is unknown, then the value is set to 1.25V. -- VDDA-supply : the regulator provider of VDDA - -- VDDIO-supply: the regulator provider of VDDIO - -Optional properties: - -- VDDD-supply : the regulator provider of VDDD - Example: codec: sgtl5000@0a { diff --git a/Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt b/Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt index 4d9a83d9a017..16bcdfb6760e 100644 --- a/Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt +++ b/Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt @@ -33,11 +33,11 @@ Required properties: "tx" for "st,sti-uni-player" compatibility "rx" for "st,sti-uni-reader" compatibility - - version: IP version integrated in SOC. + - st,version: IP version integrated in SOC. - dai-name: DAI name that describes the IP. - - IP mode: IP working mode depending on associated codec. + - st,mode: IP working mode depending on associated codec. "HDMI" connected to HDMI codec and support IEC HDMI formats (player only). "SPDIF" connected to SPDIF codec and support SPDIF formats (player only). "PCM" PCM standard mode for I2S or TDM bus. @@ -47,7 +47,7 @@ Required properties ("st,sti-uni-player" compatibility only): - clocks: CPU_DAI IP clock source, listed in the same order than the CPU_DAI properties. - - uniperiph-id: internal SOC IP instance ID. + - st,uniperiph-id: internal SOC IP instance ID. Optional properties: - pinctrl-0: defined for CPU_DAI@1 and CPU_DAI@4 to describe I2S PIOs for @@ -84,9 +84,9 @@ Example: dmas = <&fdma0 4 0 1>; dai-name = "Uni Player #2 (DAC)"; dma-names = "tx"; - uniperiph-id = <2>; - version = <5>; - mode = "PCM"; + st,uniperiph-id = <2>; + st,version = <5>; + st,mode = "PCM"; }; sti_uni_player3: sti-uni-player@3 { @@ -100,9 +100,9 @@ Example: dmas = <&fdma0 7 0 1>; dma-names = "tx"; dai-name = "Uni Player #3 (SPDIF)"; - uniperiph-id = <3>; - version = <5>; - mode = "SPDIF"; + st,uniperiph-id = <3>; + st,version = <5>; + st,mode = "SPDIF"; }; sti_uni_reader1: sti-uni-reader@1 { @@ -115,7 +115,7 @@ Example: dmas = <&fdma0 6 0 1>; dma-names = "rx"; dai-name = "Uni Reader #1 (HDMI RX)"; - version = <3>; + st,version = <3>; st,mode = "PCM"; }; diff --git a/Documentation/devicetree/bindings/sound/sun4i-i2s.txt b/Documentation/devicetree/bindings/sound/sun4i-i2s.txt new file mode 100644 index 000000000000..7b526ec64991 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/sun4i-i2s.txt @@ -0,0 +1,34 @@ +* Allwinner A10 I2S controller + +The I2S bus (Inter-IC sound bus) is a serial link for digital +audio data transfer between devices in the system. + +Required properties: + +- compatible: should be one of the followings + - "allwinner,sun4i-a10-i2s" +- reg: physical base address of the controller and length of memory mapped + region. +- interrupts: should contain the I2S interrupt. +- dmas: DMA specifiers for tx and rx dma. See the DMA client binding, + Documentation/devicetree/bindings/dma/dma.txt +- dma-names: should include "tx" and "rx". +- clocks: a list of phandle + clock-specifer pairs, one for each entry in clock-names. +- clock-names: should contain followings: + - "apb" : clock for the I2S bus interface + - "mod" : module clock for the I2S controller +- #sound-dai-cells : Must be equal to 0 + +Example: + +i2s0: i2s@01c22400 { + #sound-dai-cells = <0>; + compatible = "allwinner,sun4i-a10-i2s"; + reg = <0x01c22400 0x400>; + interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&apb0_gates 3>, <&i2s0_clk>; + clock-names = "apb", "mod"; + dmas = <&dma SUN4I_DMA_NORMAL 3>, + <&dma SUN4I_DMA_NORMAL 3>; + dma-names = "rx", "tx"; +}; diff --git a/Documentation/devicetree/bindings/timer/cirrus,clps711x-timer.txt b/Documentation/devicetree/bindings/timer/cirrus,clps711x-timer.txt index cd55b52548e4..d4c62e7b1714 100644 --- a/Documentation/devicetree/bindings/timer/cirrus,clps711x-timer.txt +++ b/Documentation/devicetree/bindings/timer/cirrus,clps711x-timer.txt @@ -1,7 +1,7 @@ * Cirrus Logic CLPS711X Timer Counter Required properties: -- compatible: Shall contain "cirrus,clps711x-timer". +- compatible: Shall contain "cirrus,ep7209-timer". - reg : Address and length of the register set. - interrupts: The interrupt number of the timer. - clocks : phandle of timer reference clock. @@ -15,14 +15,14 @@ Example: }; timer1: timer@80000300 { - compatible = "cirrus,ep7312-timer", "cirrus,clps711x-timer"; + compatible = "cirrus,ep7312-timer", "cirrus,ep7209-timer"; reg = <0x80000300 0x4>; interrupts = <8>; clocks = <&clks 5>; }; timer2: timer@80000340 { - compatible = "cirrus,ep7312-timer", "cirrus,clps711x-timer"; + compatible = "cirrus,ep7312-timer", "cirrus,ep7209-timer"; reg = <0x80000340 0x4>; interrupts = <9>; clocks = <&clks 6>; diff --git a/Documentation/devicetree/bindings/usb/atmel-usb.txt b/Documentation/devicetree/bindings/usb/atmel-usb.txt index 5883b73ea1b5..f4262ed60582 100644 --- a/Documentation/devicetree/bindings/usb/atmel-usb.txt +++ b/Documentation/devicetree/bindings/usb/atmel-usb.txt @@ -113,13 +113,13 @@ usb2: gadget@fff78000 { clock-names = "hclk", "pclk"; atmel,vbus-gpio = <&pioB 19 0>; - ep0 { + ep@0 { reg = <0>; atmel,fifo-size = <64>; atmel,nb-banks = <1>; }; - ep1 { + ep@1 { reg = <1>; atmel,fifo-size = <1024>; atmel,nb-banks = <2>; @@ -127,7 +127,7 @@ usb2: gadget@fff78000 { atmel,can-isoc; }; - ep2 { + ep@2 { reg = <2>; atmel,fifo-size = <1024>; atmel,nb-banks = <2>; @@ -135,21 +135,21 @@ usb2: gadget@fff78000 { atmel,can-isoc; }; - ep3 { + ep@3 { reg = <3>; atmel,fifo-size = <1024>; atmel,nb-banks = <3>; atmel,can-dma; }; - ep4 { + ep@4 { reg = <4>; atmel,fifo-size = <1024>; atmel,nb-banks = <3>; atmel,can-dma; }; - ep5 { + ep@5 { reg = <5>; atmel,fifo-size = <1024>; atmel,nb-banks = <3>; @@ -157,7 +157,7 @@ usb2: gadget@fff78000 { atmel,can-isoc; }; - ep6 { + ep@6 { reg = <6>; atmel,fifo-size = <1024>; atmel,nb-banks = <3>; diff --git a/Documentation/devicetree/bindings/usb/nvidia,tegra124-xusb.txt b/Documentation/devicetree/bindings/usb/nvidia,tegra124-xusb.txt index d28295a3e55f..3eee9e505400 100644 --- a/Documentation/devicetree/bindings/usb/nvidia,tegra124-xusb.txt +++ b/Documentation/devicetree/bindings/usb/nvidia,tegra124-xusb.txt @@ -104,10 +104,10 @@ Example: nvidia,xusb-padctl = <&padctl>; - phys = <&{/padctl@0,7009f000/pads/usb2/usb2-1}>, /* mini-PCIe USB */ - <&{/padctl@0,7009f000/pads/usb2/usb2-2}>, /* USB A */ - <&{/padctl@0,7009f000/pads/pcie/pcie-0}>; /* USB A */ - phy-names = "utmi-1", "utmi-2", "usb3-0"; + phys = <&{/padctl@0,7009f000/pads/usb2/lanes/usb2-1}>, /* mini-PCIe USB */ + <&{/padctl@0,7009f000/pads/usb2/lanes/usb2-2}>, /* USB A */ + <&{/padctl@0,7009f000/pads/pcie/lanes/pcie-0}>; /* USB A */ + phy-names = "usb2-1", "usb2-2", "usb3-0"; avddio-pex-supply = <&vdd_1v05_run>; dvddio-pex-supply = <&vdd_1v05_run>; diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index b9361816fc32..1992aa97d45a 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -238,6 +238,7 @@ simtek sii Seiko Instruments, Inc. silergy Silergy Corp. sirf SiRF Technology, Inc. +sis Silicon Integrated Systems Corp. sitronix Sitronix Technology Corporation skyworks Skyworks Solutions, Inc. smsc Standard Microsystems Corporation @@ -249,6 +250,7 @@ sony Sony Corporation spansion Spansion Inc. sprd Spreadtrum Communications Inc. st STMicroelectronics +starry Starry Electronic Technology (ShenZhen) Co., LTD startek Startek ste ST-Ericsson stericsson ST-Ericsson diff --git a/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt b/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt new file mode 100644 index 000000000000..c5e74d7b4406 --- /dev/null +++ b/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt @@ -0,0 +1,16 @@ +Aspeed Watchdog Timer + +Required properties: + - compatible: must be one of: + - "aspeed,ast2400-wdt" + - "aspeed,ast2500-wdt" + + - reg: physical base address of the controller and length of memory mapped + region + +Example: + + wdt1: watchdog@1e785000 { + compatible = "aspeed,ast2400-wdt"; + reg = <0x1e785000 0x1c>; + }; diff --git a/Documentation/devicetree/bindings/watchdog/meson-gxbb-wdt.txt b/Documentation/devicetree/bindings/watchdog/meson-gxbb-wdt.txt new file mode 100644 index 000000000000..c7fe36fa739c --- /dev/null +++ b/Documentation/devicetree/bindings/watchdog/meson-gxbb-wdt.txt @@ -0,0 +1,16 @@ +Meson GXBB SoCs Watchdog timer + +Required properties: + +- compatible : should be "amlogic,meson-gxbb-wdt" +- reg : Specifies base physical address and size of the registers. +- clocks : Should be a phandle to the Watchdog clock source, for GXBB the xtal + is the default clock source. + +Example: + +wdt: watchdog@98d0 { + compatible = "amlogic,meson-gxbb-wdt"; + reg = <0 0x98d0 0x0 0x10>; + clocks = <&xtal>; +}; diff --git a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt index 4726924d034e..41aeaa2ff0f8 100644 --- a/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt +++ b/Documentation/devicetree/bindings/watchdog/qcom-wdt.txt @@ -7,6 +7,10 @@ Required properties : "qcom,kpss-wdt-msm8960" "qcom,kpss-wdt-apq8064" "qcom,kpss-wdt-ipq8064" + "qcom,kpss-wdt-ipq4019" + "qcom,kpss-timer" + "qcom,scss-timer" + "qcom,kpss-wdt" - reg : shall contain base register location and length - clocks : shall contain the input clock diff --git a/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt b/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt index b9512f1eb80a..da24e3133417 100644 --- a/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt +++ b/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt @@ -1,7 +1,11 @@ Renesas Watchdog Timer (WDT) Controller Required properties: -- compatible : Should be "renesas,r8a7795-wdt", or "renesas,rcar-gen3-wdt" +- compatible : Should be "renesas,<soctype>-wdt", and + "renesas,rcar-gen3-wdt" as fallback. + Examples with soctypes are: + - "renesas,r8a7795-wdt" (R-Car H3) + - "renesas,r8a7796-wdt" (R-Car M3-W) When compatible with the generic version, nodes must list the SoC-specific version corresponding to the platform first, followed by the generic diff --git a/Documentation/dontdiff b/Documentation/dontdiff index 8ea834f6b289..5385cba941d2 100644 --- a/Documentation/dontdiff +++ b/Documentation/dontdiff @@ -3,6 +3,7 @@ *.bc *.bin *.bz2 +*.c.[012]*.* *.cis *.cpio *.csp diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt index c63eea0c1c8c..b0d775d28e97 100644 --- a/Documentation/driver-model/devres.txt +++ b/Documentation/driver-model/devres.txt @@ -352,8 +352,15 @@ REGULATOR devm_regulator_put() devm_regulator_register() +RESET + devm_reset_control_get() + devm_reset_controller_register() + SLAVE DMA ENGINE devm_acpi_dma_controller_register() SPI devm_spi_register_master() + +WATCHDOG + devm_watchdog_register_device() diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 1b3c39a7de62..d30fb2cb5066 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -12,7 +12,7 @@ prototypes: int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); - int (*d_compare)(const struct dentry *, const struct dentry *, + int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(struct dentry *); int (*d_init)(struct dentry *); diff --git a/Documentation/filesystems/nilfs2.txt b/Documentation/filesystems/nilfs2.txt index 5b21ef76f751..c0727dc36271 100644 --- a/Documentation/filesystems/nilfs2.txt +++ b/Documentation/filesystems/nilfs2.txt @@ -267,7 +267,8 @@ among NILFS2 files can be depicted as follows: `-- file (ino=yy) ( regular file, directory, or symlink ) -For detail on the format of each file, please see include/linux/nilfs2_fs.h. +For detail on the format of each file, please see nilfs2_ondisk.h +located at include/uapi/linux directory. There are no patents or other intellectual property that we protect with regard to the design of NILFS2. It is allowed to replicate the diff --git a/Documentation/filesystems/orangefs.txt b/Documentation/filesystems/orangefs.txt index e1a0056a365f..1dfdec790946 100644 --- a/Documentation/filesystems/orangefs.txt +++ b/Documentation/filesystems/orangefs.txt @@ -281,7 +281,7 @@ on the wait queue and one attempt is made to recycle them. Obviously, if the client-core stays dead too long, the arbitrary userspace processes trying to use Orangefs will be negatively affected. Waiting ops that can't be serviced will be removed from the request list and -have their states set to "given up". In-progress ops that can't +have their states set to "given up". In-progress ops that can't be serviced will be removed from the in_progress hash table and have their states set to "given up". @@ -338,7 +338,7 @@ particular response. PVFS2_VFS_OP_STATFS fill a pvfs2_statfs_response_t with useless info <g>. It is hard for us to know, in a timely fashion, these statistics about our - distributed network filesystem. + distributed network filesystem. PVFS2_VFS_OP_FS_MOUNT fill a pvfs2_fs_mount_response_t which is just like a PVFS_object_kref @@ -386,7 +386,7 @@ responses: io_array[1].iov_base = address of global variable "pdev_magic" (int32_t) io_array[1].iov_len = sizeof(int32_t) - + io_array[2].iov_base = address of parameter "tag" (PVFS_id_gen_t) io_array[2].iov_len = sizeof(int64_t) @@ -402,5 +402,47 @@ Readdir responses initialize the fifth element io_array like this: io_array[4].iov_len = contents of member trailer_size (PVFS_size) from out_downcall member of global variable vfs_request - + +Orangefs exploits the dcache in order to avoid sending redundant +requests to userspace. We keep object inode attributes up-to-date with +orangefs_inode_getattr. Orangefs_inode_getattr uses two arguments to +help it decide whether or not to update an inode: "new" and "bypass". +Orangefs keeps private data in an object's inode that includes a short +timeout value, getattr_time, which allows any iteration of +orangefs_inode_getattr to know how long it has been since the inode was +updated. When the object is not new (new == 0) and the bypass flag is not +set (bypass == 0) orangefs_inode_getattr returns without updating the inode +if getattr_time has not timed out. Getattr_time is updated each time the +inode is updated. + +Creation of a new object (file, dir, sym-link) includes the evaluation of +its pathname, resulting in a negative directory entry for the object. +A new inode is allocated and associated with the dentry, turning it from +a negative dentry into a "productive full member of society". Orangefs +obtains the new inode from Linux with new_inode() and associates +the inode with the dentry by sending the pair back to Linux with +d_instantiate(). + +The evaluation of a pathname for an object resolves to its corresponding +dentry. If there is no corresponding dentry, one is created for it in +the dcache. Whenever a dentry is modified or verified Orangefs stores a +short timeout value in the dentry's d_time, and the dentry will be trusted +for that amount of time. Orangefs is a network filesystem, and objects +can potentially change out-of-band with any particular Orangefs kernel module +instance, so trusting a dentry is risky. The alternative to trusting +dentries is to always obtain the needed information from userspace - at +least a trip to the client-core, maybe to the servers. Obtaining information +from a dentry is cheap, obtaining it from userspace is relatively expensive, +hence the motivation to use the dentry when possible. + +The timeout values d_time and getattr_time are jiffy based, and the +code is designed to avoid the jiffy-wrap problem: + +"In general, if the clock may have wrapped around more than once, there +is no way to tell how much time has elapsed. However, if the times t1 +and t2 are known to be fairly close, we can reliably compute the +difference in a way that takes into account the possibility that the +clock may have wrapped between times." + + from course notes by instructor Andy Wang diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index a5fb89cac615..b1bd05ea66b2 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting @@ -585,3 +585,10 @@ in your dentry operations instead. in the instances. Rationale: !@#!@# security_d_instantiate() needs to be called before we attach dentry to inode and !@#!@##!@$!$#!@#$!@$!@$ smack ->d_instantiate() uses not just ->getxattr() but ->setxattr() as well. +-- +[mandatory] + ->d_compare() doesn't get parent as a separate argument anymore. If you + used it for finding the struct super_block involved, dentry->d_sb will + work just as well; if it's something more complicated, use dentry->d_parent. + Just be careful not to assume that fetching it more than once will yield + the same value - in RCU mode it could change under you. diff --git a/Documentation/filesystems/tmpfs.txt b/Documentation/filesystems/tmpfs.txt index d9c11d25bf02..a85355cf85f4 100644 --- a/Documentation/filesystems/tmpfs.txt +++ b/Documentation/filesystems/tmpfs.txt @@ -98,7 +98,7 @@ A memory policy with a valid NodeList will be saved, as specified, for use at file creation time. When a task allocates a file in the file system, the mount option memory policy will be applied with a NodeList, if any, modified by the calling task's cpuset constraints -[See Documentation/cgroups/cpusets.txt] and any optional flags, listed +[See Documentation/cgroup-v1/cpusets.txt] and any optional flags, listed below. If the resulting NodeLists is the empty set, the effective memory policy for the file will revert to "default" policy. diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 8a196851f01d..9ace359d6cc5 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt @@ -931,7 +931,7 @@ struct dentry_operations { int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); - int (*d_compare)(const struct dentry *, const struct dentry *, + int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); int (*d_init)(struct dentry *); diff --git a/Documentation/gcc-plugins.txt b/Documentation/gcc-plugins.txt new file mode 100644 index 000000000000..891c69464434 --- /dev/null +++ b/Documentation/gcc-plugins.txt @@ -0,0 +1,87 @@ +GCC plugin infrastructure +========================= + + +1. Introduction +=============== + +GCC plugins are loadable modules that provide extra features to the +compiler [1]. They are useful for runtime instrumentation and static analysis. +We can analyse, change and add further code during compilation via +callbacks [2], GIMPLE [3], IPA [4] and RTL passes [5]. + +The GCC plugin infrastructure of the kernel supports all gcc versions from +4.5 to 6.0, building out-of-tree modules, cross-compilation and building in a +separate directory. +Plugin source files have to be compilable by both a C and a C++ compiler as well +because gcc versions 4.5 and 4.6 are compiled by a C compiler, +gcc-4.7 can be compiled by a C or a C++ compiler, +and versions 4.8+ can only be compiled by a C++ compiler. + +Currently the GCC plugin infrastructure supports only the x86, arm and arm64 +architectures. + +This infrastructure was ported from grsecurity [6] and PaX [7]. + +-- +[1] https://gcc.gnu.org/onlinedocs/gccint/Plugins.html +[2] https://gcc.gnu.org/onlinedocs/gccint/Plugin-API.html#Plugin-API +[3] https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html +[4] https://gcc.gnu.org/onlinedocs/gccint/IPA.html +[5] https://gcc.gnu.org/onlinedocs/gccint/RTL.html +[6] https://grsecurity.net/ +[7] https://pax.grsecurity.net/ + + +2. Files +======== + +$(src)/scripts/gcc-plugins + This is the directory of the GCC plugins. + +$(src)/scripts/gcc-plugins/gcc-common.h + This is a compatibility header for GCC plugins. + It should be always included instead of individual gcc headers. + +$(src)/scripts/gcc-plugin.sh + This script checks the availability of the included headers in + gcc-common.h and chooses the proper host compiler to build the plugins + (gcc-4.7 can be built by either gcc or g++). + +$(src)/scripts/gcc-plugins/gcc-generate-gimple-pass.h +$(src)/scripts/gcc-plugins/gcc-generate-ipa-pass.h +$(src)/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h +$(src)/scripts/gcc-plugins/gcc-generate-rtl-pass.h + These headers automatically generate the registration structures for + GIMPLE, SIMPLE_IPA, IPA and RTL passes. They support all gcc versions + from 4.5 to 6.0. + They should be preferred to creating the structures by hand. + + +3. Usage +======== + +You must install the gcc plugin headers for your gcc version, +e.g., on Ubuntu for gcc-4.9: + + apt-get install gcc-4.9-plugin-dev + +Enable a GCC plugin based feature in the kernel config: + + CONFIG_GCC_PLUGIN_CYC_COMPLEXITY = y + +To compile only the plugin(s): + + make gcc-plugins + +or just run the kernel make and compile the whole kernel with +the cyclomatic complexity GCC plugin. + + +4. How to add a new GCC plugin +============================== + +The GCC plugins are in $(src)/scripts/gcc-plugins/. You can use a file or a directory +here. It must be added to $(src)/scripts/gcc-plugins/Makefile, +$(src)/scripts/Makefile.gcc-plugins and $(src)/arch/Kconfig. +See the cyc_complexity_plugin.c (CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) GCC plugin. diff --git a/Documentation/gpu/drm-internals.rst b/Documentation/gpu/drm-internals.rst new file mode 100644 index 000000000000..3bb26135971f --- /dev/null +++ b/Documentation/gpu/drm-internals.rst @@ -0,0 +1,381 @@ +============= +DRM Internals +============= + +This chapter documents DRM internals relevant to driver authors and +developers working to add support for the latest features to existing +drivers. + +First, we go over some typical driver initialization requirements, like +setting up command buffers, creating an initial output configuration, +and initializing core services. Subsequent sections cover core internals +in more detail, providing implementation notes and examples. + +The DRM layer provides several services to graphics drivers, many of +them driven by the application interfaces it provides through libdrm, +the library that wraps most of the DRM ioctls. These include vblank +event handling, memory management, output management, framebuffer +management, command submission & fencing, suspend/resume support, and +DMA services. + +Driver Initialization +===================== + +At the core of every DRM driver is a :c:type:`struct drm_driver +<drm_driver>` structure. Drivers typically statically initialize +a drm_driver structure, and then pass it to +:c:func:`drm_dev_alloc()` to allocate a device instance. After the +device instance is fully initialized it can be registered (which makes +it accessible from userspace) using :c:func:`drm_dev_register()`. + +The :c:type:`struct drm_driver <drm_driver>` structure +contains static information that describes the driver and features it +supports, and pointers to methods that the DRM core will call to +implement the DRM API. We will first go through the :c:type:`struct +drm_driver <drm_driver>` static information fields, and will +then describe individual operations in details as they get used in later +sections. + +Driver Information +------------------ + +Driver Features +~~~~~~~~~~~~~~~ + +Drivers inform the DRM core about their requirements and supported +features by setting appropriate flags in the driver_features field. +Since those flags influence the DRM core behaviour since registration +time, most of them must be set to registering the :c:type:`struct +drm_driver <drm_driver>` instance. + +u32 driver_features; + +DRIVER_USE_AGP + Driver uses AGP interface, the DRM core will manage AGP resources. + +DRIVER_REQUIRE_AGP + Driver needs AGP interface to function. AGP initialization failure + will become a fatal error. + +DRIVER_PCI_DMA + Driver is capable of PCI DMA, mapping of PCI DMA buffers to + userspace will be enabled. Deprecated. + +DRIVER_SG + Driver can perform scatter/gather DMA, allocation and mapping of + scatter/gather buffers will be enabled. Deprecated. + +DRIVER_HAVE_DMA + Driver supports DMA, the userspace DMA API will be supported. + Deprecated. + +DRIVER_HAVE_IRQ; DRIVER_IRQ_SHARED + DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler + managed by the DRM Core. The core will support simple IRQ handler + installation when the flag is set. The installation process is + described in ?. + + DRIVER_IRQ_SHARED indicates whether the device & handler support + shared IRQs (note that this is required of PCI drivers). + +DRIVER_GEM + Driver use the GEM memory manager. + +DRIVER_MODESET + Driver supports mode setting interfaces (KMS). + +DRIVER_PRIME + Driver implements DRM PRIME buffer sharing. + +DRIVER_RENDER + Driver supports dedicated render nodes. + +DRIVER_ATOMIC + Driver supports atomic properties. In this case the driver must + implement appropriate obj->atomic_get_property() vfuncs for any + modeset objects with driver specific properties. + +Major, Minor and Patchlevel +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +int major; int minor; int patchlevel; +The DRM core identifies driver versions by a major, minor and patch +level triplet. The information is printed to the kernel log at +initialization time and passed to userspace through the +DRM_IOCTL_VERSION ioctl. + +The major and minor numbers are also used to verify the requested driver +API version passed to DRM_IOCTL_SET_VERSION. When the driver API +changes between minor versions, applications can call +DRM_IOCTL_SET_VERSION to select a specific version of the API. If the +requested major isn't equal to the driver major, or the requested minor +is larger than the driver minor, the DRM_IOCTL_SET_VERSION call will +return an error. Otherwise the driver's set_version() method will be +called with the requested version. + +Name, Description and Date +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +char \*name; char \*desc; char \*date; +The driver name is printed to the kernel log at initialization time, +used for IRQ registration and passed to userspace through +DRM_IOCTL_VERSION. + +The driver description is a purely informative string passed to +userspace through the DRM_IOCTL_VERSION ioctl and otherwise unused by +the kernel. + +The driver date, formatted as YYYYMMDD, is meant to identify the date of +the latest modification to the driver. However, as most drivers fail to +update it, its value is mostly useless. The DRM core prints it to the +kernel log at initialization time and passes it to userspace through the +DRM_IOCTL_VERSION ioctl. + +Device Instance and Driver Handling +----------------------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_drv.c + :doc: driver instance overview + +.. kernel-doc:: drivers/gpu/drm/drm_drv.c + :export: + +Driver Load +----------- + +IRQ Registration +~~~~~~~~~~~~~~~~ + +The DRM core tries to facilitate IRQ handler registration and +unregistration by providing :c:func:`drm_irq_install()` and +:c:func:`drm_irq_uninstall()` functions. Those functions only +support a single interrupt per device, devices that use more than one +IRQs need to be handled manually. + +Managed IRQ Registration +'''''''''''''''''''''''' + +:c:func:`drm_irq_install()` starts by calling the irq_preinstall +driver operation. The operation is optional and must make sure that the +interrupt will not get fired by clearing all pending interrupt flags or +disabling the interrupt. + +The passed-in IRQ will then be requested by a call to +:c:func:`request_irq()`. If the DRIVER_IRQ_SHARED driver feature +flag is set, a shared (IRQF_SHARED) IRQ handler will be requested. + +The IRQ handler function must be provided as the mandatory irq_handler +driver operation. It will get passed directly to +:c:func:`request_irq()` and thus has the same prototype as all IRQ +handlers. It will get called with a pointer to the DRM device as the +second argument. + +Finally the function calls the optional irq_postinstall driver +operation. The operation usually enables interrupts (excluding the +vblank interrupt, which is enabled separately), but drivers may choose +to enable/disable interrupts at a different time. + +:c:func:`drm_irq_uninstall()` is similarly used to uninstall an +IRQ handler. It starts by waking up all processes waiting on a vblank +interrupt to make sure they don't hang, and then calls the optional +irq_uninstall driver operation. The operation must disable all hardware +interrupts. Finally the function frees the IRQ by calling +:c:func:`free_irq()`. + +Manual IRQ Registration +''''''''''''''''''''''' + +Drivers that require multiple interrupt handlers can't use the managed +IRQ registration functions. In that case IRQs must be registered and +unregistered manually (usually with the :c:func:`request_irq()` and +:c:func:`free_irq()` functions, or their :c:func:`devm_request_irq()` and +:c:func:`devm_free_irq()` equivalents). + +When manually registering IRQs, drivers must not set the +DRIVER_HAVE_IRQ driver feature flag, and must not provide the +irq_handler driver operation. They must set the :c:type:`struct +drm_device <drm_device>` irq_enabled field to 1 upon +registration of the IRQs, and clear it to 0 after unregistering the +IRQs. + +Memory Manager Initialization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Every DRM driver requires a memory manager which must be initialized at +load time. DRM currently contains two memory managers, the Translation +Table Manager (TTM) and the Graphics Execution Manager (GEM). This +document describes the use of the GEM memory manager only. See ? for +details. + +Miscellaneous Device Configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Another task that may be necessary for PCI devices during configuration +is mapping the video BIOS. On many devices, the VBIOS describes device +configuration, LCD panel timings (if any), and contains flags indicating +device state. Mapping the BIOS can be done using the pci_map_rom() +call, a convenience function that takes care of mapping the actual ROM, +whether it has been shadowed into memory (typically at address 0xc0000) +or exists on the PCI device in the ROM BAR. Note that after the ROM has +been mapped and any necessary information has been extracted, it should +be unmapped; on many devices, the ROM address decoder is shared with +other BARs, so leaving it mapped could cause undesired behaviour like +hangs or memory corruption. + +Bus-specific Device Registration and PCI Support +------------------------------------------------ + +A number of functions are provided to help with device registration. The +functions deal with PCI and platform devices respectively and are only +provided for historical reasons. These are all deprecated and shouldn't +be used in new drivers. Besides that there's a few helpers for pci +drivers. + +.. kernel-doc:: drivers/gpu/drm/drm_pci.c + :export: + +.. kernel-doc:: drivers/gpu/drm/drm_platform.c + :export: + +Open/Close, File Operations and IOCTLs +====================================== + +Open and Close +-------------- + +Open and close handlers. None of those methods are mandatory:: + + int (*firstopen) (struct drm_device *); + void (*lastclose) (struct drm_device *); + int (*open) (struct drm_device *, struct drm_file *); + void (*preclose) (struct drm_device *, struct drm_file *); + void (*postclose) (struct drm_device *, struct drm_file *); + +The firstopen method is called by the DRM core for legacy UMS (User Mode +Setting) drivers only when an application opens a device that has no +other opened file handle. UMS drivers can implement it to acquire device +resources. KMS drivers can't use the method and must acquire resources +in the load method instead. + +Similarly the lastclose method is called when the last application +holding a file handle opened on the device closes it, for both UMS and +KMS drivers. Additionally, the method is also called at module unload +time or, for hot-pluggable devices, when the device is unplugged. The +firstopen and lastclose calls can thus be unbalanced. + +The open method is called every time the device is opened by an +application. Drivers can allocate per-file private data in this method +and store them in the struct :c:type:`struct drm_file +<drm_file>` driver_priv field. Note that the open method is +called before firstopen. + +The close operation is split into preclose and postclose methods. +Drivers must stop and cleanup all per-file operations in the preclose +method. For instance pending vertical blanking and page flip events must +be cancelled. No per-file operation is allowed on the file handle after +returning from the preclose method. + +Finally the postclose method is called as the last step of the close +operation, right before calling the lastclose method if no other open +file handle exists for the device. Drivers that have allocated per-file +private data in the open method should free it here. + +The lastclose method should restore CRTC and plane properties to default +value, so that a subsequent open of the device will not inherit state +from the previous user. It can also be used to execute delayed power +switching state changes, e.g. in conjunction with the :ref:`vga_switcheroo` +infrastructure. Beyond that KMS drivers should not do any +further cleanup. Only legacy UMS drivers might need to clean up device +state so that the vga console or an independent fbdev driver could take +over. + +File Operations +--------------- + +.. kernel-doc:: drivers/gpu/drm/drm_fops.c + :doc: file operations + +.. kernel-doc:: drivers/gpu/drm/drm_fops.c + :export: + +IOCTLs +------ + +struct drm_ioctl_desc \*ioctls; int num_ioctls; + Driver-specific ioctls descriptors table. + +Driver-specific ioctls numbers start at DRM_COMMAND_BASE. The ioctls +descriptors table is indexed by the ioctl number offset from the base +value. Drivers can use the DRM_IOCTL_DEF_DRV() macro to initialize +the table entries. + +:: + + DRM_IOCTL_DEF_DRV(ioctl, func, flags) + +``ioctl`` is the ioctl name. Drivers must define the DRM_##ioctl and +DRM_IOCTL_##ioctl macros to the ioctl number offset from +DRM_COMMAND_BASE and the ioctl number respectively. The first macro is +private to the device while the second must be exposed to userspace in a +public header. + +``func`` is a pointer to the ioctl handler function compatible with the +``drm_ioctl_t`` type. + +:: + + typedef int drm_ioctl_t(struct drm_device *dev, void *data, + struct drm_file *file_priv); + +``flags`` is a bitmask combination of the following values. It restricts +how the ioctl is allowed to be called. + +- DRM_AUTH - Only authenticated callers allowed + +- DRM_MASTER - The ioctl can only be called on the master file handle + +- DRM_ROOT_ONLY - Only callers with the SYSADMIN capability allowed + +- DRM_CONTROL_ALLOW - The ioctl can only be called on a control + device + +- DRM_UNLOCKED - The ioctl handler will be called without locking the + DRM global mutex. This is the enforced default for kms drivers (i.e. + using the DRIVER_MODESET flag) and hence shouldn't be used any more + for new drivers. + +.. kernel-doc:: drivers/gpu/drm/drm_ioctl.c + :export: + +Legacy Support Code +=================== + +The section very briefly covers some of the old legacy support code +which is only used by old DRM drivers which have done a so-called +shadow-attach to the underlying device instead of registering as a real +driver. This also includes some of the old generic buffer management and +command submission code. Do not use any of this in new and modern +drivers. + +Legacy Suspend/Resume +--------------------- + +The DRM core provides some suspend/resume code, but drivers wanting full +suspend/resume support should provide save() and restore() functions. +These are called at suspend, hibernate, or resume time, and should +perform any state save or restore required by your device across suspend +or hibernate states. + +int (\*suspend) (struct drm_device \*, pm_message_t state); int +(\*resume) (struct drm_device \*); +Those are legacy suspend and resume methods which *only* work with the +legacy shadow-attach driver registration functions. New driver should +use the power management interface provided by their bus type (usually +through the :c:type:`struct device_driver <device_driver>` +dev_pm_ops) and set these methods to NULL. + +Legacy DMA Services +------------------- + +This should cover how DMA mapping etc. is supported by the core. These +functions are deprecated and should not be used. diff --git a/Documentation/gpu/drm-kms-helpers.rst b/Documentation/gpu/drm-kms-helpers.rst new file mode 100644 index 000000000000..0b302fedf1af --- /dev/null +++ b/Documentation/gpu/drm-kms-helpers.rst @@ -0,0 +1,260 @@ +============================= +Mode Setting Helper Functions +============================= + +The plane, CRTC, encoder and connector functions provided by the drivers +implement the DRM API. They're called by the DRM core and ioctl handlers +to handle device state changes and configuration request. As +implementing those functions often requires logic not specific to +drivers, mid-layer helper functions are available to avoid duplicating +boilerplate code. + +The DRM core contains one mid-layer implementation. The mid-layer +provides implementations of several plane, CRTC, encoder and connector +functions (called from the top of the mid-layer) that pre-process +requests and call lower-level functions provided by the driver (at the +bottom of the mid-layer). For instance, the +:c:func:`drm_crtc_helper_set_config()` function can be used to +fill the :c:type:`struct drm_crtc_funcs <drm_crtc_funcs>` +set_config field. When called, it will split the set_config operation +in smaller, simpler operations and call the driver to handle them. + +To use the mid-layer, drivers call +:c:func:`drm_crtc_helper_add()`, +:c:func:`drm_encoder_helper_add()` and +:c:func:`drm_connector_helper_add()` functions to install their +mid-layer bottom operations handlers, and fill the :c:type:`struct +drm_crtc_funcs <drm_crtc_funcs>`, :c:type:`struct +drm_encoder_funcs <drm_encoder_funcs>` and :c:type:`struct +drm_connector_funcs <drm_connector_funcs>` structures with +pointers to the mid-layer top API functions. Installing the mid-layer +bottom operation handlers is best done right after registering the +corresponding KMS object. + +The mid-layer is not split between CRTC, encoder and connector +operations. To use it, a driver must provide bottom functions for all of +the three KMS entities. + +Atomic Modeset Helper Functions Reference +========================================= + +Overview +-------- + +.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c + :doc: overview + +Implementing Asynchronous Atomic Commit +--------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c + :doc: implementing nonblocking commit + +Atomic State Reset and Initialization +------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c + :doc: atomic state reset and initialization + +.. kernel-doc:: include/drm/drm_atomic_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c + :export: + +Modeset Helper Reference for Common Vtables +=========================================== + +.. kernel-doc:: include/drm/drm_modeset_helper_vtables.h + :internal: + +.. kernel-doc:: include/drm/drm_modeset_helper_vtables.h + :doc: overview + +Legacy CRTC/Modeset Helper Functions Reference +============================================== + +.. kernel-doc:: drivers/gpu/drm/drm_crtc_helper.c + :export: + +.. kernel-doc:: drivers/gpu/drm/drm_crtc_helper.c + :doc: overview + +Output Probing Helper Functions Reference +========================================= + +.. kernel-doc:: drivers/gpu/drm/drm_probe_helper.c + :doc: output probing helper overview + +.. kernel-doc:: drivers/gpu/drm/drm_probe_helper.c + :export: + +fbdev Helper Functions Reference +================================ + +.. kernel-doc:: drivers/gpu/drm/drm_fb_helper.c + :doc: fbdev helpers + +.. kernel-doc:: drivers/gpu/drm/drm_fb_helper.c + :export: + +.. kernel-doc:: include/drm/drm_fb_helper.h + :internal: + +Framebuffer CMA Helper Functions Reference +========================================== + +.. kernel-doc:: drivers/gpu/drm/drm_fb_cma_helper.c + :doc: framebuffer cma helper functions + +.. kernel-doc:: drivers/gpu/drm/drm_fb_cma_helper.c + :export: + +Display Port Helper Functions Reference +======================================= + +.. kernel-doc:: drivers/gpu/drm/drm_dp_helper.c + :doc: dp helpers + +.. kernel-doc:: include/drm/drm_dp_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_dp_helper.c + :export: + +Display Port Dual Mode Adaptor Helper Functions Reference +========================================================= + +.. kernel-doc:: drivers/gpu/drm/drm_dp_dual_mode_helper.c + :doc: dp dual mode helpers + +.. kernel-doc:: include/drm/drm_dp_dual_mode_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_dp_dual_mode_helper.c + :export: + +Display Port MST Helper Functions Reference +=========================================== + +.. kernel-doc:: drivers/gpu/drm/drm_dp_mst_topology.c + :doc: dp mst helper + +.. kernel-doc:: include/drm/drm_dp_mst_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_dp_mst_topology.c + :export: + +MIPI DSI Helper Functions Reference +=================================== + +.. kernel-doc:: drivers/gpu/drm/drm_mipi_dsi.c + :doc: dsi helpers + +.. kernel-doc:: include/drm/drm_mipi_dsi.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_mipi_dsi.c + :export: + +EDID Helper Functions Reference +=============================== + +.. kernel-doc:: drivers/gpu/drm/drm_edid.c + :export: + +Rectangle Utilities Reference +============================= + +.. kernel-doc:: include/drm/drm_rect.h + :doc: rect utils + +.. kernel-doc:: include/drm/drm_rect.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_rect.c + :export: + +Flip-work Helper Reference +========================== + +.. kernel-doc:: include/drm/drm_flip_work.h + :doc: flip utils + +.. kernel-doc:: include/drm/drm_flip_work.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_flip_work.c + :export: + +HDMI Infoframes Helper Reference +================================ + +Strictly speaking this is not a DRM helper library but generally useable +by any driver interfacing with HDMI outputs like v4l or alsa drivers. +But it nicely fits into the overall topic of mode setting helper +libraries and hence is also included here. + +.. kernel-doc:: include/linux/hdmi.h + :internal: + +.. kernel-doc:: drivers/video/hdmi.c + :export: + +Plane Helper Reference +====================== + +.. kernel-doc:: drivers/gpu/drm/drm_plane_helper.c + :export: + +.. kernel-doc:: drivers/gpu/drm/drm_plane_helper.c + :doc: overview + +Tile group +---------- + +.. kernel-doc:: drivers/gpu/drm/drm_crtc.c + :doc: Tile group + +Bridges +======= + +Overview +-------- + +.. kernel-doc:: drivers/gpu/drm/drm_bridge.c + :doc: overview + +Default bridge callback sequence +-------------------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_bridge.c + :doc: bridge callbacks + +.. kernel-doc:: drivers/gpu/drm/drm_bridge.c + :export: + +Panel Helper Reference +====================== + +.. kernel-doc:: include/drm/drm_panel.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_panel.c + :export: + +.. kernel-doc:: drivers/gpu/drm/drm_panel.c + :doc: drm panel + +Simple KMS Helper Reference +=========================== + +.. kernel-doc:: include/drm/drm_simple_kms_helper.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_simple_kms_helper.c + :export: + +.. kernel-doc:: drivers/gpu/drm/drm_simple_kms_helper.c + :doc: overview diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst new file mode 100644 index 000000000000..8dfa4b214b96 --- /dev/null +++ b/Documentation/gpu/drm-kms.rst @@ -0,0 +1,653 @@ +========================= +Kernel Mode Setting (KMS) +========================= + +Mode Setting +============ + +Drivers must initialize the mode setting core by calling +:c:func:`drm_mode_config_init()` on the DRM device. The function +initializes the :c:type:`struct drm_device <drm_device>` +mode_config field and never fails. Once done, mode configuration must +be setup by initializing the following fields. + +- int min_width, min_height; int max_width, max_height; + Minimum and maximum width and height of the frame buffers in pixel + units. + +- struct drm_mode_config_funcs \*funcs; + Mode setting functions. + +Display Modes Function Reference +-------------------------------- + +.. kernel-doc:: include/drm/drm_modes.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_modes.c + :export: + +Atomic Mode Setting Function Reference +-------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_atomic.c + :export: + +.. kernel-doc:: drivers/gpu/drm/drm_atomic.c + :internal: + +Frame Buffer Abstraction +------------------------ + +Frame buffers are abstract memory objects that provide a source of +pixels to scanout to a CRTC. Applications explicitly request the +creation of frame buffers through the DRM_IOCTL_MODE_ADDFB(2) ioctls +and receive an opaque handle that can be passed to the KMS CRTC control, +plane configuration and page flip functions. + +Frame buffers rely on the underneath memory manager for low-level memory +operations. When creating a frame buffer applications pass a memory +handle (or a list of memory handles for multi-planar formats) through +the ``drm_mode_fb_cmd2`` argument. For drivers using GEM as their +userspace buffer management interface this would be a GEM handle. +Drivers are however free to use their own backing storage object +handles, e.g. vmwgfx directly exposes special TTM handles to userspace +and so expects TTM handles in the create ioctl and not GEM handles. + +The lifetime of a drm framebuffer is controlled with a reference count, +drivers can grab additional references with +:c:func:`drm_framebuffer_reference()`and drop them again with +:c:func:`drm_framebuffer_unreference()`. For driver-private +framebuffers for which the last reference is never dropped (e.g. for the +fbdev framebuffer when the struct :c:type:`struct drm_framebuffer +<drm_framebuffer>` is embedded into the fbdev helper struct) +drivers can manually clean up a framebuffer at module unload time with +:c:func:`drm_framebuffer_unregister_private()`. + +DRM Format Handling +------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_fourcc.c + :export: + +Dumb Buffer Objects +------------------- + +The KMS API doesn't standardize backing storage object creation and +leaves it to driver-specific ioctls. Furthermore actually creating a +buffer object even for GEM-based drivers is done through a +driver-specific ioctl - GEM only has a common userspace interface for +sharing and destroying objects. While not an issue for full-fledged +graphics stacks that include device-specific userspace components (in +libdrm for instance), this limit makes DRM-based early boot graphics +unnecessarily complex. + +Dumb objects partly alleviate the problem by providing a standard API to +create dumb buffers suitable for scanout, which can then be used to +create KMS frame buffers. + +To support dumb objects drivers must implement the dumb_create, +dumb_destroy and dumb_map_offset operations. + +- int (\*dumb_create)(struct drm_file \*file_priv, struct + drm_device \*dev, struct drm_mode_create_dumb \*args); + The dumb_create operation creates a driver object (GEM or TTM + handle) suitable for scanout based on the width, height and depth + from the struct :c:type:`struct drm_mode_create_dumb + <drm_mode_create_dumb>` argument. It fills the argument's + handle, pitch and size fields with a handle for the newly created + object and its line pitch and size in bytes. + +- int (\*dumb_destroy)(struct drm_file \*file_priv, struct + drm_device \*dev, uint32_t handle); + The dumb_destroy operation destroys a dumb object created by + dumb_create. + +- int (\*dumb_map_offset)(struct drm_file \*file_priv, struct + drm_device \*dev, uint32_t handle, uint64_t \*offset); + The dumb_map_offset operation associates an mmap fake offset with + the object given by the handle and returns it. Drivers must use the + :c:func:`drm_gem_create_mmap_offset()` function to associate + the fake offset as described in ?. + +Note that dumb objects may not be used for gpu acceleration, as has been +attempted on some ARM embedded platforms. Such drivers really must have +a hardware-specific ioctl to allocate suitable buffer objects. + +Output Polling +-------------- + +void (\*output_poll_changed)(struct drm_device \*dev); +This operation notifies the driver that the status of one or more +connectors has changed. Drivers that use the fb helper can just call the +:c:func:`drm_fb_helper_hotplug_event()` function to handle this +operation. + +KMS Initialization and Cleanup +============================== + +A KMS device is abstracted and exposed as a set of planes, CRTCs, +encoders and connectors. KMS drivers must thus create and initialize all +those objects at load time after initializing mode setting. + +CRTCs (:c:type:`struct drm_crtc <drm_crtc>`) +-------------------------------------------- + +A CRTC is an abstraction representing a part of the chip that contains a +pointer to a scanout buffer. Therefore, the number of CRTCs available +determines how many independent scanout buffers can be active at any +given time. The CRTC structure contains several fields to support this: +a pointer to some video memory (abstracted as a frame buffer object), a +display mode, and an (x, y) offset into the video memory to support +panning or configurations where one piece of video memory spans multiple +CRTCs. + +CRTC Initialization +~~~~~~~~~~~~~~~~~~~ + +A KMS device must create and register at least one struct +:c:type:`struct drm_crtc <drm_crtc>` instance. The instance is +allocated and zeroed by the driver, possibly as part of a larger +structure, and registered with a call to :c:func:`drm_crtc_init()` +with a pointer to CRTC functions. + +Planes (:c:type:`struct drm_plane <drm_plane>`) +----------------------------------------------- + +A plane represents an image source that can be blended with or overlayed +on top of a CRTC during the scanout process. Planes are associated with +a frame buffer to crop a portion of the image memory (source) and +optionally scale it to a destination size. The result is then blended +with or overlayed on top of a CRTC. + +The DRM core recognizes three types of planes: + +- DRM_PLANE_TYPE_PRIMARY represents a "main" plane for a CRTC. + Primary planes are the planes operated upon by CRTC modesetting and + flipping operations described in the page_flip hook in + :c:type:`struct drm_crtc_funcs <drm_crtc_funcs>`. +- DRM_PLANE_TYPE_CURSOR represents a "cursor" plane for a CRTC. + Cursor planes are the planes operated upon by the + DRM_IOCTL_MODE_CURSOR and DRM_IOCTL_MODE_CURSOR2 ioctls. +- DRM_PLANE_TYPE_OVERLAY represents all non-primary, non-cursor + planes. Some drivers refer to these types of planes as "sprites" + internally. + +For compatibility with legacy userspace, only overlay planes are made +available to userspace by default. Userspace clients may set the +DRM_CLIENT_CAP_UNIVERSAL_PLANES client capability bit to indicate +that they wish to receive a universal plane list containing all plane +types. + +Plane Initialization +~~~~~~~~~~~~~~~~~~~~ + +To create a plane, a KMS drivers allocates and zeroes an instances of +:c:type:`struct drm_plane <drm_plane>` (possibly as part of a +larger structure) and registers it with a call to +:c:func:`drm_universal_plane_init()`. The function takes a +bitmask of the CRTCs that can be associated with the plane, a pointer to +the plane functions, a list of format supported formats, and the type of +plane (primary, cursor, or overlay) being initialized. + +Cursor and overlay planes are optional. All drivers should provide one +primary plane per CRTC (although this requirement may change in the +future); drivers that do not wish to provide special handling for +primary planes may make use of the helper functions described in ? to +create and register a primary plane with standard capabilities. + +Encoders (:c:type:`struct drm_encoder <drm_encoder>`) +----------------------------------------------------- + +An encoder takes pixel data from a CRTC and converts it to a format +suitable for any attached connectors. On some devices, it may be +possible to have a CRTC send data to more than one encoder. In that +case, both encoders would receive data from the same scanout buffer, +resulting in a "cloned" display configuration across the connectors +attached to each encoder. + +Encoder Initialization +~~~~~~~~~~~~~~~~~~~~~~ + +As for CRTCs, a KMS driver must create, initialize and register at least +one :c:type:`struct drm_encoder <drm_encoder>` instance. The +instance is allocated and zeroed by the driver, possibly as part of a +larger structure. + +Drivers must initialize the :c:type:`struct drm_encoder +<drm_encoder>` possible_crtcs and possible_clones fields before +registering the encoder. Both fields are bitmasks of respectively the +CRTCs that the encoder can be connected to, and sibling encoders +candidate for cloning. + +After being initialized, the encoder must be registered with a call to +:c:func:`drm_encoder_init()`. The function takes a pointer to the +encoder functions and an encoder type. Supported types are + +- DRM_MODE_ENCODER_DAC for VGA and analog on DVI-I/DVI-A +- DRM_MODE_ENCODER_TMDS for DVI, HDMI and (embedded) DisplayPort +- DRM_MODE_ENCODER_LVDS for display panels +- DRM_MODE_ENCODER_TVDAC for TV output (Composite, S-Video, + Component, SCART) +- DRM_MODE_ENCODER_VIRTUAL for virtual machine displays + +Encoders must be attached to a CRTC to be used. DRM drivers leave +encoders unattached at initialization time. Applications (or the fbdev +compatibility layer when implemented) are responsible for attaching the +encoders they want to use to a CRTC. + +Connectors (:c:type:`struct drm_connector <drm_connector>`) +----------------------------------------------------------- + +A connector is the final destination for pixel data on a device, and +usually connects directly to an external display device like a monitor +or laptop panel. A connector can only be attached to one encoder at a +time. The connector is also the structure where information about the +attached display is kept, so it contains fields for display data, EDID +data, DPMS & connection status, and information about modes supported on +the attached displays. + +Connector Initialization +~~~~~~~~~~~~~~~~~~~~~~~~ + +Finally a KMS driver must create, initialize, register and attach at +least one :c:type:`struct drm_connector <drm_connector>` +instance. The instance is created as other KMS objects and initialized +by setting the following fields. + +interlace_allowed + Whether the connector can handle interlaced modes. + +doublescan_allowed + Whether the connector can handle doublescan. + +display_info + Display information is filled from EDID information when a display + is detected. For non hot-pluggable displays such as flat panels in + embedded systems, the driver should initialize the + display_info.width_mm and display_info.height_mm fields with the + physical size of the display. + +polled + Connector polling mode, a combination of + + DRM_CONNECTOR_POLL_HPD + The connector generates hotplug events and doesn't need to be + periodically polled. The CONNECT and DISCONNECT flags must not + be set together with the HPD flag. + + DRM_CONNECTOR_POLL_CONNECT + Periodically poll the connector for connection. + + DRM_CONNECTOR_POLL_DISCONNECT + Periodically poll the connector for disconnection. + + Set to 0 for connectors that don't support connection status + discovery. + +The connector is then registered with a call to +:c:func:`drm_connector_init()` with a pointer to the connector +functions and a connector type, and exposed through sysfs with a call to +:c:func:`drm_connector_register()`. + +Supported connector types are + +- DRM_MODE_CONNECTOR_VGA +- DRM_MODE_CONNECTOR_DVII +- DRM_MODE_CONNECTOR_DVID +- DRM_MODE_CONNECTOR_DVIA +- DRM_MODE_CONNECTOR_Composite +- DRM_MODE_CONNECTOR_SVIDEO +- DRM_MODE_CONNECTOR_LVDS +- DRM_MODE_CONNECTOR_Component +- DRM_MODE_CONNECTOR_9PinDIN +- DRM_MODE_CONNECTOR_DisplayPort +- DRM_MODE_CONNECTOR_HDMIA +- DRM_MODE_CONNECTOR_HDMIB +- DRM_MODE_CONNECTOR_TV +- DRM_MODE_CONNECTOR_eDP +- DRM_MODE_CONNECTOR_VIRTUAL + +Connectors must be attached to an encoder to be used. For devices that +map connectors to encoders 1:1, the connector should be attached at +initialization time with a call to +:c:func:`drm_mode_connector_attach_encoder()`. The driver must +also set the :c:type:`struct drm_connector <drm_connector>` +encoder field to point to the attached encoder. + +Finally, drivers must initialize the connectors state change detection +with a call to :c:func:`drm_kms_helper_poll_init()`. If at least +one connector is pollable but can't generate hotplug interrupts +(indicated by the DRM_CONNECTOR_POLL_CONNECT and +DRM_CONNECTOR_POLL_DISCONNECT connector flags), a delayed work will +automatically be queued to periodically poll for changes. Connectors +that can generate hotplug interrupts must be marked with the +DRM_CONNECTOR_POLL_HPD flag instead, and their interrupt handler must +call :c:func:`drm_helper_hpd_irq_event()`. The function will +queue a delayed work to check the state of all connectors, but no +periodic polling will be done. + +Connector Operations +~~~~~~~~~~~~~~~~~~~~ + + **Note** + + Unless otherwise state, all operations are mandatory. + +DPMS +'''' + +void (\*dpms)(struct drm_connector \*connector, int mode); +The DPMS operation sets the power state of a connector. The mode +argument is one of + +- DRM_MODE_DPMS_ON + +- DRM_MODE_DPMS_STANDBY + +- DRM_MODE_DPMS_SUSPEND + +- DRM_MODE_DPMS_OFF + +In all but DPMS_ON mode the encoder to which the connector is attached +should put the display in low-power mode by driving its signals +appropriately. If more than one connector is attached to the encoder +care should be taken not to change the power state of other displays as +a side effect. Low-power mode should be propagated to the encoders and +CRTCs when all related connectors are put in low-power mode. + +Modes +''''' + +int (\*fill_modes)(struct drm_connector \*connector, uint32_t +max_width, uint32_t max_height); +Fill the mode list with all supported modes for the connector. If the +``max_width`` and ``max_height`` arguments are non-zero, the +implementation must ignore all modes wider than ``max_width`` or higher +than ``max_height``. + +The connector must also fill in this operation its display_info +width_mm and height_mm fields with the connected display physical size +in millimeters. The fields should be set to 0 if the value isn't known +or is not applicable (for instance for projector devices). + +Connection Status +''''''''''''''''' + +The connection status is updated through polling or hotplug events when +supported (see ?). The status value is reported to userspace through +ioctls and must not be used inside the driver, as it only gets +initialized by a call to :c:func:`drm_mode_getconnector()` from +userspace. + +enum drm_connector_status (\*detect)(struct drm_connector +\*connector, bool force); +Check to see if anything is attached to the connector. The ``force`` +parameter is set to false whilst polling or to true when checking the +connector due to user request. ``force`` can be used by the driver to +avoid expensive, destructive operations during automated probing. + +Return connector_status_connected if something is connected to the +connector, connector_status_disconnected if nothing is connected and +connector_status_unknown if the connection state isn't known. + +Drivers should only return connector_status_connected if the +connection status has really been probed as connected. Connectors that +can't detect the connection status, or failed connection status probes, +should return connector_status_unknown. + +Cleanup +------- + +The DRM core manages its objects' lifetime. When an object is not needed +anymore the core calls its destroy function, which must clean up and +free every resource allocated for the object. Every +:c:func:`drm_\*_init()` call must be matched with a corresponding +:c:func:`drm_\*_cleanup()` call to cleanup CRTCs +(:c:func:`drm_crtc_cleanup()`), planes +(:c:func:`drm_plane_cleanup()`), encoders +(:c:func:`drm_encoder_cleanup()`) and connectors +(:c:func:`drm_connector_cleanup()`). Furthermore, connectors that +have been added to sysfs must be removed by a call to +:c:func:`drm_connector_unregister()` before calling +:c:func:`drm_connector_cleanup()`. + +Connectors state change detection must be cleanup up with a call to +:c:func:`drm_kms_helper_poll_fini()`. + +Output discovery and initialization example +------------------------------------------- + +:: + + void intel_crt_init(struct drm_device *dev) + { + struct drm_connector *connector; + struct intel_output *intel_output; + + intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); + if (!intel_output) + return; + + connector = &intel_output->base; + drm_connector_init(dev, &intel_output->base, + &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); + + drm_encoder_init(dev, &intel_output->enc, &intel_crt_enc_funcs, + DRM_MODE_ENCODER_DAC); + + drm_mode_connector_attach_encoder(&intel_output->base, + &intel_output->enc); + + /* Set up the DDC bus. */ + intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A"); + if (!intel_output->ddc_bus) { + dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration " + "failed.\n"); + return; + } + + intel_output->type = INTEL_OUTPUT_ANALOG; + connector->interlace_allowed = 0; + connector->doublescan_allowed = 0; + + drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs); + drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); + + drm_connector_register(connector); + } + +In the example above (taken from the i915 driver), a CRTC, connector and +encoder combination is created. A device-specific i2c bus is also +created for fetching EDID data and performing monitor detection. Once +the process is complete, the new connector is registered with sysfs to +make its properties available to applications. + +KMS API Functions +----------------- + +.. kernel-doc:: drivers/gpu/drm/drm_crtc.c + :export: + +KMS Data Structures +------------------- + +.. kernel-doc:: include/drm/drm_crtc.h + :internal: + +KMS Locking +----------- + +.. kernel-doc:: drivers/gpu/drm/drm_modeset_lock.c + :doc: kms locking + +.. kernel-doc:: include/drm/drm_modeset_lock.h + :internal: + +.. kernel-doc:: drivers/gpu/drm/drm_modeset_lock.c + :export: + +KMS Properties +============== + +Drivers may need to expose additional parameters to applications than +those described in the previous sections. KMS supports attaching +properties to CRTCs, connectors and planes and offers a userspace API to +list, get and set the property values. + +Properties are identified by a name that uniquely defines the property +purpose, and store an associated value. For all property types except +blob properties the value is a 64-bit unsigned integer. + +KMS differentiates between properties and property instances. Drivers +first create properties and then create and associate individual +instances of those properties to objects. A property can be instantiated +multiple times and associated with different objects. Values are stored +in property instances, and all other property information are stored in +the property and shared between all instances of the property. + +Every property is created with a type that influences how the KMS core +handles the property. Supported property types are + +DRM_MODE_PROP_RANGE + Range properties report their minimum and maximum admissible values. + The KMS core verifies that values set by application fit in that + range. + +DRM_MODE_PROP_ENUM + Enumerated properties take a numerical value that ranges from 0 to + the number of enumerated values defined by the property minus one, + and associate a free-formed string name to each value. Applications + can retrieve the list of defined value-name pairs and use the + numerical value to get and set property instance values. + +DRM_MODE_PROP_BITMASK + Bitmask properties are enumeration properties that additionally + restrict all enumerated values to the 0..63 range. Bitmask property + instance values combine one or more of the enumerated bits defined + by the property. + +DRM_MODE_PROP_BLOB + Blob properties store a binary blob without any format restriction. + The binary blobs are created as KMS standalone objects, and blob + property instance values store the ID of their associated blob + object. + + Blob properties are only used for the connector EDID property and + cannot be created by drivers. + +To create a property drivers call one of the following functions +depending on the property type. All property creation functions take +property flags and name, as well as type-specific arguments. + +- struct drm_property \*drm_property_create_range(struct + drm_device \*dev, int flags, const char \*name, uint64_t min, + uint64_t max); + Create a range property with the given minimum and maximum values. + +- struct drm_property \*drm_property_create_enum(struct drm_device + \*dev, int flags, const char \*name, const struct + drm_prop_enum_list \*props, int num_values); + Create an enumerated property. The ``props`` argument points to an + array of ``num_values`` value-name pairs. + +- struct drm_property \*drm_property_create_bitmask(struct + drm_device \*dev, int flags, const char \*name, const struct + drm_prop_enum_list \*props, int num_values); + Create a bitmask property. The ``props`` argument points to an array + of ``num_values`` value-name pairs. + +Properties can additionally be created as immutable, in which case they +will be read-only for applications but can be modified by the driver. To +create an immutable property drivers must set the +DRM_MODE_PROP_IMMUTABLE flag at property creation time. + +When no array of value-name pairs is readily available at property +creation time for enumerated or range properties, drivers can create the +property using the :c:func:`drm_property_create()` function and +manually add enumeration value-name pairs by calling the +:c:func:`drm_property_add_enum()` function. Care must be taken to +properly specify the property type through the ``flags`` argument. + +After creating properties drivers can attach property instances to CRTC, +connector and plane objects by calling the +:c:func:`drm_object_attach_property()`. The function takes a +pointer to the target object, a pointer to the previously created +property and an initial instance value. + +Existing KMS Properties +----------------------- + +The following table gives description of drm properties exposed by +various modules/drivers. + +.. csv-table:: + :header-rows: 1 + :file: kms-properties.csv + +Vertical Blanking +================= + +Vertical blanking plays a major role in graphics rendering. To achieve +tear-free display, users must synchronize page flips and/or rendering to +vertical blanking. The DRM API offers ioctls to perform page flips +synchronized to vertical blanking and wait for vertical blanking. + +The DRM core handles most of the vertical blanking management logic, +which involves filtering out spurious interrupts, keeping race-free +blanking counters, coping with counter wrap-around and resets and +keeping use counts. It relies on the driver to generate vertical +blanking interrupts and optionally provide a hardware vertical blanking +counter. Drivers must implement the following operations. + +- int (\*enable_vblank) (struct drm_device \*dev, int crtc); void + (\*disable_vblank) (struct drm_device \*dev, int crtc); + Enable or disable vertical blanking interrupts for the given CRTC. + +- u32 (\*get_vblank_counter) (struct drm_device \*dev, int crtc); + Retrieve the value of the vertical blanking counter for the given + CRTC. If the hardware maintains a vertical blanking counter its value + should be returned. Otherwise drivers can use the + :c:func:`drm_vblank_count()` helper function to handle this + operation. + +Drivers must initialize the vertical blanking handling core with a call +to :c:func:`drm_vblank_init()` in their load operation. + +Vertical blanking interrupts can be enabled by the DRM core or by +drivers themselves (for instance to handle page flipping operations). +The DRM core maintains a vertical blanking use count to ensure that the +interrupts are not disabled while a user still needs them. To increment +the use count, drivers call :c:func:`drm_vblank_get()`. Upon +return vertical blanking interrupts are guaranteed to be enabled. + +To decrement the use count drivers call +:c:func:`drm_vblank_put()`. Only when the use count drops to zero +will the DRM core disable the vertical blanking interrupts after a delay +by scheduling a timer. The delay is accessible through the +vblankoffdelay module parameter or the ``drm_vblank_offdelay`` global +variable and expressed in milliseconds. Its default value is 5000 ms. +Zero means never disable, and a negative value means disable +immediately. Drivers may override the behaviour by setting the +:c:type:`struct drm_device <drm_device>` +vblank_disable_immediate flag, which when set causes vblank interrupts +to be disabled immediately regardless of the drm_vblank_offdelay +value. The flag should only be set if there's a properly working +hardware vblank counter present. + +When a vertical blanking interrupt occurs drivers only need to call the +:c:func:`drm_handle_vblank()` function to account for the +interrupt. + +Resources allocated by :c:func:`drm_vblank_init()` must be freed +with a call to :c:func:`drm_vblank_cleanup()` in the driver unload +operation handler. + +Vertical Blanking and Interrupt Handling Functions Reference +------------------------------------------------------------ + +.. kernel-doc:: drivers/gpu/drm/drm_irq.c + :export: + +.. kernel-doc:: include/drm/drm_irq.h + :internal: diff --git a/Documentation/gpu/drm-mm.rst b/Documentation/gpu/drm-mm.rst new file mode 100644 index 000000000000..59f9822fecd0 --- /dev/null +++ b/Documentation/gpu/drm-mm.rst @@ -0,0 +1,454 @@ +===================== +DRM Memory Management +===================== + +Modern Linux systems require large amount of graphics memory to store +frame buffers, textures, vertices and other graphics-related data. Given +the very dynamic nature of many of that data, managing graphics memory +efficiently is thus crucial for the graphics stack and plays a central +role in the DRM infrastructure. + +The DRM core includes two memory managers, namely Translation Table Maps +(TTM) and Graphics Execution Manager (GEM). TTM was the first DRM memory +manager to be developed and tried to be a one-size-fits-them all +solution. It provides a single userspace API to accommodate the need of +all hardware, supporting both Unified Memory Architecture (UMA) devices +and devices with dedicated video RAM (i.e. most discrete video cards). +This resulted in a large, complex piece of code that turned out to be +hard to use for driver development. + +GEM started as an Intel-sponsored project in reaction to TTM's +complexity. Its design philosophy is completely different: instead of +providing a solution to every graphics memory-related problems, GEM +identified common code between drivers and created a support library to +share it. GEM has simpler initialization and execution requirements than +TTM, but has no video RAM management capabilities and is thus limited to +UMA devices. + +The Translation Table Manager (TTM) +----------------------------------- + +TTM design background and information belongs here. + +TTM initialization +~~~~~~~~~~~~~~~~~~ + + **Warning** + + This section is outdated. + +Drivers wishing to support TTM must fill out a drm_bo_driver +structure. The structure contains several fields with function pointers +for initializing the TTM, allocating and freeing memory, waiting for +command completion and fence synchronization, and memory migration. See +the radeon_ttm.c file for an example of usage. + +The ttm_global_reference structure is made up of several fields: + +:: + + struct ttm_global_reference { + enum ttm_global_types global_type; + size_t size; + void *object; + int (*init) (struct ttm_global_reference *); + void (*release) (struct ttm_global_reference *); + }; + + +There should be one global reference structure for your memory manager +as a whole, and there will be others for each object created by the +memory manager at runtime. Your global TTM should have a type of +TTM_GLOBAL_TTM_MEM. The size field for the global object should be +sizeof(struct ttm_mem_global), and the init and release hooks should +point at your driver-specific init and release routines, which probably +eventually call ttm_mem_global_init and ttm_mem_global_release, +respectively. + +Once your global TTM accounting structure is set up and initialized by +calling ttm_global_item_ref() on it, you need to create a buffer +object TTM to provide a pool for buffer object allocation by clients and +the kernel itself. The type of this object should be +TTM_GLOBAL_TTM_BO, and its size should be sizeof(struct +ttm_bo_global). Again, driver-specific init and release functions may +be provided, likely eventually calling ttm_bo_global_init() and +ttm_bo_global_release(), respectively. Also, like the previous +object, ttm_global_item_ref() is used to create an initial reference +count for the TTM, which will call your initialization function. + +The Graphics Execution Manager (GEM) +------------------------------------ + +The GEM design approach has resulted in a memory manager that doesn't +provide full coverage of all (or even all common) use cases in its +userspace or kernel API. GEM exposes a set of standard memory-related +operations to userspace and a set of helper functions to drivers, and +let drivers implement hardware-specific operations with their own +private API. + +The GEM userspace API is described in the `GEM - the Graphics Execution +Manager <http://lwn.net/Articles/283798/>`__ article on LWN. While +slightly outdated, the document provides a good overview of the GEM API +principles. Buffer allocation and read and write operations, described +as part of the common GEM API, are currently implemented using +driver-specific ioctls. + +GEM is data-agnostic. It manages abstract buffer objects without knowing +what individual buffers contain. APIs that require knowledge of buffer +contents or purpose, such as buffer allocation or synchronization +primitives, are thus outside of the scope of GEM and must be implemented +using driver-specific ioctls. + +On a fundamental level, GEM involves several operations: + +- Memory allocation and freeing +- Command execution +- Aperture management at command execution time + +Buffer object allocation is relatively straightforward and largely +provided by Linux's shmem layer, which provides memory to back each +object. + +Device-specific operations, such as command execution, pinning, buffer +read & write, mapping, and domain ownership transfers are left to +driver-specific ioctls. + +GEM Initialization +~~~~~~~~~~~~~~~~~~ + +Drivers that use GEM must set the DRIVER_GEM bit in the struct +:c:type:`struct drm_driver <drm_driver>` driver_features +field. The DRM core will then automatically initialize the GEM core +before calling the load operation. Behind the scene, this will create a +DRM Memory Manager object which provides an address space pool for +object allocation. + +In a KMS configuration, drivers need to allocate and initialize a +command ring buffer following core GEM initialization if required by the +hardware. UMA devices usually have what is called a "stolen" memory +region, which provides space for the initial framebuffer and large, +contiguous memory regions required by the device. This space is +typically not managed by GEM, and must be initialized separately into +its own DRM MM object. + +GEM Objects Creation +~~~~~~~~~~~~~~~~~~~~ + +GEM splits creation of GEM objects and allocation of the memory that +backs them in two distinct operations. + +GEM objects are represented by an instance of struct :c:type:`struct +drm_gem_object <drm_gem_object>`. Drivers usually need to +extend GEM objects with private information and thus create a +driver-specific GEM object structure type that embeds an instance of +struct :c:type:`struct drm_gem_object <drm_gem_object>`. + +To create a GEM object, a driver allocates memory for an instance of its +specific GEM object type and initializes the embedded struct +:c:type:`struct drm_gem_object <drm_gem_object>` with a call +to :c:func:`drm_gem_object_init()`. The function takes a pointer +to the DRM device, a pointer to the GEM object and the buffer object +size in bytes. + +GEM uses shmem to allocate anonymous pageable memory. +:c:func:`drm_gem_object_init()` will create an shmfs file of the +requested size and store it into the struct :c:type:`struct +drm_gem_object <drm_gem_object>` filp field. The memory is +used as either main storage for the object when the graphics hardware +uses system memory directly or as a backing store otherwise. + +Drivers are responsible for the actual physical pages allocation by +calling :c:func:`shmem_read_mapping_page_gfp()` for each page. +Note that they can decide to allocate pages when initializing the GEM +object, or to delay allocation until the memory is needed (for instance +when a page fault occurs as a result of a userspace memory access or +when the driver needs to start a DMA transfer involving the memory). + +Anonymous pageable memory allocation is not always desired, for instance +when the hardware requires physically contiguous system memory as is +often the case in embedded devices. Drivers can create GEM objects with +no shmfs backing (called private GEM objects) by initializing them with +a call to :c:func:`drm_gem_private_object_init()` instead of +:c:func:`drm_gem_object_init()`. Storage for private GEM objects +must be managed by drivers. + +GEM Objects Lifetime +~~~~~~~~~~~~~~~~~~~~ + +All GEM objects are reference-counted by the GEM core. References can be +acquired and release by :c:func:`calling +drm_gem_object_reference()` and +:c:func:`drm_gem_object_unreference()` respectively. The caller +must hold the :c:type:`struct drm_device <drm_device>` +struct_mutex lock when calling +:c:func:`drm_gem_object_reference()`. As a convenience, GEM +provides :c:func:`drm_gem_object_unreference_unlocked()` +functions that can be called without holding the lock. + +When the last reference to a GEM object is released the GEM core calls +the :c:type:`struct drm_driver <drm_driver>` gem_free_object +operation. That operation is mandatory for GEM-enabled drivers and must +free the GEM object and all associated resources. + +void (\*gem_free_object) (struct drm_gem_object \*obj); Drivers are +responsible for freeing all GEM object resources. This includes the +resources created by the GEM core, which need to be released with +:c:func:`drm_gem_object_release()`. + +GEM Objects Naming +~~~~~~~~~~~~~~~~~~ + +Communication between userspace and the kernel refers to GEM objects +using local handles, global names or, more recently, file descriptors. +All of those are 32-bit integer values; the usual Linux kernel limits +apply to the file descriptors. + +GEM handles are local to a DRM file. Applications get a handle to a GEM +object through a driver-specific ioctl, and can use that handle to refer +to the GEM object in other standard or driver-specific ioctls. Closing a +DRM file handle frees all its GEM handles and dereferences the +associated GEM objects. + +To create a handle for a GEM object drivers call +:c:func:`drm_gem_handle_create()`. The function takes a pointer +to the DRM file and the GEM object and returns a locally unique handle. +When the handle is no longer needed drivers delete it with a call to +:c:func:`drm_gem_handle_delete()`. Finally the GEM object +associated with a handle can be retrieved by a call to +:c:func:`drm_gem_object_lookup()`. + +Handles don't take ownership of GEM objects, they only take a reference +to the object that will be dropped when the handle is destroyed. To +avoid leaking GEM objects, drivers must make sure they drop the +reference(s) they own (such as the initial reference taken at object +creation time) as appropriate, without any special consideration for the +handle. For example, in the particular case of combined GEM object and +handle creation in the implementation of the dumb_create operation, +drivers must drop the initial reference to the GEM object before +returning the handle. + +GEM names are similar in purpose to handles but are not local to DRM +files. They can be passed between processes to reference a GEM object +globally. Names can't be used directly to refer to objects in the DRM +API, applications must convert handles to names and names to handles +using the DRM_IOCTL_GEM_FLINK and DRM_IOCTL_GEM_OPEN ioctls +respectively. The conversion is handled by the DRM core without any +driver-specific support. + +GEM also supports buffer sharing with dma-buf file descriptors through +PRIME. GEM-based drivers must use the provided helpers functions to +implement the exporting and importing correctly. See ?. Since sharing +file descriptors is inherently more secure than the easily guessable and +global GEM names it is the preferred buffer sharing mechanism. Sharing +buffers through GEM names is only supported for legacy userspace. +Furthermore PRIME also allows cross-device buffer sharing since it is +based on dma-bufs. + +GEM Objects Mapping +~~~~~~~~~~~~~~~~~~~ + +Because mapping operations are fairly heavyweight GEM favours +read/write-like access to buffers, implemented through driver-specific +ioctls, over mapping buffers to userspace. However, when random access +to the buffer is needed (to perform software rendering for instance), +direct access to the object can be more efficient. + +The mmap system call can't be used directly to map GEM objects, as they +don't have their own file handle. Two alternative methods currently +co-exist to map GEM objects to userspace. The first method uses a +driver-specific ioctl to perform the mapping operation, calling +:c:func:`do_mmap()` under the hood. This is often considered +dubious, seems to be discouraged for new GEM-enabled drivers, and will +thus not be described here. + +The second method uses the mmap system call on the DRM file handle. void +\*mmap(void \*addr, size_t length, int prot, int flags, int fd, off_t +offset); DRM identifies the GEM object to be mapped by a fake offset +passed through the mmap offset argument. Prior to being mapped, a GEM +object must thus be associated with a fake offset. To do so, drivers +must call :c:func:`drm_gem_create_mmap_offset()` on the object. + +Once allocated, the fake offset value must be passed to the application +in a driver-specific way and can then be used as the mmap offset +argument. + +The GEM core provides a helper method :c:func:`drm_gem_mmap()` to +handle object mapping. The method can be set directly as the mmap file +operation handler. It will look up the GEM object based on the offset +value and set the VMA operations to the :c:type:`struct drm_driver +<drm_driver>` gem_vm_ops field. Note that +:c:func:`drm_gem_mmap()` doesn't map memory to userspace, but +relies on the driver-provided fault handler to map pages individually. + +To use :c:func:`drm_gem_mmap()`, drivers must fill the struct +:c:type:`struct drm_driver <drm_driver>` gem_vm_ops field +with a pointer to VM operations. + +struct vm_operations_struct \*gem_vm_ops struct +vm_operations_struct { void (\*open)(struct vm_area_struct \* area); +void (\*close)(struct vm_area_struct \* area); int (\*fault)(struct +vm_area_struct \*vma, struct vm_fault \*vmf); }; + +The open and close operations must update the GEM object reference +count. Drivers can use the :c:func:`drm_gem_vm_open()` and +:c:func:`drm_gem_vm_close()` helper functions directly as open +and close handlers. + +The fault operation handler is responsible for mapping individual pages +to userspace when a page fault occurs. Depending on the memory +allocation scheme, drivers can allocate pages at fault time, or can +decide to allocate memory for the GEM object at the time the object is +created. + +Drivers that want to map the GEM object upfront instead of handling page +faults can implement their own mmap file operation handler. + +Memory Coherency +~~~~~~~~~~~~~~~~ + +When mapped to the device or used in a command buffer, backing pages for +an object are flushed to memory and marked write combined so as to be +coherent with the GPU. Likewise, if the CPU accesses an object after the +GPU has finished rendering to the object, then the object must be made +coherent with the CPU's view of memory, usually involving GPU cache +flushing of various kinds. This core CPU<->GPU coherency management is +provided by a device-specific ioctl, which evaluates an object's current +domain and performs any necessary flushing or synchronization to put the +object into the desired coherency domain (note that the object may be +busy, i.e. an active render target; in that case, setting the domain +blocks the client and waits for rendering to complete before performing +any necessary flushing operations). + +Command Execution +~~~~~~~~~~~~~~~~~ + +Perhaps the most important GEM function for GPU devices is providing a +command execution interface to clients. Client programs construct +command buffers containing references to previously allocated memory +objects, and then submit them to GEM. At that point, GEM takes care to +bind all the objects into the GTT, execute the buffer, and provide +necessary synchronization between clients accessing the same buffers. +This often involves evicting some objects from the GTT and re-binding +others (a fairly expensive operation), and providing relocation support +which hides fixed GTT offsets from clients. Clients must take care not +to submit command buffers that reference more objects than can fit in +the GTT; otherwise, GEM will reject them and no rendering will occur. +Similarly, if several objects in the buffer require fence registers to +be allocated for correct rendering (e.g. 2D blits on pre-965 chips), +care must be taken not to require more fence registers than are +available to the client. Such resource management should be abstracted +from the client in libdrm. + +GEM Function Reference +---------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_gem.c + :export: + +.. kernel-doc:: include/drm/drm_gem.h + :internal: + +VMA Offset Manager +------------------ + +.. kernel-doc:: drivers/gpu/drm/drm_vma_manager.c + :doc: vma offset manager + +.. kernel-doc:: drivers/gpu/drm/drm_vma_manager.c + :export: + +.. kernel-doc:: include/drm/drm_vma_manager.h + :internal: + +PRIME Buffer Sharing +-------------------- + +PRIME is the cross device buffer sharing framework in drm, originally +created for the OPTIMUS range of multi-gpu platforms. To userspace PRIME +buffers are dma-buf based file descriptors. + +Overview and Driver Interface +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Similar to GEM global names, PRIME file descriptors are also used to +share buffer objects across processes. They offer additional security: +as file descriptors must be explicitly sent over UNIX domain sockets to +be shared between applications, they can't be guessed like the globally +unique GEM names. + +Drivers that support the PRIME API must set the DRIVER_PRIME bit in the +struct :c:type:`struct drm_driver <drm_driver>` +driver_features field, and implement the prime_handle_to_fd and +prime_fd_to_handle operations. + +int (\*prime_handle_to_fd)(struct drm_device \*dev, struct drm_file +\*file_priv, uint32_t handle, uint32_t flags, int \*prime_fd); int +(\*prime_fd_to_handle)(struct drm_device \*dev, struct drm_file +\*file_priv, int prime_fd, uint32_t \*handle); Those two operations +convert a handle to a PRIME file descriptor and vice versa. Drivers must +use the kernel dma-buf buffer sharing framework to manage the PRIME file +descriptors. Similar to the mode setting API PRIME is agnostic to the +underlying buffer object manager, as long as handles are 32bit unsigned +integers. + +While non-GEM drivers must implement the operations themselves, GEM +drivers must use the :c:func:`drm_gem_prime_handle_to_fd()` and +:c:func:`drm_gem_prime_fd_to_handle()` helper functions. Those +helpers rely on the driver gem_prime_export and gem_prime_import +operations to create a dma-buf instance from a GEM object (dma-buf +exporter role) and to create a GEM object from a dma-buf instance +(dma-buf importer role). + +struct dma_buf \* (\*gem_prime_export)(struct drm_device \*dev, +struct drm_gem_object \*obj, int flags); struct drm_gem_object \* +(\*gem_prime_import)(struct drm_device \*dev, struct dma_buf +\*dma_buf); These two operations are mandatory for GEM drivers that +support PRIME. + +PRIME Helper Functions +~~~~~~~~~~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/gpu/drm/drm_prime.c + :doc: PRIME Helpers + +PRIME Function References +------------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_prime.c + :export: + +DRM MM Range Allocator +---------------------- + +Overview +~~~~~~~~ + +.. kernel-doc:: drivers/gpu/drm/drm_mm.c + :doc: Overview + +LRU Scan/Eviction Support +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/gpu/drm/drm_mm.c + :doc: lru scan roaster + +DRM MM Range Allocator Function References +------------------------------------------ + +.. kernel-doc:: drivers/gpu/drm/drm_mm.c + :export: + +.. kernel-doc:: include/drm/drm_mm.h + :internal: + +CMA Helper Functions Reference +------------------------------ + +.. kernel-doc:: drivers/gpu/drm/drm_gem_cma_helper.c + :doc: cma helpers + +.. kernel-doc:: drivers/gpu/drm/drm_gem_cma_helper.c + :export: + +.. kernel-doc:: include/drm/drm_gem_cma_helper.h + :internal: diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst new file mode 100644 index 000000000000..536bf3eaadd4 --- /dev/null +++ b/Documentation/gpu/drm-uapi.rst @@ -0,0 +1,111 @@ +=================== +Userland interfaces +=================== + +The DRM core exports several interfaces to applications, generally +intended to be used through corresponding libdrm wrapper functions. In +addition, drivers export device-specific interfaces for use by userspace +drivers & device-aware applications through ioctls and sysfs files. + +External interfaces include: memory mapping, context management, DMA +operations, AGP management, vblank control, fence management, memory +management, and output management. + +Cover generic ioctls and sysfs layout here. We only need high-level +info, since man pages should cover the rest. + +libdrm Device Lookup +==================== + +.. kernel-doc:: drivers/gpu/drm/drm_ioctl.c + :doc: getunique and setversion story + + +Primary Nodes, DRM Master and Authentication +============================================ + +.. kernel-doc:: drivers/gpu/drm/drm_auth.c + :doc: master and authentication + +.. kernel-doc:: drivers/gpu/drm/drm_auth.c + :export: + +.. kernel-doc:: include/drm/drm_auth.h + :internal: + +Render nodes +============ + +DRM core provides multiple character-devices for user-space to use. +Depending on which device is opened, user-space can perform a different +set of operations (mainly ioctls). The primary node is always created +and called card<num>. Additionally, a currently unused control node, +called controlD<num> is also created. The primary node provides all +legacy operations and historically was the only interface used by +userspace. With KMS, the control node was introduced. However, the +planned KMS control interface has never been written and so the control +node stays unused to date. + +With the increased use of offscreen renderers and GPGPU applications, +clients no longer require running compositors or graphics servers to +make use of a GPU. But the DRM API required unprivileged clients to +authenticate to a DRM-Master prior to getting GPU access. To avoid this +step and to grant clients GPU access without authenticating, render +nodes were introduced. Render nodes solely serve render clients, that +is, no modesetting or privileged ioctls can be issued on render nodes. +Only non-global rendering commands are allowed. If a driver supports +render nodes, it must advertise it via the DRIVER_RENDER DRM driver +capability. If not supported, the primary node must be used for render +clients together with the legacy drmAuth authentication procedure. + +If a driver advertises render node support, DRM core will create a +separate render node called renderD<num>. There will be one render node +per device. No ioctls except PRIME-related ioctls will be allowed on +this node. Especially GEM_OPEN will be explicitly prohibited. Render +nodes are designed to avoid the buffer-leaks, which occur if clients +guess the flink names or mmap offsets on the legacy interface. +Additionally to this basic interface, drivers must mark their +driver-dependent render-only ioctls as DRM_RENDER_ALLOW so render +clients can use them. Driver authors must be careful not to allow any +privileged ioctls on render nodes. + +With render nodes, user-space can now control access to the render node +via basic file-system access-modes. A running graphics server which +authenticates clients on the privileged primary/legacy node is no longer +required. Instead, a client can open the render node and is immediately +granted GPU access. Communication between clients (or servers) is done +via PRIME. FLINK from render node to legacy node is not supported. New +clients must not use the insecure FLINK interface. + +Besides dropping all modeset/global ioctls, render nodes also drop the +DRM-Master concept. There is no reason to associate render clients with +a DRM-Master as they are independent of any graphics server. Besides, +they must work without any running master, anyway. Drivers must be able +to run without a master object if they support render nodes. If, on the +other hand, a driver requires shared state between clients which is +visible to user-space and accessible beyond open-file boundaries, they +cannot support render nodes. + +VBlank event handling +===================== + +The DRM core exposes two vertical blank related ioctls: + +DRM_IOCTL_WAIT_VBLANK + This takes a struct drm_wait_vblank structure as its argument, and + it is used to block or request a signal when a specified vblank + event occurs. + +DRM_IOCTL_MODESET_CTL + This was only used for user-mode-settind drivers around modesetting + changes to allow the kernel to update the vblank interrupt after + mode setting, since on many devices the vertical blank counter is + reset to 0 at some point during modeset. Modern drivers should not + call this any more since with kernel mode setting it is a no-op. + +This second part of the GPU Driver Developer's Guide documents driver +code, implementation details and also all the driver-specific userspace +interfaces. Especially since all hardware-acceleration interfaces to +userspace are driver specific for efficiency and other reasons these +interfaces can be rather substantial. Hence every driver has its own +chapter. diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst new file mode 100644 index 000000000000..2fe5952e90f1 --- /dev/null +++ b/Documentation/gpu/i915.rst @@ -0,0 +1,347 @@ +=========================== + drm/i915 Intel GFX Driver +=========================== + +The drm/i915 driver supports all (with the exception of some very early +models) integrated GFX chipsets with both Intel display and rendering +blocks. This excludes a set of SoC platforms with an SGX rendering unit, +those have basic support through the gma500 drm driver. + +Core Driver Infrastructure +========================== + +This section covers core driver infrastructure used by both the display +and the GEM parts of the driver. + +Runtime Power Management +------------------------ + +.. kernel-doc:: drivers/gpu/drm/i915/intel_runtime_pm.c + :doc: runtime pm + +.. kernel-doc:: drivers/gpu/drm/i915/intel_runtime_pm.c + :internal: + +.. kernel-doc:: drivers/gpu/drm/i915/intel_uncore.c + :internal: + +Interrupt Handling +------------------ + +.. kernel-doc:: drivers/gpu/drm/i915/i915_irq.c + :doc: interrupt handling + +.. kernel-doc:: drivers/gpu/drm/i915/i915_irq.c + :functions: intel_irq_init intel_irq_init_hw intel_hpd_init + +.. kernel-doc:: drivers/gpu/drm/i915/i915_irq.c + :functions: intel_runtime_pm_disable_interrupts + +.. kernel-doc:: drivers/gpu/drm/i915/i915_irq.c + :functions: intel_runtime_pm_enable_interrupts + +Intel GVT-g Guest Support(vGPU) +------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_vgpu.c + :doc: Intel GVT-g guest support + +.. kernel-doc:: drivers/gpu/drm/i915/i915_vgpu.c + :internal: + +Display Hardware Handling +========================= + +This section covers everything related to the display hardware including +the mode setting infrastructure, plane, sprite and cursor handling and +display, output probing and related topics. + +Mode Setting Infrastructure +--------------------------- + +The i915 driver is thus far the only DRM driver which doesn't use the +common DRM helper code to implement mode setting sequences. Thus it has +its own tailor-made infrastructure for executing a display configuration +change. + +Frontbuffer Tracking +-------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_frontbuffer.c + :doc: frontbuffer tracking + +.. kernel-doc:: drivers/gpu/drm/i915/intel_frontbuffer.c + :internal: + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem.c + :functions: i915_gem_track_fb + +Display FIFO Underrun Reporting +------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_fifo_underrun.c + :doc: fifo underrun handling + +.. kernel-doc:: drivers/gpu/drm/i915/intel_fifo_underrun.c + :internal: + +Plane Configuration +------------------- + +This section covers plane configuration and composition with the primary +plane, sprites, cursors and overlays. This includes the infrastructure +to do atomic vsync'ed updates of all this state and also tightly coupled +topics like watermark setup and computation, framebuffer compression and +panel self refresh. + +Atomic Plane Helpers +-------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_atomic_plane.c + :doc: atomic plane helpers + +.. kernel-doc:: drivers/gpu/drm/i915/intel_atomic_plane.c + :internal: + +Output Probing +-------------- + +This section covers output probing and related infrastructure like the +hotplug interrupt storm detection and mitigation code. Note that the +i915 driver still uses most of the common DRM helper code for output +probing, so those sections fully apply. + +Hotplug +------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_hotplug.c + :doc: Hotplug + +.. kernel-doc:: drivers/gpu/drm/i915/intel_hotplug.c + :internal: + +High Definition Audio +--------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c + :doc: High Definition Audio over HDMI and Display Port + +.. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c + :internal: + +.. kernel-doc:: include/drm/i915_component.h + :internal: + +Panel Self Refresh PSR (PSR/SRD) +-------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_psr.c + :doc: Panel Self Refresh (PSR/SRD) + +.. kernel-doc:: drivers/gpu/drm/i915/intel_psr.c + :internal: + +Frame Buffer Compression (FBC) +------------------------------ + +.. kernel-doc:: drivers/gpu/drm/i915/intel_fbc.c + :doc: Frame Buffer Compression (FBC) + +.. kernel-doc:: drivers/gpu/drm/i915/intel_fbc.c + :internal: + +Display Refresh Rate Switching (DRRS) +------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :doc: Display Refresh Rate Switching (DRRS) + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :functions: intel_dp_set_drrs_state + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :functions: intel_edp_drrs_enable + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :functions: intel_edp_drrs_disable + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :functions: intel_edp_drrs_invalidate + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :functions: intel_edp_drrs_flush + +.. kernel-doc:: drivers/gpu/drm/i915/intel_dp.c + :functions: intel_dp_drrs_init + +DPIO +---- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_reg.h + :doc: DPIO + +CSR firmware support for DMC +---------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_csr.c + :doc: csr support for dmc + +.. kernel-doc:: drivers/gpu/drm/i915/intel_csr.c + :internal: + +Video BIOS Table (VBT) +---------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_bios.c + :doc: Video BIOS Table (VBT) + +.. kernel-doc:: drivers/gpu/drm/i915/intel_bios.c + :internal: + +.. kernel-doc:: drivers/gpu/drm/i915/intel_vbt_defs.h + :internal: + +Memory Management and Command Submission +======================================== + +This sections covers all things related to the GEM implementation in the +i915 driver. + +Batchbuffer Parsing +------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_cmd_parser.c + :doc: batch buffer command parser + +.. kernel-doc:: drivers/gpu/drm/i915/i915_cmd_parser.c + :internal: + +Batchbuffer Pools +----------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_batch_pool.c + :doc: batch pool + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_batch_pool.c + :internal: + +Logical Rings, Logical Ring Contexts and Execlists +-------------------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_lrc.c + :doc: Logical Rings, Logical Ring Contexts and Execlists + +.. kernel-doc:: drivers/gpu/drm/i915/intel_lrc.c + :internal: + +Global GTT views +---------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_gtt.c + :doc: Global GTT views + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_gtt.c + :internal: + +GTT Fences and Swizzling +------------------------ + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence.c + :internal: + +Global GTT Fence Handling +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence.c + :doc: fence register handling + +Hardware Tiling and Swizzling Details +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence.c + :doc: tiling swizzling details + +Object Tiling IOCTLs +-------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_tiling.c + :internal: + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_tiling.c + :doc: buffer object tiling + +Buffer Object Eviction +---------------------- + +This section documents the interface functions for evicting buffer +objects to make space available in the virtual gpu address spaces. Note +that this is mostly orthogonal to shrinking buffer objects caches, which +has the goal to make main memory (shared with the gpu through the +unified memory architecture) available. + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_evict.c + :internal: + +Buffer Object Memory Shrinking +------------------------------ + +This section documents the interface function for shrinking memory usage +of buffer object caches. Shrinking is used to make main memory +available. Note that this is mostly orthogonal to evicting buffer +objects, which has the goal to make space in gpu virtual address spaces. + +.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_shrinker.c + :internal: + +GuC +=== + +GuC-specific firmware loader +---------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_guc_loader.c + :doc: GuC-specific firmware loader + +.. kernel-doc:: drivers/gpu/drm/i915/intel_guc_loader.c + :internal: + +GuC-based command submission +---------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_guc_submission.c + :doc: GuC-based command submission + +.. kernel-doc:: drivers/gpu/drm/i915/i915_guc_submission.c + :internal: + +GuC Firmware Layout +------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/intel_guc_fwif.h + :doc: GuC Firmware Layout + +Tracing +======= + +This sections covers all things related to the tracepoints implemented +in the i915 driver. + +i915_ppgtt_create and i915_ppgtt_release +---------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_trace.h + :doc: i915_ppgtt_create and i915_ppgtt_release tracepoints + +i915_context_create and i915_context_free +----------------------------------------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_trace.h + :doc: i915_context_create and i915_context_free tracepoints + +switch_mm +--------- + +.. kernel-doc:: drivers/gpu/drm/i915/i915_trace.h + :doc: switch_mm tracepoint + +.. WARNING: DOCPROC directive not supported: !Cdrivers/gpu/drm/i915/i915_irq.c diff --git a/Documentation/gpu/index.rst b/Documentation/gpu/index.rst new file mode 100644 index 000000000000..fcac0fa72056 --- /dev/null +++ b/Documentation/gpu/index.rst @@ -0,0 +1,14 @@ +================================== +Linux GPU Driver Developer's Guide +================================== + +.. toctree:: + + introduction + drm-internals + drm-mm + drm-kms + drm-kms-helpers + drm-uapi + i915 + vga-switcheroo diff --git a/Documentation/gpu/introduction.rst b/Documentation/gpu/introduction.rst new file mode 100644 index 000000000000..1903595b5310 --- /dev/null +++ b/Documentation/gpu/introduction.rst @@ -0,0 +1,51 @@ +============ +Introduction +============ + +The Linux DRM layer contains code intended to support the needs of +complex graphics devices, usually containing programmable pipelines well +suited to 3D graphics acceleration. Graphics drivers in the kernel may +make use of DRM functions to make tasks like memory management, +interrupt handling and DMA easier, and provide a uniform interface to +applications. + +A note on versions: this guide covers features found in the DRM tree, +including the TTM memory manager, output configuration and mode setting, +and the new vblank internals, in addition to all the regular features +found in current kernels. + +[Insert diagram of typical DRM stack here] + +Style Guidelines +================ + +For consistency this documentation uses American English. Abbreviations +are written as all-uppercase, for example: DRM, KMS, IOCTL, CRTC, and so +on. To aid in reading, documentations make full use of the markup +characters kerneldoc provides: @parameter for function parameters, +@member for structure members, &structure to reference structures and +function() for functions. These all get automatically hyperlinked if +kerneldoc for the referenced objects exists. When referencing entries in +function vtables please use ->vfunc(). Note that kerneldoc does not +support referencing struct members directly, so please add a reference +to the vtable struct somewhere in the same paragraph or at least +section. + +Except in special situations (to separate locked from unlocked variants) +locking requirements for functions aren't documented in the kerneldoc. +Instead locking should be check at runtime using e.g. +``WARN_ON(!mutex_is_locked(...));``. Since it's much easier to ignore +documentation than runtime noise this provides more value. And on top of +that runtime checks do need to be updated when the locking rules change, +increasing the chances that they're correct. Within the documentation +the locking rules should be explained in the relevant structures: Either +in the comment for the lock explaining what it protects, or data fields +need a note about which lock protects them, or both. + +Functions which have a non-\ ``void`` return value should have a section +called "Returns" explaining the expected return values in different +cases and their meanings. Currently there's no consensus whether that +section name should be all upper-case or not, and whether it should end +in a colon or not. Go with the file-local style. Other common section +names are "Notes" with information for dangerous or tricky corner cases, +and "FIXME" where the interface could be cleaned up. diff --git a/Documentation/gpu/kms-properties.csv b/Documentation/gpu/kms-properties.csv new file mode 100644 index 000000000000..4c5ce3edcfd9 --- /dev/null +++ b/Documentation/gpu/kms-properties.csv @@ -0,0 +1,129 @@ +Owner Module/Drivers,Group,Property Name,Type,Property Values,Object attached,Description/Restrictions +DRM,Generic,“rotation”,BITMASK,"{ 0, ""rotate-0"" }, { 1, ""rotate-90"" }, { 2, ""rotate-180"" }, { 3, ""rotate-270"" }, { 4, ""reflect-x"" }, { 5, ""reflect-y"" }","CRTC, Plane",rotate-(degrees) rotates the image by the specified amount in degrees in counter clockwise direction. reflect-x and reflect-y reflects the image along the specified axis prior to rotation +,,“scaling mode”,ENUM,"{ ""None"", ""Full"", ""Center"", ""Full aspect"" }",Connector,"Supported by: amdgpu, gma500, i915, nouveau and radeon." +,Connector,“EDID”,BLOB | IMMUTABLE,0,Connector,Contains id of edid blob ptr object. +,,“DPMS”,ENUM,"{ “On”, “Standby”, “Suspend”, “Off” }",Connector,Contains DPMS operation mode value. +,,“PATH”,BLOB | IMMUTABLE,0,Connector,Contains topology path to a connector. +,,“TILE”,BLOB | IMMUTABLE,0,Connector,Contains tiling information for a connector. +,,“CRTC_ID”,OBJECT,DRM_MODE_OBJECT_CRTC,Connector,CRTC that connector is attached to (atomic) +,Plane,“type”,ENUM | IMMUTABLE,"{ ""Overlay"", ""Primary"", ""Cursor"" }",Plane,Plane type +,,“SRC_X”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout source x coordinate in 16.16 fixed point (atomic) +,,“SRC_Y”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout source y coordinate in 16.16 fixed point (atomic) +,,“SRC_W”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout source width in 16.16 fixed point (atomic) +,,“SRC_H”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout source height in 16.16 fixed point (atomic) +,,“CRTC_X”,SIGNED_RANGE,"Min=INT_MIN, Max=INT_MAX",Plane,Scanout CRTC (destination) x coordinate (atomic) +,,“CRTC_Y”,SIGNED_RANGE,"Min=INT_MIN, Max=INT_MAX",Plane,Scanout CRTC (destination) y coordinate (atomic) +,,“CRTC_W”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout CRTC (destination) width (atomic) +,,“CRTC_H”,RANGE,"Min=0, Max=UINT_MAX",Plane,Scanout CRTC (destination) height (atomic) +,,“FB_ID”,OBJECT,DRM_MODE_OBJECT_FB,Plane,Scanout framebuffer (atomic) +,,“CRTC_ID”,OBJECT,DRM_MODE_OBJECT_CRTC,Plane,CRTC that plane is attached to (atomic) +,,“zpos”,RANGE,"Min=0, Max=UINT_MAX","Plane,Z-order of the plane.Planes with higher Z-order values are displayed on top, planes with identical Z-order values are display in an undefined order" +,DVI-I,“subconnector”,ENUM,"{ “Unknown”, “DVI-D”, “DVI-A” }",Connector,TBD +,,“select subconnector”,ENUM,"{ “Automatic”, “DVI-D”, “DVI-A” }",Connector,TBD +,TV,“subconnector”,ENUM,"{ ""Unknown"", ""Composite"", ""SVIDEO"", ""Component"", ""SCART"" }",Connector,TBD +,,“select subconnector”,ENUM,"{ ""Automatic"", ""Composite"", ""SVIDEO"", ""Component"", ""SCART"" }",Connector,TBD +,,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"", ""PAL_B"" } etc.",Connector,TBD +,,“left margin”,RANGE,"Min=0, Max=100",Connector,TBD +,,“right margin”,RANGE,"Min=0, Max=100",Connector,TBD +,,“top margin”,RANGE,"Min=0, Max=100",Connector,TBD +,,“bottom margin”,RANGE,"Min=0, Max=100",Connector,TBD +,,“brightness”,RANGE,"Min=0, Max=100",Connector,TBD +,,“contrast”,RANGE,"Min=0, Max=100",Connector,TBD +,,“flicker reduction”,RANGE,"Min=0, Max=100",Connector,TBD +,,“overscan”,RANGE,"Min=0, Max=100",Connector,TBD +,,“saturation”,RANGE,"Min=0, Max=100",Connector,TBD +,,“hue”,RANGE,"Min=0, Max=100",Connector,TBD +,Virtual GPU,“suggested X”,RANGE,"Min=0, Max=0xffffffff",Connector,property to suggest an X offset for a connector +,,“suggested Y”,RANGE,"Min=0, Max=0xffffffff",Connector,property to suggest an Y offset for a connector +,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9"" }",Connector,TDB +,,“dirty”,ENUM | IMMUTABLE,"{ ""Off"", ""On"", ""Annotate"" }",Connector,TBD +,,“DEGAMMA_LUT”,BLOB,0,CRTC,DRM property to set the degamma lookup table (LUT) mapping pixel data from the framebuffer before it is given to the transformation matrix. The data is an interpreted as an array of struct drm_color_lut elements. Hardware might choose not to use the full precision of the LUT elements nor use all the elements of the LUT (for example the hardware might choose to interpolate between LUT[0] and LUT[4]). +,,“DEGAMMA_LUT_SIZE”,RANGE | IMMUTABLE,"Min=0, Max=UINT_MAX",CRTC,DRM property to gives the size of the lookup table to be set on the DEGAMMA_LUT property (the size depends on the underlying hardware). +,,“CTM”,BLOB,0,CRTC,DRM property to set the current transformation matrix (CTM) apply to pixel data after the lookup through the degamma LUT and before the lookup through the gamma LUT. The data is an interpreted as a struct drm_color_ctm. +,,“GAMMA_LUT”,BLOB,0,CRTC,DRM property to set the gamma lookup table (LUT) mapping pixel data after to the transformation matrix to data sent to the connector. The data is an interpreted as an array of struct drm_color_lut elements. Hardware might choose not to use the full precision of the LUT elements nor use all the elements of the LUT (for example the hardware might choose to interpolate between LUT[0] and LUT[4]). +,,“GAMMA_LUT_SIZE”,RANGE | IMMUTABLE,"Min=0, Max=UINT_MAX",CRTC,DRM property to gives the size of the lookup table to be set on the GAMMA_LUT property (the size depends on the underlying hardware). +i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"", ""Limited 16:235"" }",Connector,"When this property is set to Limited 16:235 and CTM is set, the hardware will be programmed with the result of the multiplication of CTM by the limited range matrix to ensure the pixels normaly in the range 0..1.0 are remapped to the range 16/255..235/255." +,,“audio”,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on"" }",Connector,TBD +,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"", ""PAL_B"" } etc.",Connector,TBD +,,"""left_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,"""right_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,"""top_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,"""bottom_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“hpos”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“vpos”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“contrast”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“saturation”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“hue”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“sharpness”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“flicker_filter”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“flicker_filter_adaptive”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“flicker_filter_2d”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“tv_chroma_filter”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“tv_luma_filter”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“dot_crawl”,RANGE,"Min=0, Max=1",Connector,TBD +,SDVO-TV/LVDS,“brightness”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +CDV gma-500,Generic,"""Broadcast RGB""",ENUM,"{ “Full”, “Limited 16:235” }",Connector,TBD +,,"""Broadcast RGB""",ENUM,"{ “off”, “auto”, “on” }",Connector,TBD +Poulsbo,Generic,“backlight”,RANGE,"Min=0, Max=100",Connector,TBD +,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"", ""PAL_B"" } etc.",Connector,TBD +,,"""left_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,"""right_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,"""top_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,"""bottom_margin""",RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“hpos”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“vpos”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“contrast”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“saturation”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“hue”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“sharpness”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“flicker_filter”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“flicker_filter_adaptive”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“flicker_filter_2d”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“tv_chroma_filter”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“tv_luma_filter”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +,,“dot_crawl”,RANGE,"Min=0, Max=1",Connector,TBD +,SDVO-TV/LVDS,“brightness”,RANGE,"Min=0, Max= SDVO dependent",Connector,TBD +armada,CRTC,"""CSC_YUV""",ENUM,"{ ""Auto"" , ""CCIR601"", ""CCIR709"" }",CRTC,TBD +,,"""CSC_RGB""",ENUM,"{ ""Auto"", ""Computer system"", ""Studio"" }",CRTC,TBD +,Overlay,"""colorkey""",RANGE,"Min=0, Max=0xffffff",Plane,TBD +,,"""colorkey_min""",RANGE,"Min=0, Max=0xffffff",Plane,TBD +,,"""colorkey_max""",RANGE,"Min=0, Max=0xffffff",Plane,TBD +,,"""colorkey_val""",RANGE,"Min=0, Max=0xffffff",Plane,TBD +,,"""colorkey_alpha""",RANGE,"Min=0, Max=0xffffff",Plane,TBD +,,"""colorkey_mode""",ENUM,"{ ""disabled"", ""Y component"", ""U component"" , ""V component"", ""RGB"", “R component"", ""G component"", ""B component"" }",Plane,TBD +,,"""brightness""",RANGE,"Min=0, Max=256 + 255",Plane,TBD +,,"""contrast""",RANGE,"Min=0, Max=0x7fff",Plane,TBD +,,"""saturation""",RANGE,"Min=0, Max=0x7fff",Plane,TBD +exynos,CRTC,“mode”,ENUM,"{ ""normal"", ""blank"" }",CRTC,TBD +,Overlay,“zpos”,RANGE,"Min=0, Max=MAX_PLANE-1",Plane,TBD +i2c/ch7006_drv,Generic,“scale”,RANGE,"Min=0, Max=2",Connector,TBD +,TV,“mode”,ENUM,"{ ""PAL"", ""PAL-M"",""PAL-N""}, ”PAL-Nc"" , ""PAL-60"", ""NTSC-M"", ""NTSC-J"" }",Connector,TBD +nouveau,NV10 Overlay,"""colorkey""",RANGE,"Min=0, Max=0x01ffffff",Plane,TBD +,,“contrast”,RANGE,"Min=0, Max=8192-1",Plane,TBD +,,“brightness”,RANGE,"Min=0, Max=1024",Plane,TBD +,,“hue”,RANGE,"Min=0, Max=359",Plane,TBD +,,“saturation”,RANGE,"Min=0, Max=8192-1",Plane,TBD +,,“iturbt_709”,RANGE,"Min=0, Max=1",Plane,TBD +,Nv04 Overlay,“colorkey”,RANGE,"Min=0, Max=0x01ffffff",Plane,TBD +,,“brightness”,RANGE,"Min=0, Max=1024",Plane,TBD +,Display,“dithering mode”,ENUM,"{ ""auto"", ""off"", ""on"" }",Connector,TBD +,,“dithering depth”,ENUM,"{ ""auto"", ""off"", ""on"", ""static 2x2"", ""dynamic 2x2"", ""temporal"" }",Connector,TBD +,,“underscan”,ENUM,"{ ""auto"", ""6 bpc"", ""8 bpc"" }",Connector,TBD +,,“underscan hborder”,RANGE,"Min=0, Max=128",Connector,TBD +,,“underscan vborder”,RANGE,"Min=0, Max=128",Connector,TBD +,,“vibrant hue”,RANGE,"Min=0, Max=180",Connector,TBD +,,“color vibrance”,RANGE,"Min=0, Max=200",Connector,TBD +omap,Generic,“zorder”,RANGE,"Min=0, Max=3","CRTC, Plane",TBD +qxl,Generic,"“hotplug_mode_update""",RANGE,"Min=0, Max=1",Connector,TBD +radeon,DVI-I,“coherent”,RANGE,"Min=0, Max=1",Connector,TBD +,DAC enable load detect,“load detection”,RANGE,"Min=0, Max=1",Connector,TBD +,TV Standard,"""tv standard""",ENUM,"{ ""ntsc"", ""pal"", ""pal-m"", ""pal-60"", ""ntsc-j"" , ""scart-pal"", ""pal-cn"", ""secam"" }",Connector,TBD +,legacy TMDS PLL detect,"""tmds_pll""",ENUM,"{ ""driver"", ""bios"" }",-,TBD +,Underscan,"""underscan""",ENUM,"{ ""off"", ""on"", ""auto"" }",Connector,TBD +,,"""underscan hborder""",RANGE,"Min=0, Max=128",Connector,TBD +,,"""underscan vborder""",RANGE,"Min=0, Max=128",Connector,TBD +,Audio,“audio”,ENUM,"{ ""off"", ""on"", ""auto"" }",Connector,TBD +,FMT Dithering,“dither”,ENUM,"{ ""off"", ""on"" }",Connector,TBD +rcar-du,Generic,"""alpha""",RANGE,"Min=0, Max=255",Plane,TBD +,,"""colorkey""",RANGE,"Min=0, Max=0x01ffffff",Plane,TBD +,,"""zpos""",RANGE,"Min=1, Max=7",Plane,TBD diff --git a/Documentation/gpu/vga-switcheroo.rst b/Documentation/gpu/vga-switcheroo.rst new file mode 100644 index 000000000000..cbbdb994f1dd --- /dev/null +++ b/Documentation/gpu/vga-switcheroo.rst @@ -0,0 +1,98 @@ +.. _vga_switcheroo: + +============== +VGA Switcheroo +============== + +.. kernel-doc:: drivers/gpu/vga/vga_switcheroo.c + :doc: Overview + +Modes of Use +============ + +Manual switching and manual power control +----------------------------------------- + +.. kernel-doc:: drivers/gpu/vga/vga_switcheroo.c + :doc: Manual switching and manual power control + +Driver power control +-------------------- + +.. kernel-doc:: drivers/gpu/vga/vga_switcheroo.c + :doc: Driver power control + +API +=== + +Public functions +---------------- + +.. kernel-doc:: drivers/gpu/vga/vga_switcheroo.c + :export: + +Public structures +----------------- + +.. kernel-doc:: include/linux/vga_switcheroo.h + :functions: vga_switcheroo_handler + +.. kernel-doc:: include/linux/vga_switcheroo.h + :functions: vga_switcheroo_client_ops + +Public constants +---------------- + +.. kernel-doc:: include/linux/vga_switcheroo.h + :functions: vga_switcheroo_handler_flags_t + +.. kernel-doc:: include/linux/vga_switcheroo.h + :functions: vga_switcheroo_client_id + +.. kernel-doc:: include/linux/vga_switcheroo.h + :functions: vga_switcheroo_state + +Private structures +------------------ + +.. kernel-doc:: drivers/gpu/vga/vga_switcheroo.c + :functions: vgasr_priv + +.. kernel-doc:: drivers/gpu/vga/vga_switcheroo.c + :functions: vga_switcheroo_client + +Handlers +======== + +apple-gmux Handler +------------------ + +.. kernel-doc:: drivers/platform/x86/apple-gmux.c + :doc: Overview + +.. kernel-doc:: drivers/platform/x86/apple-gmux.c + :doc: Interrupt + +Graphics mux +~~~~~~~~~~~~ + +.. kernel-doc:: drivers/platform/x86/apple-gmux.c + :doc: Graphics mux + +Power control +~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/platform/x86/apple-gmux.c + :doc: Power control + +Backlight control +~~~~~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/platform/x86/apple-gmux.c + :doc: Backlight control + +Public functions +~~~~~~~~~~~~~~~~ + +.. kernel-doc:: include/linux/apple-gmux.h + :internal: diff --git a/Documentation/index.rst b/Documentation/index.rst index 43c722f15292..e0fc72963e87 100644 --- a/Documentation/index.rst +++ b/Documentation/index.rst @@ -18,6 +18,7 @@ Contents: media/media_kapi media/dvb-drivers/index media/v4l-drivers/index + gpu/index Indices and tables ================== diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt index 56af5e43e9c0..81c7f2bb7daf 100644 --- a/Documentation/ioctl/ioctl-number.txt +++ b/Documentation/ioctl/ioctl-number.txt @@ -248,7 +248,7 @@ Code Seq#(hex) Include File Comments 'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict! 'm' 00-1F net/irda/irmod.h conflict! 'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c -'n' 80-8F linux/nilfs2_fs.h NILFS2 +'n' 80-8F uapi/linux/nilfs2_api.h NILFS2 'n' E0-FF linux/matroxfb.h matroxfb 'o' 00-1F fs/ocfs2/ocfs2_fs.h OCFS2 'o' 00-03 mtd/ubi-user.h conflict! (OCFS2 and UBI overlaps) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 769db8399ac8..46c030a49186 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -931,9 +931,18 @@ bytes respectively. Such letter suffixes can also be entirely omitted. dhash_entries= [KNL] Set number of hash buckets for dentry cache. + disable_1tb_segments [PPC] + Disables the use of 1TB hash page table segments. This + causes the kernel to fall back to 256MB segments which + can be useful when debugging issues that require an SLB + miss to occur. + disable= [IPV6] See Documentation/networking/ipv6.txt. + disable_radix [PPC] + Disable RADIX MMU mode on POWER9 + disable_cpu_apicid= [X86,APIC,SMP] Format: <int> The number of initial APIC ID for the @@ -2311,6 +2320,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. Note that if CONFIG_MODULE_SIG_FORCE is set, that is always true, so this option does nothing. + module_blacklist= [KNL] Do not load a comma-separated list of + modules. Useful for debugging problem modules. + mousedev.tap_time= [MOUSE] Maximum time between finger touching and leaving touchpad surface for touch to be considered @@ -3012,6 +3024,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. resource_alignment= Format: [<order of align>@][<domain>:]<bus>:<slot>.<func>[; ...] + [<order of align>@]pci:<vendor>:<device>\ + [:<subvendor>:<subdevice>][; ...] Specifies alignment and device to reassign aligned memory resources. If <order of align> is not specified, @@ -3030,6 +3044,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. hpmemsize=nn[KMG] The fixed amount of bus space which is reserved for hotplug bridge's memory window. Default size is 2 megabytes. + hpbussize=nn The minimum amount of additional bus numbers + reserved for buses below a hotplug bridge. + Default is 1. realloc= Enable/disable reallocating PCI bridge resources if allocations done by BIOS are too small to accommodate resources required by all child @@ -3061,6 +3078,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. compat Treat PCIe ports as PCI-to-PCI bridges, disable the PCIe ports driver. + pcie_port_pm= [PCIE] PCIe port power management handling: + off Disable power management of all PCIe ports + force Forcibly enable power management of all PCIe ports + pcie_pme= [PCIE,PM] Native PCIe PME signaling options: nomsi Do not use MSI for native PCIe PME signaling (this makes all PCIe root ports use INTx for all services). @@ -3164,6 +3185,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted. Format: <bool> (1/Y/y=enable, 0/N/n=disable) default: disabled + printk.devkmsg={on,off,ratelimit} + Control writing to /dev/kmsg. + on - unlimited logging to /dev/kmsg from userspace + off - logging to /dev/kmsg disabled + ratelimit - ratelimit the logging + Default: ratelimit + printk.time= Show timing data prefixed to each printk message line Format: <bool> (1/Y/y=enable, 0/N/n=disable) @@ -3561,7 +3589,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. relax_domain_level= [KNL, SMP] Set scheduler's default relax_domain_level. - See Documentation/cgroups/cpusets.txt. + See Documentation/cgroup-v1/cpusets.txt. relative_sleep_states= [SUSPEND] Use sleep state labeling where the deepest @@ -3849,6 +3877,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. using these two parameters to set the minimum and maximum port values. + sunrpc.svc_rpc_per_connection_limit= + [NFS,SUNRPC] + Limit the number of requests that the server will + process in parallel from a single connection. + The default value is 0 (no limit). + sunrpc.pool_mode= [NFS] Control how the NFS server code allocates CPUs to @@ -3884,7 +3918,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. swapaccount=[0|1] [KNL] Enable accounting of swap in memory resource controller if no parameter or 1 is given or disable - it if 0 is given (See Documentation/cgroups/memory.txt) + it if 0 is given (See Documentation/cgroup-v1/memory.txt) swiotlb= [ARM,IA-64,PPC,MIPS,X86] Format: { <int> | force } diff --git a/Documentation/kernel-per-CPU-kthreads.txt b/Documentation/kernel-per-CPU-kthreads.txt index edec3a3e648d..bbc3a8b8cff4 100644 --- a/Documentation/kernel-per-CPU-kthreads.txt +++ b/Documentation/kernel-per-CPU-kthreads.txt @@ -10,7 +10,7 @@ REFERENCES o Documentation/IRQ-affinity.txt: Binding interrupts to sets of CPUs. -o Documentation/cgroups: Using cgroups to bind tasks to sets of CPUs. +o Documentation/cgroup-v1: Using cgroups to bind tasks to sets of CPUs. o man taskset: Using the taskset command to bind tasks to sets of CPUs. diff --git a/Documentation/mmc/mmc-dev-attrs.txt b/Documentation/mmc/mmc-dev-attrs.txt index caa555706f89..404a0e9e92b0 100644 --- a/Documentation/mmc/mmc-dev-attrs.txt +++ b/Documentation/mmc/mmc-dev-attrs.txt @@ -28,6 +28,8 @@ All attributes are read-only. preferred_erase_size Preferred erase size raw_rpmb_size_mult RPMB partition size rel_sectors Reliable write sector count + ocr Operation Conditions Register + dsr Driver Stage Register Note on Erase Size and Preferred Erase Size: diff --git a/Documentation/module-signing.txt b/Documentation/module-signing.txt index 696d5caf4fd8..f0e3361db20c 100644 --- a/Documentation/module-signing.txt +++ b/Documentation/module-signing.txt @@ -271,3 +271,9 @@ Since the private key is used to sign modules, viruses and malware could use the private key to sign modules and compromise the operating system. The private key must be either destroyed or moved to a secure location and not kept in the root node of the kernel source tree. + +If you use the same private key to sign modules for multiple kernel +configurations, you must ensure that the module version information is +sufficient to prevent loading a module into a different kernel. Either +set CONFIG_MODVERSIONS=y or ensure that each configuration has a different +kernel release string by changing EXTRAVERSION or CONFIG_LOCALVERSION. diff --git a/Documentation/ramoops.txt b/Documentation/ramoops.txt index 9264bcab4099..26b9f31cf65a 100644 --- a/Documentation/ramoops.txt +++ b/Documentation/ramoops.txt @@ -45,18 +45,34 @@ corrupt, but usually it is restorable. 2. Setting the parameters -Setting the ramoops parameters can be done in 3 different manners: - 1. Use the module parameters (which have the names of the variables described - as before). - For quick debugging, you can also reserve parts of memory during boot - and then use the reserved memory for ramoops. For example, assuming a machine - with > 128 MB of memory, the following kernel command line will tell the - kernel to use only the first 128 MB of memory, and place ECC-protected ramoops - region at 128 MB boundary: +Setting the ramoops parameters can be done in several different manners: + + A. Use the module parameters (which have the names of the variables described + as before). For quick debugging, you can also reserve parts of memory during + boot and then use the reserved memory for ramoops. For example, assuming a + machine with > 128 MB of memory, the following kernel command line will tell + the kernel to use only the first 128 MB of memory, and place ECC-protected + ramoops region at 128 MB boundary: "mem=128M ramoops.mem_address=0x8000000 ramoops.ecc=1" - 2. Use Device Tree bindings, as described in - Documentation/device-tree/bindings/misc/ramoops.txt. - 3. Use a platform device and set the platform data. The parameters can then + + B. Use Device Tree bindings, as described in + Documentation/device-tree/bindings/reserved-memory/ramoops.txt. + For example: + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + ramoops@8f000000 { + compatible = "ramoops"; + reg = <0 0x8f000000 0 0x100000>; + record-size = <0x4000>; + console-size = <0x4000>; + }; + }; + + C. Use a platform device and set the platform data. The parameters can then be set through that platform data. An example of doing that is: #include <linux/pstore_ram.h> diff --git a/Documentation/rapidio/mport_cdev.txt b/Documentation/rapidio/mport_cdev.txt index 20c120d4b3b8..6e491a662461 100644 --- a/Documentation/rapidio/mport_cdev.txt +++ b/Documentation/rapidio/mport_cdev.txt @@ -82,8 +82,7 @@ III. Module parameters - 'dbg_level' - This parameter allows to control amount of debug information generated by this device driver. This parameter is formed by set of - This parameter can be changed bit masks that correspond to the specific - functional block. + bit masks that correspond to the specific functional blocks. For mask definitions see 'drivers/rapidio/devices/rio_mport_cdev.c' This parameter can be changed dynamically. Use CONFIG_RAPIDIO_DEBUG=y to enable debug output at the top level. diff --git a/Documentation/rapidio/rio_cm.txt b/Documentation/rapidio/rio_cm.txt new file mode 100644 index 000000000000..27aa401f1126 --- /dev/null +++ b/Documentation/rapidio/rio_cm.txt @@ -0,0 +1,119 @@ +RapidIO subsystem Channelized Messaging character device driver (rio_cm.c) +========================================================================== + +Version History: +---------------- + 1.0.0 - Initial driver release. + +========================================================================== + +I. Overview + +This device driver is the result of collaboration within the RapidIO.org +Software Task Group (STG) between Texas Instruments, Prodrive Technologies, +Nokia Networks, BAE and IDT. Additional input was received from other members +of RapidIO.org. + +The objective was to create a character mode driver interface which exposes +messaging capabilities of RapidIO endpoint devices (mports) directly +to applications, in a manner that allows the numerous and varied RapidIO +implementations to interoperate. + +This driver (RIO_CM) provides to user-space applications shared access to +RapidIO mailbox messaging resources. + +RapidIO specification (Part 2) defines that endpoint devices may have up to four +messaging mailboxes in case of multi-packet message (up to 4KB) and +up to 64 mailboxes if single-packet messages (up to 256 B) are used. In addition +to protocol definition limitations, a particular hardware implementation can +have reduced number of messaging mailboxes. RapidIO aware applications must +therefore share the messaging resources of a RapidIO endpoint. + +Main purpose of this device driver is to provide RapidIO mailbox messaging +capability to large number of user-space processes by introducing socket-like +operations using a single messaging mailbox. This allows applications to +use the limited RapidIO messaging hardware resources efficiently. + +Most of device driver's operations are supported through 'ioctl' system calls. + +When loaded this device driver creates a single file system node named rio_cm +in /dev directory common for all registered RapidIO mport devices. + +Following ioctl commands are available to user-space applications: + +- RIO_CM_MPORT_GET_LIST : Returns to caller list of local mport devices that + support messaging operations (number of entries up to RIO_MAX_MPORTS). + Each list entry is combination of mport's index in the system and RapidIO + destination ID assigned to the port. +- RIO_CM_EP_GET_LIST_SIZE : Returns number of messaging capable remote endpoints + in a RapidIO network associated with the specified mport device. +- RIO_CM_EP_GET_LIST : Returns list of RapidIO destination IDs for messaging + capable remote endpoints (peers) available in a RapidIO network associated + with the specified mport device. +- RIO_CM_CHAN_CREATE : Creates RapidIO message exchange channel data structure + with channel ID assigned automatically or as requested by a caller. +- RIO_CM_CHAN_BIND : Binds the specified channel data structure to the specified + mport device. +- RIO_CM_CHAN_LISTEN : Enables listening for connection requests on the specified + channel. +- RIO_CM_CHAN_ACCEPT : Accepts a connection request from peer on the specified + channel. If wait timeout for this request is specified by a caller it is + a blocking call. If timeout set to 0 this is non-blocking call - ioctl + handler checks for a pending connection request and if one is not available + exits with -EGAIN error status immediately. +- RIO_CM_CHAN_CONNECT : Sends a connection request to a remote peer/channel. +- RIO_CM_CHAN_SEND : Sends a data message through the specified channel. + The handler for this request assumes that message buffer specified by + a caller includes the reserved space for a packet header required by + this driver. +- RIO_CM_CHAN_RECEIVE : Receives a data message through a connected channel. + If the channel does not have an incoming message ready to return this ioctl + handler will wait for new message until timeout specified by a caller + expires. If timeout value is set to 0, ioctl handler uses a default value + defined by MAX_SCHEDULE_TIMEOUT. +- RIO_CM_CHAN_CLOSE : Closes a specified channel and frees associated buffers. + If the specified channel is in the CONNECTED state, sends close notification + to the remote peer. + +The ioctl command codes and corresponding data structures intended for use by +user-space applications are defined in 'include/uapi/linux/rio_cm_cdev.h'. + +II. Hardware Compatibility + +This device driver uses standard interfaces defined by kernel RapidIO subsystem +and therefore it can be used with any mport device driver registered by RapidIO +subsystem with limitations set by available mport HW implementation of messaging +mailboxes. + +III. Module parameters + +- 'dbg_level' - This parameter allows to control amount of debug information + generated by this device driver. This parameter is formed by set of + bit masks that correspond to the specific functional block. + For mask definitions see 'drivers/rapidio/devices/rio_cm.c' + This parameter can be changed dynamically. + Use CONFIG_RAPIDIO_DEBUG=y to enable debug output at the top level. + +- 'cmbox' - Number of RapidIO mailbox to use (default value is 1). + This parameter allows to set messaging mailbox number that will be used + within entire RapidIO network. It can be used when default mailbox is + used by other device drivers or is not supported by some nodes in the + RapidIO network. + +- 'chstart' - Start channel number for dynamic assignment. Default value - 256. + Allows to exclude channel numbers below this parameter from dynamic + allocation to avoid conflicts with software components that use + reserved predefined channel numbers. + +IV. Known problems + + None. + +V. User-space Applications and API Library + +Messaging API library and applications that use this device driver are available +from RapidIO.org. + +VI. TODO List + +- Add support for system notification messages (reserved channel 0). diff --git a/Documentation/rapidio/tsi721.txt b/Documentation/rapidio/tsi721.txt index 7c1c7bf48ec0..cd2a2935d51d 100644 --- a/Documentation/rapidio/tsi721.txt +++ b/Documentation/rapidio/tsi721.txt @@ -25,6 +25,32 @@ fully compatible with RIONET driver (Ethernet over RapidIO messaging services). This parameter can be changed dynamically. Use CONFIG_RAPIDIO_DEBUG=y to enable debug output at the top level. +- 'dma_desc_per_channel' - This parameter defines number of hardware buffer + descriptors allocated for each registered Tsi721 DMA channel. + Its default value is 128. + +- 'dma_txqueue_sz' - DMA transactions queue size. Defines number of pending + transaction requests that can be accepted by each DMA channel. + Default value is 16. + +- 'dma_sel' - DMA channel selection mask. Bitmask that defines which hardware + DMA channels (0 ... 6) will be registered with DmaEngine core. + If bit is set to 1, the corresponding DMA channel will be registered. + DMA channels not selected by this mask will not be used by this device + driver. Default value is 0x7f (use all channels). + +- 'pcie_mrrs' - override value for PCIe Maximum Read Request Size (MRRS). + This parameter gives an ability to override MRRS value set during PCIe + configuration process. Tsi721 supports read request sizes up to 4096B. + Value for this parameter must be set as defined by PCIe specification: + 0 = 128B, 1 = 256B, 2 = 512B, 3 = 1024B, 4 = 2048B and 5 = 4096B. + Default value is '-1' (= keep platform setting). + +- 'mbox_sel' - RIO messaging MBOX selection mask. This is a bitmask that defines + messaging MBOXes are managed by this device driver. Mask bits 0 - 3 + correspond to MBOX0 - MBOX3. MBOX is under driver's control if the + corresponding bit is set to '1'. Default value is 0x0f (= all). + II. Known problems None. diff --git a/Documentation/scheduler/sched-deadline.txt b/Documentation/scheduler/sched-deadline.txt index e114513a2731..53a2fe1ae8b8 100644 --- a/Documentation/scheduler/sched-deadline.txt +++ b/Documentation/scheduler/sched-deadline.txt @@ -431,7 +431,7 @@ CONTENTS -deadline tasks cannot have an affinity mask smaller that the entire root_domain they are created on. However, affinities can be specified - through the cpuset facility (Documentation/cgroups/cpusets.txt). + through the cpuset facility (Documentation/cgroup-v1/cpusets.txt). 5.1 SCHED_DEADLINE and cpusets HOWTO ------------------------------------ diff --git a/Documentation/scheduler/sched-design-CFS.txt b/Documentation/scheduler/sched-design-CFS.txt index f14f49304222..edd861c94c1b 100644 --- a/Documentation/scheduler/sched-design-CFS.txt +++ b/Documentation/scheduler/sched-design-CFS.txt @@ -215,7 +215,7 @@ SCHED_BATCH) tasks. These options need CONFIG_CGROUPS to be defined, and let the administrator create arbitrary groups of tasks, using the "cgroup" pseudo filesystem. See - Documentation/cgroups/cgroups.txt for more information about this filesystem. + Documentation/cgroup-v1/cgroups.txt for more information about this filesystem. When CONFIG_FAIR_GROUP_SCHED is defined, a "cpu.shares" file is created for each group created using the pseudo filesystem. See example steps below to create diff --git a/Documentation/scheduler/sched-rt-group.txt b/Documentation/scheduler/sched-rt-group.txt index 71b54d549987..a03f0d944fe6 100644 --- a/Documentation/scheduler/sched-rt-group.txt +++ b/Documentation/scheduler/sched-rt-group.txt @@ -133,7 +133,7 @@ This uses the cgroup virtual file system and "<cgroup>/cpu.rt_runtime_us" to control the CPU time reserved for each control group. For more information on working with control groups, you should read -Documentation/cgroups/cgroups.txt as well. +Documentation/cgroup-v1/cgroups.txt as well. Group settings are checked against the following limits in order to keep the configuration schedulable: diff --git a/Documentation/sound/alsa/soc/machine.txt b/Documentation/sound/alsa/soc/machine.txt index 74056dba52be..6bf2d2063b52 100644 --- a/Documentation/sound/alsa/soc/machine.txt +++ b/Documentation/sound/alsa/soc/machine.txt @@ -3,7 +3,7 @@ ASoC Machine Driver The ASoC machine (or board) driver is the code that glues together all the component drivers (e.g. codecs, platforms and DAIs). It also describes the -relationships between each componnent which include audio paths, GPIOs, +relationships between each component which include audio paths, GPIOs, interrupts, clocking, jacks and voltage regulators. The machine driver can contain codec and platform specific code. It registers diff --git a/Documentation/sound/alsa/timestamping.txt b/Documentation/sound/alsa/timestamping.txt index 1b6473f393a8..9d579aefbffd 100644 --- a/Documentation/sound/alsa/timestamping.txt +++ b/Documentation/sound/alsa/timestamping.txt @@ -14,7 +14,7 @@ provides a refined estimate with a delay. event or application query. The difference (tstamp - trigger_tstamp) defines the elapsed time. -The ALSA API provides reports two basic pieces of information, avail +The ALSA API provides two basic pieces of information, avail and delay, which combined with the trigger and current system timestamps allow for applications to keep track of the 'fullness' of the ring buffer and the amount of queued samples. @@ -53,21 +53,21 @@ case): The analog time is taken at the last stage of the playback, as close as possible to the actual transducer -The link time is taken at the output of the SOC/chipset as the samples +The link time is taken at the output of the SoC/chipset as the samples are pushed on a link. The link time can be directly measured if supported in hardware by sample counters or wallclocks (e.g. with HDAudio 24MHz or PTP clock for networked solutions) or indirectly estimated (e.g. with the frame counter in USB). The DMA time is measured using counters - typically the least reliable -of all measurements due to the bursty natured of DMA transfers. +of all measurements due to the bursty nature of DMA transfers. The app time corresponds to the time tracked by an application after writing in the ring buffer. -The application can query what the hardware supports, define which +The application can query the hardware capabilities, define which audio time it wants reported by selecting the relevant settings in -audio_tstamp_config fields, get an estimate of the timestamp +audio_tstamp_config fields, thus get an estimate of the timestamp accuracy. It can also request the delay-to-analog be included in the measurement. Direct access to the link time is very interesting on platforms that provide an embedded DSP; measuring directly the link @@ -169,7 +169,7 @@ playback: systime: 938107562 nsec, audio time 938112708 nsec, systime delta -51 Example 1 shows that the timestamp at the DMA level is close to 1ms ahead of the actual playback time (as a side time this sort of measurement can help define rewind safeguards). Compensating for the -DMA-link delay in example 2 helps remove the hardware buffering abut +DMA-link delay in example 2 helps remove the hardware buffering but the information is still very jittery, with up to one sample of error. In example 3 where the timestamps are measured with the link wallclock, the timestamps show a monotonic behavior and a lower diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt index 33204604de6c..ffab8b5caa60 100644 --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt @@ -764,6 +764,20 @@ send before ratelimiting kicks in. ============================================================== +printk_devkmsg: + +Control the logging to /dev/kmsg from userspace: + +ratelimit: default, ratelimited +on: unlimited logging to /dev/kmsg from userspace +off: logging to /dev/kmsg disabled + +The kernel command line parameter printk.devkmsg= overrides this and is +a one-time setting until next reboot: once set, it cannot be changed by +this sysctl interface anymore. + +============================================================== + randomize_va_space: This option can be used to select the type of process address diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index a4482cce4bae..739db9ab16b2 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -1433,13 +1433,16 @@ KVM_ASSIGN_DEV_IRQ. Partial deassignment of host or guest IRQ is allowed. 4.52 KVM_SET_GSI_ROUTING Capability: KVM_CAP_IRQ_ROUTING -Architectures: x86 s390 +Architectures: x86 s390 arm arm64 Type: vm ioctl Parameters: struct kvm_irq_routing (in) Returns: 0 on success, -1 on error Sets the GSI routing table entries, overwriting any previously set entries. +On arm/arm64, GSI routing has the following limitation: +- GSI routing does not apply to KVM_IRQ_LINE but only to KVM_IRQFD. + struct kvm_irq_routing { __u32 nr; __u32 flags; @@ -1468,7 +1471,13 @@ struct kvm_irq_routing_entry { #define KVM_IRQ_ROUTING_S390_ADAPTER 3 #define KVM_IRQ_ROUTING_HV_SINT 4 -No flags are specified so far, the corresponding field must be set to zero. +flags: +- KVM_MSI_VALID_DEVID: used along with KVM_IRQ_ROUTING_MSI routing entry + type, specifies that the devid field contains a valid value. The per-VM + KVM_CAP_MSI_DEVID capability advertises the requirement to provide + the device ID. If this capability is not available, userspace should + never set the KVM_MSI_VALID_DEVID flag as the ioctl might fail. +- zero otherwise struct kvm_irq_routing_irqchip { __u32 irqchip; @@ -1479,9 +1488,21 @@ struct kvm_irq_routing_msi { __u32 address_lo; __u32 address_hi; __u32 data; - __u32 pad; + union { + __u32 pad; + __u32 devid; + }; }; +If KVM_MSI_VALID_DEVID is set, devid contains a unique device identifier +for the device that wrote the MSI message. For PCI, this is usually a +BFD identifier in the lower 16 bits. + +On x86, address_hi is ignored unless the KVM_X2APIC_API_USE_32BIT_IDS +feature of KVM_CAP_X2APIC_API capability is enabled. If it is enabled, +address_hi bits 31-8 provide bits 31-8 of the destination id. Bits 7-0 of +address_hi must be zero. + struct kvm_irq_routing_s390_adapter { __u64 ind_addr; __u64 summary_addr; @@ -1583,6 +1604,17 @@ struct kvm_lapic_state { Reads the Local APIC registers and copies them into the input argument. The data format and layout are the same as documented in the architecture manual. +If KVM_X2APIC_API_USE_32BIT_IDS feature of KVM_CAP_X2APIC_API is +enabled, then the format of APIC_ID register depends on the APIC mode +(reported by MSR_IA32_APICBASE) of its VCPU. x2APIC stores APIC ID in +the APIC_ID register (bytes 32-35). xAPIC only allows an 8-bit APIC ID +which is stored in bits 31-24 of the APIC register, or equivalently in +byte 35 of struct kvm_lapic_state's regs field. KVM_GET_LAPIC must then +be called after MSR_IA32_APICBASE has been set with KVM_SET_MSR. + +If KVM_X2APIC_API_USE_32BIT_IDS feature is disabled, struct kvm_lapic_state +always uses xAPIC format. + 4.58 KVM_SET_LAPIC @@ -1600,6 +1632,10 @@ struct kvm_lapic_state { Copies the input argument into the Local APIC registers. The data format and layout are the same as documented in the architecture manual. +The format of the APIC ID register (bytes 32-35 of struct kvm_lapic_state's +regs field) depends on the state of the KVM_CAP_X2APIC_API capability. +See the note in KVM_GET_LAPIC. + 4.59 KVM_IOEVENTFD @@ -2032,6 +2068,12 @@ registers, find a list below: MIPS | KVM_REG_MIPS_CP0_CONFIG5 | 32 MIPS | KVM_REG_MIPS_CP0_CONFIG7 | 32 MIPS | KVM_REG_MIPS_CP0_ERROREPC | 64 + MIPS | KVM_REG_MIPS_CP0_KSCRATCH1 | 64 + MIPS | KVM_REG_MIPS_CP0_KSCRATCH2 | 64 + MIPS | KVM_REG_MIPS_CP0_KSCRATCH3 | 64 + MIPS | KVM_REG_MIPS_CP0_KSCRATCH4 | 64 + MIPS | KVM_REG_MIPS_CP0_KSCRATCH5 | 64 + MIPS | KVM_REG_MIPS_CP0_KSCRATCH6 | 64 MIPS | KVM_REG_MIPS_COUNT_CTL | 64 MIPS | KVM_REG_MIPS_COUNT_RESUME | 64 MIPS | KVM_REG_MIPS_COUNT_HZ | 64 @@ -2156,7 +2198,7 @@ after pausing the vcpu, but before it is resumed. 4.71 KVM_SIGNAL_MSI Capability: KVM_CAP_SIGNAL_MSI -Architectures: x86 +Architectures: x86 arm64 Type: vm ioctl Parameters: struct kvm_msi (in) Returns: >0 on delivery, 0 if guest blocked the MSI, and -1 on error @@ -2169,10 +2211,23 @@ struct kvm_msi { __u32 address_hi; __u32 data; __u32 flags; - __u8 pad[16]; + __u32 devid; + __u8 pad[12]; }; -No flags are defined so far. The corresponding field must be 0. +flags: KVM_MSI_VALID_DEVID: devid contains a valid value. The per-VM + KVM_CAP_MSI_DEVID capability advertises the requirement to provide + the device ID. If this capability is not available, userspace + should never set the KVM_MSI_VALID_DEVID flag as the ioctl might fail. + +If KVM_MSI_VALID_DEVID is set, devid contains a unique device identifier +for the device that wrote the MSI message. For PCI, this is usually a +BFD identifier in the lower 16 bits. + +On x86, address_hi is ignored unless the KVM_X2APIC_API_USE_32BIT_IDS +feature of KVM_CAP_X2APIC_API capability is enabled. If it is enabled, +address_hi bits 31-8 provide bits 31-8 of the destination id. Bits 7-0 of +address_hi must be zero. 4.71 KVM_CREATE_PIT2 @@ -2345,9 +2400,13 @@ Note that closing the resamplefd is not sufficient to disable the irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment and need not be specified with KVM_IRQFD_FLAG_DEASSIGN. -On ARM/ARM64, the gsi field in the kvm_irqfd struct specifies the Shared -Peripheral Interrupt (SPI) index, such that the GIC interrupt ID is -given by gsi + 32. +On arm/arm64, gsi routing being supported, the following can happen: +- in case no routing entry is associated to this gsi, injection fails +- in case the gsi is associated to an irqchip routing entry, + irqchip.pin + 32 corresponds to the injected SPI ID. +- in case the gsi is associated to an MSI routing entry, the MSI + message and device ID are translated into an LPI (support restricted + to GICv3 ITS in-kernel emulation). 4.76 KVM_PPC_ALLOCATE_HTAB @@ -2520,6 +2579,7 @@ Parameters: struct kvm_device_attr Returns: 0 on success, -1 on error Errors: ENXIO: The group or attribute is unknown/unsupported for this device + or hardware support is missing. EPERM: The attribute cannot (currently) be accessed this way (e.g. read-only attribute, or attribute that only makes sense when the device is in a different state) @@ -2547,6 +2607,7 @@ Parameters: struct kvm_device_attr Returns: 0 on success, -1 on error Errors: ENXIO: The group or attribute is unknown/unsupported for this device + or hardware support is missing. Tests whether a device supports a particular attribute. A successful return indicates the attribute is implemented. It does not necessarily @@ -3803,6 +3864,42 @@ Allows use of runtime-instrumentation introduced with zEC12 processor. Will return -EINVAL if the machine does not support runtime-instrumentation. Will return -EBUSY if a VCPU has already been created. +7.7 KVM_CAP_X2APIC_API + +Architectures: x86 +Parameters: args[0] - features that should be enabled +Returns: 0 on success, -EINVAL when args[0] contains invalid features + +Valid feature flags in args[0] are + +#define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0) +#define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1) + +Enabling KVM_X2APIC_API_USE_32BIT_IDS changes the behavior of +KVM_SET_GSI_ROUTING, KVM_SIGNAL_MSI, KVM_SET_LAPIC, and KVM_GET_LAPIC, +allowing the use of 32-bit APIC IDs. See KVM_CAP_X2APIC_API in their +respective sections. + +KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK must be enabled for x2APIC to work +in logical mode or with more than 255 VCPUs. Otherwise, KVM treats 0xff +as a broadcast even in x2APIC mode in order to support physical x2APIC +without interrupt remapping. This is undesirable in logical mode, +where 0xff represents CPUs 0-7 in cluster 0. + +7.8 KVM_CAP_S390_USER_INSTR0 + +Architectures: s390 +Parameters: none + +With this capability enabled, all illegal instructions 0x0000 (2 bytes) will +be intercepted and forwarded to user space. User space can use this +mechanism e.g. to realize 2-byte software breakpoints. The kernel will +not inject an operating exception for these instructions, user space has +to take care of that. + +This capability can be enabled dynamically even if VCPUs were already +created and are running. + 8. Other capabilities. ---------------------- diff --git a/Documentation/virtual/kvm/devices/arm-vgic.txt b/Documentation/virtual/kvm/devices/arm-vgic.txt index 59541d49e15c..89182f80cc7f 100644 --- a/Documentation/virtual/kvm/devices/arm-vgic.txt +++ b/Documentation/virtual/kvm/devices/arm-vgic.txt @@ -4,16 +4,22 @@ ARM Virtual Generic Interrupt Controller (VGIC) Device types supported: KVM_DEV_TYPE_ARM_VGIC_V2 ARM Generic Interrupt Controller v2.0 KVM_DEV_TYPE_ARM_VGIC_V3 ARM Generic Interrupt Controller v3.0 + KVM_DEV_TYPE_ARM_VGIC_ITS ARM Interrupt Translation Service Controller -Only one VGIC instance may be instantiated through either this API or the -legacy KVM_CREATE_IRQCHIP api. The created VGIC will act as the VM interrupt -controller, requiring emulated user-space devices to inject interrupts to the -VGIC instead of directly to CPUs. +Only one VGIC instance of the V2/V3 types above may be instantiated through +either this API or the legacy KVM_CREATE_IRQCHIP api. The created VGIC will +act as the VM interrupt controller, requiring emulated user-space devices to +inject interrupts to the VGIC instead of directly to CPUs. Creating a guest GICv3 device requires a host GICv3 as well. GICv3 implementations with hardware compatibility support allow a guest GICv2 as well. +Creating a virtual ITS controller requires a host GICv3 (but does not depend +on having physical ITS controllers). +There can be multiple ITS controllers per guest, each of them has to have +a separate, non-overlapping MMIO region. + Groups: KVM_DEV_ARM_VGIC_GRP_ADDR Attributes: @@ -39,6 +45,13 @@ Groups: Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. This address needs to be 64K aligned. + KVM_VGIC_V3_ADDR_TYPE_ITS (rw, 64-bit) + Base address in the guest physical address space of the GICv3 ITS + control register frame. The ITS allows MSI(-X) interrupts to be + injected into guests. This extension is optional. If the kernel + does not support the ITS, the call returns -ENODEV. + Only valid for KVM_DEV_TYPE_ARM_VGIC_ITS. + This address needs to be 64K aligned and the region covers 128K. KVM_DEV_ARM_VGIC_GRP_DIST_REGS Attributes: @@ -109,8 +122,8 @@ Groups: KVM_DEV_ARM_VGIC_GRP_CTRL Attributes: KVM_DEV_ARM_VGIC_CTRL_INIT - request the initialization of the VGIC, no additional parameter in - kvm_device_attr.addr. + request the initialization of the VGIC or ITS, no additional parameter + in kvm_device_attr.addr. Errors: -ENXIO: VGIC not properly configured as required prior to calling this attribute diff --git a/Documentation/virtual/kvm/devices/vm.txt b/Documentation/virtual/kvm/devices/vm.txt index a9ea8774a45f..b6cda49f2ba4 100644 --- a/Documentation/virtual/kvm/devices/vm.txt +++ b/Documentation/virtual/kvm/devices/vm.txt @@ -20,7 +20,8 @@ Enables Collaborative Memory Management Assist (CMMA) for the virtual machine. 1.2. ATTRIBUTE: KVM_S390_VM_MEM_CLR_CMMA Parameters: none -Returns: 0 +Returns: -EINVAL if CMMA was not enabled + 0 otherwise Clear the CMMA status for all guest pages, so any pages the guest marked as unused are again used any may not be reclaimed by the host. @@ -85,6 +86,90 @@ Returns: -EBUSY in case 1 or more vcpus are already activated (only in write -ENOMEM if not enough memory is available to process the ioctl 0 in case of success +2.3. ATTRIBUTE: KVM_S390_VM_CPU_MACHINE_FEAT (r/o) + +Allows user space to retrieve available cpu features. A feature is available if +provided by the hardware and supported by kvm. In theory, cpu features could +even be completely emulated by kvm. + +struct kvm_s390_vm_cpu_feat { + __u64 feat[16]; # Bitmap (1 = feature available), MSB 0 bit numbering +}; + +Parameters: address of a buffer to load the feature list from. +Returns: -EFAULT if the given address is not accessible from kernel space. + 0 in case of success. + +2.4. ATTRIBUTE: KVM_S390_VM_CPU_PROCESSOR_FEAT (r/w) + +Allows user space to retrieve or change enabled cpu features for all VCPUs of a +VM. Features that are not available cannot be enabled. + +See 2.3. for a description of the parameter struct. + +Parameters: address of a buffer to store/load the feature list from. +Returns: -EFAULT if the given address is not accessible from kernel space. + -EINVAL if a cpu feature that is not available is to be enabled. + -EBUSY if at least one VCPU has already been defined. + 0 in case of success. + +2.5. ATTRIBUTE: KVM_S390_VM_CPU_MACHINE_SUBFUNC (r/o) + +Allows user space to retrieve available cpu subfunctions without any filtering +done by a set IBC. These subfunctions are indicated to the guest VCPU via +query or "test bit" subfunctions and used e.g. by cpacf functions, plo and ptff. + +A subfunction block is only valid if KVM_S390_VM_CPU_MACHINE contains the +STFL(E) bit introducing the affected instruction. If the affected instruction +indicates subfunctions via a "query subfunction", the response block is +contained in the returned struct. If the affected instruction +indicates subfunctions via a "test bit" mechanism, the subfunction codes are +contained in the returned struct in MSB 0 bit numbering. + +struct kvm_s390_vm_cpu_subfunc { + u8 plo[32]; # always valid (ESA/390 feature) + u8 ptff[16]; # valid with TOD-clock steering + u8 kmac[16]; # valid with Message-Security-Assist + u8 kmc[16]; # valid with Message-Security-Assist + u8 km[16]; # valid with Message-Security-Assist + u8 kimd[16]; # valid with Message-Security-Assist + u8 klmd[16]; # valid with Message-Security-Assist + u8 pckmo[16]; # valid with Message-Security-Assist-Extension 3 + u8 kmctr[16]; # valid with Message-Security-Assist-Extension 4 + u8 kmf[16]; # valid with Message-Security-Assist-Extension 4 + u8 kmo[16]; # valid with Message-Security-Assist-Extension 4 + u8 pcc[16]; # valid with Message-Security-Assist-Extension 4 + u8 ppno[16]; # valid with Message-Security-Assist-Extension 5 + u8 reserved[1824]; # reserved for future instructions +}; + +Parameters: address of a buffer to load the subfunction blocks from. +Returns: -EFAULT if the given address is not accessible from kernel space. + 0 in case of success. + +2.6. ATTRIBUTE: KVM_S390_VM_CPU_PROCESSOR_SUBFUNC (r/w) + +Allows user space to retrieve or change cpu subfunctions to be indicated for +all VCPUs of a VM. This attribute will only be available if kernel and +hardware support are in place. + +The kernel uses the configured subfunction blocks for indication to +the guest. A subfunction block will only be used if the associated STFL(E) bit +has not been disabled by user space (so the instruction to be queried is +actually available for the guest). + +As long as no data has been written, a read will fail. The IBC will be used +to determine available subfunctions in this case, this will guarantee backward +compatibility. + +See 2.5. for a description of the parameter struct. + +Parameters: address of a buffer to store/load the subfunction blocks from. +Returns: -EFAULT if the given address is not accessible from kernel space. + -EINVAL when reading, if there was no write yet. + -EBUSY if at least one VCPU has already been defined. + 0 in case of success. + 3. GROUP: KVM_S390_VM_TOD Architectures: s390 diff --git a/Documentation/virtual/kvm/locking.txt b/Documentation/virtual/kvm/locking.txt index 19f94a6b9bb0..f2491a8c68b4 100644 --- a/Documentation/virtual/kvm/locking.txt +++ b/Documentation/virtual/kvm/locking.txt @@ -89,7 +89,7 @@ In mmu_spte_clear_track_bits(): old_spte = *spte; /* 'if' condition is satisfied. */ - if (old_spte.Accssed == 1 && + if (old_spte.Accessed == 1 && old_spte.W == 0) spte = 0ull; on fast page fault path: @@ -102,7 +102,7 @@ In mmu_spte_clear_track_bits(): old_spte = xchg(spte, 0ull) - if (old_spte.Accssed == 1) + if (old_spte.Accessed == 1) kvm_set_pfn_accessed(spte.pfn); if (old_spte.Dirty == 1) kvm_set_pfn_dirty(spte.pfn); diff --git a/Documentation/vm/numa b/Documentation/vm/numa index ade01274212d..e0b58c0e6b49 100644 --- a/Documentation/vm/numa +++ b/Documentation/vm/numa @@ -63,7 +63,7 @@ nodes. Each emulated node will manage a fraction of the underlying cells' physical memory. NUMA emluation is useful for testing NUMA kernel and application features on non-NUMA platforms, and as a sort of memory resource management mechanism when used together with cpusets. -[see Documentation/cgroups/cpusets.txt] +[see Documentation/cgroup-v1/cpusets.txt] For each node with memory, Linux constructs an independent memory management subsystem, complete with its own free page lists, in-use page lists, usage @@ -113,7 +113,7 @@ allocation behavior using Linux NUMA memory policy. System administrators can restrict the CPUs and nodes' memories that a non- privileged user can specify in the scheduling or NUMA commands and functions -using control groups and CPUsets. [see Documentation/cgroups/cpusets.txt] +using control groups and CPUsets. [see Documentation/cgroup-v1/cpusets.txt] On architectures that do not hide memoryless nodes, Linux will include only zones [nodes] with memory in the zonelists. This means that for a memoryless diff --git a/Documentation/vm/numa_memory_policy.txt b/Documentation/vm/numa_memory_policy.txt index badb0507608f..622b927816e7 100644 --- a/Documentation/vm/numa_memory_policy.txt +++ b/Documentation/vm/numa_memory_policy.txt @@ -9,7 +9,7 @@ document attempts to describe the concepts and APIs of the 2.6 memory policy support. Memory policies should not be confused with cpusets -(Documentation/cgroups/cpusets.txt) +(Documentation/cgroup-v1/cpusets.txt) which is an administrative mechanism for restricting the nodes from which memory may be allocated by a set of processes. Memory policies are a programming interface that a NUMA-aware application can take advantage of. When diff --git a/Documentation/vm/page_migration b/Documentation/vm/page_migration index 94bd9c11c4e0..0478ae2ad44a 100644 --- a/Documentation/vm/page_migration +++ b/Documentation/vm/page_migration @@ -38,7 +38,7 @@ locations. Larger installations usually partition the system using cpusets into sections of nodes. Paul Jackson has equipped cpusets with the ability to move pages when a task is moved to another cpuset (See -Documentation/cgroups/cpusets.txt). +Documentation/cgroup-v1/cpusets.txt). Cpusets allows the automation of process locality. If a task is moved to a new cpuset then also all its pages are moved with it so that the performance of the process does not sink dramatically. Also the pages diff --git a/Documentation/vm/unevictable-lru.txt b/Documentation/vm/unevictable-lru.txt index 0026a8d33fc0..e14718572476 100644 --- a/Documentation/vm/unevictable-lru.txt +++ b/Documentation/vm/unevictable-lru.txt @@ -122,7 +122,7 @@ MEMORY CONTROL GROUP INTERACTION -------------------------------- The unevictable LRU facility interacts with the memory control group [aka -memory controller; see Documentation/cgroups/memory.txt] by extending the +memory controller; see Documentation/cgroup-v1/memory.txt] by extending the lru_list enum. The memory controller data structure automatically gets a per-zone unevictable diff --git a/Documentation/watchdog/hpwdt.txt b/Documentation/watchdog/hpwdt.txt index a40398cce9d1..7a9f635d0258 100644 --- a/Documentation/watchdog/hpwdt.txt +++ b/Documentation/watchdog/hpwdt.txt @@ -1,9 +1,9 @@ -Last reviewed: 04/04/2016 +Last reviewed: 05/20/2016 HPE iLO NMI Watchdog Driver NMI sourcing for iLO based ProLiant Servers Documentation and Driver by - Thomas Mingarelli <thomas.mingarelli@hpe.com> + Thomas Mingarelli The HPE iLO NMI Watchdog driver is a kernel module that provides basic watchdog functionality and the added benefit of NMI sourcing. Both the @@ -95,4 +95,3 @@ Last reviewed: 04/04/2016 -- Tom Mingarelli - (thomas.mingarelli@hpe.com) diff --git a/Documentation/watchdog/src/watchdog-test.c b/Documentation/watchdog/src/watchdog-test.c index fcdde8fc98be..6983d05097e2 100644 --- a/Documentation/watchdog/src/watchdog-test.c +++ b/Documentation/watchdog/src/watchdog-test.c @@ -2,6 +2,7 @@ * Watchdog Driver Test Program */ +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -13,6 +14,7 @@ #include <linux/watchdog.h> int fd; +const char v = 'V'; /* * This function simply sends an IOCTL to the driver, which in turn ticks @@ -23,6 +25,7 @@ static void keep_alive(void) { int dummy; + printf("."); ioctl(fd, WDIOC_KEEPALIVE, &dummy); } @@ -33,8 +36,13 @@ static void keep_alive(void) static void term(int sig) { + int ret = write(fd, &v, 1); + close(fd); - fprintf(stderr, "Stopping watchdog ticks...\n"); + if (ret < 0) + printf("\nStopping watchdog ticks failed (%d)...\n", errno); + else + printf("\nStopping watchdog ticks...\n"); exit(0); } @@ -42,12 +50,14 @@ int main(int argc, char *argv[]) { int flags; unsigned int ping_rate = 1; + int ret; + + setbuf(stdout, NULL); fd = open("/dev/watchdog", O_WRONLY); if (fd == -1) { - fprintf(stderr, "Watchdog device not enabled.\n"); - fflush(stderr); + printf("Watchdog device not enabled.\n"); exit(-1); } @@ -55,36 +65,30 @@ int main(int argc, char *argv[]) if (!strncasecmp(argv[1], "-d", 2)) { flags = WDIOS_DISABLECARD; ioctl(fd, WDIOC_SETOPTIONS, &flags); - fprintf(stderr, "Watchdog card disabled.\n"); - fflush(stderr); + printf("Watchdog card disabled.\n"); goto end; } else if (!strncasecmp(argv[1], "-e", 2)) { flags = WDIOS_ENABLECARD; ioctl(fd, WDIOC_SETOPTIONS, &flags); - fprintf(stderr, "Watchdog card enabled.\n"); - fflush(stderr); + printf("Watchdog card enabled.\n"); goto end; } else if (!strncasecmp(argv[1], "-t", 2) && argv[2]) { flags = atoi(argv[2]); ioctl(fd, WDIOC_SETTIMEOUT, &flags); - fprintf(stderr, "Watchdog timeout set to %u seconds.\n", flags); - fflush(stderr); + printf("Watchdog timeout set to %u seconds.\n", flags); goto end; } else if (!strncasecmp(argv[1], "-p", 2) && argv[2]) { ping_rate = strtoul(argv[2], NULL, 0); - fprintf(stderr, "Watchdog ping rate set to %u seconds.\n", ping_rate); - fflush(stderr); + printf("Watchdog ping rate set to %u seconds.\n", ping_rate); } else { - fprintf(stderr, "-d to disable, -e to enable, -t <n> to set " \ + printf("-d to disable, -e to enable, -t <n> to set " \ "the timeout,\n-p <n> to set the ping rate, and \n"); - fprintf(stderr, "run by itself to tick the card.\n"); - fflush(stderr); + printf("run by itself to tick the card.\n"); goto end; } } - fprintf(stderr, "Watchdog Ticking Away!\n"); - fflush(stderr); + printf("Watchdog Ticking Away!\n"); signal(SIGINT, term); @@ -93,6 +97,9 @@ int main(int argc, char *argv[]) sleep(ping_rate); } end: + ret = write(fd, &v, 1); + if (ret < 0) + printf("Stopping watchdog ticks failed (%d)...\n", errno); close(fd); return 0; } diff --git a/Documentation/watchdog/watchdog-kernel-api.txt b/Documentation/watchdog/watchdog-kernel-api.txt index 917eeeabfa5e..7f31125c123e 100644 --- a/Documentation/watchdog/watchdog-kernel-api.txt +++ b/Documentation/watchdog/watchdog-kernel-api.txt @@ -82,8 +82,9 @@ It contains following fields: * max_timeout: the watchdog timer's maximum timeout value (in seconds), as seen from userspace. If set, the maximum configurable value for 'timeout'. Not used if max_hw_heartbeat_ms is non-zero. -* min_hw_heartbeat_ms: Minimum time between heartbeats sent to the chip, - in milli-seconds. +* min_hw_heartbeat_ms: Hardware limit for minimum time between heartbeats, + in milli-seconds. This value is normally 0; it should only be provided + if the hardware can not tolerate lower intervals between heartbeats. * max_hw_heartbeat_ms: Maximum hardware heartbeat, in milli-seconds. If set, the infrastructure will send heartbeats to the watchdog driver if 'timeout' is larger than max_hw_heartbeat_ms, unless WDOG_ACTIVE @@ -166,6 +167,10 @@ they are supported. These optional routines/operations are: info structure). * status: this routine checks the status of the watchdog timer device. The status of the device is reported with watchdog WDIOF_* status flags/bits. + WDIOF_MAGICCLOSE and WDIOF_KEEPALIVEPING are reported by the watchdog core; + it is not necessary to report those bits from the driver. Also, if no status + function is provided by the driver, the watchdog core reports the status bits + provided in the bootstatus variable of struct watchdog_device. * set_timeout: this routine checks and changes the timeout of the watchdog timer device. It returns 0 on success, -EINVAL for "parameter out of range" and -EIO for "could not write value to the watchdog". On success this diff --git a/Documentation/x86/x86_64/fake-numa-for-cpusets b/Documentation/x86/x86_64/fake-numa-for-cpusets index 0f11d9becb0b..4b09f18831f8 100644 --- a/Documentation/x86/x86_64/fake-numa-for-cpusets +++ b/Documentation/x86/x86_64/fake-numa-for-cpusets @@ -8,7 +8,7 @@ assign them to cpusets and their attached tasks. This is a way of limiting the amount of system memory that are available to a certain class of tasks. For more information on the features of cpusets, see -Documentation/cgroups/cpusets.txt. +Documentation/cgroup-v1/cpusets.txt. There are a number of different configurations you can use for your needs. For more information on the numa=fake command line option and its various ways of configuring fake nodes, see Documentation/x86/x86_64/boot-options.txt. @@ -33,7 +33,7 @@ A machine may be split as follows with "numa=fake=4*512," as reported by dmesg: On node 3 totalpages: 131072 Now following the instructions for mounting the cpusets filesystem from -Documentation/cgroups/cpusets.txt, you can assign fake nodes (i.e. contiguous memory +Documentation/cgroup-v1/cpusets.txt, you can assign fake nodes (i.e. contiguous memory address spaces) to individual cpusets: [root@xroads /]# mkdir exampleset |