Commit 96a6de1a authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'media/v5.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media updates from Mauro Carvalho Chehab:

 - remove sensor drivers that got converted from soc_camera

 - remaining soc_camera drivers got moved to staging

 - some documentation cleanups and improvements

 - the imx staging driver now supports imx7

 - the ov9640, mt9m001 and mt9m111 got converted from soc_camera

 - the vim2m driver now does what a m2m convert driver expects to do

 - epoll() fixes on media subsystems

 - several drivers fixes, typos, cleanups and improvements

* tag 'media/v5.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (346 commits)
  media: dvb/earth-pt1: fix wrong initialization for demod blocks
  media: vim2m: Address some coding style issues
  media: vim2m: don't use BUG()
  media: vim2m: speedup passthrough copy
  media: vim2m: add an horizontal scaler
  media: vim2m: don't accept YUYV anymore as output format
  media: vim2m: add vertical linear scaler
  media: vim2m: better handle cap/out buffers with different sizes
  media: vim2m: use different framesizes for bayer formats
  media: vim2m: add support for VIDIOC_ENUM_FRAMESIZES
  media: vim2m: ensure that width is multiple of two
  media: vim2m: improve debug messages
  media: vim2m: add bayer capture formats
  media: a few more typos at staging, pci, platform, radio and usb
  media: Documentation: fix several typos
  media: staging: fix several typos
  media: include: fix several typos
  media: common: fix several typos
  media: v4l2-core: fix several typos
  media: usb: fix several typos
  ...
