Commit ab11ca34 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media updates from Mauro Carvalho Chehab:
 - some V4L2 API updates needed by embedded devices
 - DVB API extensions for ATSC-MH delivery system, used in US for mobile
   TV
 - new tuners for fc0011/0012/0013 and tua9001
 - a new dvb driver for af9033/9035
 - a new ATSC-MH frontend (lg2160)
 - new remote controller keymaps
 - Removal of a few legacy webcam driver that got replaced by gspca on
   several kernel versions ago
 - a new driver for Exynos 4/5 webcams(s5pp fimc-lite)
 - a new webcam sensor driver (smiapp)
 - a new video input driver for embedded (sta2x1xx)
 - several improvements, fixes, cleanups, etc inside the drivers.

Manually fix up conflicts due to err() -> dev_err() conversion in
drivers/staging/media/easycap/easycap_main.c

* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (484 commits)
  [media] saa7134-cards: Remove a PCI entry added by mistake
  [media] radio-sf16fmi: add support for SF16-FMD
  [media] rc-loopback: remove duplicate line
  [media] patch for Asus My Cinema PS3-100 (1043:48cd)
  [media] au0828: Move the Kconfig knob under V4L_USB_DRIVERS
  [media] em28xx: simple comment fix
  [media] [resend] radio-sf16fmr2: add PnP support for SF16-FMD2
  [media] smiapp: Use v4l2_ctrl_new_int_menu() instead of v4l2_ctrl_new_custom()
  [media] smiapp: Add support for 8-bit uncompressed formats
  [media] smiapp: Allow generic quirk registers
  [media] smiapp: Use non-binning limits if the binning limit is zero
  [media] smiapp: Initialise rval in smiapp_read_nvm()
  [media] smiapp: Round minimum pre_pll up rather than down in ip_clk_freq check
  [media] smiapp: Use 8-bit reads only before identifying the sensor
  [media] smiapp: Quirk for sensors that only do 8-bit reads
  [media] smiapp: Pass struct sensor to register writing commands instead of i2c_client
  [media] smiapp: Allow using external clock from the clock framework
  [media] zl10353: change .read_snr() to report SNR as a 0.1 dB
  [media] media: add support to gspca/pac7302.c for 093a:2627 (Genius FaceCam 300)
  [media] m88rs2000 - only flip bit 2 on reg 0x70 on 16th try
  ...
parents f9369910 71006fb2
...@@ -70,6 +70,8 @@ IOCTLS = \ ...@@ -70,6 +70,8 @@ IOCTLS = \
VIDIOC_SUBDEV_ENUM_MBUS_CODE \ VIDIOC_SUBDEV_ENUM_MBUS_CODE \
VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
VIDIOC_SUBDEV_G_SELECTION \
VIDIOC_SUBDEV_S_SELECTION \
TYPES = \ TYPES = \
$(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/linux/videodev2.h) \ $(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/linux/videodev2.h) \
...@@ -193,7 +195,7 @@ DVB_DOCUMENTED = \ ...@@ -193,7 +195,7 @@ DVB_DOCUMENTED = \
# #
install_media_images = \ install_media_images = \
$(Q)cp $(OBJIMGFILES) $(MEDIA_OBJ_DIR)/media_api $(Q)cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
$(Q)base64 -d $< >$@ $(Q)base64 -d $< >$@
......
...@@ -531,6 +531,139 @@ typedef enum fe_delivery_system { ...@@ -531,6 +531,139 @@ typedef enum fe_delivery_system {
here are referring to what can be found in the TMCC-structure - here are referring to what can be found in the TMCC-structure -
independent of the mode.</para> independent of the mode.</para>
</section> </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>RS frame mode.</para>
<para>Possible values are:</para>
<programlisting>
typedef enum atscmh_rs_frame_mode {
ATSCMH_RSFRAME_PRI_ONLY = 0,
ATSCMH_RSFRAME_PRI_SEC = 1,
} atscmh_rs_frame_mode_t;
</programlisting>
</section>
<section id="DTV-ATSCMH-RS-FRAME-ENSEMBLE">
<title><constant>DTV_ATSCMH_RS_FRAME_ENSEMBLE</constant></title>
<para>RS frame ensemble.</para>
<para>Possible values are:</para>
<programlisting>
typedef enum atscmh_rs_frame_ensemble {
ATSCMH_RSFRAME_ENS_PRI = 0,
ATSCMH_RSFRAME_ENS_SEC = 1,
} atscmh_rs_frame_ensemble_t;
</programlisting>
</section>
<section id="DTV-ATSCMH-RS-CODE-MODE-PRI">
<title><constant>DTV_ATSCMH_RS_CODE_MODE_PRI</constant></title>
<para>RS code mode (primary).</para>
<para>Possible values are:</para>
<programlisting>
typedef enum atscmh_rs_code_mode {
ATSCMH_RSCODE_211_187 = 0,
ATSCMH_RSCODE_223_187 = 1,
ATSCMH_RSCODE_235_187 = 2,
} atscmh_rs_code_mode_t;
</programlisting>
</section>
<section id="DTV-ATSCMH-RS-CODE-MODE-SEC">
<title><constant>DTV_ATSCMH_RS_CODE_MODE_SEC</constant></title>
<para>RS code mode (secondary).</para>
<para>Possible values are:</para>
<programlisting>
typedef enum atscmh_rs_code_mode {
ATSCMH_RSCODE_211_187 = 0,
ATSCMH_RSCODE_223_187 = 1,
ATSCMH_RSCODE_235_187 = 2,
} atscmh_rs_code_mode_t;
</programlisting>
</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>
<programlisting>
typedef enum atscmh_sccc_block_mode {
ATSCMH_SCCC_BLK_SEP = 0,
ATSCMH_SCCC_BLK_COMB = 1,
} atscmh_sccc_block_mode_t;
</programlisting>
</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>
<programlisting>
typedef enum atscmh_sccc_code_mode {
ATSCMH_SCCC_CODE_HLF = 0,
ATSCMH_SCCC_CODE_QTR = 1,
} atscmh_sccc_code_mode_t;
</programlisting>
</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:</para>
<programlisting>
typedef enum atscmh_sccc_code_mode {
ATSCMH_SCCC_CODE_HLF = 0,
ATSCMH_SCCC_CODE_QTR = 1,
} atscmh_sccc_code_mode_t;
</programlisting>
</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:</para>
<programlisting>
typedef enum atscmh_sccc_code_mode {
ATSCMH_SCCC_CODE_HLF = 0,
ATSCMH_SCCC_CODE_QTR = 1,
} atscmh_sccc_code_mode_t;
</programlisting>
</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:</para>
<programlisting>
typedef enum atscmh_sccc_code_mode {
ATSCMH_SCCC_CODE_HLF = 0,
ATSCMH_SCCC_CODE_QTR = 1,
} atscmh_sccc_code_mode_t;
</programlisting>
</section>
</section> </section>
<section id="DTV-API-VERSION"> <section id="DTV-API-VERSION">
<title><constant>DTV_API_VERSION</constant></title> <title><constant>DTV_API_VERSION</constant></title>
...@@ -774,6 +907,33 @@ typedef enum fe_hierarchy { ...@@ -774,6 +907,33 @@ typedef enum fe_hierarchy {
<listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem>
</itemizedlist> </itemizedlist>
</section> </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-CODE-MODE-PRI"><constant>DTV_ATSCMH_CODE_MODE_PRI</constant></link></para></listitem>
<listitem><para><link linkend="DTV-ATSCMH-CODE-MODE-SEC"><constant>DTV_ATSCMH_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>
</section>
</section> </section>
<section id="frontend-property-cable-systems"> <section id="frontend-property-cable-systems">
<title>Properties used on cable delivery systems</title> <title>Properties used on cable delivery systems</title>
......
...@@ -197,4 +197,33 @@ in the frequency range from 87,5 to 108,0 MHz</title> ...@@ -197,4 +197,33 @@ in the frequency range from 87,5 to 108,0 MHz</title>
<title>NTSC-4: United States RBDS Standard</title> <title>NTSC-4: United States RBDS Standard</title>
</biblioentry> </biblioentry>
<biblioentry id="iso12232">
<abbrev>ISO&nbsp;12232:2006</abbrev>
<authorgroup>
<corpauthor>International Organization for Standardization
(<ulink url="http://www.iso.org">http://www.iso.org</ulink>)</corpauthor>
</authorgroup>
<title>Photography &mdash; Digital still cameras &mdash; 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&nbsp;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>
</bibliography> </bibliography>
...@@ -724,41 +724,49 @@ if (-1 == ioctl (fd, &VIDIOC-S-STD;, &amp;std_id)) { ...@@ -724,41 +724,49 @@ if (-1 == ioctl (fd, &VIDIOC-S-STD;, &amp;std_id)) {
} }
</programlisting> </programlisting>
</example> </example>
</section>
<section id="dv-timings"> <section id="dv-timings">
<title>Digital Video (DV) Timings</title> <title>Digital Video (DV) Timings</title>
<para> <para>
The video standards discussed so far has been dealing with Analog TV and the 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 corresponding video timings. Today there are many more different hardware interfaces
such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry 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 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 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 is added to set/get video timings at the limited bits available, a new set of IOCTLs was added to set/get video timings at
the input and output: </para><itemizedlist> the input and output: </para><itemizedlist>
<listitem> <listitem>
<para>DV Presets: Digital Video (DV) presets. These are IDs representing a <para>DV Timings: This will allow applications to define detailed
video timings for the interface. This includes parameters such as width, height,
polarities, frontporch, backporch 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>
</listitem>
<listitem>
<para>DV Presets: Digital Video (DV) presets (<emphasis role="bold">deprecated</emphasis>).
These are IDs representing a
video timing at the input/output. Presets are pre-defined timings implemented video timing at the input/output. Presets are pre-defined timings implemented
by the hardware according to video standards. A __u32 data type is used to represent by the hardware according to video standards. A __u32 data type is used to represent
a preset unlike the bit mask that is used in &v4l2-std-id; allowing future extensions a preset unlike the bit mask that is used in &v4l2-std-id; allowing future extensions
to support as many different presets as needed.</para> to support as many different presets as needed. This API is deprecated in favor of the DV Timings
</listitem> API.</para>
<listitem>
<para>Custom DV Timings: This will allow applications to define more detailed
custom video timings for the interface. This includes parameters such as width, height,
polarities, frontporch, backporch etc.
</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<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>To enumerate and query the attributes of DV presets supported by a device, <para>To enumerate and query the attributes of DV presets supported by a device,
applications use the &VIDIOC-ENUM-DV-PRESETS; ioctl. To get the current DV preset, applications use the &VIDIOC-ENUM-DV-PRESETS; ioctl. To get the current DV preset,
applications use the &VIDIOC-G-DV-PRESET; ioctl and to set a preset they use the applications use the &VIDIOC-G-DV-PRESET; ioctl and to set a preset they use the
&VIDIOC-S-DV-PRESET; ioctl.</para> &VIDIOC-S-DV-PRESET; ioctl. To detect the preset as seen by the video receiver applications
<para>To set custom DV timings for the device, applications use the use the &VIDIOC-QUERY-DV-PRESET; ioctl.</para>
&VIDIOC-S-DV-TIMINGS; ioctl and to get current custom DV timings they use the
&VIDIOC-G-DV-TIMINGS; ioctl.</para>
<para>Applications can make use of the <xref linkend="input-capabilities" /> and <para>Applications can make use of the <xref linkend="input-capabilities" /> and
<xref linkend="output-capabilities"/> flags to decide what ioctls are available to set the <xref linkend="output-capabilities"/> flags to decide what ioctls are available to set the
video timings for the device.</para> video timings for the device.</para>
</section>
</section> </section>
&sub-controls; &sub-controls;
......
...@@ -2407,6 +2407,54 @@ details.</para> ...@@ -2407,6 +2407,54 @@ details.</para>
<para>Added <link linkend="jpeg-controls">JPEG compression control <para>Added <link linkend="jpeg-controls">JPEG compression control
class</link>.</para> class</link>.</para>
</listitem> </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> </orderedlist>
</section> </section>
...@@ -2505,6 +2553,10 @@ and may change in the future.</para> ...@@ -2505,6 +2553,10 @@ and may change in the future.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>&VIDIOC-ENCODER-CMD; and &VIDIOC-TRY-ENCODER-CMD; <para>&VIDIOC-ENCODER-CMD; and &VIDIOC-TRY-ENCODER-CMD;
ioctls.</para>
</listitem>
<listitem>
<para>&VIDIOC-DECODER-CMD; and &VIDIOC-TRY-DECODER-CMD;
ioctls.</para> ioctls.</para>
</listitem> </listitem>
<listitem> <listitem>
...@@ -2514,6 +2566,10 @@ ioctls.</para> ...@@ -2514,6 +2566,10 @@ ioctls.</para>
<listitem> <listitem>
<para>&VIDIOC-DBG-G-CHIP-IDENT; ioctl.</para> <para>&VIDIOC-DBG-G-CHIP-IDENT; ioctl.</para>
</listitem> </listitem>
<listitem>
<para>&VIDIOC-ENUM-DV-TIMINGS;, &VIDIOC-QUERY-DV-TIMINGS; and
&VIDIOC-DV-TIMINGS-CAP; ioctls.</para>
</listitem>
<listitem> <listitem>
<para>Flash API. <xref linkend="flash-controls" /></para> <para>Flash API. <xref linkend="flash-controls" /></para>
</listitem> </listitem>
...@@ -2523,6 +2579,14 @@ ioctls.</para> ...@@ -2523,6 +2579,14 @@ ioctls.</para>
<listitem> <listitem>
<para>Selection API. <xref linkend="selection-api" /></para> <para>Selection API. <xref linkend="selection-api" /></para>
</listitem> </listitem>
<listitem>
<para>Sub-device selection API: &VIDIOC-SUBDEV-G-SELECTION;
and &VIDIOC-SUBDEV-S-SELECTION; ioctls.</para>
</listitem>
<listitem>
<para><link linkend="v4l2-auto-focus-area"><constant>
V4L2_CID_AUTO_FOCUS_AREA</constant></link> control.</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
...@@ -2538,6 +2602,17 @@ interfaces and should not be implemented in new drivers.</para> ...@@ -2538,6 +2602,17 @@ interfaces and should not be implemented in new drivers.</para>
<constant>VIDIOC_S_MPEGCOMP</constant> ioctls. Use Extended Controls, <constant>VIDIOC_S_MPEGCOMP</constant> ioctls. Use Extended Controls,
<xref linkend="extended-controls" />.</para> <xref linkend="extended-controls" />.</para>
</listitem> </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> </itemizedlist>
</section> </section>
</section> </section>
...@@ -543,12 +543,13 @@ and can range from zero to the number of buffers allocated ...@@ -543,12 +543,13 @@ and can range from zero to the number of buffers allocated
with the &VIDIOC-REQBUFS; ioctl (&v4l2-requestbuffers; <structfield>count</structfield>) minus one.</entry> with the &VIDIOC-REQBUFS; ioctl (&v4l2-requestbuffers; <structfield>count</structfield>) minus one.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry></entry> <entry></entry>
<entry>Type of the buffer, same as &v4l2-format; <entry>Type of the buffer, same as &v4l2-format;
<structfield>type</structfield> or &v4l2-requestbuffers; <structfield>type</structfield> or &v4l2-requestbuffers;
<structfield>type</structfield>, set by the application.</entry> <structfield>type</structfield>, set by the application. See <xref
linkend="v4l2-buf-type" /></entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
...@@ -568,7 +569,7 @@ refers to an input stream, applications when an output stream.</entry> ...@@ -568,7 +569,7 @@ refers to an input stream, applications when an output stream.</entry>
linkend="buffer-flags" />.</entry> linkend="buffer-flags" />.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-field;</entry> <entry>__u32</entry>
<entry><structfield>field</structfield></entry> <entry><structfield>field</structfield></entry>
<entry></entry> <entry></entry>
<entry>Indicates the field order of the image in the <entry>Indicates the field order of the image in the
...@@ -630,11 +631,12 @@ bandwidth. These devices identify by not enumerating any video ...@@ -630,11 +631,12 @@ bandwidth. These devices identify by not enumerating any video
standards, see <xref linkend="standard" />.</para></entry> standards, see <xref linkend="standard" />.</para></entry>
</row> </row>
<row> <row>
<entry>&v4l2-memory;</entry> <entry>__u32</entry>
<entry><structfield>memory</structfield></entry> <entry><structfield>memory</structfield></entry>
<entry></entry> <entry></entry>
<entry>This field must be set by applications and/or drivers <entry>This field must be set by applications and/or drivers
in accordance with the selected I/O method.</entry> in accordance with the selected I/O method. See <xref linkend="v4l2-memory"
/></entry>
</row> </row>
<row> <row>
<entry>union</entry> <entry>union</entry>
......
<refentry> <refentry id="pixfmt-srggb10">
<refmeta> <refmeta>
<refentrytitle>V4L2_PIX_FMT_SRGGB10 ('RG10'), <refentrytitle>V4L2_PIX_FMT_SRGGB10 ('RG10'),
V4L2_PIX_FMT_SGRBG10 ('BA10'), V4L2_PIX_FMT_SGRBG10 ('BA10'),
......
<refentry id="pixfmt-srggb10dpcm8">
<refmeta>
<refentrytitle>
V4L2_PIX_FMT_SBGGR10DPCM8 ('bBA8'),
V4L2_PIX_FMT_SGBRG10DPCM8 ('bGA8'),
V4L2_PIX_FMT_SGRBG10DPCM8 ('BD10'),
V4L2_PIX_FMT_SRGGB10DPCM8 ('bRA8'),
</refentrytitle>
&manvol;
</refmeta>
<refnamediv>
<refname id="V4L2-PIX-FMT-SBGGR10DPCM8"><constant>V4L2_PIX_FMT_SBGGR10DPCM8</constant></refname>
<refname id="V4L2-PIX-FMT-SGBRG10DPCM8"><constant>V4L2_PIX_FMT_SGBRG10DPCM8</constant></refname>
<refname id="V4L2-PIX-FMT-SGRBG10DPCM8"><constant>V4L2_PIX_FMT_SGRBG10DPCM8</constant></refname>
<refname id="V4L2-PIX-FMT-SRGGB10DPCM8"><constant>V4L2_PIX_FMT_SRGGB10DPCM8</constant></refname>
<refpurpose>10-bit Bayer formats compressed to 8 bits</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>The following four pixel formats are raw sRGB / Bayer formats
with 10 bits per colour compressed to 8 bits each, using DPCM
compression. DPCM, differential pulse-code modulation, is lossy.
Each colour component consumes 8 bits of memory. In other respects
this format is similar to <xref
linkend="pixfmt-srggb10">.</xref></para>
</refsect1>
</refentry>
...@@ -673,6 +673,7 @@ access the palette, this must be done with ioctls of the Linux framebuffer API.< ...@@ -673,6 +673,7 @@ access the palette, this must be done with ioctls of the Linux framebuffer API.<
&sub-srggb8; &sub-srggb8;
&sub-sbggr16; &sub-sbggr16;
&sub-srggb10; &sub-srggb10;
&sub-srggb10dpcm8;
&sub-srggb12; &sub-srggb12;
</section> </section>
...@@ -876,11 +877,6 @@ kernel sources in the file <filename>Documentation/video4linux/cx2341x/README.hm ...@@ -876,11 +877,6 @@ kernel sources in the file <filename>Documentation/video4linux/cx2341x/README.hm
<entry>'S561'</entry> <entry>'S561'</entry>
<entry>Compressed GBRG Bayer format used by the gspca driver.</entry> <entry>Compressed GBRG Bayer format used by the gspca driver.</entry>
</row> </row>
<row id="V4L2-PIX-FMT-SGRBG10DPCM8">
<entry><constant>V4L2_PIX_FMT_SGRBG10DPCM8</constant></entry>
<entry>'DB10'</entry>
<entry>10 bit raw Bayer DPCM compressed to 8 bits.</entry>
</row>
<row id="V4L2-PIX-FMT-PAC207"> <row id="V4L2-PIX-FMT-PAC207">
<entry><constant>V4L2_PIX_FMT_PAC207</constant></entry> <entry><constant>V4L2_PIX_FMT_PAC207</constant></entry>
<entry>'P207'</entry> <entry>'P207'</entry>
......
<?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>
<?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>
...@@ -28,8 +28,8 @@ documentation.</contrib> ...@@ -28,8 +28,8 @@ documentation.</contrib>
<firstname>Hans</firstname> <firstname>Hans</firstname>
<surname>Verkuil</surname> <surname>Verkuil</surname>
<contrib>Designed and documented the VIDIOC_LOG_STATUS ioctl, <contrib>Designed and documented the VIDIOC_LOG_STATUS ioctl,
the extended control ioctls and major parts of the sliced VBI the extended control ioctls, major parts of the sliced VBI API, the
API.</contrib> MPEG encoder and decoder APIs and the DV Timings API.</contrib>
<affiliation> <affiliation>
<address> <address>
<email>hverkuil@xs4all.nl</email> <email>hverkuil@xs4all.nl</email>
...@@ -96,6 +96,17 @@ Remote Controller chapter.</contrib> ...@@ -96,6 +96,17 @@ Remote Controller chapter.</contrib>
</address> </address>
</affiliation> </affiliation>
</author> </author>
<author>
<firstname>Sakari</firstname>
<surname>Ailus</surname>
<contrib>Subdev selections API.</contrib>
<affiliation>
<address>
<email>sakari.ailus@iki.fi</email>
</address>
</affiliation>
</author>
</authorgroup> </authorgroup>
<copyright> <copyright>
...@@ -112,6 +123,7 @@ Remote Controller chapter.</contrib> ...@@ -112,6 +123,7 @@ Remote Controller chapter.</contrib>
<year>2009</year> <year>2009</year>
<year>2010</year> <year>2010</year>
<year>2011</year> <year>2011</year>
<year>2012</year>
<holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin <holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab, Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab,
Pawel Osciak</holder> Pawel Osciak</holder>
...@@ -127,6 +139,28 @@ structs, ioctls) must be noted in more detail in the history chapter ...@@ -127,6 +139,28 @@ structs, ioctls) must be noted in more detail in the history chapter
(compat.xml), along with the possible impact on existing drivers and (compat.xml), along with the possible impact on existing drivers and
applications. --> applications. -->
<revision>
<revnumber>3.5</revnumber>
<date>2012-05-07</date>
<authorinitials>sa, sn</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.
</revremark>
<date>2012-05-01</date>
<authorinitials>hv</authorinitials>
<revremark>Added VIDIOC_ENUM_DV_TIMINGS, VIDIOC_QUERY_DV_TIMINGS and
VIDIOC_DV_TIMINGS_CAP.
</revremark>
</revision>
<revision> <revision>
<revnumber>3.4</revnumber> <revnumber>3.4</revnumber>
<date>2012-01-25</date> <date>2012-01-25</date>
...@@ -433,7 +467,7 @@ and discussions on the V4L mailing list.</revremark> ...@@ -433,7 +467,7 @@ and discussions on the V4L mailing list.</revremark>
</partinfo> </partinfo>
<title>Video for Linux Two API Specification</title> <title>Video for Linux Two API Specification</title>
<subtitle>Revision 3.3</subtitle> <subtitle>Revision 3.5</subtitle>
<chapter id="common"> <chapter id="common">
&sub-common; &sub-common;
...@@ -491,10 +525,12 @@ and discussions on the V4L mailing list.</revremark> ...@@ -491,10 +525,12 @@ and discussions on the V4L mailing list.</revremark>
&sub-dbg-g-register; &sub-dbg-g-register;
&sub-decoder-cmd; &sub-decoder-cmd;
&sub-dqevent; &sub-dqevent;
&sub-dv-timings-cap;
&sub-encoder-cmd; &sub-encoder-cmd;
&sub-enumaudio; &sub-enumaudio;
&sub-enumaudioout; &sub-enumaudioout;
&sub-enum-dv-presets; &sub-enum-dv-presets;
&sub-enum-dv-timings;
&sub-enum-fmt; &sub-enum-fmt;
&sub-enum-framesizes; &sub-enum-framesizes;
&sub-enum-frameintervals; &sub-enum-frameintervals;
...@@ -529,6 +565,7 @@ and discussions on the V4L mailing list.</revremark> ...@@ -529,6 +565,7 @@ and discussions on the V4L mailing list.</revremark>
&sub-querycap; &sub-querycap;
&sub-queryctrl; &sub-queryctrl;
&sub-query-dv-preset; &sub-query-dv-preset;
&sub-query-dv-timings;
&sub-querystd; &sub-querystd;
&sub-prepare-buf; &sub-prepare-buf;
&sub-reqbufs; &sub-reqbufs;
...@@ -540,6 +577,7 @@ and discussions on the V4L mailing list.</revremark> ...@@ -540,6 +577,7 @@ and discussions on the V4L mailing list.</revremark>
&sub-subdev-g-crop; &sub-subdev-g-crop;
&sub-subdev-g-fmt; &sub-subdev-g-fmt;
&sub-subdev-g-frame-interval; &sub-subdev-g-frame-interval;
&sub-subdev-g-selection;
&sub-subscribe-event; &sub-subscribe-event;
<!-- End of ioctls. --> <!-- End of ioctls. -->
&sub-mmap; &sub-mmap;
......
...@@ -48,6 +48,12 @@ ...@@ -48,6 +48,12 @@
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<note>
<title>Experimental</title>
<para>This is an <link linkend="experimental"> experimental </link>
interface and may change in the future.</para>
</note>
<para>This ioctl is used to create buffers for <link linkend="mmap">memory <para>This ioctl is used to create buffers for <link linkend="mmap">memory
mapped</link> or <link linkend="userp">user pointer</link> mapped</link> or <link linkend="userp">user pointer</link>
I/O. It can be used as an alternative or in addition to the I/O. It can be used as an alternative or in addition to the
...@@ -94,16 +100,18 @@ information.</para> ...@@ -94,16 +100,18 @@ information.</para>
<entry>The number of buffers requested or granted.</entry> <entry>The number of buffers requested or granted.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-memory;</entry> <entry>__u32</entry>
<entry><structfield>memory</structfield></entry> <entry><structfield>memory</structfield></entry>
<entry>Applications set this field to <entry>Applications set this field to
<constant>V4L2_MEMORY_MMAP</constant> or <constant>V4L2_MEMORY_MMAP</constant> or
<constant>V4L2_MEMORY_USERPTR</constant>.</entry> <constant>V4L2_MEMORY_USERPTR</constant>. See <xref linkend="v4l2-memory"
/></entry>
</row> </row>
<row> <row>
<entry>&v4l2-format;</entry> <entry>__u32</entry>
<entry><structfield>format</structfield></entry> <entry><structfield>format</structfield></entry>
<entry>Filled in by the application, preserved by the driver.</entry> <entry>Filled in by the application, preserved by the driver.
See <xref linkend="v4l2-format" />.</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
......
...@@ -65,7 +65,7 @@ output.</para> ...@@ -65,7 +65,7 @@ output.</para>
&cs-str; &cs-str;
<tbody valign="top"> <tbody valign="top">
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>Type of the data stream, set by the application. <entry>Type of the data stream, set by the application.
Only these types are valid here: Only these types are valid here:
...@@ -73,7 +73,7 @@ Only these types are valid here: ...@@ -73,7 +73,7 @@ Only these types are valid here:
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>, <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver
defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant> defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant>
and higher.</entry> and higher. See <xref linkend="v4l2-buf-type" />.</entry>
</row> </row>
<row> <row>
<entry>struct <link linkend="v4l2-rect-crop">v4l2_rect</link></entry> <entry>struct <link linkend="v4l2-rect-crop">v4l2_rect</link></entry>
......
<refentry id="vidioc-dv-timings-cap">
<refmeta>
<refentrytitle>ioctl VIDIOC_DV_TIMINGS_CAP</refentrytitle>
&manvol;
</refmeta>
<refnamediv>
<refname>VIDIOC_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</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>argp</parameter></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<note>
<title>Experimental</title>
<para>This is an <link linkend="experimental"> experimental </link>
interface and may change in the future.</para>
</note>
<para>To query the available timings, applications initialize the
<structfield>index</structfield> field and zero the reserved array of &v4l2-dv-timings-cap;
and call the <constant>VIDIOC_DV_TIMINGS_CAP</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 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>
<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></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>reserved</structfield>[3]</entry>
<entry>Reserved for future extensions. Drivers must set the array to zero.</entry>
</row>
<row>
<entry>union</entry>
<entry><structfield></structfield></entry>
<entry></entry>
</row>
<row>
<entry></entry>
<entry>&v4l2-bt-timings-cap;</entry>
<entry><structfield>bt</structfield></entry>
<entry>BT.656/1120 timings capabilities of the hardware.</entry>
</row>
<row>
<entry></entry>
<entry>__u32</entry>
<entry><structfield>raw_data</structfield>[32]</entry>
<entry></entry>
</row>
</tbody>
</tgroup>
</table>
<table pgwide="1" frame="none" id="dv-bt-cap-capabilities">
<title>DV BT Timing capabilities</title>
<tgroup cols="2">
&cs-str;
<tbody valign="top">
<row>
<entry>Flag</entry>
<entry>Description</entry>
</row>
<row>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>V4L2_DV_BT_CAP_INTERLACED</entry>
<entry>Interlaced formats are supported.
</entry>
</row>
<row>
<entry>V4L2_DV_BT_CAP_PROGRESSIVE</entry>
<entry>Progressive formats are supported.
</entry>
</row>
<row>
<entry>V4L2_DV_BT_CAP_REDUCED_BLANKING</entry>
<entry>CVT/GTF specific: the timings can make use of reduced blanking (CVT)
or the 'Secondary GTF' curve (GTF).
</entry>
</row>
<row>
<entry>V4L2_DV_BT_CAP_CUSTOM</entry>
<entry>Can support non-standard timings, i.e. timings not belonging to the
standards set in the <structfield>standards</structfield> field.
</entry>
</row>
</tbody>
</tgroup>
</table>
</refsect1>
<refsect1>
&return-value;
</refsect1>
</refentry>
<!--
Local Variables:
mode: sgml
sgml-parent-document: "v4l2.sgml"
indent-tabs-mode: nil
End:
-->
...@@ -48,6 +48,10 @@ ...@@ -48,6 +48,10 @@
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para>This ioctl is <emphasis role="bold">deprecated</emphasis>.
New drivers and applications should use &VIDIOC-ENUM-DV-TIMINGS; instead.
</para>
<para>To query the attributes of a DV preset, applications initialize the <para>To query the attributes of a DV preset, applications initialize the
<structfield>index</structfield> field and zero the reserved array of &v4l2-dv-enum-preset; <structfield>index</structfield> field and zero the reserved array of &v4l2-dv-enum-preset;
and call the <constant>VIDIOC_ENUM_DV_PRESETS</constant> ioctl with a pointer to this and call the <constant>VIDIOC_ENUM_DV_PRESETS</constant> ioctl with a pointer to this
......
<refentry id="vidioc-enum-dv-timings">
<refmeta>
<refentrytitle>ioctl VIDIOC_ENUM_DV_TIMINGS</refentrytitle>
&manvol;
</refmeta>
<refnamediv>
<refname>VIDIOC_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</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>argp</parameter></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<note>
<title>Experimental</title>
<para>This is an <link linkend="experimental"> experimental </link>
interface and may change in the future.</para>
</note>
<para>While some DV receivers or transmitters support a wide range of timings, others
support only a limited number of timings. With this ioctl applications can enumerate a list
of known supported timings. Call &VIDIOC-DV-TIMINGS-CAP; to check if it also supports other
standards or even custom timings that are not in this list.</para>
<para>To query the available timings, applications initialize the
<structfield>index</structfield> field and zero the reserved array of &v4l2-enum-dv-timings;
and call the <constant>VIDIOC_ENUM_DV_TIMINGS</constant> ioctl 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>
<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>reserved</structfield>[3]</entry>
<entry>Reserved for future extensions. Drivers 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.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
</refentry>
<!--
Local Variables:
mode: sgml
sgml-parent-document: "v4l2.sgml"
indent-tabs-mode: nil
End:
-->
...@@ -71,7 +71,7 @@ the application. This is in no way related to the <structfield> ...@@ -71,7 +71,7 @@ the application. This is in no way related to the <structfield>
pixelformat</structfield> field.</entry> pixelformat</structfield> field.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>Type of the data stream, set by the application. <entry>Type of the data stream, set by the application.
Only these types are valid here: Only these types are valid here:
...@@ -81,7 +81,7 @@ Only these types are valid here: ...@@ -81,7 +81,7 @@ Only these types are valid here:
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>, <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>,
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver
defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant> defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant>
and higher.</entry> and higher. See <xref linkend="v4l2-buf-type" />.</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
......
...@@ -285,7 +285,7 @@ input/output interface to linux-media@vger.kernel.org on 19 Oct 2009. ...@@ -285,7 +285,7 @@ input/output interface to linux-media@vger.kernel.org on 19 Oct 2009.
<row> <row>
<entry><constant>V4L2_IN_CAP_CUSTOM_TIMINGS</constant></entry> <entry><constant>V4L2_IN_CAP_CUSTOM_TIMINGS</constant></entry>
<entry>0x00000002</entry> <entry>0x00000002</entry>
<entry>This input supports setting custom video timings by using VIDIOC_S_DV_TIMINGS.</entry> <entry>This input supports setting video timings by using VIDIOC_S_DV_TIMINGS.</entry>
</row> </row>
<row> <row>
<entry><constant>V4L2_IN_CAP_STD</constant></entry> <entry><constant>V4L2_IN_CAP_STD</constant></entry>
......
...@@ -170,7 +170,7 @@ input/output interface to linux-media@vger.kernel.org on 19 Oct 2009. ...@@ -170,7 +170,7 @@ input/output interface to linux-media@vger.kernel.org on 19 Oct 2009.
<row> <row>
<entry><constant>V4L2_OUT_CAP_CUSTOM_TIMINGS</constant></entry> <entry><constant>V4L2_OUT_CAP_CUSTOM_TIMINGS</constant></entry>
<entry>0x00000002</entry> <entry>0x00000002</entry>
<entry>This output supports setting custom video timings by using VIDIOC_S_DV_TIMINGS.</entry> <entry>This output supports setting video timings by using VIDIOC_S_DV_TIMINGS.</entry>
</row> </row>
<row> <row>
<entry><constant>V4L2_OUT_CAP_STD</constant></entry> <entry><constant>V4L2_OUT_CAP_STD</constant></entry>
......
...@@ -100,14 +100,14 @@ changed and <constant>VIDIOC_S_CROP</constant> returns the ...@@ -100,14 +100,14 @@ changed and <constant>VIDIOC_S_CROP</constant> returns the
&cs-str; &cs-str;
<tbody valign="top"> <tbody valign="top">
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>Type of the data stream, set by the application. <entry>Type of the data stream, set by the application.
Only these types are valid here: <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>, Only these types are valid here: <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>,
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>, <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver
defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant> defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant>
and higher.</entry> and higher. See <xref linkend="v4l2-buf-type" />.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-rect;</entry> <entry>&v4l2-rect;</entry>
......
...@@ -48,6 +48,12 @@ ...@@ -48,6 +48,12 @@
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para>These ioctls are <emphasis role="bold">deprecated</emphasis>.
New drivers and applications should use &VIDIOC-G-DV-TIMINGS; and &VIDIOC-S-DV-TIMINGS;
instead.
</para>
<para>To query and select the current DV preset, applications <para>To query and select the current DV preset, applications
use the <constant>VIDIOC_G_DV_PRESET</constant> and <constant>VIDIOC_S_DV_PRESET</constant> use the <constant>VIDIOC_G_DV_PRESET</constant> and <constant>VIDIOC_S_DV_PRESET</constant>
ioctls which take a pointer to a &v4l2-dv-preset; type as argument. ioctls which take a pointer to a &v4l2-dv-preset; type as argument.
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<refnamediv> <refnamediv>
<refname>VIDIOC_G_DV_TIMINGS</refname> <refname>VIDIOC_G_DV_TIMINGS</refname>
<refname>VIDIOC_S_DV_TIMINGS</refname> <refname>VIDIOC_S_DV_TIMINGS</refname>
<refpurpose>Get or set custom DV timings for input or output</refpurpose> <refpurpose>Get or set DV timings for input or output</refpurpose>
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
...@@ -48,12 +48,15 @@ ...@@ -48,12 +48,15 @@
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para>To set custom DV timings for the input or output, applications use the <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 custom timings, <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 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 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 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> 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.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
...@@ -83,12 +86,13 @@ or the timing values are not correct, the driver returns &EINVAL;.</para> ...@@ -83,12 +86,13 @@ or the timing values are not correct, the driver returns &EINVAL;.</para>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>width</structfield></entry> <entry><structfield>width</structfield></entry>
<entry>Width of the active video in pixels</entry> <entry>Width of the active video in pixels.</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>height</structfield></entry> <entry><structfield>height</structfield></entry>
<entry>Height of the active video in lines</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>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
...@@ -125,32 +129,52 @@ bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_H ...@@ -125,32 +129,52 @@ bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_H
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>vfrontporch</structfield></entry> <entry><structfield>vfrontporch</structfield></entry>
<entry>Vertical front porch in lines</entry> <entry>Vertical front porch in lines. For interlaced formats this refers to the
odd field (aka field 1).</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>vsync</structfield></entry> <entry><structfield>vsync</structfield></entry>
<entry>Vertical sync length in lines</entry> <entry>Vertical sync length in lines. For interlaced formats this refers to the
odd field (aka field 1).</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>vbackporch</structfield></entry> <entry><structfield>vbackporch</structfield></entry>
<entry>Vertical back porch in lines</entry> <entry>Vertical back porch in lines. For interlaced formats this refers to the
odd field (aka field 1).</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>il_vfrontporch</structfield></entry> <entry><structfield>il_vfrontporch</structfield></entry>
<entry>Vertical front porch in lines for bottom field of interlaced field formats</entry> <entry>Vertical front porch in lines for the even field (aka field 2) of
interlaced field formats.</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>il_vsync</structfield></entry> <entry><structfield>il_vsync</structfield></entry>
<entry>Vertical sync length in lines for bottom field of interlaced field formats</entry> <entry>Vertical sync length in lines for the even field (aka field 2) of
interlaced field formats.</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
<entry><structfield>il_vbackporch</structfield></entry> <entry><structfield>il_vbackporch</structfield></entry>
<entry>Vertical back porch in lines for bottom field of interlaced field formats</entry> <entry>Vertical back porch in lines for the even field (aka field 2) of
interlaced field 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> </row>
</tbody> </tbody>
</tgroup> </tgroup>
...@@ -211,6 +235,90 @@ bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_H ...@@ -211,6 +235,90 @@ bit 0 (V4L2_DV_VSYNC_POS_POL) is for vertical sync polarity and bit 1 (V4L2_DV_H
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table>
<table pgwide="1" frame="none" id="dv-bt-standards">
<title>DV BT Timing standards</title>
<tgroup cols="2">
&cs-str;
<tbody valign="top">
<row>
<entry>Timing standard</entry>
<entry>Description</entry>
</row>
<row>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>V4L2_DV_BT_STD_CEA861</entry>
<entry>The timings follow the CEA-861 Digital TV Profile standard</entry>
</row>
<row>
<entry>V4L2_DV_BT_STD_DMT</entry>
<entry>The timings follow the VESA Discrete Monitor Timings standard</entry>
</row>
<row>
<entry>V4L2_DV_BT_STD_CVT</entry>
<entry>The timings follow the VESA Coordinated Video Timings standard</entry>
</row>
<row>
<entry>V4L2_DV_BT_STD_GTF</entry>
<entry>The timings follow the VESA Generalized Timings Formula standard</entry>
</row>
</tbody>
</tgroup>
</table>
<table pgwide="1" frame="none" id="dv-bt-flags">
<title>DV BT Timing flags</title>
<tgroup cols="2">
&cs-str;
<tbody valign="top">
<row>
<entry>Flag</entry>
<entry>Description</entry>
</row>
<row>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>V4L2_DV_FL_REDUCED_BLANKING</entry>
<entry>CVT/GTF specific: the timings use reduced blanking (CVT) or the 'Secondary
GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
intervals are reduced, allowing a higher resolution over the same
bandwidth. This is a read-only flag, applications must not set this.
</entry>
</row>
<row>
<entry>V4L2_DV_FL_CAN_REDUCE_FPS</entry>
<entry>CEA-861 specific: set for CEA-861 formats with a framerate that is a multiple
of six. These formats can be optionally played at 1 / 1.001 speed to
be compatible with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
29.97 frames per second. If the transmitter can't generate such frequencies, then the
flag will also be cleared. This is a read-only flag, applications must not set this.
</entry>
</row>
<row>
<entry>V4L2_DV_FL_REDUCED_FPS</entry>
<entry>CEA-861 specific: only valid for video transmitters, the flag is cleared
by receivers. It is also only valid for formats with the V4L2_DV_FL_CAN_REDUCE_FPS flag
set, for other formats the flag will be cleared by the driver.
If the application sets this flag, then the pixelclock used to set up the transmitter is
divided by 1.001 to make it compatible with NTSC framerates. If the transmitter
can't generate such frequencies, then the flag will also be cleared.
</entry>
</row>
<row>
<entry>V4L2_DV_FL_HALF_LINE</entry>
<entry>Specific to interlaced formats: if set, then field 1 (aka the odd field)
is really one half-line longer and field 2 (aka the even field) is really one half-line
shorter, so each field has exactly the same number of half-lines. Whether half-lines can be
detected or used depends on the hardware.
</entry>
</row>
</tbody>
</tgroup>
</table>
</refsect1> </refsect1>
<refsect1> <refsect1>
&return-value; &return-value;
......
...@@ -265,6 +265,32 @@ These controls are described in <xref ...@@ -265,6 +265,32 @@ These controls are described in <xref
These controls are described in <xref These controls are described in <xref
linkend="flash-controls" />.</entry> linkend="flash-controls" />.</entry>
</row> </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_JPEG</constant></entry>
<entry>0x9d0000</entry>
<entry>The class containing JPEG compression controls.
These controls are described in <xref
linkend="jpeg-controls" />.</entry>
</row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table>
......
...@@ -116,7 +116,7 @@ this ioctl.</para> ...@@ -116,7 +116,7 @@ this ioctl.</para>
<colspec colname="c4" /> <colspec colname="c4" />
<tbody valign="top"> <tbody valign="top">
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry></entry> <entry></entry>
<entry>Type of the data stream, see <xref <entry>Type of the data stream, see <xref
......
...@@ -95,14 +95,14 @@ the &v4l2-output; <structfield>modulator</structfield> field and the ...@@ -95,14 +95,14 @@ the &v4l2-output; <structfield>modulator</structfield> field and the
&v4l2-modulator; <structfield>index</structfield> field.</entry> &v4l2-modulator; <structfield>index</structfield> field.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-tuner-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>The tuner type. This is the same value as in the <entry>The tuner type. This is the same value as in the
&v4l2-tuner; <structfield>type</structfield> field. The type must be set &v4l2-tuner; <structfield>type</structfield> field. See The type must be set
to <constant>V4L2_TUNER_RADIO</constant> for <filename>/dev/radioX</filename> to <constant>V4L2_TUNER_RADIO</constant> for <filename>/dev/radioX</filename>
device nodes, and to <constant>V4L2_TUNER_ANALOG_TV</constant> device nodes, and to <constant>V4L2_TUNER_ANALOG_TV</constant>
for all others. The field is not applicable to modulators, &ie; ignored for all others. The field is not applicable to modulators, &ie; ignored
by drivers.</entry> by drivers. See <xref linkend="v4l2-tuner-type" /></entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
......
...@@ -75,11 +75,12 @@ devices.</para> ...@@ -75,11 +75,12 @@ devices.</para>
&cs-ustr; &cs-ustr;
<tbody valign="top"> <tbody valign="top">
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry></entry> <entry></entry>
<entry>The buffer (stream) type, same as &v4l2-format; <entry>The buffer (stream) type, same as &v4l2-format;
<structfield>type</structfield>, set by the application.</entry> <structfield>type</structfield>, set by the application. See <xref
linkend="v4l2-buf-type" /></entry>
</row> </row>
<row> <row>
<entry>union</entry> <entry>union</entry>
......
...@@ -148,7 +148,7 @@ using the &VIDIOC-S-FMT; ioctl as described in <xref ...@@ -148,7 +148,7 @@ using the &VIDIOC-S-FMT; ioctl as described in <xref
<structfield>service_lines</structfield>[1][0] to zero.</entry> <structfield>service_lines</structfield>[1][0] to zero.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>Type of the data stream, see <xref <entry>Type of the data stream, see <xref
linkend="v4l2-buf-type" />. Should be linkend="v4l2-buf-type" />. Should be
......
...@@ -107,7 +107,7 @@ user.<!-- FIXME Video inputs already have a name, the purpose of this ...@@ -107,7 +107,7 @@ user.<!-- FIXME Video inputs already have a name, the purpose of this
field is not quite clear.--></para></entry> field is not quite clear.--></para></entry>
</row> </row>
<row> <row>
<entry>&v4l2-tuner-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry spanname="hspan">Type of the tuner, see <xref <entry spanname="hspan">Type of the tuner, see <xref
linkend="v4l2-tuner-type" />.</entry> linkend="v4l2-tuner-type" />.</entry>
......
...@@ -48,6 +48,12 @@ ...@@ -48,6 +48,12 @@
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<note>
<title>Experimental</title>
<para>This is an <link linkend="experimental"> experimental </link>
interface and may change in the future.</para>
</note>
<para>Applications can optionally call the <para>Applications can optionally call the
<constant>VIDIOC_PREPARE_BUF</constant> ioctl to pass ownership of the buffer <constant>VIDIOC_PREPARE_BUF</constant> ioctl to pass ownership of the buffer
to the driver before actually enqueuing it, using the to the driver before actually enqueuing it, using the
......
...@@ -49,6 +49,10 @@ input</refpurpose> ...@@ -49,6 +49,10 @@ input</refpurpose>
<refsect1> <refsect1>
<title>Description</title> <title>Description</title>
<para>This ioctl is <emphasis role="bold">deprecated</emphasis>.
New drivers and applications should use &VIDIOC-QUERY-DV-TIMINGS; instead.
</para>
<para>The hardware may be able to detect the current DV preset <para>The hardware may be able to detect the current DV preset
automatically, similar to sensing the video standard. To do so, applications automatically, similar to sensing the video standard. To do so, applications
call <constant> VIDIOC_QUERY_DV_PRESET</constant> with a pointer to a call <constant> VIDIOC_QUERY_DV_PRESET</constant> with a pointer to a
......
<refentry id="vidioc-query-dv-timings">
<refmeta>
<refentrytitle>ioctl VIDIOC_QUERY_DV_TIMINGS</refentrytitle>
&manvol;
</refmeta>
<refnamediv>
<refname>VIDIOC_QUERY_DV_TIMINGS</refname>
<refpurpose>Sense the DV preset received by the current
input</refpurpose>
</refnamediv>
<refsynopsisdiv>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>ioctl</function></funcdef>
<paramdef>int <parameter>fd</parameter></paramdef>
<paramdef>int <parameter>request</parameter></paramdef>
<paramdef>struct v4l2_dv_timings *<parameter>argp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Arguments</title>
<variablelist>
<varlistentry>
<term><parameter>fd</parameter></term>
<listitem>
<para>&fd;</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>request</parameter></term>
<listitem>
<para>VIDIOC_QUERY_DV_TIMINGS</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>argp</parameter></term>
<listitem>
<para></para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Description</title>
<note>
<title>Experimental</title>
<para>This is an <link linkend="experimental"> experimental </link>
interface and may change in the future.</para>
</note>
<para>The hardware may be able to detect the current DV timings
automatically, similar to sensing the video standard. To do so, applications
call <constant>VIDIOC_QUERY_DV_TIMINGS</constant> with a pointer to a
&v4l2-dv-timings;. Once the hardware detects the timings, it will fill in the
timings structure.
If the timings could not be detected because there was no signal, then
<errorcode>ENOLINK</errorcode> is returned. If a signal was detected, but
it was unstable and the receiver could not lock to the signal, then
<errorcode>ENOLCK</errorcode> is returned. If the receiver could lock to the signal,
but the format is unsupported (e.g. because the pixelclock is out of range
of the hardware capabilities), then the driver fills in whatever timings it
could find and returns <errorcode>ERANGE</errorcode>. In that case the application
can call &VIDIOC-DV-TIMINGS-CAP; to compare the found timings with the hardware's
capabilities in order to give more precise feedback to the user.
</para>
</refsect1>
<refsect1>
&return-value;
<variablelist>
<varlistentry>
<term><errorcode>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>
...@@ -92,18 +92,19 @@ streamoff.--></para> ...@@ -92,18 +92,19 @@ streamoff.--></para>
<entry>The number of buffers requested or granted.</entry> <entry>The number of buffers requested or granted.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-buf-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>Type of the stream or buffers, this is the same <entry>Type of the stream or buffers, this is the same
as the &v4l2-format; <structfield>type</structfield> field. See <xref as the &v4l2-format; <structfield>type</structfield> field. See <xref
linkend="v4l2-buf-type" /> for valid values.</entry> linkend="v4l2-buf-type" /> for valid values.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-memory;</entry> <entry>__u32</entry>
<entry><structfield>memory</structfield></entry> <entry><structfield>memory</structfield></entry>
<entry>Applications set this field to <entry>Applications set this field to
<constant>V4L2_MEMORY_MMAP</constant> or <constant>V4L2_MEMORY_MMAP</constant> or
<constant>V4L2_MEMORY_USERPTR</constant>.</entry> <constant>V4L2_MEMORY_USERPTR</constant>. See <xref linkend="v4l2-memory"
/>.</entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
......
...@@ -73,10 +73,11 @@ same value as in the &v4l2-input; <structfield>tuner</structfield> ...@@ -73,10 +73,11 @@ same value as in the &v4l2-input; <structfield>tuner</structfield>
field and the &v4l2-tuner; <structfield>index</structfield> field.</entry> field and the &v4l2-tuner; <structfield>index</structfield> field.</entry>
</row> </row>
<row> <row>
<entry>&v4l2-tuner-type;</entry> <entry>__u32</entry>
<entry><structfield>type</structfield></entry> <entry><structfield>type</structfield></entry>
<entry>The tuner type. This is the same value as in the <entry>The tuner type. This is the same value as in the
&v4l2-tuner; <structfield>type</structfield> field.</entry> &v4l2-tuner; <structfield>type</structfield> field. See <xref
linkend="v4l2-tuner-type" /></entry>
</row> </row>
<row> <row>
<entry>__u32</entry> <entry>__u32</entry>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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