parents 36011ddc 15d90a6a
......@@ -48,7 +48,16 @@ are numbered as follows.
TXA source 10
TXB source 11
The digital output port nodes must contain at least one endpoint.
The digital output port nodes, when present, shall contain at least one
endpoint. Each of those endpoints shall contain the data-lanes property as
described in video-interfaces.txt.
Required source endpoint properties:
- data-lanes: an array of physical data lane indexes
The accepted value(s) for this property depends on which of the two
sources are described. For TXA 1, 2 or 4 data lanes can be described
while for TXB only 1 data lane is valid. See video-interfaces.txt
for detailed description.
Ports are optional if they are not connected to anything at the hardware level.
......
* Melexis MLX90640 FIR Sensor
Melexis MLX90640 FIR sensor support which allows recording of thermal data
with 32x24 resolution excluding 2 lines of coefficient data that is used by
userspace to render processed frames.
Required Properties:
- compatible : Must be "melexis,mlx90640"
- reg : i2c address of the device
Example:
i2c0@1c22000 {
...
mlx90640@33 {
compatible = "melexis,mlx90640";
reg = <0x33>;
};
...
};
MT9M001: 1/2-Inch Megapixel Digital Image Sensor
The MT9M001 is an SXGA-format with a 1/2-inch CMOS active-pixel digital
image sensor. It is programmable through I2C interface.
Required Properties:
- compatible: shall be "onnn,mt9m001".
- clocks: reference to the master clock into sensor
Optional Properties:
- reset-gpios: GPIO handle which is connected to the reset pin of the chip.
Active low.
- standby-gpios: GPIO handle which is connected to the standby pin of the chip.
Active high.
The device node must contain one 'port' child node with one 'endpoint' child
sub-node for its digital output video port, in accordance with the video
interface bindings defined in:
Documentation/devicetree/bindings/media/video-interfaces.txt
Example:
&i2c1 {
camera-sensor@5d {
compatible = "onnn,mt9m001";
reg = <0x5d>;
reset-gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
standby-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
clocks = <&camera_clk>;
port {
mt9m001_out: endpoint {
remote-endpoint = <&vcap_in>;
};
};
};
};
......@@ -26,9 +26,9 @@ Example:
&i2c1 {
...
ov5645: ov5645@78 {
ov5645: ov5645@3c {
compatible = "ovti,ov5645";
reg = <0x78>;
reg = <0x3c>;
enable-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio5 20 GPIO_ACTIVE_LOW>;
......@@ -37,7 +37,7 @@ Example:
clocks = <&clks 200>;
clock-names = "xclk";
clock-frequency = <23880000>;
clock-frequency = <24000000>;
vdddo-supply = <&camera_dovdd_1v8>;
vdda-supply = <&camera_avdd_2v8>;
......
Freescale i.MX7 CMOS Sensor Interface
=====================================
csi node
--------
This is device node for the CMOS Sensor Interface (CSI) which enables the chip
to connect directly to external CMOS image sensors.
Required properties:
- compatible : "fsl,imx7-csi";
- reg : base address and length of the register set for the device;
- interrupts : should contain CSI interrupt;
- clocks : list of clock specifiers, see
Documentation/devicetree/bindings/clock/clock-bindings.txt for details;
- clock-names : must contain "axi", "mclk" and "dcic" entries, matching
entries in the clock property;
The device node shall contain one 'port' child node with one child 'endpoint'
node, according to the bindings defined in:
Documentation/devicetree/bindings/media/video-interfaces.txt.
In the following example a remote endpoint is a video multiplexer.
example:
csi: csi@30710000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx7-csi";
reg = <0x30710000 0x10000>;
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX7D_CLK_DUMMY>,
<&clks IMX7D_CSI_MCLK_ROOT_CLK>,
<&clks IMX7D_CLK_DUMMY>;
clock-names = "axi", "mclk", "dcic";
port {
csi_from_csi_mux: endpoint {
remote-endpoint = <&csi_mux_to_csi>;
};
};
};
Freescale i.MX7 Mipi CSI2
=========================
mipi_csi2 node
--------------
This is the device node for the MIPI CSI-2 receiver core in i.MX7 SoC. It is
compatible with previous version of Samsung D-phy.
Required properties:
- compatible : "fsl,imx7-mipi-csi2";
- reg : base address and length of the register set for the device;
- interrupts : should contain MIPI CSIS interrupt;
- clocks : list of clock specifiers, see
Documentation/devicetree/bindings/clock/clock-bindings.txt for details;
- clock-names : must contain "pclk", "wrap" and "phy" entries, matching
entries in the clock property;
- power-domains : a phandle to the power domain, see
Documentation/devicetree/bindings/power/power_domain.txt for details.
- reset-names : should include following entry "mrst";
- resets : a list of phandle, should contain reset entry of
reset-names;
- phy-supply : from the generic phy bindings, a phandle to a regulator that
provides power to MIPI CSIS core;
Optional properties:
- clock-frequency : The IP's main (system bus) clock frequency in Hz, default
value when this property is not specified is 166 MHz;
- fsl,csis-hs-settle : differential receiver (HS-RX) settle time;
The device node should contain two 'port' child nodes with one child 'endpoint'
node, according to the bindings defined in:
Documentation/devicetree/bindings/ media/video-interfaces.txt.
The following are properties specific to those nodes.
port node
---------
- reg : (required) can take the values 0 or 1, where 0 shall be
related to the sink port and port 1 shall be the source
one;
endpoint node
-------------
- data-lanes : (required) an array specifying active physical MIPI-CSI2
data input lanes and their mapping to logical lanes; this
shall only be applied to port 0 (sink port), the array's
content is unused only its length is meaningful,
in this case the maximum length supported is 2;
example:
mipi_csi: mipi-csi@30750000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx7-mipi-csi2";
reg = <0x30750000 0x10000>;
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX7D_IPG_ROOT_CLK>,
<&clks IMX7D_MIPI_CSI_ROOT_CLK>,
<&clks IMX7D_MIPI_DPHY_ROOT_CLK>;
clock-names = "pclk", "wrap", "phy";
clock-frequency = <166000000>;
power-domains = <&pgc_mipi_phy>;
phy-supply = <&reg_1p0d>;
resets = <&src IMX7_RESET_MIPI_PHY_MRST>;
reset-names = "mrst";
fsl,csis-hs-settle = <3>;
port@0 {
reg = <0>;
mipi_from_sensor: endpoint {
remote-endpoint = <&ov2680_to_mipi>;
data-lanes = <1>;
};
};
port@1 {
reg = <1>;
mipi_vc0_to_csi_mux: endpoint {
remote-endpoint = <&csi_mux_from_mipi_vc0>;
};
};
};
......@@ -66,6 +66,15 @@ vcodec_dec: vcodec@16000000 {
"vencpll",
"venc_lt_sel",
"vdec_bus_clk_src";
assigned-clocks = <&topckgen CLK_TOP_VENC_LT_SEL>,
<&topckgen CLK_TOP_CCI400_SEL>,
<&topckgen CLK_TOP_VDEC_SEL>,
<&apmixedsys CLK_APMIXED_VCODECPLL>,
<&apmixedsys CLK_APMIXED_VENCPLL>;
assigned-clock-parents = <&topckgen CLK_TOP_VCODECPLL_370P5>,
<&topckgen CLK_TOP_UNIVPLL_D2>,
<&topckgen CLK_TOP_VCODECPLL>;
assigned-clock-rates = <0>, <0>, <0>, <1482000000>, <800000000>;
};
vcodec_enc: vcodec@18002000 {
......@@ -105,4 +114,8 @@ vcodec_dec: vcodec@16000000 {
"venc_sel",
"venc_lt_sel_src",
"venc_lt_sel";
assigned-clocks = <&topckgen CLK_TOP_VENC_SEL>,
<&topckgen CLK_TOP_VENC_LT_SEL>;
assigned-clock-parents = <&topckgen CLK_TOP_VENCPLL_D2>,
<&topckgen CLK_TOP_UNIVPLL1_D2>;
};
......@@ -7,12 +7,13 @@ family of devices.
Each VIN instance has a single parallel input that supports RGB and YUV video,
with both external synchronization and BT.656 synchronization for the latter.
Depending on the instance the VIN input is connected to external SoC pins, or
on Gen3 platforms to a CSI-2 receiver.
on Gen3 and RZ/G2 platforms to a CSI-2 receiver.
- compatible: Must be one or more of the following
- "renesas,vin-r8a7743" for the R8A7743 device
- "renesas,vin-r8a7744" for the R8A7744 device
- "renesas,vin-r8a7745" for the R8A7745 device
- "renesas,vin-r8a774c0" for the R8A774C0 device
- "renesas,vin-r8a7778" for the R8A7778 device
- "renesas,vin-r8a7779" for the R8A7779 device
- "renesas,vin-r8a7790" for the R8A7790 device
......@@ -61,10 +62,10 @@ The per-board settings Gen2 platforms:
- data-enable-active: polarity of CLKENB signal, see [1] for
description. Default is active high.
The per-board settings Gen3 platforms:
The per-board settings Gen3 and RZ/G2 platforms:
Gen3 platforms can support both a single connected parallel input source
from external SoC pins (port@0) and/or multiple parallel input sources
Gen3 and RZ/G2 platforms can support both a single connected parallel input
source from external SoC pins (port@0) and/or multiple parallel input sources
from local SoC CSI-2 receivers (port@1) depending on SoC.
- renesas,id - ID number of the VIN, VINx in the documentation.
......
......@@ -2,8 +2,9 @@ Renesas R-Car Frame Compression Processor (FCP)
-----------------------------------------------
The FCP is a companion module of video processing modules in the Renesas R-Car
Gen3 SoCs. It provides data compression and decompression, data caching, and
conversion of AXI transactions in order to reduce the memory bandwidth.
Gen3 and RZ/G2 SoCs. It provides data compression and decompression, data
caching, and conversion of AXI transactions in order to reduce the memory
bandwidth.
There are three types of FCP: FCP for Codec (FCPC), FCP for VSP (FCPV) and FCP
for FDP (FCPF). Their configuration and behaviour depend on the module they
......
......@@ -2,12 +2,13 @@ Renesas R-Car MIPI CSI-2
------------------------
The R-Car CSI-2 receiver device provides MIPI CSI-2 capabilities for the
Renesas R-Car family of devices. It is used in conjunction with the
Renesas R-Car and RZ/G2 family of devices. It is used in conjunction with the
R-Car VIN module, which provides the video capture capabilities.
Mandatory properties
--------------------
- compatible: Must be one or more of the following
- "renesas,r8a774c0-csi2" for the R8A774C0 device.
- "renesas,r8a7795-csi2" for the R8A7795 device.
- "renesas,r8a7796-csi2" for the R8A7796 device.
- "renesas,r8a77965-csi2" for the R8A77965 device.
......
......@@ -2,13 +2,13 @@
The VSP is a video processing engine that supports up-/down-scaling, alpha
blending, color space conversion and various other image processing features.
It can be found in the Renesas R-Car second generation SoCs.
It can be found in the Renesas R-Car Gen2, R-Car Gen3, RZ/G1, and RZ/G2 SoCs.
Required properties:
- compatible: Must contain one of the following values
- "renesas,vsp1" for the R-Car Gen2 VSP1
- "renesas,vsp2" for the R-Car Gen3 VSP2
- "renesas,vsp1" for the R-Car Gen2 and RZ/G1 VSP1
- "renesas,vsp2" for the R-Car Gen3 and RZ/G2 VSP2
- reg: Base address and length of the registers block for the VSP.
- interrupts: VSP interrupt specifier.
......
* Silicon Labs FM Radio receiver
The Silicon Labs Si470x is family of FM radio receivers with receive power scan
supporting 76-108 MHz, programmable through an I2C interface.
Some of them includes an RDS encoder.
Required Properties:
- compatible: Should contain "silabs,si470x"
- reg: the I2C address of the device
Optional Properties:
- interrupts : The interrupt number
- reset-gpios: GPIO specifier for the chips reset line
Example:
&i2c2 {
si470x@63 {
compatible = "silabs,si470x";
reg = <0x63>;
interrupt-parent = <&gpj2>;
interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&gpj2 5 GPIO_ACTIVE_HIGH>;
};
};
......@@ -6,8 +6,9 @@ Allwinner V3s SoC features a CSI module(CSI1) with parallel interface.
Required properties:
- compatible: value must be one of:
* "allwinner,sun6i-a31-csi"
* "allwinner,sun8i-h3-csi", "allwinner,sun6i-a31-csi"
* "allwinner,sun8i-h3-csi"
* "allwinner,sun8i-v3s-csi"
* "allwinner,sun50i-a64-csi"
- reg: base address and size of the memory-mapped region.
- interrupts: interrupt associated to this IP
- clocks: phandles to the clocks feeding the CSI
......
......@@ -125,7 +125,7 @@ https://linuxtv.org/wiki/index.php/DVB_USB
2004-12-26
- refactored the dibusb-driver, splitted into separate files
- refactored the dibusb-driver, split into separate files
- i2c-probing enabled
2004-12-06
......
......@@ -12,7 +12,7 @@ Digital TV devices are implemented by several different drivers:
- Frontend drivers that are usually implemented as two separate drivers:
- A tuner driver that implements the logic with commands the part of the
hardware with is reponsible to tune into a digital TV transponder or
hardware with is responsible to tune into a digital TV transponder or
physical channel. The output of a tuner is usually a baseband or
Intermediate Frequency (IF) signal;
......
......@@ -328,7 +328,7 @@ Statistics collect
On almost all frontend hardware, the bit and byte counts are stored by
the hardware after a certain amount of time or after the total bit/block
counter reaches a certain value (usually programable), for example, on
counter reaches a certain value (usually programmable), for example, on
every 1000 ms or after receiving 1,000,000 bits.
So, if you read the registers too soon, you'll end by reading the same
......
......@@ -60,7 +60,7 @@ Drivers initialize entity pads by calling
Drivers register entities with a media device by calling
:c:func:`media_device_register_entity()`
and unregistred by calling
and unregistered by calling
:c:func:`media_device_unregister_entity()`.
Interfaces
......
......@@ -93,7 +93,7 @@ You can iterate over all registered devices as follows:
int err;
/* Find driver 'ivtv' on the PCI bus.
pci_bus_type is a global. For USB busses use usb_bus_type. */
pci_bus_type is a global. For USB buses use usb_bus_type. */
drv = driver_find("ivtv", &pci_bus_type);
/* iterate over all ivtv device instances */
err = driver_for_each_device(drv, NULL, p, callback);
......
......@@ -11,7 +11,7 @@ hardware: most devices have multiple ICs, export multiple device nodes in
Especially the fact that V4L2 drivers have to setup supporting ICs to
do audio/video muxing/encoding/decoding makes it more complex than most.
Usually these ICs are connected to the main bridge driver through one or
more I2C busses, but other busses can also be used. Such devices are
more I2C buses, but other buses can also be used. Such devices are
called 'sub-devices'.
For a long time the framework was limited to the video_device struct for
......
......@@ -23,7 +23,7 @@ device data.
You also need a way to go from the low-level struct to :c:type:`v4l2_subdev`.
For the common i2c_client struct the i2c_set_clientdata() call is used to store
a :c:type:`v4l2_subdev` pointer, for other busses you may have to use other
a :c:type:`v4l2_subdev` pointer, for other buses you may have to use other
methods.
Bridges might also need to store per-subdev private data, such as a pointer to
......@@ -33,7 +33,7 @@ provides host private data for that purpose that can be accessed with
From the bridge driver perspective, you load the sub-device module and somehow
obtain the :c:type:`v4l2_subdev` pointer. For i2c devices this is easy: you call
``i2c_get_clientdata()``. For other busses something similar needs to be done.
``i2c_get_clientdata()``. For other buses something similar needs to be done.
Helper functions exists for sub-devices on an I2C bus that do most of this
tricky work for you.
......
......@@ -60,6 +60,9 @@ ignore symbol RC_PROTO_SHARP
ignore symbol RC_PROTO_XMP
ignore symbol RC_PROTO_CEC
ignore symbol RC_PROTO_IMON
ignore symbol RC_PROTO_RCMM12
ignore symbol RC_PROTO_RCMM24
ignore symbol RC_PROTO_RCMM32
# Undocumented macros
......
......@@ -57,7 +57,7 @@ Description
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 Digial TV system shall be decoded. Dolby
that can’t be handled by the Digital TV system shall be decoded. Dolby
DigitalTM streams are automatically forwarded by the Digital TV subsystem if
the hardware can handle it.
......
......@@ -39,7 +39,7 @@ Description
-----------
CA_SET_DESCR is used for feeding descrambler CA slots with descrambling
keys (refered as control words).
keys (referred as control words).
Return Value
------------
......
......@@ -61,7 +61,7 @@ the device is closed.
Applications call the ``DMX_DQBUF`` ioctl to dequeue a filled
(capturing) buffer from the driver's outgoing queue.
They just set the ``index`` field withe the buffer ID to be queued.
They just set the ``index`` field with the buffer ID to be queued.
When ``DMX_DQBUF`` is called with a pointer to struct :c:type:`dmx_buffer`,
the driver fills the remaining fields or returns an error code.
......
......@@ -44,7 +44,7 @@ with supports all digital TV delivery systems.
struct :c:type:`dvb_frontend_parameters`.
2. Don't use DVB API version 3 calls on hardware with supports
newer standards. Such API provides no suport or a very limited
newer standards. Such API provides no support or a very limited
support to new standards and/or new hardware.
3. Nowadays, most frontends support multiple delivery systems.
......
......@@ -202,7 +202,7 @@ 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
selected 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
......
......@@ -363,7 +363,7 @@ 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.
You may extract a single document from such a collection, and dispbibute
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.
......
......@@ -164,7 +164,7 @@ Types and flags used to represent the media graph elements
* - ``MEDIA_ENT_F_PROC_VIDEO_PIXEL_ENC_CONV``
- Video pixel encoding converter. An entity capable of pixel
enconding conversion must have at least one sink pad and one
encoding 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
......
......@@ -91,7 +91,7 @@ A request must contain at least one buffer, otherwise ``ENOENT`` is returned.
A queued request cannot be modified anymore.
.. caution::
For :ref:`memory-to-memory devices <codec>` you can use requests only for
For :ref:`memory-to-memory devices <mem2mem>` you can use requests only for
output buffers, not for capture buffers. Attempting to add a capture buffer
to a request will result in an ``EACCES`` error.
......@@ -152,7 +152,7 @@ if it had just been allocated.
Example for a Codec Device
--------------------------
For use-cases such as :ref:`codecs <codec>`, the request API can be used
For use-cases such as :ref:`codecs <mem2mem>`, the request API can be used
to associate specific controls to
be applied by the driver for the OUTPUT buffer, allowing user-space
to queue many such buffers in advance. It can also take advantage of requests'
......
......@@ -385,7 +385,7 @@ the remote via /dev/input/event devices.
- ``KEY_CHANNELDOWN``
- Decrease channel sequencially
- Decrease channel sequentially
- CHANNEL - / CHANNEL DOWN / DOWN
......@@ -393,7 +393,7 @@ the remote via /dev/input/event devices.
- ``KEY_CHANNELUP``
- Increase channel sequencially
- Increase channel sequentially
- CHANNEL + / CHANNEL UP / UP
......
......@@ -230,8 +230,7 @@ struct v4l2_buffer
* - struct :c:type:`v4l2_timecode`
- ``timecode``
-
- When ``type`` is ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` and the
``V4L2_BUF_FLAG_TIMECODE`` flag is set in ``flags``, this
- When the ``V4L2_BUF_FLAG_TIMECODE`` flag is set in ``flags``, this
structure contains a frame timecode. In
:c:type:`V4L2_FIELD_ALTERNATE <v4l2_field>` mode the top and
bottom field contain the same timecode. Timecodes are intended to
......@@ -714,10 +713,10 @@ enum v4l2_memory
Timecodes
=========
The struct :c:type:`v4l2_timecode` structure is designed to hold a
:ref:`smpte12m` or similar timecode. (struct
struct :c:type:`timeval` timestamps are stored in struct
:c:type:`v4l2_buffer` field ``timestamp``.)
The :c:type:`v4l2_buffer_timecode` structure is designed to hold a
:ref:`smpte12m` or similar timecode.
(struct :c:type:`timeval` timestamps are stored in the struct
:c:type:`v4l2_buffer` ``timestamp`` field.)
.. c:type:: v4l2_timecode
......
......@@ -46,6 +46,17 @@ applicable to all devices.
dv-timings
control
extended-controls
ext-ctrls-camera
ext-ctrls-flash
ext-ctrls-image-source
ext-ctrls-image-process
ext-ctrls-codec
ext-ctrls-jpeg
ext-ctrls-dv
ext-ctrls-rf-tuner
ext-ctrls-fm-tx
ext-ctrls-fm-rx
ext-ctrls-detect
format
planar-apis
selection-api
......
......@@ -499,7 +499,7 @@ Example: Changing controls
.. [#f1]
The use of ``V4L2_CID_PRIVATE_BASE`` is problematic because different
drivers may use the same ``V4L2_CID_PRIVATE_BASE`` ID for different
controls. This makes it hard to programatically set such controls
controls. This makes it hard to programmatically 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
``V4L2_CID_PRIVATE_BASE`` IDs are mapped to those unique IDs by the
......
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _effect:
************************
Effect Devices Interface
************************
.. note::
This interface has been be suspended from the V4L2 API.
The implementation for such effects should be done
via mem2mem devices.
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 :ref:`read() <func-read>` and
:ref:`write() <func-write>` functions, or through the streaming I/O
mechanism.
[to do]
......@@ -7,37 +7,36 @@
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _codec:
.. _mem2mem:
***************
Codec Interface
***************
********************************
Video Memory-To-Memory Interface
********************************
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
``V4L2_CAP_VIDEO_M2M`` or ``V4L2_CAP_VIDEO_M2M_MPLANE`` capability set).
A V4L2 memory-to-memory device can compress, decompress, transform, or
otherwise convert video data from one format into another format, in memory.
Such memory-to-memory devices set the ``V4L2_CAP_VIDEO_M2M`` or
``V4L2_CAP_VIDEO_M2M_MPLANE`` capability. Examples of memory-to-memory
devices are codecs, scalers, deinterlacers or format converters (i.e.
converting from YUV to RGB).
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
supports both output (sending frames from memory to the hardware)
and capture (receiving the processed frames from the hardware into
memory) stream I/O. An application will have to setup the stream I/O for
both sides and finally call :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>`
for both capture and output to start the codec.
Video compression codecs use the MPEG controls to setup their codec
parameters
.. note::
The MPEG controls actually support many more codecs than
just MPEG. See :ref:`mpeg-controls`.
for both capture and output to start the hardware.
Memory-to-memory devices function 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
own 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.
the hardware 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).
One of the most common memory-to-memory device is the codec. Codecs
are more complicated than most and require additional setup for
their codec parameters. This is done through codec controls.
See :ref:`mpeg-controls`.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _ttx:
******************
Teletext Interface
******************
This interface was aimed at devices receiving and demodulating Teletext
data [:ref:`ets300706`, :ref:`itu653`], evaluating the Teletext
packages and storing formatted pages in cache memory. Such devices are
usually implemented as microcontrollers with serial interface
(I\ :sup:`2`\ C) and could be found on old TV cards, dedicated Teletext
decoding cards and home-brew devices connected to the PC parallel port.
The Teletext API was designed by Martin Buck. It was defined in the
kernel header file ``linux/videotext.h``, the specification is available
from
`ftp://ftp.gwdg.de/pub/linux/misc/videotext/ <ftp://ftp.gwdg.de/pub/linux/misc/videotext/>`__.
(Videotext is the name of the German public television Teletext
service.)
Eventually the Teletext API was integrated into the V4L API with
character device file names ``/dev/vtx0`` to ``/dev/vtx31``, device
major number 81, minor numbers 192 to 223.
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.
Modern devices all use the :ref:`raw <raw-vbi>` or
:ref:`sliced` VBI API.
......@@ -21,11 +21,9 @@ Interfaces
dev-overlay
dev-output
dev-osd
dev-codec
dev-effect
dev-mem2mem
dev-raw-vbi
dev-sliced-vbi
dev-teletext
dev-radio
dev-rds
dev-sdr
......
This diff is collapsed.
This diff is collapsed.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _detect-controls:
************************
Detect Control Reference
************************
The Detect class includes controls for common features of various motion
or object detection capable devices.
.. _detect-control-id:
Detect Control IDs
==================
``V4L2_CID_DETECT_CLASS (class)``
The Detect class descriptor. Calling
:ref:`VIDIOC_QUERYCTRL` for this control will
return a description of this control class.
``V4L2_CID_DETECT_MD_MODE (menu)``
Sets the motion detection mode.
.. tabularcolumns:: |p{7.5cm}|p{10.0cm}|
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_DETECT_MD_MODE_DISABLED``
- Disable motion detection.
* - ``V4L2_DETECT_MD_MODE_GLOBAL``
- Use a single motion detection threshold.
* - ``V4L2_DETECT_MD_MODE_THRESHOLD_GRID``
- The image is divided into a grid, each cell with its own motion
detection threshold. These thresholds are set through the
``V4L2_CID_DETECT_MD_THRESHOLD_GRID`` matrix control.
* - ``V4L2_DETECT_MD_MODE_REGION_GRID``
- 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
``V4L2_CID_DETECT_MD_REGION_GRID`` matrix control.
``V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD (integer)``
Sets the global motion detection threshold to be used with the
``V4L2_DETECT_MD_MODE_GLOBAL`` motion detection mode.
``V4L2_CID_DETECT_MD_THRESHOLD_GRID (__u16 matrix)``
Sets the motion detection thresholds for each cell in the grid. To
be used with the ``V4L2_DETECT_MD_MODE_THRESHOLD_GRID`` motion
detection mode. Matrix element (0, 0) represents the cell at the
top-left of the grid.
``V4L2_CID_DETECT_MD_REGION_GRID (__u8 matrix)``
Sets the motion detection region value for each cell in the grid. To
be used with the ``V4L2_DETECT_MD_MODE_REGION_GRID`` motion
detection mode. Matrix element (0, 0) represents the cell at the
top-left of the grid.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _dv-controls:
*******************************
Digital Video Control Reference
*******************************
The Digital Video control class is intended to control receivers and
transmitters for `VGA <http://en.wikipedia.org/wiki/Vga>`__,
`DVI <http://en.wikipedia.org/wiki/Digital_Visual_Interface>`__
(Digital Visual Interface), HDMI (:ref:`hdmi`) and DisplayPort
(:ref:`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 ``/dev/v4l-subdev*`` device node.
.. note::
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, :ref:`vesaedid`) and HDCP (High-bandwidth Digital
Content Protection System, :ref:`hdcp`) processing, allowing the
device to do the fairly slow EDID/HDCP handling in advance. This allows
for quick switching between connectors.
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.
.. _dv-control-id:
Digital Video Control IDs
=========================
``V4L2_CID_DV_CLASS (class)``
The Digital Video class descriptor.
``V4L2_CID_DV_TX_HOTPLUG (bitmask)``
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.
``V4L2_CID_DV_TX_RXSENSE (bitmask)``
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.
``V4L2_CID_DV_TX_EDID_PRESENT (bitmask)``
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.
``V4L2_CID_DV_TX_MODE``
(enum)
enum v4l2_dv_tx_mode -
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.
``V4L2_CID_DV_TX_RGB_RANGE``
(enum)
enum v4l2_dv_rgb_range -
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. :ref:`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.
``V4L2_CID_DV_TX_IT_CONTENT_TYPE``
(enum)
enum v4l2_dv_it_content_type -
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:
.. tabularcolumns:: |p{7.0cm}|p{10.5cm}|
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_DV_IT_CONTENT_TYPE_GRAPHICS``
- Graphics content. Pixel data should be passed unfiltered and
without analog reconstruction.
* - ``V4L2_DV_IT_CONTENT_TYPE_PHOTO``
- Photo content. The content is derived from digital still pictures.
The content should be passed through with minimal scaling and
picture enhancements.
* - ``V4L2_DV_IT_CONTENT_TYPE_CINEMA``
- Cinema content.
* - ``V4L2_DV_IT_CONTENT_TYPE_GAME``
- Game content. Audio and video latency should be minimized.
* - ``V4L2_DV_IT_CONTENT_TYPE_NO_ITC``
- No IT Content information is available and the ITC bit in the AVI
InfoFrame is set to 0.
``V4L2_CID_DV_RX_POWER_PRESENT (bitmask)``
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 receiver. 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.
``V4L2_CID_DV_RX_RGB_RANGE``
(enum)
enum v4l2_dv_rgb_range -
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. :ref:`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.
``V4L2_CID_DV_RX_IT_CONTENT_TYPE``
(enum)
enum v4l2_dv_it_content_type -
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 ``V4L2_CID_DV_TX_IT_CONTENT_TYPE`` for the
available content types.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _flash-controls:
***********************
Flash Control Reference
***********************
The V4L2 flash controls are intended to provide generic access to flash
controller devices. Flash controller devices are typically used in
digital cameras.
The interface can support both LED and xenon flash devices. As of
writing this, there is no xenon flash driver using this interface.
.. _flash-controls-use-cases:
Supported use cases
===================
Unsynchronised LED flash (software strobe)
------------------------------------------
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.
Example of such device: Nokia N900.
Synchronised LED flash (hardware strobe)
----------------------------------------
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.
The sensor controls the flash duration and timing. This information
typically must be made available to the sensor.
LED flash as torch
------------------
LED flash may be used as torch in conjunction with another use case
involving camera or individually.
.. _flash-control-id:
Flash Control IDs
-----------------
``V4L2_CID_FLASH_CLASS (class)``
The FLASH class descriptor.
``V4L2_CID_FLASH_LED_MODE (menu)``
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.
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_FLASH_LED_MODE_NONE``
- Off.
* - ``V4L2_FLASH_LED_MODE_FLASH``
- Flash mode.
* - ``V4L2_FLASH_LED_MODE_TORCH``
- Torch mode. See V4L2_CID_FLASH_TORCH_INTENSITY.
``V4L2_CID_FLASH_STROBE_SOURCE (menu)``
Defines the source of the flash LED strobe.
.. tabularcolumns:: |p{7.0cm}|p{10.5cm}|
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_FLASH_STROBE_SOURCE_SOFTWARE``
- The flash strobe is triggered by using the
V4L2_CID_FLASH_STROBE control.
* - ``V4L2_FLASH_STROBE_SOURCE_EXTERNAL``
- 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.
``V4L2_CID_FLASH_STROBE (button)``
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.
``V4L2_CID_FLASH_STROBE_STOP (button)``
Stop flash strobe immediately.
``V4L2_CID_FLASH_STROBE_STATUS (boolean)``
Strobe status: whether the flash is strobing at the moment or not.
This is a read-only control.
``V4L2_CID_FLASH_TIMEOUT (integer)``
Hardware timeout for flash. The flash strobe is stopped after this
period of time has passed from the start of the strobe.
``V4L2_CID_FLASH_INTENSITY (integer)``
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.
``V4L2_CID_FLASH_TORCH_INTENSITY (integer)``
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.
``V4L2_CID_FLASH_INDICATOR_INTENSITY (integer)``
Intensity of the indicator LED. The indicator LED may be fully
independent of the flash LED. The unit should be microamps (uA) if
possible.
``V4L2_CID_FLASH_FAULT (bitmask)``
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.
.. tabularcolumns:: |p{8.0cm}|p{9.5cm}|
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_FLASH_FAULT_OVER_VOLTAGE``
- Flash controller voltage to the flash LED has exceeded the limit
specific to the flash controller.
* - ``V4L2_FLASH_FAULT_TIMEOUT``
- 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.
* - ``V4L2_FLASH_FAULT_OVER_TEMPERATURE``
- The flash controller has overheated.
* - ``V4L2_FLASH_FAULT_SHORT_CIRCUIT``
- The short circuit protection of the flash controller has been
triggered.
* - ``V4L2_FLASH_FAULT_OVER_CURRENT``
- Current in the LED power supply has exceeded the limit specific to
the flash controller.
* - ``V4L2_FLASH_FAULT_INDICATOR``
- The flash controller has detected a short or open circuit
condition on the indicator LED.
* - ``V4L2_FLASH_FAULT_UNDER_VOLTAGE``
- Flash controller voltage to the flash LED has been below the
minimum limit specific to the flash controller.
* - ``V4L2_FLASH_FAULT_INPUT_VOLTAGE``
- 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.
* - ``V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE``
- The temperature of the LED has exceeded its allowed upper limit.
``V4L2_CID_FLASH_CHARGE (boolean)``
Enable or disable charging of the xenon flash capacitor.
``V4L2_CID_FLASH_READY (boolean)``
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.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _fm-rx-controls:
*****************************
FM Receiver Control Reference
*****************************
The FM Receiver (FM_RX) class includes controls for common features of
FM Reception capable devices.
.. _fm-rx-control-id:
FM_RX Control IDs
=================
``V4L2_CID_FM_RX_CLASS (class)``
The FM_RX class descriptor. Calling
:ref:`VIDIOC_QUERYCTRL` for this control will
return a description of this control class.
``V4L2_CID_RDS_RECEPTION (boolean)``
Enables/disables RDS reception by the radio tuner
``V4L2_CID_RDS_RX_PTY (integer)``
Gets RDS Programme Type field. This encodes up to 31 pre-defined
programme types.
``V4L2_CID_RDS_RX_PS_NAME (string)``
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
:ref:`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.
``V4L2_CID_RDS_RX_RADIO_TEXT (string)``
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
``V4L2_CID_RDS_RX_PS_NAME``. The encoding for Radio Text strings is
also fully described in Annex E of :ref:`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.
``V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT (boolean)``
If set, then a traffic announcement is in progress.
``V4L2_CID_RDS_RX_TRAFFIC_PROGRAM (boolean)``
If set, then the tuned programme carries traffic announcements.
``V4L2_CID_RDS_RX_MUSIC_SPEECH (boolean)``
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.
``V4L2_CID_TUNE_DEEMPHASIS``
(enum)
enum v4l2_deemphasis -
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:
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_DEEMPHASIS_DISABLED``
- No de-emphasis is applied.
* - ``V4L2_DEEMPHASIS_50_uS``
- A de-emphasis of 50 uS is used.
* - ``V4L2_DEEMPHASIS_75_uS``
- A de-emphasis of 75 uS is used.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _fm-tx-controls:
********************************
FM Transmitter Control Reference
********************************
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.
.. _fm-tx-control-id:
FM_TX Control IDs
=================
``V4L2_CID_FM_TX_CLASS (class)``
The FM_TX class descriptor. Calling
:ref:`VIDIOC_QUERYCTRL` for this control will
return a description of this control class.
``V4L2_CID_RDS_TX_DEVIATION (integer)``
Configures RDS signal frequency deviation level in Hz. The range and
step are driver-specific.
``V4L2_CID_RDS_TX_PI (integer)``
Sets the RDS Programme Identification field for transmission.
``V4L2_CID_RDS_TX_PTY (integer)``
Sets the RDS Programme Type field for transmission. This encodes up
to 31 pre-defined programme types.
``V4L2_CID_RDS_TX_PS_NAME (string)``
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 :ref:`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.
``V4L2_CID_RDS_TX_RADIO_TEXT (string)``
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 ``V4L2_CID_RDS_TX_PS_NAME``.
The encoding for Radio Text strings is also fully described in Annex
E of :ref:`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.
``V4L2_CID_RDS_TX_MONO_STEREO (boolean)``
Sets the Mono/Stereo bit of the Decoder Identification code. If set,
then the audio was recorded as stereo.
``V4L2_CID_RDS_TX_ARTIFICIAL_HEAD (boolean)``
Sets the
`Artificial Head <http://en.wikipedia.org/wiki/Artificial_head>`__
bit of the Decoder Identification code. If set, then the audio was
recorded using an artificial head.
``V4L2_CID_RDS_TX_COMPRESSED (boolean)``
Sets the Compressed bit of the Decoder Identification code. If set,
then the audio is compressed.
``V4L2_CID_RDS_TX_DYNAMIC_PTY (boolean)``
Sets the Dynamic PTY bit of the Decoder Identification code. If set,
then the PTY code is dynamically switched.
``V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT (boolean)``
If set, then a traffic announcement is in progress.
``V4L2_CID_RDS_TX_TRAFFIC_PROGRAM (boolean)``
If set, then the tuned programme carries traffic announcements.
``V4L2_CID_RDS_TX_MUSIC_SPEECH (boolean)``
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.
``V4L2_CID_RDS_TX_ALT_FREQS_ENABLE (boolean)``
If set, then transmit alternate frequencies.
``V4L2_CID_RDS_TX_ALT_FREQS (__u32 array)``
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.
``V4L2_CID_AUDIO_LIMITER_ENABLED (boolean)``
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.
``V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (integer)``
Sets the audio deviation limiter feature release time. Unit is in
useconds. Step and range are driver-specific.
``V4L2_CID_AUDIO_LIMITER_DEVIATION (integer)``
Configures audio frequency deviation level in Hz. The range and step
are driver-specific.
``V4L2_CID_AUDIO_COMPRESSION_ENABLED (boolean)``
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).
``V4L2_CID_AUDIO_COMPRESSION_GAIN (integer)``
Sets the gain for audio compression feature. It is a dB value. The
range and step are driver-specific.
``V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (integer)``
Sets the threshold level for audio compression freature. It is a dB
value. The range and step are driver-specific.
``V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (integer)``
Sets the attack time for audio compression feature. It is a useconds
value. The range and step are driver-specific.
``V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (integer)``
Sets the release time for audio compression feature. It is a
useconds value. The range and step are driver-specific.
``V4L2_CID_PILOT_TONE_ENABLED (boolean)``
Enables or disables the pilot tone generation feature.
``V4L2_CID_PILOT_TONE_DEVIATION (integer)``
Configures pilot tone frequency deviation level. Unit is in Hz. The
range and step are driver-specific.
``V4L2_CID_PILOT_TONE_FREQUENCY (integer)``
Configures pilot tone frequency value. Unit is in Hz. The range and
step are driver-specific.
``V4L2_CID_TUNE_PREEMPHASIS``
(enum)
enum v4l2_preemphasis -
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:
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_PREEMPHASIS_DISABLED``
- No pre-emphasis is applied.
* - ``V4L2_PREEMPHASIS_50_uS``
- A pre-emphasis of 50 uS is used.
* - ``V4L2_PREEMPHASIS_75_uS``
- A pre-emphasis of 75 uS is used.
``V4L2_CID_TUNE_POWER_LEVEL (integer)``
Sets the output power level for signal transmission. Unit is in
dBuV. Range and step are driver-specific.
``V4L2_CID_TUNE_ANTENNA_CAPACITOR (integer)``
This selects the value of antenna tuning capacitor manually or
automatically if set to zero. Unit, range and step are
driver-specific.
For more details about RDS specification, refer to :ref:`iec62106`
document, from CENELEC.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _image-process-controls:
*******************************
Image Process Control Reference
*******************************
The Image Process control class is intended for low-level control of
image processing functions. Unlike ``V4L2_CID_IMAGE_SOURCE_CLASS``, the
controls in this class affect processing the image, and do not control
capturing of it.
.. _image-process-control-id:
Image Process Control IDs
=========================
``V4L2_CID_IMAGE_PROC_CLASS (class)``
The IMAGE_PROC class descriptor.
``V4L2_CID_LINK_FREQ (integer menu)``
Data bus frequency. Together with the media bus pixel code, bus type
(clock cycles per sample), the data bus frequency defines the pixel
rate (``V4L2_CID_PIXEL_RATE``) 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.
``V4L2_CID_PIXEL_RATE (64-bit integer)``
Pixel rate in the source pads of the subdev. This control is
read-only and its unit is pixels / second.
``V4L2_CID_TEST_PATTERN (menu)``
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.
``V4L2_CID_DEINTERLACING_MODE (menu)``
The video deinterlacing mode (such as Bob, Weave, ...). The menu items are
driver specific and are documented in :ref:`v4l-drivers`.
``V4L2_CID_DIGITAL_GAIN (integer)``
Digital gain is the value by which all colour components
are multiplied by. Typically the digital gain applied is the
control value divided by e.g. 0x100, meaning that to get no
digital gain the control value needs to be 0x100. The no-gain
configuration is also typically the default.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _image-source-controls:
******************************
Image Source Control Reference
******************************
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.
.. _image-source-control-id:
Image Source Control IDs
========================
``V4L2_CID_IMAGE_SOURCE_CLASS (class)``
The IMAGE_SOURCE class descriptor.
``V4L2_CID_VBLANK (integer)``
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 ``V4L2_CID_PIXEL_RATE`` control in the
same sub-device.
``V4L2_CID_HBLANK (integer)``
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.
``V4L2_CID_ANALOGUE_GAIN (integer)``
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.
``V4L2_CID_TEST_PATTERN_RED (integer)``
Test pattern red colour component.
``V4L2_CID_TEST_PATTERN_GREENR (integer)``
Test pattern green (next to red) colour component.
``V4L2_CID_TEST_PATTERN_BLUE (integer)``
Test pattern blue colour component.
``V4L2_CID_TEST_PATTERN_GREENB (integer)``
Test pattern green (next to blue) colour component.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _jpeg-controls:
**********************
JPEG Control Reference
**********************
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.
.. _jpeg-control-id:
JPEG Control IDs
================
``V4L2_CID_JPEG_CLASS (class)``
The JPEG class descriptor. Calling
:ref:`VIDIOC_QUERYCTRL` for this control will
return a description of this control class.
``V4L2_CID_JPEG_CHROMA_SUBSAMPLING (menu)``
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 :ref:`itu-t81`, clause A.1.1. for more
details. The ``V4L2_CID_JPEG_CHROMA_SUBSAMPLING`` control determines
how Cb and Cr components are downsampled after converting an input
image from RGB to Y'CbCr color space.
.. tabularcolumns:: |p{7.0cm}|p{10.5cm}|
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_JPEG_CHROMA_SUBSAMPLING_444``
- No chroma subsampling, each pixel has Y, Cr and Cb values.
* - ``V4L2_JPEG_CHROMA_SUBSAMPLING_422``
- Horizontally subsample Cr, Cb components by a factor of 2.
* - ``V4L2_JPEG_CHROMA_SUBSAMPLING_420``
- Subsample Cr, Cb components horizontally and vertically by 2.
* - ``V4L2_JPEG_CHROMA_SUBSAMPLING_411``
- Horizontally subsample Cr, Cb components by a factor of 4.
* - ``V4L2_JPEG_CHROMA_SUBSAMPLING_410``
- Subsample Cr, Cb components horizontally by 4 and vertically by 2.
* - ``V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY``
- Use only luminance component.
``V4L2_CID_JPEG_RESTART_INTERVAL (integer)``
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
``V4L2_CID_JPEG_RESTART_INTERVAL`` control is set to 0, DRI and RSTm
markers will not be inserted.
.. _jpeg-quality-control:
``V4L2_CID_JPEG_COMPRESSION_QUALITY (integer)``
``V4L2_CID_JPEG_COMPRESSION_QUALITY`` 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,
``V4L2_CID_JPEG_COMPRESSION_QUALITY`` control should be set by
driver to 0.
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.
.. _jpeg-active-marker-control:
``V4L2_CID_JPEG_ACTIVE_MARKER (bitmask)``
Specify which JPEG markers are included in compressed stream. This
control is valid only for encoders.
.. flat-table::
:header-rows: 0
:stub-columns: 0
* - ``V4L2_JPEG_ACTIVE_MARKER_APP0``
- Application data segment APP\ :sub:`0`.
* - ``V4L2_JPEG_ACTIVE_MARKER_APP1``
- Application data segment APP\ :sub:`1`.
* - ``V4L2_JPEG_ACTIVE_MARKER_COM``
- Comment segment.
* - ``V4L2_JPEG_ACTIVE_MARKER_DQT``
- Quantization tables segment.
* - ``V4L2_JPEG_ACTIVE_MARKER_DHT``
- Huffman tables segment.
For more details about JPEG specification, refer to :ref:`itu-t81`,
:ref:`jfif`, :ref:`w3c-jpeg-jfif`.
.. 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
.. _rf-tuner-controls:
**************************
RF Tuner Control Reference
**************************
The RF Tuner (RF_TUNER) class includes controls for common features of
devices having RF tuner.
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, while 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.
For more information about RF tuners see
`Tuner (radio) <http://en.wikipedia.org/wiki/Tuner_%28radio%29>`__
and `RF front end <http://en.wikipedia.org/wiki/RF_front_end>`__
from Wikipedia.
.. _rf-tuner-control-id:
RF_TUNER Control IDs
====================
``V4L2_CID_RF_TUNER_CLASS (class)``
The RF_TUNER class descriptor. Calling
:ref:`VIDIOC_QUERYCTRL` for this control will
return a description of this control class.
``V4L2_CID_RF_TUNER_BANDWIDTH_AUTO (boolean)``
Enables/disables tuner radio channel bandwidth configuration. In
automatic mode bandwidth configuration is performed by the driver.
``V4L2_CID_RF_TUNER_BANDWIDTH (integer)``
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.
``V4L2_CID_RF_TUNER_LNA_GAIN_AUTO (boolean)``
Enables/disables LNA automatic gain control (AGC)
``V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO (boolean)``
Enables/disables mixer automatic gain control (AGC)
``V4L2_CID_RF_TUNER_IF_GAIN_AUTO (boolean)``
Enables/disables IF automatic gain control (AGC)
``V4L2_CID_RF_TUNER_RF_GAIN (integer)``
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.
``V4L2_CID_RF_TUNER_LNA_GAIN (integer)``
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 ``V4L2_CID_RF_TUNER_LNA_GAIN_AUTO`` is not set. See
``V4L2_CID_RF_TUNER_RF_GAIN`` to understand how RF gain and LNA gain
differs from the each others. The range and step are
driver-specific.
``V4L2_CID_RF_TUNER_MIXER_GAIN (integer)``
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 ``V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO`` is not set.
The range and step are driver-specific.
``V4L2_CID_RF_TUNER_IF_GAIN (integer)``
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
``V4L2_CID_RF_TUNER_IF_GAIN_AUTO`` is not set. The range and step
are driver-specific.
``V4L2_CID_RF_TUNER_PLL_LOCK (boolean)``
Is synthesizer PLL locked? RF tuner is receiving given frequency
when that control is set. This is a read-only control.
......@@ -19,8 +19,8 @@ These formats are used for the :ref:`metadata` interface only.
.. toctree::
:maxdepth: 1
pixfmt-meta-intel-ipu3
pixfmt-meta-d4xx
pixfmt-meta-intel-ipu3
pixfmt-meta-uvc
pixfmt-meta-vsp1-hgo
pixfmt-meta-vsp1-hgt
......@@ -73,7 +73,7 @@ Compressed Formats
- 'MG2S'
- MPEG-2 parsed slice data, as extracted from the MPEG-2 bitstream.
This format is adapted for stateless video decoders that implement a
MPEG-2 pipeline (using the :ref:`codec` and :ref:`media-request-api`).
MPEG-2 pipeline (using the :ref:`mem2mem` and :ref:`media-request-api`).
Metadata associated with the frame to decode is required to be passed
through the ``V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS`` control and
quantization matrices can optionally be specified through the
......
.. -*- coding: utf-8; mode: rst -*-
.. This file is dual-licensed: you can use it either under the terms
.. of the GPL 2.0 or the GFDL 1.1+ license, at your option. Note that this
.. dual licensing only applies to this file, and not this project as a
.. whole.
..
.. a) This file is free software; you can redistribute it and/or
.. modify it under the terms of the GNU General Public License version
.. 2.0 as published by the Free Software Foundation.
..
.. This file 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 version 2.0 for more details.
..
.. Or, alternatively,
..
.. b) 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 no Invariant Sections, no Front-Cover Texts
.. and no Back-Cover Texts. A copy of the license is included at
.. Documentation/media/uapi/fdl-appendix.rst.
..
.. TODO: replace it to GPL-2.0 OR GFDL-1.1-or-later WITH no-invariant-sections
.. _v4l2-meta-fmt-params:
.. _v4l2-meta-fmt-stat-3a:
......@@ -7,21 +30,22 @@
V4L2_META_FMT_IPU3_PARAMS ('ip3p'), V4L2_META_FMT_IPU3_3A ('ip3s')
******************************************************************
.. c:type:: ipu3_uapi_stats_3a
.. ipu3_uapi_stats_3a
3A statistics
=============
For IPU3 ImgU, the 3A statistics accelerators collect different statistics over
an input bayer frame. Those statistics, defined in data struct :c:type:`ipu3_uapi_stats_3a`,
are obtained from "ipu3-imgu 3a stat" metadata capture video node, which are then
passed to user space for statistics analysis using :c:type:`v4l2_meta_format` interface.
The IPU3 ImgU 3A statistics accelerators collect different statistics over
an input Bayer frame. Those statistics are obtained from the "ipu3-imgu [01] 3a
stat" metadata capture video nodes, using the :c:type:`v4l2_meta_format`
interface. They are formatted as described by the :c:type:`ipu3_uapi_stats_3a`
structure.
The statistics collected are AWB (Auto-white balance) RGBS (Red, Green, Blue and
Saturation measure) cells, AWB filter response, AF (Auto-focus) filter response,
and AE (Auto-exposure) histogram.
struct :c:type:`ipu3_uapi_4a_config` saves configurable parameters for all above.
The struct :c:type:`ipu3_uapi_4a_config` saves all configurable parameters.
.. code-block:: c
......@@ -37,105 +61,14 @@ struct :c:type:`ipu3_uapi_4a_config` saves configurable parameters for all above
struct ipu3_uapi_ff_status stats_3a_status;
};
.. c:type:: ipu3_uapi_params
.. ipu3_uapi_params
Pipeline parameters
===================
IPU3 pipeline has a number of image processing stages, each of which takes a
set of parameters as input. The major stages of pipelines are shown here:
Raw pixels -> Bayer Downscaling -> Optical Black Correction ->
Linearization -> Lens Shading Correction -> White Balance / Exposure /
Focus Apply -> Bayer Noise Reduction -> ANR -> Demosaicing -> Color
Correction Matrix -> Gamma correction -> Color Space Conversion ->
Chroma Down Scaling -> Chromatic Noise Reduction -> Total Color
Correction -> XNR3 -> TNR -> DDR
The table below presents a description of the above algorithms.
======================== =======================================================
Name Description
======================== =======================================================
Optical Black Correction Optical Black Correction block subtracts a pre-defined
value from the respective pixel values to obtain better
image quality.
Defined in :c:type:`ipu3_uapi_obgrid_param`.
Linearization This algo block uses linearization parameters to
address non-linearity sensor effects. The Lookup table
table is defined in
:c:type:`ipu3_uapi_isp_lin_vmem_params`.
SHD Lens shading correction is used to correct spatial
non-uniformity of the pixel response due to optical
lens shading. This is done by applying a different gain
for each pixel. The gain, black level etc are
configured in :c:type:`ipu3_uapi_shd_config_static`.
BNR Bayer noise reduction block removes image noise by
applying a bilateral filter.
See :c:type:`ipu3_uapi_bnr_static_config` for details.
ANR Advanced Noise Reduction is a block based algorithm
that performs noise reduction in the Bayer domain. The
convolution matrix etc can be found in
:c:type:`ipu3_uapi_anr_config`.
Demosaicing Demosaicing converts raw sensor data in Bayer format
into RGB (Red, Green, Blue) presentation. Then add
outputs of estimation of Y channel for following stream
processing by Firmware. The struct is defined as
:c:type:`ipu3_uapi_dm_config`. (TODO)
Color Correction Color Correction algo transforms sensor specific color
space to the standard "sRGB" color space. This is done
by applying 3x3 matrix defined in
:c:type:`ipu3_uapi_ccm_mat_config`.
Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a
basic non-linear tone mapping correction that is
applied per pixel for each pixel component.
CSC Color space conversion transforms each pixel from the
RGB primary presentation to YUV (Y: brightness,
UV: Luminance) presentation. This is done by applying
a 3x3 matrix defined in
:c:type:`ipu3_uapi_csc_mat_config`
CDS Chroma down sampling
After the CSC is performed, the Chroma Down Sampling
is applied for a UV plane down sampling by a factor
of 2 in each direction for YUV 4:2:0 using a 4x2
configurable filter :c:type:`ipu3_uapi_cds_params`.
CHNR Chroma noise reduction
This block processes only the chrominance pixels and
performs noise reduction by cleaning the high
frequency noise.
See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`.
TCC Total color correction as defined in struct
:c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
XNR3 eXtreme Noise Reduction V3 is the third revision of
noise reduction algorithm used to improve image
quality. This removes the low frequency noise in the
captured image. Two related structs are being defined,
:c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory
and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector
memory.
TNR Temporal Noise Reduction block compares successive
frames in time to remove anomalies / noise in pixel
values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and
:c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP
vector and data memory respectively.
======================== =======================================================
A few stages of the pipeline will be executed by firmware running on the ISP
processor, while many others will use a set of fixed hardware blocks also
called accelerator cluster (ACC) to crunch pixel data and produce statistics.
ACC parameters of individual algorithms, as defined by
:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user
space through struct :c:type:`ipu3_uapi_flags` embedded in
:c:type:`ipu3_uapi_params` structure. For parameters that are configured as
not enabled by the user space, the corresponding structs are ignored by the
driver, in which case the existing configuration of the algorithm will be
preserved.
The pipeline parameters are passed to the "ipu3-imgu [01] parameters" metadata
output video nodes, using the :c:type:`v4l2_meta_format` interface. They are
formatted as described by the :c:type:`ipu3_uapi_params` structure.
Both 3A statistics and pipeline parameters described here are closely tied to
the underlying camera sub-system (CSS) APIs. They are usually consumed and
......@@ -143,13 +76,6 @@ produced by dedicated user space libraries that comprise the important tuning
tools, thus freeing the developers from being bothered with the low level
hardware and algorithm details.
It should be noted that IPU3 DMA operations require the addresses of all data
structures (that includes both input and output) to be aligned on 32 byte
boundaries.
The meta data :c:type:`ipu3_uapi_params` will be sent to "ipu3-imgu parameters"
video node in ``V4L2_BUF_TYPE_META_CAPTURE`` format.
.. code-block:: c
struct ipu3_uapi_params {
......
......@@ -75,15 +75,15 @@ Media Bus Pixel Codes
---------------------
The media bus pixel codes describe image formats as flowing over
physical busses (both between separate physical components and inside
physical buses (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.
While there is a relationship between image formats on busses and image
While there is a relationship between image formats on buses 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.
correspondence between them.
Packed RGB Formats
......
......@@ -213,7 +213,7 @@ union holding separate parameters for input and output devices.
.. _parm-caps:
.. flat-table:: Streaming Parameters Capabilites
.. flat-table:: Streaming Parameters Capabilities
:header-rows: 0
:stub-columns: 0
:widths: 3 1 4
......
......@@ -43,10 +43,7 @@ Applications can optionally call the :ref:`VIDIOC_PREPARE_BUF` ioctl to
pass ownership of the buffer to the driver before actually enqueuing it,
using the :ref:`VIDIOC_QBUF <VIDIOC_QBUF>` 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
``V4L2_BUF_FLAG_NO_CACHE_INVALIDATE`` and
``V4L2_BUF_FLAG_NO_CACHE_CLEAN`` flags to skip the respective step.
in advance saves time during the actual I/O.
The struct :c:type:`v4l2_buffer` structure is specified in
:ref:`buffer`.
......
......@@ -123,7 +123,7 @@ then ``EINVAL`` will be returned.
:ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>` or calling :ref:`VIDIOC_REQBUFS`
the check for this will be reset.
For :ref:`memory-to-memory devices <codec>` you can specify the
For :ref:`memory-to-memory devices <mem2mem>` you can specify the
``request_fd`` only for output buffers, not for capture buffers. Attempting
to specify this for a capture buffer will result in an ``EACCES`` error.
......
......@@ -85,7 +85,7 @@ same card listens there is much higher...
For problems with sound: There are a lot of different systems used
for TV sound all over the world. And there are also different chips
which decode the audio signal. Reports about sound problems ("stereo
does'nt work") are pretty useless unless you include some details
doesn't work") are pretty useless unless you include some details
about your hardware and the TV sound scheme used in your country (or
at least the country you are living in).
......@@ -771,7 +771,7 @@ Identifying:
- Lifeview.com.tw states (Feb. 2002):
"The FlyVideo2000 and FlyVideo2000s product name have renamed to FlyVideo98."
Their Bt8x8 cards are listed as discontinued.
- Flyvideo 2000S was probably sold as Flyvideo 3000 in some contries(Europe?).
- Flyvideo 2000S was probably sold as Flyvideo 3000 in some countries(Europe?).
The new Flyvideo 2000/3000 are SAA7130/SAA7134 based.
"Flyvideo II" had been the name for the 848 cards, nowadays (in Germany)
......
This diff is collapsed.
This diff is collapsed.
......@@ -44,6 +44,7 @@ For more details see the file COPYING in the source distribution of Linux.
davinci-vpbe
fimc
imx
imx7
ipu3
ivtv
max2175
......
This diff is collapsed.
......@@ -18,7 +18,7 @@ Global video workflow
---------------------
a) QCI stopped
Initialy, the QCI interface is stopped.
Initially, the QCI interface is stopped.
When a buffer is queued (pxa_videobuf_ops->buf_queue), the QCI starts.
b) QCI started
......
......@@ -123,7 +123,7 @@ The considerations to split the driver in this particular way are as follows:
- representing CSIPHY and CSID modules by a separate sub-device for each module
allows to model the hardware links between these modules;
- representing VFE by a separate sub-devices for each input interface allows
to use the input interfaces concurently and independently as this is
to use the input interfaces concurrently and independently as this is
supported by the hardware;
- representing ISPIF by a number of sub-devices equal to the number of CSID
sub-devices allows to create linear media controller pipelines when using two
......
This diff is collapsed.
......@@ -5,6 +5,7 @@
* Copyright (C) 2008 Magnus Damm
*/
#include <linux/clkdev.h>
#include <linux/dma-mapping.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -105,7 +105,7 @@ void saa7146_buffer_finish(struct saa7146_dev *dev,
}
q->curr->vb.state = state;
v4l2_get_timestamp(&q->curr->vb.ts);
q->curr->vb.ts = ktime_get_ns();
wake_up(&q->curr->vb.done);
q->curr = NULL;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment