aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2010-03-15 19:26:04 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-03-22 03:53:31 -0400
commit333c8b97785d5afd5085ba3720b4d259623290f6 (patch)
tree3cba92af1765957c68f74042dea1873481554ede
parentd3a7ed99759b18e4fd19b8ddd226f8085b8bd975 (diff)
[media] v4l: v4l2_subdev userspace format API
Add a userspace API to get, set and enumerate the media format on a subdev pad. The format at the output of a subdev usually depends on the format at its input(s). The try format operation is thus not suitable for probing format at individual pads, as it can't modify the device state and thus can't remember the format tried at the input to compute the output format. To fix the problem, pass an extra argument to the get/set format operations to select the 'try' or 'active' format. The try format is used when probing the subdev. Setting the try format must not change the device configuration but can store data for later reuse. Data storage is provided at the file-handle level so applications probing the subdev concurently won't interfere with each other. The active format is used when configuring the subdev. It's identical to the format handled by the usual get/set operations. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Stanimir Varbanov <svarbanov@mm-sol.com> Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> Acked-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--Documentation/DocBook/Makefile5
-rw-r--r--Documentation/DocBook/media-entities.tmpl16
-rw-r--r--Documentation/DocBook/v4l/dev-subdev.xml280
-rw-r--r--Documentation/DocBook/v4l/subdev-formats.xml2416
-rw-r--r--Documentation/DocBook/v4l/v4l2.xml4
-rw-r--r--Documentation/DocBook/v4l/vidioc-streamon.xml9
-rw-r--r--Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml154
-rw-r--r--Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml119
-rw-r--r--Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml180
-rw-r--r--drivers/media/video/v4l2-subdev.c49
-rw-r--r--include/linux/Kbuild1
-rw-r--r--include/linux/v4l2-subdev.h90
-rw-r--r--include/media/v4l2-subdev.h10
13 files changed, 3332 insertions, 1 deletions
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
index 8b6e00a71034..2deb069aedf1 100644
--- a/Documentation/DocBook/Makefile
+++ b/Documentation/DocBook/Makefile
@@ -53,7 +53,10 @@ MAN := $(patsubst %.xml, %.9, $(BOOKS))
53mandocs: $(MAN) 53mandocs: $(MAN)
54 54
55build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \ 55build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \
56 cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(objtree)/Documentation/DocBook/media/ 56 cp $(srctree)/Documentation/DocBook/dvb/*.png \
57 $(srctree)/Documentation/DocBook/v4l/*.gif \
58 $(srctree)/Documentation/DocBook/v4l/*.png \
59 $(objtree)/Documentation/DocBook/media/
57 60
58xmldoclinks: 61xmldoclinks:
59ifneq ($(objtree),$(srctree)) 62ifneq ($(objtree),$(srctree))
diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
index 121db1549244..dbb9cb2e1ec6 100644
--- a/Documentation/DocBook/media-entities.tmpl
+++ b/Documentation/DocBook/media-entities.tmpl
@@ -86,6 +86,10 @@
86<!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>"> 86<!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>">
87<!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>"> 87<!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>">
88<!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>"> 88<!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>">
89<!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>">
90<!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>">
91<!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>">
92<!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>">
89<!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>"> 93<!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>">
90<!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>"> 94<!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>">
91<!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>"> 95<!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>">
@@ -107,6 +111,7 @@
107<!ENTITY v4l2-field "enum&nbsp;<link linkend='v4l2-field'>v4l2_field</link>"> 111<!ENTITY v4l2-field "enum&nbsp;<link linkend='v4l2-field'>v4l2_field</link>">
108<!ENTITY v4l2-frmivaltypes "enum&nbsp;<link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>"> 112<!ENTITY v4l2-frmivaltypes "enum&nbsp;<link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>">
109<!ENTITY v4l2-frmsizetypes "enum&nbsp;<link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>"> 113<!ENTITY v4l2-frmsizetypes "enum&nbsp;<link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>">
114<!ENTITY v4l2-mbus-pixelcode "enum&nbsp;<link linkend='v4l2-mbus-pixelcode'>v4l2_mbus_pixelcode</link>">
110<!ENTITY v4l2-memory "enum&nbsp;<link linkend='v4l2-memory'>v4l2_memory</link>"> 115<!ENTITY v4l2-memory "enum&nbsp;<link linkend='v4l2-memory'>v4l2_memory</link>">
111<!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum&nbsp;<link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>"> 116<!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum&nbsp;<link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>">
112<!ENTITY v4l2-mpeg-audio-crc "enum&nbsp;<link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>"> 117<!ENTITY v4l2-mpeg-audio-crc "enum&nbsp;<link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>">
@@ -130,6 +135,7 @@
130<!ENTITY v4l2-mpeg-video-encoding "enum&nbsp;<link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>"> 135<!ENTITY v4l2-mpeg-video-encoding "enum&nbsp;<link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>">
131<!ENTITY v4l2-power-line-frequency "enum&nbsp;<link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>"> 136<!ENTITY v4l2-power-line-frequency "enum&nbsp;<link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>">
132<!ENTITY v4l2-priority "enum&nbsp;<link linkend='v4l2-priority'>v4l2_priority</link>"> 137<!ENTITY v4l2-priority "enum&nbsp;<link linkend='v4l2-priority'>v4l2_priority</link>">
138<!ENTITY v4l2-subdev-format-whence "enum&nbsp;<link linkend='v4l2-subdev-format-whence'>v4l2_subdev_format_whence</link>">
133<!ENTITY v4l2-tuner-type "enum&nbsp;<link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>"> 139<!ENTITY v4l2-tuner-type "enum&nbsp;<link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>">
134<!ENTITY v4l2-preemphasis "enum&nbsp;<link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>"> 140<!ENTITY v4l2-preemphasis "enum&nbsp;<link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>">
135 141
@@ -172,6 +178,7 @@
172<!ENTITY v4l2-hw-freq-seek "struct&nbsp;<link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>"> 178<!ENTITY v4l2-hw-freq-seek "struct&nbsp;<link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>">
173<!ENTITY v4l2-input "struct&nbsp;<link linkend='v4l2-input'>v4l2_input</link>"> 179<!ENTITY v4l2-input "struct&nbsp;<link linkend='v4l2-input'>v4l2_input</link>">
174<!ENTITY v4l2-jpegcompression "struct&nbsp;<link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>"> 180<!ENTITY v4l2-jpegcompression "struct&nbsp;<link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>">
181<!ENTITY v4l2-mbus-framefmt "struct&nbsp;<link linkend='v4l2-mbus-framefmt'>v4l2_mbus_framefmt</link>">
175<!ENTITY v4l2-modulator "struct&nbsp;<link linkend='v4l2-modulator'>v4l2_modulator</link>"> 182<!ENTITY v4l2-modulator "struct&nbsp;<link linkend='v4l2-modulator'>v4l2_modulator</link>">
176<!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct&nbsp;<link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>"> 183<!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct&nbsp;<link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>">
177<!ENTITY v4l2-output "struct&nbsp;<link linkend='v4l2-output'>v4l2_output</link>"> 184<!ENTITY v4l2-output "struct&nbsp;<link linkend='v4l2-output'>v4l2_output</link>">
@@ -186,6 +193,9 @@
186<!ENTITY v4l2-sliced-vbi-cap "struct&nbsp;<link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>"> 193<!ENTITY v4l2-sliced-vbi-cap "struct&nbsp;<link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>">
187<!ENTITY v4l2-sliced-vbi-data "struct&nbsp;<link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>"> 194<!ENTITY v4l2-sliced-vbi-data "struct&nbsp;<link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>">
188<!ENTITY v4l2-sliced-vbi-format "struct&nbsp;<link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>"> 195<!ENTITY v4l2-sliced-vbi-format "struct&nbsp;<link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>">
196<!ENTITY v4l2-subdev-frame-size-enum "struct&nbsp;<link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>">
197<!ENTITY v4l2-subdev-format "struct&nbsp;<link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>">
198<!ENTITY v4l2-subdev-mbus-code-enum "struct&nbsp;<link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>">
189<!ENTITY v4l2-standard "struct&nbsp;<link linkend='v4l2-standard'>v4l2_standard</link>"> 199<!ENTITY v4l2-standard "struct&nbsp;<link linkend='v4l2-standard'>v4l2_standard</link>">
190<!ENTITY v4l2-streamparm "struct&nbsp;<link linkend='v4l2-streamparm'>v4l2_streamparm</link>"> 200<!ENTITY v4l2-streamparm "struct&nbsp;<link linkend='v4l2-streamparm'>v4l2_streamparm</link>">
191<!ENTITY v4l2-timecode "struct&nbsp;<link linkend='v4l2-timecode'>v4l2_timecode</link>"> 201<!ENTITY v4l2-timecode "struct&nbsp;<link linkend='v4l2-timecode'>v4l2_timecode</link>">
@@ -215,6 +225,7 @@
215<!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code"> 225<!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code">
216<!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code"> 226<!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code">
217<!ENTITY EPERM "<errorcode>EPERM</errorcode> error code"> 227<!ENTITY EPERM "<errorcode>EPERM</errorcode> error code">
228<!ENTITY EPIPE "<errorcode>EPIPE</errorcode> error code">
218<!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code"> 229<!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code">
219 230
220<!-- Subsections --> 231<!-- Subsections -->
@@ -234,6 +245,7 @@
234<!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml"> 245<!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml">
235<!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml"> 246<!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml">
236<!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml"> 247<!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml">
248<!ENTITY sub-dev-subdev SYSTEM "v4l/dev-subdev.xml">
237<!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml"> 249<!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml">
238<!ENTITY sub-driver SYSTEM "v4l/driver.xml"> 250<!ENTITY sub-driver SYSTEM "v4l/driver.xml">
239<!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml"> 251<!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml">
@@ -319,6 +331,10 @@
319<!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml"> 331<!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml">
320<!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml"> 332<!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml">
321<!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml"> 333<!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml">
334<!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml">
335<!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml">
336<!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml">
337<!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml">
322<!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml"> 338<!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml">
323<!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml"> 339<!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml">
324<!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml"> 340<!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml">
diff --git a/Documentation/DocBook/v4l/dev-subdev.xml b/Documentation/DocBook/v4l/dev-subdev.xml
new file mode 100644
index 000000000000..fc62e65f45ef
--- /dev/null
+++ b/Documentation/DocBook/v4l/dev-subdev.xml
@@ -0,0 +1,280 @@
1 <title>Sub-device Interface</title>
2
3 <note>
4 <title>Experimental</title>
5 <para>This is an <link linkend="experimental">experimental</link>
6 interface and may change in the future.</para>
7 </note>
8
9 <para>The complex nature of V4L2 devices, where hardware is often made of
10 several integrated circuits that need to interact with each other in a
11 controlled way, leads to complex V4L2 drivers. The drivers usually reflect
12 the hardware model in software, and model the different hardware components
13 as software blocks called sub-devices.</para>
14
15 <para>V4L2 sub-devices are usually kernel-only objects. If the V4L2 driver
16 implements the media device API, they will automatically inherit from media
17 entities. Applications will be able to enumerate the sub-devices and discover
18 the hardware topology using the media entities, pads and links enumeration
19 API.</para>
20
21 <para>In addition to make sub-devices discoverable, drivers can also choose
22 to make them directly configurable by applications. When both the sub-device
23 driver and the V4L2 device driver support this, sub-devices will feature a
24 character device node on which ioctls can be called to
25 <itemizedlist>
26 <listitem>query, read and write sub-devices controls</listitem>
27 <listitem>subscribe and unsubscribe to events and retrieve them</listitem>
28 <listitem>negotiate image formats on individual pads</listitem>
29 </itemizedlist>
30 </para>
31
32 <para>Sub-device character device nodes, conventionally named
33 <filename>/dev/v4l-subdev*</filename>, use major number 81.</para>
34
35 <section>
36 <title>Controls</title>
37 <para>Most V4L2 controls are implemented by sub-device hardware. Drivers
38 usually merge all controls and expose them through video device nodes.
39 Applications can control all sub-devices through a single interface.</para>
40
41 <para>Complex devices sometimes implement the same control in different
42 pieces of hardware. This situation is common in embedded platforms, where
43 both sensors and image processing hardware implement identical functions,
44 such as contrast adjustment, white balance or faulty pixels correction. As
45 the V4L2 controls API doesn't support several identical controls in a single
46 device, all but one of the identical controls are hidden.</para>
47
48 <para>Applications can access those hidden controls through the sub-device
49 node with the V4L2 control API described in <xref linkend="control" />. The
50 ioctls behave identically as when issued on V4L2 device nodes, with the
51 exception that they deal only with controls implemented in the sub-device.
52 </para>
53
54 <para>Depending on the driver, those controls might also be exposed through
55 one (or several) V4L2 device nodes.</para>
56 </section>
57
58 <section>
59 <title>Events</title>
60 <para>V4L2 sub-devices can notify applications of events as described in
61 <xref linkend="event" />. The API behaves identically as when used on V4L2
62 device nodes, with the exception that it only deals with events generated by
63 the sub-device. Depending on the driver, those events might also be reported
64 on one (or several) V4L2 device nodes.</para>
65 </section>
66
67 <section id="pad-level-formats">
68 <title>Pad-level Formats</title>
69
70 <warning>Pad-level formats are only applicable to very complex device that
71 need to expose low-level format configuration to user space. Generic V4L2
72 applications do <emphasis>not</emphasis> need to use the API described in
73 this section.</warning>
74
75 <note>For the purpose of this section, the term
76 <wordasword>format</wordasword> means the combination of media bus data
77 format, frame width and frame height.</note>
78
79 <para>Image formats are typically negotiated on video capture and output
80 devices using the <link linkend="crop">cropping and scaling</link> ioctls.
81 The driver is responsible for configuring every block in the video pipeline
82 according to the requested format at the pipeline input and/or
83 output.</para>
84
85 <para>For complex devices, such as often found in embedded systems,
86 identical image sizes at the output of a pipeline can be achieved using
87 different hardware configurations. One such exemple is shown on
88 <xref linkend="pipeline-scaling" xrefstyle="template: Figure %n" />, where
89 image scaling can be performed on both the video sensor and the host image
90 processing hardware.</para>
91
92 <figure id="pipeline-scaling">
93 <title>Image Format Negotation on Pipelines</title>
94 <mediaobject>
95 <imageobject>
96 <imagedata fileref="pipeline.pdf" format="PS" />
97 </imageobject>
98 <imageobject>
99 <imagedata fileref="pipeline.png" format="PNG" />
100 </imageobject>
101 <textobject>
102 <phrase>High quality and high speed pipeline configuration</phrase>
103 </textobject>
104 </mediaobject>
105 </figure>
106
107 <para>The sensor scaler is usually of less quality than the host scaler, but
108 scaling on the sensor is required to achieve higher frame rates. Depending
109 on the use case (quality vs. speed), the pipeline must be configured
110 differently. Applications need to configure the formats at every point in
111 the pipeline explicitly.</para>
112
113 <para>Drivers that implement the <link linkend="media-controller-intro">media
114 API</link> can expose pad-level image format configuration to applications.
115 When they do, applications can use the &VIDIOC-SUBDEV-G-FMT; and
116 &VIDIOC-SUBDEV-S-FMT; ioctls. to negotiate formats on a per-pad basis.</para>
117
118 <para>Applications are responsible for configuring coherent parameters on
119 the whole pipeline and making sure that connected pads have compatible
120 formats. The pipeline is checked for formats mismatch at &VIDIOC-STREAMON;
121 time, and an &EPIPE; is then returned if the configuration is
122 invalid.</para>
123
124 <para>Pad-level image format configuration support can be tested by calling
125 the &VIDIOC-SUBDEV-G-FMT; ioctl on pad 0. If the driver returns an &EINVAL;
126 pad-level format configuration is not supported by the sub-device.</para>
127
128 <section>
129 <title>Format Negotiation</title>
130
131 <para>Acceptable formats on pads can (and usually do) depend on a number
132 of external parameters, such as formats on other pads, active links, or
133 even controls. Finding a combination of formats on all pads in a video
134 pipeline, acceptable to both application and driver, can't rely on formats
135 enumeration only. A format negotiation mechanism is required.</para>
136
137 <para>Central to the format negotiation mechanism are the get/set format
138 operations. When called with the <structfield>which</structfield> argument
139 set to <constant>V4L2_SUBDEV_FORMAT_TRY</constant>, the
140 &VIDIOC-SUBDEV-G-FMT; and &VIDIOC-SUBDEV-S-FMT; ioctls operate on a set of
141 formats parameters that are not connected to the hardware configuration.
142 Modifying those 'try' formats leaves the device state untouched (this
143 applies to both the software state stored in the driver and the hardware
144 state stored in the device itself).</para>
145
146 <para>While not kept as part of the device state, try formats are stored
147 in the sub-device file handles. A &VIDIOC-SUBDEV-G-FMT; call will return
148 the last try format set <emphasis>on the same sub-device file
149 handle</emphasis>. Several applications querying the same sub-device at
150 the same time will thus not interact with each other.</para>
151
152 <para>To find out whether a particular format is supported by the device,
153 applications use the &VIDIOC-SUBDEV-S-FMT; ioctl. Drivers verify and, if
154 needed, change the requested <structfield>format</structfield> based on
155 device requirements and return the possibly modified value. Applications
156 can then choose to try a different format or accept the returned value and
157 continue.</para>
158
159 <para>Formats returned by the driver during a negotiation iteration are
160 guaranteed to be supported by the device. In particular, drivers guarantee
161 that a returned format will not be further changed if passed to an
162 &VIDIOC-SUBDEV-S-FMT; call as-is (as long as external parameters, such as
163 formats on other pads or links' configuration are not changed).</para>
164
165 <para>Drivers automatically propagate formats inside sub-devices. When a
166 try or active format is set on a pad, corresponding formats on other pads
167 of the same sub-device can be modified by the driver. Drivers are free to
168 modify formats as required by the device. However, they should comply with
169 the following rules when possible:
170 <itemizedlist>
171 <listitem>Formats should be propagated from sink pads to source pads.
172 Modifying a format on a source pad should not modify the format on any
173 sink pad.</listitem>
174 <listitem>Sub-devices that scale frames using variable scaling factors
175 should reset the scale factors to default values when sink pads formats
176 are modified. If the 1:1 scaling ratio is supported, this means that
177 source pads formats should be reset to the sink pads formats.</listitem>
178 </itemizedlist>
179 </para>
180
181 <para>Formats are not propagated across links, as that would involve
182 propagating them from one sub-device file handle to another. Applications
183 must then take care to configure both ends of every link explicitly with
184 compatible formats. Identical formats on the two ends of a link are
185 guaranteed to be compatible. Drivers are free to accept different formats
186 matching device requirements as being compatible.</para>
187
188 <para><xref linkend="sample-pipeline-config" xrefstyle="template:Table %n"/>
189 shows a sample configuration sequence for the pipeline described in
190 <xref linkend="pipeline-scaling" xrefstyle="template:Figure %n"/> (table
191 columns list entity names and pad numbers).</para>
192
193 <table pgwide="0" frame="none" id="sample-pipeline-config">
194 <title>Sample Pipeline Configuration</title>
195 <tgroup cols="3">
196 <colspec colname="what"/>
197 <colspec colname="sensor-0" />
198 <colspec colname="frontend-0" />
199 <colspec colname="frontend-1" />
200 <colspec colname="scaler-0" />
201 <colspec colname="scaler-1" />
202 <thead>
203 <row>
204 <entry></entry>
205 <entry>Sensor/0</entry>
206 <entry>Frontend/0</entry>
207 <entry>Frontend/1</entry>
208 <entry>Scaler/0</entry>
209 <entry>Scaler/1</entry>
210 </row>
211 </thead>
212 <tbody valign="top">
213 <row>
214 <entry>Initial state</entry>
215 <entry>2048x1536</entry>
216 <entry>-</entry>
217 <entry>-</entry>
218 <entry>-</entry>
219 <entry>-</entry>
220 </row>
221 <row>
222 <entry>Configure frontend input</entry>
223 <entry>2048x1536</entry>
224 <entry><emphasis>2048x1536</emphasis></entry>
225 <entry><emphasis>2046x1534</emphasis></entry>
226 <entry>-</entry>
227 <entry>-</entry>
228 </row>
229 <row>
230 <entry>Configure scaler input</entry>
231 <entry>2048x1536</entry>
232 <entry>2048x1536</entry>
233 <entry>2046x1534</entry>
234 <entry><emphasis>2046x1534</emphasis></entry>
235 <entry><emphasis>2046x1534</emphasis></entry>
236 </row>
237 <row>
238 <entry>Configure scaler output</entry>
239 <entry>2048x1536</entry>
240 <entry>2048x1536</entry>
241 <entry>2046x1534</entry>
242 <entry>2046x1534</entry>
243 <entry><emphasis>1280x960</emphasis></entry>
244 </row>
245 </tbody>
246 </tgroup>
247 </table>
248
249 <para>
250 <orderedlist>
251 <listitem>Initial state. The sensor output is set to its native 3MP
252 resolution. Resolutions on the host frontend and scaler input and output
253 pads are undefined.</listitem>
254 <listitem>The application configures the frontend input pad resolution to
255 2048x1536. The driver propagates the format to the frontend output pad.
256 Note that the propagated output format can be different, as in this case,
257 than the input format, as the hardware might need to crop pixels (for
258 instance when converting a Bayer filter pattern to RGB or YUV).</listitem>
259 <listitem>The application configures the scaler input pad resolution to
260 2046x1534 to match the frontend output resolution. The driver propagates
261 the format to the scaler output pad.</listitem>
262 <listitem>The application configures the scaler output pad resolution to
263 1280x960.</listitem>
264 </orderedlist>
265 </para>
266
267 <para>When satisfied with the try results, applications can set the active
268 formats by setting the <structfield>which</structfield> argument to
269 <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. Active formats are changed
270 exactly as try formats by drivers. To avoid modifying the hardware state
271 during format negotiation, applications should negotiate try formats first
272 and then modify the active settings using the try formats returned during
273 the last negotiation iteration. This guarantees that the active format
274 will be applied as-is by the driver without being modified.
275 </para>
276 </section>
277
278 </section>
279
280 &sub-subdev-formats;
diff --git a/Documentation/DocBook/v4l/subdev-formats.xml b/Documentation/DocBook/v4l/subdev-formats.xml
new file mode 100644
index 000000000000..0cae57207006
--- /dev/null
+++ b/Documentation/DocBook/v4l/subdev-formats.xml
@@ -0,0 +1,2416 @@
1<section id="v4l2-mbus-format">
2 <title>Media Bus Formats</title>
3
4 <table pgwide="1" frame="none" id="v4l2-mbus-framefmt">
5 <title>struct <structname>v4l2_mbus_framefmt</structname></title>
6 <tgroup cols="3">
7 &cs-str;
8 <tbody valign="top">
9 <row>
10 <entry>__u32</entry>
11 <entry><structfield>width</structfield></entry>
12 <entry>Image width, in pixels.</entry>
13 </row>
14 <row>
15 <entry>__u32</entry>
16 <entry><structfield>height</structfield></entry>
17 <entry>Image height, in pixels.</entry>
18 </row>
19 <row>
20 <entry>__u32</entry>
21 <entry><structfield>code</structfield></entry>
22 <entry>Format code, from &v4l2-mbus-pixelcode;.</entry>
23 </row>
24 <row>
25 <entry>__u32</entry>
26 <entry><structfield>field</structfield></entry>
27 <entry>Field order, from &v4l2-field;. See
28 <xref linkend="field-order" /> for details.</entry>
29 </row>
30 <row>
31 <entry>__u32</entry>
32 <entry><structfield>colorspace</structfield></entry>
33 <entry>Image colorspace, from &v4l2-colorspace;. See
34 <xref linkend="colorspaces" /> for details.</entry>
35 </row>
36 <row>
37 <entry>__u32</entry>
38 <entry><structfield>reserved</structfield>[7]</entry>
39 <entry>Reserved for future extensions. Applications and drivers must
40 set the array to zero.</entry>
41 </row>
42 </tbody>
43 </tgroup>
44 </table>
45
46 <section id="v4l2-mbus-pixelcode">
47 <title>Media Bus Pixel Codes</title>
48
49 <para>The media bus pixel codes describe image formats as flowing over
50 physical busses (both between separate physical components and inside SoC
51 devices). This should not be confused with the V4L2 pixel formats that
52 describe, using four character codes, image formats as stored in memory.
53 </para>
54
55 <para>While there is a relationship between image formats on busses and
56 image formats in memory (a raw Bayer image won't be magically converted to
57 JPEG just by storing it to memory), there is no one-to-one correspondance
58 between them.</para>
59
60 <section>
61 <title>Packed RGB Formats</title>
62
63 <para>Those formats transfer pixel data as red, green and blue components.
64 The format code is made of the following information.
65 <itemizedlist>
66 <listitem>The red, green and blue components order code, as encoded in a
67 pixel sample. Possible values are RGB and BGR.</listitem>
68 <listitem>The number of bits per component, for each component. The values
69 can be different for all components. Common values are 555 and 565.
70 </listitem>
71 <listitem>The number of bus samples per pixel. Pixels that are wider than
72 the bus width must be transferred in multiple samples. Common values are
73 1 and 2.</listitem>
74 <listitem>The bus width.</listitem>
75 <listitem>For formats where the total number of bits per pixel is smaller
76 than the number of bus samples per pixel times the bus width, a padding
77 value stating if the bytes are padded in their most high order bits
78 (PADHI) or low order bits (PADLO).</listitem>
79 <listitem>For formats where the number of bus samples per pixel is larger
80 than 1, an endianness value stating if the pixel is transferred MSB first
81 (BE) or LSB first (LE).</listitem>
82 </itemizedlist>
83 </para>
84
85 <para>For instance, a format where pixels are encoded as 5-bits red, 5-bits
86 green and 5-bit blue values padded on the high bit, transferred as 2 8-bit
87 samples per pixel with the most significant bits (padding, red and half of
88 the green value) transferred first will be named
89 <constant>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</constant>.
90 </para>
91
92 <para>The following tables list existing packet RGB formats.</para>
93
94 <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb">
95 <title>RGB formats</title>
96 <tgroup cols="11">
97 <colspec colname="id" align="left" />
98 <colspec colname="code" align="center"/>
99 <colspec colname="bit" />
100 <colspec colnum="4" colname="b07" align="center" />
101 <colspec colnum="5" colname="b06" align="center" />
102 <colspec colnum="6" colname="b05" align="center" />
103 <colspec colnum="7" colname="b04" align="center" />
104 <colspec colnum="8" colname="b03" align="center" />
105 <colspec colnum="9" colname="b02" align="center" />
106 <colspec colnum="10" colname="b01" align="center" />
107 <colspec colnum="11" colname="b00" align="center" />
108 <spanspec namest="b07" nameend="b00" spanname="b0" />
109 <thead>
110 <row>
111 <entry>Identifier</entry>
112 <entry>Code</entry>
113 <entry></entry>
114 <entry spanname="b0">Data organization</entry>
115 </row>
116 <row>
117 <entry></entry>
118 <entry></entry>
119 <entry>Bit</entry>
120 <entry>7</entry>
121 <entry>6</entry>
122 <entry>5</entry>
123 <entry>4</entry>
124 <entry>3</entry>
125 <entry>2</entry>
126 <entry>1</entry>
127 <entry>0</entry>
128 </row>
129 </thead>
130 <tbody valign="top">
131 <row id="V4L2-MBUS-FMT-RGB444-2X8-PADHI-BE">
132 <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE</entry>
133 <entry>0x1001</entry>
134 <entry></entry>
135 <entry>0</entry>
136 <entry>0</entry>
137 <entry>0</entry>
138 <entry>0</entry>
139 <entry>r<subscript>3</subscript></entry>
140 <entry>r<subscript>2</subscript></entry>
141 <entry>r<subscript>1</subscript></entry>
142 <entry>r<subscript>0</subscript></entry>
143 </row>
144 <row>
145 <entry></entry>
146 <entry></entry>
147 <entry></entry>
148 <entry>g<subscript>3</subscript></entry>
149 <entry>g<subscript>2</subscript></entry>
150 <entry>g<subscript>1</subscript></entry>
151 <entry>g<subscript>0</subscript></entry>
152 <entry>b<subscript>3</subscript></entry>
153 <entry>b<subscript>2</subscript></entry>
154 <entry>b<subscript>1</subscript></entry>
155 <entry>b<subscript>0</subscript></entry>
156 </row>
157 <row id="V4L2-MBUS-FMT-RGB444-2X8-PADHI-LE">
158 <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE</entry>
159 <entry>0x1002</entry>
160 <entry></entry>
161 <entry>g<subscript>3</subscript></entry>
162 <entry>g<subscript>2</subscript></entry>
163 <entry>g<subscript>1</subscript></entry>
164 <entry>g<subscript>0</subscript></entry>
165 <entry>b<subscript>3</subscript></entry>
166 <entry>b<subscript>2</subscript></entry>
167 <entry>b<subscript>1</subscript></entry>
168 <entry>b<subscript>0</subscript></entry>
169 </row>
170 <row>
171 <entry></entry>
172 <entry></entry>
173 <entry></entry>
174 <entry>0</entry>
175 <entry>0</entry>
176 <entry>0</entry>
177 <entry>0</entry>
178 <entry>r<subscript>3</subscript></entry>
179 <entry>r<subscript>2</subscript></entry>
180 <entry>r<subscript>1</subscript></entry>
181 <entry>r<subscript>0</subscript></entry>
182 </row>
183 <row id="V4L2-MBUS-FMT-RGB555-2X8-PADHI-BE">
184 <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</entry>
185 <entry>0x1003</entry>
186 <entry></entry>
187 <entry>0</entry>
188 <entry>r<subscript>4</subscript></entry>
189 <entry>r<subscript>3</subscript></entry>
190 <entry>r<subscript>2</subscript></entry>
191 <entry>r<subscript>1</subscript></entry>
192 <entry>r<subscript>0</subscript></entry>
193 <entry>g<subscript>4</subscript></entry>
194 <entry>g<subscript>3</subscript></entry>
195 </row>
196 <row>
197 <entry></entry>
198 <entry></entry>
199 <entry></entry>
200 <entry>g<subscript>2</subscript></entry>
201 <entry>g<subscript>1</subscript></entry>
202 <entry>g<subscript>0</subscript></entry>
203 <entry>b<subscript>4</subscript></entry>
204 <entry>b<subscript>3</subscript></entry>
205 <entry>b<subscript>2</subscript></entry>
206 <entry>b<subscript>1</subscript></entry>
207 <entry>b<subscript>0</subscript></entry>
208 </row>
209 <row id="V4L2-MBUS-FMT-RGB555-2X8-PADHI-LE">
210 <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE</entry>
211 <entry>0x1004</entry>
212 <entry></entry>
213 <entry>g<subscript>2</subscript></entry>
214 <entry>g<subscript>1</subscript></entry>
215 <entry>g<subscript>0</subscript></entry>
216 <entry>b<subscript>4</subscript></entry>
217 <entry>b<subscript>3</subscript></entry>
218 <entry>b<subscript>2</subscript></entry>
219 <entry>b<subscript>1</subscript></entry>
220 <entry>b<subscript>0</subscript></entry>
221 </row>
222 <row>
223 <entry></entry>
224 <entry></entry>
225 <entry></entry>
226 <entry>0</entry>
227 <entry>r<subscript>4</subscript></entry>
228 <entry>r<subscript>3</subscript></entry>
229 <entry>r<subscript>2</subscript></entry>
230 <entry>r<subscript>1</subscript></entry>
231 <entry>r<subscript>0</subscript></entry>
232 <entry>g<subscript>4</subscript></entry>
233 <entry>g<subscript>3</subscript></entry>
234 </row>
235 <row id="V4L2-MBUS-FMT-BGR565-2X8-BE">
236 <entry>V4L2_MBUS_FMT_BGR565_2X8_BE</entry>
237 <entry>0x1005</entry>
238 <entry></entry>
239 <entry>b<subscript>4</subscript></entry>
240 <entry>b<subscript>3</subscript></entry>
241 <entry>b<subscript>2</subscript></entry>
242 <entry>b<subscript>1</subscript></entry>
243 <entry>b<subscript>0</subscript></entry>
244 <entry>g<subscript>5</subscript></entry>
245 <entry>g<subscript>4</subscript></entry>
246 <entry>g<subscript>3</subscript></entry>
247 </row>
248 <row>
249 <entry></entry>
250 <entry></entry>
251 <entry></entry>
252 <entry>g<subscript>2</subscript></entry>
253 <entry>g<subscript>1</subscript></entry>
254 <entry>g<subscript>0</subscript></entry>
255 <entry>r<subscript>4</subscript></entry>
256 <entry>r<subscript>3</subscript></entry>
257 <entry>r<subscript>2</subscript></entry>
258 <entry>r<subscript>1</subscript></entry>
259 <entry>r<subscript>0</subscript></entry>
260 </row>
261 <row id="V4L2-MBUS-FMT-BGR565-2X8-LE">
262 <entry>V4L2_MBUS_FMT_BGR565_2X8_LE</entry>
263 <entry>0x1006</entry>
264 <entry></entry>
265 <entry>g<subscript>2</subscript></entry>
266 <entry>g<subscript>1</subscript></entry>
267 <entry>g<subscript>0</subscript></entry>
268 <entry>r<subscript>4</subscript></entry>
269 <entry>r<subscript>3</subscript></entry>
270 <entry>r<subscript>2</subscript></entry>
271 <entry>r<subscript>1</subscript></entry>
272 <entry>r<subscript>0</subscript></entry>
273 </row>
274 <row>
275 <entry></entry>
276 <entry></entry>
277 <entry></entry>
278 <entry>b<subscript>4</subscript></entry>
279 <entry>b<subscript>3</subscript></entry>
280 <entry>b<subscript>2</subscript></entry>
281 <entry>b<subscript>1</subscript></entry>
282 <entry>b<subscript>0</subscript></entry>
283 <entry>g<subscript>5</subscript></entry>
284 <entry>g<subscript>4</subscript></entry>
285 <entry>g<subscript>3</subscript></entry>
286 </row>
287 <row id="V4L2-MBUS-FMT-RGB565-2X8-BE">
288 <entry>V4L2_MBUS_FMT_RGB565_2X8_BE</entry>
289 <entry>0x1007</entry>
290 <entry></entry>
291 <entry>r<subscript>4</subscript></entry>
292 <entry>r<subscript>3</subscript></entry>
293 <entry>r<subscript>2</subscript></entry>
294 <entry>r<subscript>1</subscript></entry>
295 <entry>r<subscript>0</subscript></entry>
296 <entry>g<subscript>5</subscript></entry>
297 <entry>g<subscript>4</subscript></entry>
298 <entry>g<subscript>3</subscript></entry>
299 </row>
300 <row>
301 <entry></entry>
302 <entry></entry>
303 <entry></entry>
304 <entry>g<subscript>2</subscript></entry>
305 <entry>g<subscript>1</subscript></entry>
306 <entry>g<subscript>0</subscript></entry>
307 <entry>b<subscript>4</subscript></entry>
308 <entry>b<subscript>3</subscript></entry>
309 <entry>b<subscript>2</subscript></entry>
310 <entry>b<subscript>1</subscript></entry>
311 <entry>b<subscript>0</subscript></entry>
312 </row>
313 <row id="V4L2-MBUS-FMT-RGB565-2X8-LE">
314 <entry>V4L2_MBUS_FMT_RGB565_2X8_LE</entry>
315 <entry>0x1008</entry>
316 <entry></entry>
317 <entry>g<subscript>2</subscript></entry>
318 <entry>g<subscript>1</subscript></entry>
319 <entry>g<subscript>0</subscript></entry>
320 <entry>b<subscript>4</subscript></entry>
321 <entry>b<subscript>3</subscript></entry>
322 <entry>b<subscript>2</subscript></entry>
323 <entry>b<subscript>1</subscript></entry>
324 <entry>b<subscript>0</subscript></entry>
325 </row>
326 <row>
327 <entry></entry>
328 <entry></entry>
329 <entry></entry>
330 <entry>r<subscript>4</subscript></entry>
331 <entry>r<subscript>3</subscript></entry>
332 <entry>r<subscript>2</subscript></entry>
333 <entry>r<subscript>1</subscript></entry>
334 <entry>r<subscript>0</subscript></entry>
335 <entry>g<subscript>5</subscript></entry>
336 <entry>g<subscript>4</subscript></entry>
337 <entry>g<subscript>3</subscript></entry>
338 </row>
339 </tbody>
340 </tgroup>
341 </table>
342 </section>
343
344 <section>
345 <title>Bayer Formats</title>
346
347 <para>Those formats transfer pixel data as red, green and blue components.
348 The format code is made of the following information.
349 <itemizedlist>
350 <listitem>The red, green and blue components order code, as encoded in a
351 pixel sample. The possible values are shown in <xref
352 linkend="bayer-patterns" />.</listitem>
353 <listitem>The number of bits per pixel component. All components are
354 transferred on the same number of bits. Common values are 8, 10 and 12.
355 </listitem>
356 <listitem>If the pixel components are DPCM-compressed, a mention of the
357 DPCM compression and the number of bits per compressed pixel component.
358 </listitem>
359 <listitem>The number of bus samples per pixel. Pixels that are wider than
360 the bus width must be transferred in multiple samples. Common values are
361 1 and 2.</listitem>
362 <listitem>The bus width.</listitem>
363 <listitem>For formats where the total number of bits per pixel is smaller
364 than the number of bus samples per pixel times the bus width, a padding
365 value stating if the bytes are padded in their most high order bits
366 (PADHI) or low order bits (PADLO).</listitem>
367 <listitem>For formats where the number of bus samples per pixel is larger
368 than 1, an endianness value stating if the pixel is transferred MSB first
369 (BE) or LSB first (LE).</listitem>
370 </itemizedlist>
371 </para>
372
373 <para>For instance, a format with uncompressed 10-bit Bayer components
374 arranged in a red, green, green, blue pattern transferred as 2 8-bit
375 samples per pixel with the least significant bits transferred first will
376 be named <constant>V4L2_MBUS_FMT_SRGGB10_2X8_PADHI_LE</constant>.
377 </para>
378
379 <figure id="bayer-patterns">
380 <title>Bayer Patterns</title>
381 <mediaobject>
382 <imageobject>
383 <imagedata fileref="bayer.pdf" format="PS" />
384 </imageobject>
385 <imageobject>
386 <imagedata fileref="bayer.png" format="PNG" />
387 </imageobject>
388 <textobject>
389 <phrase>Bayer filter color patterns</phrase>
390 </textobject>
391 </mediaobject>
392 </figure>
393
394 <para>The following table lists existing packet Bayer formats. The data
395 organization is given as an example for the first pixel only.</para>
396
397 <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-bayer">
398 <title>Bayer Formats</title>
399 <tgroup cols="15">
400 <colspec colname="id" align="left" />
401 <colspec colname="code" align="center"/>
402 <colspec colname="bit" />
403 <colspec colnum="4" colname="b11" align="center" />
404 <colspec colnum="5" colname="b10" align="center" />
405 <colspec colnum="6" colname="b09" align="center" />
406 <colspec colnum="7" colname="b08" align="center" />
407 <colspec colnum="8" colname="b07" align="center" />
408 <colspec colnum="9" colname="b06" align="center" />
409 <colspec colnum="10" colname="b05" align="center" />
410 <colspec colnum="11" colname="b04" align="center" />
411 <colspec colnum="12" colname="b03" align="center" />
412 <colspec colnum="13" colname="b02" align="center" />
413 <colspec colnum="14" colname="b01" align="center" />
414 <colspec colnum="15" colname="b00" align="center" />
415 <spanspec namest="b11" nameend="b00" spanname="b0" />
416 <thead>
417 <row>
418 <entry>Identifier</entry>
419 <entry>Code</entry>
420 <entry></entry>
421 <entry spanname="b0">Data organization</entry>
422 </row>
423 <row>
424 <entry></entry>
425 <entry></entry>
426 <entry>Bit</entry>
427 <entry>11</entry>
428 <entry>10</entry>
429 <entry>9</entry>
430 <entry>8</entry>
431 <entry>7</entry>
432 <entry>6</entry>
433 <entry>5</entry>
434 <entry>4</entry>
435 <entry>3</entry>
436 <entry>2</entry>
437 <entry>1</entry>
438 <entry>0</entry>
439 </row>
440 </thead>
441 <tbody valign="top">
442 <row id="V4L2-MBUS-FMT-SBGGR8-1X8">
443 <entry>V4L2_MBUS_FMT_SBGGR8_1X8</entry>
444 <entry>0x3001</entry>
445 <entry></entry>
446 <entry>-</entry>
447 <entry>-</entry>
448 <entry>-</entry>
449 <entry>-</entry>
450 <entry>b<subscript>7</subscript></entry>
451 <entry>b<subscript>6</subscript></entry>
452 <entry>b<subscript>5</subscript></entry>
453 <entry>b<subscript>4</subscript></entry>
454 <entry>b<subscript>3</subscript></entry>
455 <entry>b<subscript>2</subscript></entry>
456 <entry>b<subscript>1</subscript></entry>
457 <entry>b<subscript>0</subscript></entry>
458 </row>
459 <row id="V4L2-MBUS-FMT-SGRBG8-1X8">
460 <entry>V4L2_MBUS_FMT_SGRBG8_1X8</entry>
461 <entry>0x3002</entry>
462 <entry></entry>
463 <entry>-</entry>
464 <entry>-</entry>
465 <entry>-</entry>
466 <entry>-</entry>
467 <entry>g<subscript>7</subscript></entry>
468 <entry>g<subscript>6</subscript></entry>
469 <entry>g<subscript>5</subscript></entry>
470 <entry>g<subscript>4</subscript></entry>
471 <entry>g<subscript>3</subscript></entry>
472 <entry>g<subscript>2</subscript></entry>
473 <entry>g<subscript>1</subscript></entry>
474 <entry>g<subscript>0</subscript></entry>
475 </row>
476 <row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8">
477 <entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry>
478 <entry>0x300b</entry>
479 <entry></entry>
480 <entry>-</entry>
481 <entry>-</entry>
482 <entry>-</entry>
483 <entry>-</entry>
484 <entry>b<subscript>7</subscript></entry>
485 <entry>b<subscript>6</subscript></entry>
486 <entry>b<subscript>5</subscript></entry>
487 <entry>b<subscript>4</subscript></entry>
488 <entry>b<subscript>3</subscript></entry>
489 <entry>b<subscript>2</subscript></entry>
490 <entry>b<subscript>1</subscript></entry>
491 <entry>b<subscript>0</subscript></entry>
492 </row>
493 <row id="V4L2-MBUS-FMT-SGBRG10-DPCM8-1X8">
494 <entry>V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8</entry>
495 <entry>0x300c</entry>
496 <entry></entry>
497 <entry>-</entry>
498 <entry>-</entry>
499 <entry>-</entry>
500 <entry>-</entry>
501 <entry>g<subscript>7</subscript></entry>
502 <entry>g<subscript>6</subscript></entry>
503 <entry>g<subscript>5</subscript></entry>
504 <entry>g<subscript>4</subscript></entry>
505 <entry>g<subscript>3</subscript></entry>
506 <entry>g<subscript>2</subscript></entry>
507 <entry>g<subscript>1</subscript></entry>
508 <entry>g<subscript>0</subscript></entry>
509 </row>
510 <row id="V4L2-MBUS-FMT-SGRBG10-DPCM8-1X8">
511 <entry>V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8</entry>
512 <entry>0x3009</entry>
513 <entry></entry>
514 <entry>-</entry>
515 <entry>-</entry>
516 <entry>-</entry>
517 <entry>-</entry>
518 <entry>g<subscript>7</subscript></entry>
519 <entry>g<subscript>6</subscript></entry>
520 <entry>g<subscript>5</subscript></entry>
521 <entry>g<subscript>4</subscript></entry>
522 <entry>g<subscript>3</subscript></entry>
523 <entry>g<subscript>2</subscript></entry>
524 <entry>g<subscript>1</subscript></entry>
525 <entry>g<subscript>0</subscript></entry>
526 </row>
527 <row id="V4L2-MBUS-FMT-SRGGB10-DPCM8-1X8">
528 <entry>V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8</entry>
529 <entry>0x300d</entry>
530 <entry></entry>
531 <entry>-</entry>
532 <entry>-</entry>
533 <entry>-</entry>
534 <entry>-</entry>
535 <entry>r<subscript>7</subscript></entry>
536 <entry>r<subscript>6</subscript></entry>
537 <entry>r<subscript>5</subscript></entry>
538 <entry>r<subscript>4</subscript></entry>
539 <entry>r<subscript>3</subscript></entry>
540 <entry>r<subscript>2</subscript></entry>
541 <entry>r<subscript>1</subscript></entry>
542 <entry>r<subscript>0</subscript></entry>
543 </row>
544 <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADHI-BE">
545 <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE</entry>
546 <entry>0x3003</entry>
547 <entry></entry>
548 <entry>-</entry>
549 <entry>-</entry>
550 <entry>-</entry>
551 <entry>-</entry>
552 <entry>0</entry>
553 <entry>0</entry>
554 <entry>0</entry>
555 <entry>0</entry>
556 <entry>0</entry>
557 <entry>0</entry>
558 <entry>b<subscript>9</subscript></entry>
559 <entry>b<subscript>8</subscript></entry>
560 </row>
561 <row>
562 <entry></entry>
563 <entry></entry>
564 <entry></entry>
565 <entry>-</entry>
566 <entry>-</entry>
567 <entry>-</entry>
568 <entry>-</entry>
569 <entry>b<subscript>7</subscript></entry>
570 <entry>b<subscript>6</subscript></entry>
571 <entry>b<subscript>5</subscript></entry>
572 <entry>b<subscript>4</subscript></entry>
573 <entry>b<subscript>3</subscript></entry>
574 <entry>b<subscript>2</subscript></entry>
575 <entry>b<subscript>1</subscript></entry>
576 <entry>b<subscript>0</subscript></entry>
577 </row>
578 <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADHI-LE">
579 <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE</entry>
580 <entry>0x3004</entry>
581 <entry></entry>
582 <entry>-</entry>
583 <entry>-</entry>
584 <entry>-</entry>
585 <entry>-</entry>
586 <entry>b<subscript>7</subscript></entry>
587 <entry>b<subscript>6</subscript></entry>
588 <entry>b<subscript>5</subscript></entry>
589 <entry>b<subscript>4</subscript></entry>
590 <entry>b<subscript>3</subscript></entry>
591 <entry>b<subscript>2</subscript></entry>
592 <entry>b<subscript>1</subscript></entry>
593 <entry>b<subscript>0</subscript></entry>
594 </row>
595 <row>
596 <entry></entry>
597 <entry></entry>
598 <entry></entry>
599 <entry>-</entry>
600 <entry>-</entry>
601 <entry>-</entry>
602 <entry>-</entry>
603 <entry>0</entry>
604 <entry>0</entry>
605 <entry>0</entry>
606 <entry>0</entry>
607 <entry>0</entry>
608 <entry>0</entry>
609 <entry>b<subscript>9</subscript></entry>
610 <entry>b<subscript>8</subscript></entry>
611 </row>
612 <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADLO-BE">
613 <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE</entry>
614 <entry>0x3005</entry>
615 <entry></entry>
616 <entry>-</entry>
617 <entry>-</entry>
618 <entry>-</entry>
619 <entry>-</entry>
620 <entry>b<subscript>9</subscript></entry>
621 <entry>b<subscript>8</subscript></entry>
622 <entry>b<subscript>7</subscript></entry>
623 <entry>b<subscript>6</subscript></entry>
624 <entry>b<subscript>5</subscript></entry>
625 <entry>b<subscript>4</subscript></entry>
626 <entry>b<subscript>3</subscript></entry>
627 <entry>b<subscript>2</subscript></entry>
628 </row>
629 <row>
630 <entry></entry>
631 <entry></entry>
632 <entry></entry>
633 <entry>-</entry>
634 <entry>-</entry>
635 <entry>-</entry>
636 <entry>-</entry>
637 <entry>b<subscript>1</subscript></entry>
638 <entry>b<subscript>0</subscript></entry>
639 <entry>0</entry>
640 <entry>0</entry>
641 <entry>0</entry>
642 <entry>0</entry>
643 <entry>0</entry>
644 <entry>0</entry>
645 </row>
646 <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADLO-LE">
647 <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE</entry>
648 <entry>0x3006</entry>
649 <entry></entry>
650 <entry>-</entry>
651 <entry>-</entry>
652 <entry>-</entry>
653 <entry>-</entry>
654 <entry>b<subscript>1</subscript></entry>
655 <entry>b<subscript>0</subscript></entry>
656 <entry>0</entry>
657 <entry>0</entry>
658 <entry>0</entry>
659 <entry>0</entry>
660 <entry>0</entry>
661 <entry>0</entry>
662 </row>
663 <row>
664 <entry></entry>
665 <entry></entry>
666 <entry></entry>
667 <entry>-</entry>
668 <entry>-</entry>
669 <entry>-</entry>
670 <entry>-</entry>
671 <entry>b<subscript>9</subscript></entry>
672 <entry>b<subscript>8</subscript></entry>
673 <entry>b<subscript>7</subscript></entry>
674 <entry>b<subscript>6</subscript></entry>
675 <entry>b<subscript>5</subscript></entry>
676 <entry>b<subscript>4</subscript></entry>
677 <entry>b<subscript>3</subscript></entry>
678 <entry>b<subscript>2</subscript></entry>
679 </row>
680 <row id="V4L2-MBUS-FMT-SBGGR10-1X10">
681 <entry>V4L2_MBUS_FMT_SBGGR10_1X10</entry>
682 <entry>0x3007</entry>
683 <entry></entry>
684 <entry>-</entry>
685 <entry>-</entry>
686 <entry>b<subscript>9</subscript></entry>
687 <entry>b<subscript>8</subscript></entry>
688 <entry>b<subscript>7</subscript></entry>
689 <entry>b<subscript>6</subscript></entry>
690 <entry>b<subscript>5</subscript></entry>
691 <entry>b<subscript>4</subscript></entry>
692 <entry>b<subscript>3</subscript></entry>
693 <entry>b<subscript>2</subscript></entry>
694 <entry>b<subscript>1</subscript></entry>
695 <entry>b<subscript>0</subscript></entry>
696 </row>
697 <row id="V4L2-MBUS-FMT-SGBRG10-1X10">
698 <entry>V4L2_MBUS_FMT_SGBRG10_1X10</entry>
699 <entry>0x300e</entry>
700 <entry></entry>
701 <entry>-</entry>
702 <entry>-</entry>
703 <entry>g<subscript>9</subscript></entry>
704 <entry>g<subscript>8</subscript></entry>
705 <entry>g<subscript>7</subscript></entry>
706 <entry>g<subscript>6</subscript></entry>
707 <entry>g<subscript>5</subscript></entry>
708 <entry>g<subscript>4</subscript></entry>
709 <entry>g<subscript>3</subscript></entry>
710 <entry>g<subscript>2</subscript></entry>
711 <entry>g<subscript>1</subscript></entry>
712 <entry>g<subscript>0</subscript></entry>
713 </row>
714 <row id="V4L2-MBUS-FMT-SGRBG10-1X10">
715 <entry>V4L2_MBUS_FMT_SGRBG10_1X10</entry>
716 <entry>0x300a</entry>
717 <entry></entry>
718 <entry>-</entry>
719 <entry>-</entry>
720 <entry>g<subscript>9</subscript></entry>
721 <entry>g<subscript>8</subscript></entry>
722 <entry>g<subscript>7</subscript></entry>
723 <entry>g<subscript>6</subscript></entry>
724 <entry>g<subscript>5</subscript></entry>
725 <entry>g<subscript>4</subscript></entry>
726 <entry>g<subscript>3</subscript></entry>
727 <entry>g<subscript>2</subscript></entry>
728 <entry>g<subscript>1</subscript></entry>
729 <entry>g<subscript>0</subscript></entry>
730 </row>
731 <row id="V4L2-MBUS-FMT-SRGGB10-1X10">
732 <entry>V4L2_MBUS_FMT_SRGGB10_1X10</entry>
733 <entry>0x300f</entry>
734 <entry></entry>
735 <entry>-</entry>
736 <entry>-</entry>
737 <entry>r<subscript>9</subscript></entry>
738 <entry>r<subscript>8</subscript></entry>
739 <entry>r<subscript>7</subscript></entry>
740 <entry>r<subscript>6</subscript></entry>
741 <entry>r<subscript>5</subscript></entry>
742 <entry>r<subscript>4</subscript></entry>
743 <entry>r<subscript>3</subscript></entry>
744 <entry>r<subscript>2</subscript></entry>
745 <entry>r<subscript>1</subscript></entry>
746 <entry>r<subscript>0</subscript></entry>
747 </row>
748 <row id="V4L2-MBUS-FMT-SBGGR12-1X12">
749 <entry>V4L2_MBUS_FMT_SBGGR12_1X12</entry>
750 <entry>0x3008</entry>
751 <entry></entry>
752 <entry>b<subscript>11</subscript></entry>
753 <entry>b<subscript>10</subscript></entry>
754 <entry>b<subscript>9</subscript></entry>
755 <entry>b<subscript>8</subscript></entry>
756 <entry>b<subscript>7</subscript></entry>
757 <entry>b<subscript>6</subscript></entry>
758 <entry>b<subscript>5</subscript></entry>
759 <entry>b<subscript>4</subscript></entry>
760 <entry>b<subscript>3</subscript></entry>
761 <entry>b<subscript>2</subscript></entry>
762 <entry>b<subscript>1</subscript></entry>
763 <entry>b<subscript>0</subscript></entry>
764 </row>
765 </tbody>
766 </tgroup>
767 </table>
768 </section>
769
770 <section>
771 <title>Packed YUV Formats</title>
772
773 <para>Those data formats transfer pixel data as (possibly downsampled) Y, U
774 and V components. The format code is made of the following information.
775 <itemizedlist>
776 <listitem>The Y, U and V components order code, as transferred on the
777 bus. Possible values are YUYV, UYVY, YVYU and VYUY.</listitem>
778 <listitem>The number of bits per pixel component. All components are
779 transferred on the same number of bits. Common values are 8, 10 and 12.
780 </listitem>
781 <listitem>The number of bus samples per pixel. Pixels that are wider than
782 the bus width must be transferred in multiple samples. Common values are
783 1, 1.5 (encoded as 1_5) and 2.</listitem>
784 <listitem>The bus width. When the bus width is larger than the number of
785 bits per pixel component, several components are packed in a single bus
786 sample. The components are ordered as specified by the order code, with
787 components on the left of the code transferred in the high order bits.
788 Common values are 8 and 16.
789 </listitem>
790 </itemizedlist>
791 </para>
792
793 <para>For instance, a format where pixels are encoded as 8-bit YUV values
794 downsampled to 4:2:2 and transferred as 2 8-bit bus samples per pixel in the
795 U, Y, V, Y order will be named <constant>V4L2_MBUS_FMT_UYVY8_2X8</constant>.
796 </para>
797
798 <para>The following table lisst existing packet YUV formats.</para>
799
800 <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-yuv8">
801 <title>YUV Formats</title>
802 <tgroup cols="23">
803 <colspec colname="id" align="left" />
804 <colspec colname="code" align="center"/>
805 <colspec colname="bit" />
806 <colspec colnum="4" colname="b19" align="center" />
807 <colspec colnum="5" colname="b18" align="center" />
808 <colspec colnum="6" colname="b17" align="center" />
809 <colspec colnum="7" colname="b16" align="center" />
810 <colspec colnum="8" colname="b15" align="center" />
811 <colspec colnum="9" colname="b14" align="center" />
812 <colspec colnum="10" colname="b13" align="center" />
813 <colspec colnum="11" colname="b12" align="center" />
814 <colspec colnum="12" colname="b11" align="center" />
815 <colspec colnum="13" colname="b10" align="center" />
816 <colspec colnum="14" colname="b09" align="center" />
817 <colspec colnum="15" colname="b08" align="center" />
818 <colspec colnum="16" colname="b07" align="center" />
819 <colspec colnum="17" colname="b06" align="center" />
820 <colspec colnum="18" colname="b05" align="center" />
821 <colspec colnum="19" colname="b04" align="center" />
822 <colspec colnum="20" colname="b03" align="center" />
823 <colspec colnum="21" colname="b02" align="center" />
824 <colspec colnum="22" colname="b01" align="center" />
825 <colspec colnum="23" colname="b00" align="center" />
826 <spanspec namest="b19" nameend="b00" spanname="b0" />
827 <thead>
828 <row>
829 <entry>Identifier</entry>
830 <entry>Code</entry>
831 <entry></entry>
832 <entry spanname="b0">Data organization</entry>
833 </row>
834 <row>
835 <entry></entry>
836 <entry></entry>
837 <entry>Bit</entry>
838 <entry>19</entry>
839 <entry>18</entry>
840 <entry>17</entry>
841 <entry>16</entry>
842 <entry>15</entry>
843 <entry>14</entry>
844 <entry>13</entry>
845 <entry>12</entry>
846 <entry>11</entry>
847 <entry>10</entry>
848 <entry>9</entry>
849 <entry>8</entry>
850 <entry>7</entry>
851 <entry>6</entry>
852 <entry>5</entry>
853 <entry>4</entry>
854 <entry>3</entry>
855 <entry>2</entry>
856 <entry>1</entry>
857 <entry>0</entry>
858 </row>
859 </thead>
860 <tbody valign="top">
861 <row id="V4L2-MBUS-FMT-Y8-1X8">
862 <entry>V4L2_MBUS_FMT_Y8_1X8</entry>
863 <entry>0x2001</entry>
864 <entry></entry>
865 <entry>-</entry>
866 <entry>-</entry>
867 <entry>-</entry>
868 <entry>-</entry>
869 <entry>-</entry>
870 <entry>-</entry>
871 <entry>-</entry>
872 <entry>-</entry>
873 <entry>-</entry>
874 <entry>-</entry>
875 <entry>-</entry>
876 <entry>-</entry>
877 <entry>y<subscript>7</subscript></entry>
878 <entry>y<subscript>6</subscript></entry>
879 <entry>y<subscript>5</subscript></entry>
880 <entry>y<subscript>4</subscript></entry>
881 <entry>y<subscript>3</subscript></entry>
882 <entry>y<subscript>2</subscript></entry>
883 <entry>y<subscript>1</subscript></entry>
884 <entry>y<subscript>0</subscript></entry>
885 </row>
886 <row id="V4L2-MBUS-FMT-UYVY8-1_5X8">
887 <entry>V4L2_MBUS_FMT_UYVY8_1_5X8</entry>
888 <entry>0x2002</entry>
889 <entry></entry>
890 <entry>-</entry>
891 <entry>-</entry>
892 <entry>-</entry>
893 <entry>-</entry>
894 <entry>-</entry>
895 <entry>-</entry>
896 <entry>-</entry>
897 <entry>-</entry>
898 <entry>-</entry>
899 <entry>-</entry>
900 <entry>-</entry>
901 <entry>-</entry>
902 <entry>u<subscript>7</subscript></entry>
903 <entry>u<subscript>6</subscript></entry>
904 <entry>u<subscript>5</subscript></entry>
905 <entry>u<subscript>4</subscript></entry>
906 <entry>u<subscript>3</subscript></entry>
907 <entry>u<subscript>2</subscript></entry>
908 <entry>u<subscript>1</subscript></entry>
909 <entry>u<subscript>0</subscript></entry>
910 </row>
911 <row>
912 <entry></entry>
913 <entry></entry>
914 <entry></entry>
915 <entry>-</entry>
916 <entry>-</entry>
917 <entry>-</entry>
918 <entry>-</entry>
919 <entry>-</entry>
920 <entry>-</entry>
921 <entry>-</entry>
922 <entry>-</entry>
923 <entry>-</entry>
924 <entry>-</entry>
925 <entry>-</entry>
926 <entry>-</entry>
927 <entry>y<subscript>7</subscript></entry>
928 <entry>y<subscript>6</subscript></entry>
929 <entry>y<subscript>5</subscript></entry>
930 <entry>y<subscript>4</subscript></entry>
931 <entry>y<subscript>3</subscript></entry>
932 <entry>y<subscript>2</subscript></entry>
933 <entry>y<subscript>1</subscript></entry>
934 <entry>y<subscript>0</subscript></entry>
935 </row>
936 <row>
937 <entry></entry>
938 <entry></entry>
939 <entry></entry>
940 <entry>-</entry>
941 <entry>-</entry>
942 <entry>-</entry>
943 <entry>-</entry>
944 <entry>-</entry>
945 <entry>-</entry>
946 <entry>-</entry>
947 <entry>-</entry>
948 <entry>-</entry>
949 <entry>-</entry>
950 <entry>-</entry>
951 <entry>-</entry>
952 <entry>y<subscript>7</subscript></entry>
953 <entry>y<subscript>6</subscript></entry>
954 <entry>y<subscript>5</subscript></entry>
955 <entry>y<subscript>4</subscript></entry>
956 <entry>y<subscript>3</subscript></entry>
957 <entry>y<subscript>2</subscript></entry>
958 <entry>y<subscript>1</subscript></entry>
959 <entry>y<subscript>0</subscript></entry>
960 </row>
961 <row>
962 <entry></entry>
963 <entry></entry>
964 <entry></entry>
965 <entry>-</entry>
966 <entry>-</entry>
967 <entry>-</entry>
968 <entry>-</entry>
969 <entry>-</entry>
970 <entry>-</entry>
971 <entry>-</entry>
972 <entry>-</entry>
973 <entry>-</entry>
974 <entry>-</entry>
975 <entry>-</entry>
976 <entry>-</entry>
977 <entry>v<subscript>7</subscript></entry>
978 <entry>v<subscript>6</subscript></entry>
979 <entry>v<subscript>5</subscript></entry>
980 <entry>v<subscript>4</subscript></entry>
981 <entry>v<subscript>3</subscript></entry>
982 <entry>v<subscript>2</subscript></entry>
983 <entry>v<subscript>1</subscript></entry>
984 <entry>v<subscript>0</subscript></entry>
985 </row>
986 <row>
987 <entry></entry>
988 <entry></entry>
989 <entry></entry>
990 <entry>-</entry>
991 <entry>-</entry>
992 <entry>-</entry>
993 <entry>-</entry>
994 <entry>-</entry>
995 <entry>-</entry>
996 <entry>-</entry>
997 <entry>-</entry>
998 <entry>-</entry>
999 <entry>-</entry>
1000 <entry>-</entry>
1001 <entry>-</entry>
1002 <entry>y<subscript>7</subscript></entry>
1003 <entry>y<subscript>6</subscript></entry>
1004 <entry>y<subscript>5</subscript></entry>
1005 <entry>y<subscript>4</subscript></entry>
1006 <entry>y<subscript>3</subscript></entry>
1007 <entry>y<subscript>2</subscript></entry>
1008 <entry>y<subscript>1</subscript></entry>
1009 <entry>y<subscript>0</subscript></entry>
1010 </row>
1011 <row>
1012 <entry></entry>
1013 <entry></entry>
1014 <entry></entry>
1015 <entry>-</entry>
1016 <entry>-</entry>
1017 <entry>-</entry>
1018 <entry>-</entry>
1019 <entry>-</entry>
1020 <entry>-</entry>
1021 <entry>-</entry>
1022 <entry>-</entry>
1023 <entry>-</entry>
1024 <entry>-</entry>
1025 <entry>-</entry>
1026 <entry>-</entry>
1027 <entry>y<subscript>7</subscript></entry>
1028 <entry>y<subscript>6</subscript></entry>
1029 <entry>y<subscript>5</subscript></entry>
1030 <entry>y<subscript>4</subscript></entry>
1031 <entry>y<subscript>3</subscript></entry>
1032 <entry>y<subscript>2</subscript></entry>
1033 <entry>y<subscript>1</subscript></entry>
1034 <entry>y<subscript>0</subscript></entry>
1035 </row>
1036 <row id="V4L2-MBUS-FMT-VYUY8-1_5X8">
1037 <entry>V4L2_MBUS_FMT_VYUY8_1_5X8</entry>
1038 <entry>0x2003</entry>
1039 <entry></entry>
1040 <entry>-</entry>
1041 <entry>-</entry>
1042 <entry>-</entry>
1043 <entry>-</entry>
1044 <entry>-</entry>
1045 <entry>-</entry>
1046 <entry>-</entry>
1047 <entry>-</entry>
1048 <entry>-</entry>
1049 <entry>-</entry>
1050 <entry>-</entry>
1051 <entry>-</entry>
1052 <entry>v<subscript>7</subscript></entry>
1053 <entry>v<subscript>6</subscript></entry>
1054 <entry>v<subscript>5</subscript></entry>
1055 <entry>v<subscript>4</subscript></entry>
1056 <entry>v<subscript>3</subscript></entry>
1057 <entry>v<subscript>2</subscript></entry>
1058 <entry>v<subscript>1</subscript></entry>
1059 <entry>v<subscript>0</subscript></entry>
1060 </row>
1061 <row>
1062 <entry></entry>
1063 <entry></entry>
1064 <entry></entry>
1065 <entry>-</entry>
1066 <entry>-</entry>
1067 <entry>-</entry>
1068 <entry>-</entry>
1069 <entry>-</entry>
1070 <entry>-</entry>
1071 <entry>-</entry>
1072 <entry>-</entry>
1073 <entry>-</entry>
1074 <entry>-</entry>
1075 <entry>-</entry>
1076 <entry>-</entry>
1077 <entry>y<subscript>7</subscript></entry>
1078 <entry>y<subscript>6</subscript></entry>
1079 <entry>y<subscript>5</subscript></entry>
1080 <entry>y<subscript>4</subscript></entry>
1081 <entry>y<subscript>3</subscript></entry>
1082 <entry>y<subscript>2</subscript></entry>
1083 <entry>y<subscript>1</subscript></entry>
1084 <entry>y<subscript>0</subscript></entry>
1085 </row>
1086 <row>
1087 <entry></entry>
1088 <entry></entry>
1089 <entry></entry>
1090 <entry>-</entry>
1091 <entry>-</entry>
1092 <entry>-</entry>
1093 <entry>-</entry>
1094 <entry>-</entry>
1095 <entry>-</entry>
1096 <entry>-</entry>
1097 <entry>-</entry>
1098 <entry>-</entry>
1099 <entry>-</entry>
1100 <entry>-</entry>
1101 <entry>-</entry>
1102 <entry>y<subscript>7</subscript></entry>
1103 <entry>y<subscript>6</subscript></entry>
1104 <entry>y<subscript>5</subscript></entry>
1105 <entry>y<subscript>4</subscript></entry>
1106 <entry>y<subscript>3</subscript></entry>
1107 <entry>y<subscript>2</subscript></entry>
1108 <entry>y<subscript>1</subscript></entry>
1109 <entry>y<subscript>0</subscript></entry>
1110 </row>
1111 <row>
1112 <entry></entry>
1113 <entry></entry>
1114 <entry></entry>
1115 <entry>-</entry>
1116 <entry>-</entry>
1117 <entry>-</entry>
1118 <entry>-</entry>
1119 <entry>-</entry>
1120 <entry>-</entry>
1121 <entry>-</entry>
1122 <entry>-</entry>
1123 <entry>-</entry>
1124 <entry>-</entry>
1125 <entry>-</entry>
1126 <entry>-</entry>
1127 <entry>u<subscript>7</subscript></entry>
1128 <entry>u<subscript>6</subscript></entry>
1129 <entry>u<subscript>5</subscript></entry>
1130 <entry>u<subscript>4</subscript></entry>
1131 <entry>u<subscript>3</subscript></entry>
1132 <entry>u<subscript>2</subscript></entry>
1133 <entry>u<subscript>1</subscript></entry>
1134 <entry>u<subscript>0</subscript></entry>
1135 </row>
1136 <row>
1137 <entry></entry>
1138 <entry></entry>
1139 <entry></entry>
1140 <entry>-</entry>
1141 <entry>-</entry>
1142 <entry>-</entry>
1143 <entry>-</entry>
1144 <entry>-</entry>
1145 <entry>-</entry>
1146 <entry>-</entry>
1147 <entry>-</entry>
1148 <entry>-</entry>
1149 <entry>-</entry>
1150 <entry>-</entry>
1151 <entry>-</entry>
1152 <entry>y<subscript>7</subscript></entry>
1153 <entry>y<subscript>6</subscript></entry>
1154 <entry>y<subscript>5</subscript></entry>
1155 <entry>y<subscript>4</subscript></entry>
1156 <entry>y<subscript>3</subscript></entry>
1157 <entry>y<subscript>2</subscript></entry>
1158 <entry>y<subscript>1</subscript></entry>
1159 <entry>y<subscript>0</subscript></entry>
1160 </row>
1161 <row>
1162 <entry></entry>
1163 <entry></entry>
1164 <entry></entry>
1165 <entry>-</entry>
1166 <entry>-</entry>
1167 <entry>-</entry>
1168 <entry>-</entry>
1169 <entry>-</entry>
1170 <entry>-</entry>
1171 <entry>-</entry>
1172 <entry>-</entry>
1173 <entry>-</entry>
1174 <entry>-</entry>
1175 <entry>-</entry>
1176 <entry>-</entry>
1177 <entry>y<subscript>7</subscript></entry>
1178 <entry>y<subscript>6</subscript></entry>
1179 <entry>y<subscript>5</subscript></entry>
1180 <entry>y<subscript>4</subscript></entry>
1181 <entry>y<subscript>3</subscript></entry>
1182 <entry>y<subscript>2</subscript></entry>
1183 <entry>y<subscript>1</subscript></entry>
1184 <entry>y<subscript>0</subscript></entry>
1185 </row>
1186 <row id="V4L2-MBUS-FMT-YUYV8-1_5X8">
1187 <entry>V4L2_MBUS_FMT_YUYV8_1_5X8</entry>
1188 <entry>0x2004</entry>
1189 <entry></entry>
1190 <entry>-</entry>
1191 <entry>-</entry>
1192 <entry>-</entry>
1193 <entry>-</entry>
1194 <entry>-</entry>
1195 <entry>-</entry>
1196 <entry>-</entry>
1197 <entry>-</entry>
1198 <entry>-</entry>
1199 <entry>-</entry>
1200 <entry>-</entry>
1201 <entry>-</entry>
1202 <entry>y<subscript>7</subscript></entry>
1203 <entry>y<subscript>6</subscript></entry>
1204 <entry>y<subscript>5</subscript></entry>
1205 <entry>y<subscript>4</subscript></entry>
1206 <entry>y<subscript>3</subscript></entry>
1207 <entry>y<subscript>2</subscript></entry>
1208 <entry>y<subscript>1</subscript></entry>
1209 <entry>y<subscript>0</subscript></entry>
1210 </row>
1211 <row>
1212 <entry></entry>
1213 <entry></entry>
1214 <entry></entry>
1215 <entry>-</entry>
1216 <entry>-</entry>
1217 <entry>-</entry>
1218 <entry>-</entry>
1219 <entry>-</entry>
1220 <entry>-</entry>
1221 <entry>-</entry>
1222 <entry>-</entry>
1223 <entry>-</entry>
1224 <entry>-</entry>
1225 <entry>-</entry>
1226 <entry>-</entry>
1227 <entry>y<subscript>7</subscript></entry>
1228 <entry>y<subscript>6</subscript></entry>
1229 <entry>y<subscript>5</subscript></entry>
1230 <entry>y<subscript>4</subscript></entry>
1231 <entry>y<subscript>3</subscript></entry>
1232 <entry>y<subscript>2</subscript></entry>
1233 <entry>y<subscript>1</subscript></entry>
1234 <entry>y<subscript>0</subscript></entry>
1235 </row>
1236 <row>
1237 <entry></entry>
1238 <entry></entry>
1239 <entry></entry>
1240 <entry>-</entry>
1241 <entry>-</entry>
1242 <entry>-</entry>
1243 <entry>-</entry>
1244 <entry>-</entry>
1245 <entry>-</entry>
1246 <entry>-</entry>
1247 <entry>-</entry>
1248 <entry>-</entry>
1249 <entry>-</entry>
1250 <entry>-</entry>
1251 <entry>-</entry>
1252 <entry>u<subscript>7</subscript></entry>
1253 <entry>u<subscript>6</subscript></entry>
1254 <entry>u<subscript>5</subscript></entry>
1255 <entry>u<subscript>4</subscript></entry>
1256 <entry>u<subscript>3</subscript></entry>
1257 <entry>u<subscript>2</subscript></entry>
1258 <entry>u<subscript>1</subscript></entry>
1259 <entry>u<subscript>0</subscript></entry>
1260 </row>
1261 <row>
1262 <entry></entry>
1263 <entry></entry>
1264 <entry></entry>
1265 <entry>-</entry>
1266 <entry>-</entry>
1267 <entry>-</entry>
1268 <entry>-</entry>
1269 <entry>-</entry>
1270 <entry>-</entry>
1271 <entry>-</entry>
1272 <entry>-</entry>
1273 <entry>-</entry>
1274 <entry>-</entry>
1275 <entry>-</entry>
1276 <entry>-</entry>
1277 <entry>y<subscript>7</subscript></entry>
1278 <entry>y<subscript>6</subscript></entry>
1279 <entry>y<subscript>5</subscript></entry>
1280 <entry>y<subscript>4</subscript></entry>
1281 <entry>y<subscript>3</subscript></entry>
1282 <entry>y<subscript>2</subscript></entry>
1283 <entry>y<subscript>1</subscript></entry>
1284 <entry>y<subscript>0</subscript></entry>
1285 </row>
1286 <row>
1287 <entry></entry>
1288 <entry></entry>
1289 <entry></entry>
1290 <entry>-</entry>
1291 <entry>-</entry>
1292 <entry>-</entry>
1293 <entry>-</entry>
1294 <entry>-</entry>
1295 <entry>-</entry>
1296 <entry>-</entry>
1297 <entry>-</entry>
1298 <entry>-</entry>
1299 <entry>-</entry>
1300 <entry>-</entry>
1301 <entry>-</entry>
1302 <entry>y<subscript>7</subscript></entry>
1303 <entry>y<subscript>6</subscript></entry>
1304 <entry>y<subscript>5</subscript></entry>
1305 <entry>y<subscript>4</subscript></entry>
1306 <entry>y<subscript>3</subscript></entry>
1307 <entry>y<subscript>2</subscript></entry>
1308 <entry>y<subscript>1</subscript></entry>
1309 <entry>y<subscript>0</subscript></entry>
1310 </row>
1311 <row>
1312 <entry></entry>
1313 <entry></entry>
1314 <entry></entry>
1315 <entry>-</entry>
1316 <entry>-</entry>
1317 <entry>-</entry>
1318 <entry>-</entry>
1319 <entry>-</entry>
1320 <entry>-</entry>
1321 <entry>-</entry>
1322 <entry>-</entry>
1323 <entry>-</entry>
1324 <entry>-</entry>
1325 <entry>-</entry>
1326 <entry>-</entry>
1327 <entry>v<subscript>7</subscript></entry>
1328 <entry>v<subscript>6</subscript></entry>
1329 <entry>v<subscript>5</subscript></entry>
1330 <entry>v<subscript>4</subscript></entry>
1331 <entry>v<subscript>3</subscript></entry>
1332 <entry>v<subscript>2</subscript></entry>
1333 <entry>v<subscript>1</subscript></entry>
1334 <entry>v<subscript>0</subscript></entry>
1335 </row>
1336 <row id="V4L2-MBUS-FMT-YVYU8-1_5X8">
1337 <entry>V4L2_MBUS_FMT_YVYU8_1_5X8</entry>
1338 <entry>0x2005</entry>
1339 <entry></entry>
1340 <entry>-</entry>
1341 <entry>-</entry>
1342 <entry>-</entry>
1343 <entry>-</entry>
1344 <entry>-</entry>
1345 <entry>-</entry>
1346 <entry>-</entry>
1347 <entry>-</entry>
1348 <entry>-</entry>
1349 <entry>-</entry>
1350 <entry>-</entry>
1351 <entry>-</entry>
1352 <entry>y<subscript>7</subscript></entry>
1353 <entry>y<subscript>6</subscript></entry>
1354 <entry>y<subscript>5</subscript></entry>
1355 <entry>y<subscript>4</subscript></entry>
1356 <entry>y<subscript>3</subscript></entry>
1357 <entry>y<subscript>2</subscript></entry>
1358 <entry>y<subscript>1</subscript></entry>
1359 <entry>y<subscript>0</subscript></entry>
1360 </row>
1361 <row>
1362 <entry></entry>
1363 <entry></entry>
1364 <entry></entry>
1365 <entry>-</entry>
1366 <entry>-</entry>
1367 <entry>-</entry>
1368 <entry>-</entry>
1369 <entry>-</entry>
1370 <entry>-</entry>
1371 <entry>-</entry>
1372 <entry>-</entry>
1373 <entry>-</entry>
1374 <entry>-</entry>
1375 <entry>-</entry>
1376 <entry>-</entry>
1377 <entry>y<subscript>7</subscript></entry>
1378 <entry>y<subscript>6</subscript></entry>
1379 <entry>y<subscript>5</subscript></entry>
1380 <entry>y<subscript>4</subscript></entry>
1381 <entry>y<subscript>3</subscript></entry>
1382 <entry>y<subscript>2</subscript></entry>
1383 <entry>y<subscript>1</subscript></entry>
1384 <entry>y<subscript>0</subscript></entry>
1385 </row>
1386 <row>
1387 <entry></entry>
1388 <entry></entry>
1389 <entry></entry>
1390 <entry>-</entry>
1391 <entry>-</entry>
1392 <entry>-</entry>
1393 <entry>-</entry>
1394 <entry>-</entry>
1395 <entry>-</entry>
1396 <entry>-</entry>
1397 <entry>-</entry>
1398 <entry>-</entry>
1399 <entry>-</entry>
1400 <entry>-</entry>
1401 <entry>-</entry>
1402 <entry>v<subscript>7</subscript></entry>
1403 <entry>v<subscript>6</subscript></entry>
1404 <entry>v<subscript>5</subscript></entry>
1405 <entry>v<subscript>4</subscript></entry>
1406 <entry>v<subscript>3</subscript></entry>
1407 <entry>v<subscript>2</subscript></entry>
1408 <entry>v<subscript>1</subscript></entry>
1409 <entry>v<subscript>0</subscript></entry>
1410 </row>
1411 <row>
1412 <entry></entry>
1413 <entry></entry>
1414 <entry></entry>
1415 <entry>-</entry>
1416 <entry>-</entry>
1417 <entry>-</entry>
1418 <entry>-</entry>
1419 <entry>-</entry>
1420 <entry>-</entry>
1421 <entry>-</entry>
1422 <entry>-</entry>
1423 <entry>-</entry>
1424 <entry>-</entry>
1425 <entry>-</entry>
1426 <entry>-</entry>
1427 <entry>y<subscript>7</subscript></entry>
1428 <entry>y<subscript>6</subscript></entry>
1429 <entry>y<subscript>5</subscript></entry>
1430 <entry>y<subscript>4</subscript></entry>
1431 <entry>y<subscript>3</subscript></entry>
1432 <entry>y<subscript>2</subscript></entry>
1433 <entry>y<subscript>1</subscript></entry>
1434 <entry>y<subscript>0</subscript></entry>
1435 </row>
1436 <row>
1437 <entry></entry>
1438 <entry></entry>
1439 <entry></entry>
1440 <entry>-</entry>
1441 <entry>-</entry>
1442 <entry>-</entry>
1443 <entry>-</entry>
1444 <entry>-</entry>
1445 <entry>-</entry>
1446 <entry>-</entry>
1447 <entry>-</entry>
1448 <entry>-</entry>
1449 <entry>-</entry>
1450 <entry>-</entry>
1451 <entry>-</entry>
1452 <entry>y<subscript>7</subscript></entry>
1453 <entry>y<subscript>6</subscript></entry>
1454 <entry>y<subscript>5</subscript></entry>
1455 <entry>y<subscript>4</subscript></entry>
1456 <entry>y<subscript>3</subscript></entry>
1457 <entry>y<subscript>2</subscript></entry>
1458 <entry>y<subscript>1</subscript></entry>
1459 <entry>y<subscript>0</subscript></entry>
1460 </row>
1461 <row>
1462 <entry></entry>
1463 <entry></entry>
1464 <entry></entry>
1465 <entry>-</entry>
1466 <entry>-</entry>
1467 <entry>-</entry>
1468 <entry>-</entry>
1469 <entry>-</entry>
1470 <entry>-</entry>
1471 <entry>-</entry>
1472 <entry>-</entry>
1473 <entry>-</entry>
1474 <entry>-</entry>
1475 <entry>-</entry>
1476 <entry>-</entry>
1477 <entry>u<subscript>7</subscript></entry>
1478 <entry>u<subscript>6</subscript></entry>
1479 <entry>u<subscript>5</subscript></entry>
1480 <entry>u<subscript>4</subscript></entry>
1481 <entry>u<subscript>3</subscript></entry>
1482 <entry>u<subscript>2</subscript></entry>
1483 <entry>u<subscript>1</subscript></entry>
1484 <entry>u<subscript>0</subscript></entry>
1485 </row>
1486 <row id="V4L2-MBUS-FMT-UYVY8-2X8">
1487 <entry>V4L2_MBUS_FMT_UYVY8_2X8</entry>
1488 <entry>0x2006</entry>
1489 <entry></entry>
1490 <entry>-</entry>
1491 <entry>-</entry>
1492 <entry>-</entry>
1493 <entry>-</entry>
1494 <entry>-</entry>
1495 <entry>-</entry>
1496 <entry>-</entry>
1497 <entry>-</entry>
1498 <entry>-</entry>
1499 <entry>-</entry>
1500 <entry>-</entry>
1501 <entry>-</entry>
1502 <entry>u<subscript>7</subscript></entry>
1503 <entry>u<subscript>6</subscript></entry>
1504 <entry>u<subscript>5</subscript></entry>
1505 <entry>u<subscript>4</subscript></entry>
1506 <entry>u<subscript>3</subscript></entry>
1507 <entry>u<subscript>2</subscript></entry>
1508 <entry>u<subscript>1</subscript></entry>
1509 <entry>u<subscript>0</subscript></entry>
1510 </row>
1511 <row>
1512 <entry></entry>
1513 <entry></entry>
1514 <entry></entry>
1515 <entry>-</entry>
1516 <entry>-</entry>
1517 <entry>-</entry>
1518 <entry>-</entry>
1519 <entry>-</entry>
1520 <entry>-</entry>
1521 <entry>-</entry>
1522 <entry>-</entry>
1523 <entry>-</entry>
1524 <entry>-</entry>
1525 <entry>-</entry>
1526 <entry>-</entry>
1527 <entry>y<subscript>7</subscript></entry>
1528 <entry>y<subscript>6</subscript></entry>
1529 <entry>y<subscript>5</subscript></entry>
1530 <entry>y<subscript>4</subscript></entry>
1531 <entry>y<subscript>3</subscript></entry>
1532 <entry>y<subscript>2</subscript></entry>
1533 <entry>y<subscript>1</subscript></entry>
1534 <entry>y<subscript>0</subscript></entry>
1535 </row>
1536 <row>
1537 <entry></entry>
1538 <entry></entry>
1539 <entry></entry>
1540 <entry>-</entry>
1541 <entry>-</entry>
1542 <entry>-</entry>
1543 <entry>-</entry>
1544 <entry>-</entry>
1545 <entry>-</entry>
1546 <entry>-</entry>
1547 <entry>-</entry>
1548 <entry>-</entry>
1549 <entry>-</entry>
1550 <entry>-</entry>
1551 <entry>-</entry>
1552 <entry>v<subscript>7</subscript></entry>
1553 <entry>v<subscript>6</subscript></entry>
1554 <entry>v<subscript>5</subscript></entry>
1555 <entry>v<subscript>4</subscript></entry>
1556 <entry>v<subscript>3</subscript></entry>
1557 <entry>v<subscript>2</subscript></entry>
1558 <entry>v<subscript>1</subscript></entry>
1559 <entry>v<subscript>0</subscript></entry>
1560 </row>
1561 <row>
1562 <entry></entry>
1563 <entry></entry>
1564 <entry></entry>
1565 <entry>-</entry>
1566 <entry>-</entry>
1567 <entry>-</entry>
1568 <entry>-</entry>
1569 <entry>-</entry>
1570 <entry>-</entry>
1571 <entry>-</entry>
1572 <entry>-</entry>
1573 <entry>-</entry>
1574 <entry>-</entry>
1575 <entry>-</entry>
1576 <entry>-</entry>
1577 <entry>y<subscript>7</subscript></entry>
1578 <entry>y<subscript>6</subscript></entry>
1579 <entry>y<subscript>5</subscript></entry>
1580 <entry>y<subscript>4</subscript></entry>
1581 <entry>y<subscript>3</subscript></entry>
1582 <entry>y<subscript>2</subscript></entry>
1583 <entry>y<subscript>1</subscript></entry>
1584 <entry>y<subscript>0</subscript></entry>
1585 </row>
1586 <row id="V4L2-MBUS-FMT-VYUY8-2X8">
1587 <entry>V4L2_MBUS_FMT_VYUY8_2X8</entry>
1588 <entry>0x2007</entry>
1589 <entry></entry>
1590 <entry>-</entry>
1591 <entry>-</entry>
1592 <entry>-</entry>
1593 <entry>-</entry>
1594 <entry>-</entry>
1595 <entry>-</entry>
1596 <entry>-</entry>
1597 <entry>-</entry>
1598 <entry>-</entry>
1599 <entry>-</entry>
1600 <entry>-</entry>
1601 <entry>-</entry>
1602 <entry>v<subscript>7</subscript></entry>
1603 <entry>v<subscript>6</subscript></entry>
1604 <entry>v<subscript>5</subscript></entry>
1605 <entry>v<subscript>4</subscript></entry>
1606 <entry>v<subscript>3</subscript></entry>
1607 <entry>v<subscript>2</subscript></entry>
1608 <entry>v<subscript>1</subscript></entry>
1609 <entry>v<subscript>0</subscript></entry>
1610 </row>
1611 <row>
1612 <entry></entry>
1613 <entry></entry>
1614 <entry></entry>
1615 <entry>-</entry>
1616 <entry>-</entry>
1617 <entry>-</entry>
1618 <entry>-</entry>
1619 <entry>-</entry>
1620 <entry>-</entry>
1621 <entry>-</entry>
1622 <entry>-</entry>
1623 <entry>-</entry>
1624 <entry>-</entry>
1625 <entry>-</entry>
1626 <entry>-</entry>
1627 <entry>y<subscript>7</subscript></entry>
1628 <entry>y<subscript>6</subscript></entry>
1629 <entry>y<subscript>5</subscript></entry>
1630 <entry>y<subscript>4</subscript></entry>
1631 <entry>y<subscript>3</subscript></entry>
1632 <entry>y<subscript>2</subscript></entry>
1633 <entry>y<subscript>1</subscript></entry>
1634 <entry>y<subscript>0</subscript></entry>
1635 </row>
1636 <row>
1637 <entry></entry>
1638 <entry></entry>
1639 <entry></entry>
1640 <entry>-</entry>
1641 <entry>-</entry>
1642 <entry>-</entry>
1643 <entry>-</entry>
1644 <entry>-</entry>
1645 <entry>-</entry>
1646 <entry>-</entry>
1647 <entry>-</entry>
1648 <entry>-</entry>
1649 <entry>-</entry>
1650 <entry>-</entry>
1651 <entry>-</entry>
1652 <entry>u<subscript>7</subscript></entry>
1653 <entry>u<subscript>6</subscript></entry>
1654 <entry>u<subscript>5</subscript></entry>
1655 <entry>u<subscript>4</subscript></entry>
1656 <entry>u<subscript>3</subscript></entry>
1657 <entry>u<subscript>2</subscript></entry>
1658 <entry>u<subscript>1</subscript></entry>
1659 <entry>u<subscript>0</subscript></entry>
1660 </row>
1661 <row>
1662 <entry></entry>
1663 <entry></entry>
1664 <entry></entry>
1665 <entry>-</entry>
1666 <entry>-</entry>
1667 <entry>-</entry>
1668 <entry>-</entry>
1669 <entry>-</entry>
1670 <entry>-</entry>
1671 <entry>-</entry>
1672 <entry>-</entry>
1673 <entry>-</entry>
1674 <entry>-</entry>
1675 <entry>-</entry>
1676 <entry>-</entry>
1677 <entry>y<subscript>7</subscript></entry>
1678 <entry>y<subscript>6</subscript></entry>
1679 <entry>y<subscript>5</subscript></entry>
1680 <entry>y<subscript>4</subscript></entry>
1681 <entry>y<subscript>3</subscript></entry>
1682 <entry>y<subscript>2</subscript></entry>
1683 <entry>y<subscript>1</subscript></entry>
1684 <entry>y<subscript>0</subscript></entry>
1685 </row>
1686 <row id="V4L2-MBUS-FMT-YUYV8-2X8">
1687 <entry>V4L2_MBUS_FMT_YUYV8_2X8</entry>
1688 <entry>0x2008</entry>
1689 <entry></entry>
1690 <entry>-</entry>
1691 <entry>-</entry>
1692 <entry>-</entry>
1693 <entry>-</entry>
1694 <entry>-</entry>
1695 <entry>-</entry>
1696 <entry>-</entry>
1697 <entry>-</entry>
1698 <entry>-</entry>
1699 <entry>-</entry>
1700 <entry>-</entry>
1701 <entry>-</entry>
1702 <entry>y<subscript>7</subscript></entry>
1703 <entry>y<subscript>6</subscript></entry>
1704 <entry>y<subscript>5</subscript></entry>
1705 <entry>y<subscript>4</subscript></entry>
1706 <entry>y<subscript>3</subscript></entry>
1707 <entry>y<subscript>2</subscript></entry>
1708 <entry>y<subscript>1</subscript></entry>
1709 <entry>y<subscript>0</subscript></entry>
1710 </row>
1711 <row>
1712 <entry></entry>
1713 <entry></entry>
1714 <entry></entry>
1715 <entry>-</entry>
1716 <entry>-</entry>
1717 <entry>-</entry>
1718 <entry>-</entry>
1719 <entry>-</entry>
1720 <entry>-</entry>
1721 <entry>-</entry>
1722 <entry>-</entry>
1723 <entry>-</entry>
1724 <entry>-</entry>
1725 <entry>-</entry>
1726 <entry>-</entry>
1727 <entry>u<subscript>7</subscript></entry>
1728 <entry>u<subscript>6</subscript></entry>
1729 <entry>u<subscript>5</subscript></entry>
1730 <entry>u<subscript>4</subscript></entry>
1731 <entry>u<subscript>3</subscript></entry>
1732 <entry>u<subscript>2</subscript></entry>
1733 <entry>u<subscript>1</subscript></entry>
1734 <entry>u<subscript>0</subscript></entry>
1735 </row>
1736 <row>
1737 <entry></entry>
1738 <entry></entry>
1739 <entry></entry>
1740 <entry>-</entry>
1741 <entry>-</entry>
1742 <entry>-</entry>
1743 <entry>-</entry>
1744 <entry>-</entry>
1745 <entry>-</entry>
1746 <entry>-</entry>
1747 <entry>-</entry>
1748 <entry>-</entry>
1749 <entry>-</entry>
1750 <entry>-</entry>
1751 <entry>-</entry>
1752 <entry>y<subscript>7</subscript></entry>
1753 <entry>y<subscript>6</subscript></entry>
1754 <entry>y<subscript>5</subscript></entry>
1755 <entry>y<subscript>4</subscript></entry>
1756 <entry>y<subscript>3</subscript></entry>
1757 <entry>y<subscript>2</subscript></entry>
1758 <entry>y<subscript>1</subscript></entry>
1759 <entry>y<subscript>0</subscript></entry>
1760 </row>
1761 <row>
1762 <entry></entry>
1763 <entry></entry>
1764 <entry></entry>
1765 <entry>-</entry>
1766 <entry>-</entry>
1767 <entry>-</entry>
1768 <entry>-</entry>
1769 <entry>-</entry>
1770 <entry>-</entry>
1771 <entry>-</entry>
1772 <entry>-</entry>
1773 <entry>-</entry>
1774 <entry>-</entry>
1775 <entry>-</entry>
1776 <entry>-</entry>
1777 <entry>v<subscript>7</subscript></entry>
1778 <entry>v<subscript>6</subscript></entry>
1779 <entry>v<subscript>5</subscript></entry>
1780 <entry>v<subscript>4</subscript></entry>
1781 <entry>v<subscript>3</subscript></entry>
1782 <entry>v<subscript>2</subscript></entry>
1783 <entry>v<subscript>1</subscript></entry>
1784 <entry>v<subscript>0</subscript></entry>
1785 </row>
1786 <row id="V4L2-MBUS-FMT-YVYU8-2X8">
1787 <entry>V4L2_MBUS_FMT_YVYU8_2X8</entry>
1788 <entry>0x2009</entry>
1789 <entry></entry>
1790 <entry>-</entry>
1791 <entry>-</entry>
1792 <entry>-</entry>
1793 <entry>-</entry>
1794 <entry>-</entry>
1795 <entry>-</entry>
1796 <entry>-</entry>
1797 <entry>-</entry>
1798 <entry>-</entry>
1799 <entry>-</entry>
1800 <entry>-</entry>
1801 <entry>-</entry>
1802 <entry>y<subscript>7</subscript></entry>
1803 <entry>y<subscript>6</subscript></entry>
1804 <entry>y<subscript>5</subscript></entry>
1805 <entry>y<subscript>4</subscript></entry>
1806 <entry>y<subscript>3</subscript></entry>
1807 <entry>y<subscript>2</subscript></entry>
1808 <entry>y<subscript>1</subscript></entry>
1809 <entry>y<subscript>0</subscript></entry>
1810 </row>
1811 <row>
1812 <entry></entry>
1813 <entry></entry>
1814 <entry></entry>
1815 <entry>-</entry>
1816 <entry>-</entry>
1817 <entry>-</entry>
1818 <entry>-</entry>
1819 <entry>-</entry>
1820 <entry>-</entry>
1821 <entry>-</entry>
1822 <entry>-</entry>
1823 <entry>-</entry>
1824 <entry>-</entry>
1825 <entry>-</entry>
1826 <entry>-</entry>
1827 <entry>v<subscript>7</subscript></entry>
1828 <entry>v<subscript>6</subscript></entry>
1829 <entry>v<subscript>5</subscript></entry>
1830 <entry>v<subscript>4</subscript></entry>
1831 <entry>v<subscript>3</subscript></entry>
1832 <entry>v<subscript>2</subscript></entry>
1833 <entry>v<subscript>1</subscript></entry>
1834 <entry>v<subscript>0</subscript></entry>
1835 </row>
1836 <row>
1837 <entry></entry>
1838 <entry></entry>
1839 <entry></entry>
1840 <entry>-</entry>
1841 <entry>-</entry>
1842 <entry>-</entry>
1843 <entry>-</entry>
1844 <entry>-</entry>
1845 <entry>-</entry>
1846 <entry>-</entry>
1847 <entry>-</entry>
1848 <entry>-</entry>
1849 <entry>-</entry>
1850 <entry>-</entry>
1851 <entry>-</entry>
1852 <entry>y<subscript>7</subscript></entry>
1853 <entry>y<subscript>6</subscript></entry>
1854 <entry>y<subscript>5</subscript></entry>
1855 <entry>y<subscript>4</subscript></entry>
1856 <entry>y<subscript>3</subscript></entry>
1857 <entry>y<subscript>2</subscript></entry>
1858 <entry>y<subscript>1</subscript></entry>
1859 <entry>y<subscript>0</subscript></entry>
1860 </row>
1861 <row>
1862 <entry></entry>
1863 <entry></entry>
1864 <entry></entry>
1865 <entry>-</entry>
1866 <entry>-</entry>
1867 <entry>-</entry>
1868 <entry>-</entry>
1869 <entry>-</entry>
1870 <entry>-</entry>
1871 <entry>-</entry>
1872 <entry>-</entry>
1873 <entry>-</entry>
1874 <entry>-</entry>
1875 <entry>-</entry>
1876 <entry>-</entry>
1877 <entry>u<subscript>7</subscript></entry>
1878 <entry>u<subscript>6</subscript></entry>
1879 <entry>u<subscript>5</subscript></entry>
1880 <entry>u<subscript>4</subscript></entry>
1881 <entry>u<subscript>3</subscript></entry>
1882 <entry>u<subscript>2</subscript></entry>
1883 <entry>u<subscript>1</subscript></entry>
1884 <entry>u<subscript>0</subscript></entry>
1885 </row>
1886 <row id="V4L2-MBUS-FMT-Y10-1X10">
1887 <entry>V4L2_MBUS_FMT_Y10_1X10</entry>
1888 <entry>0x200a</entry>
1889 <entry></entry>
1890 <entry>-</entry>
1891 <entry>-</entry>
1892 <entry>-</entry>
1893 <entry>-</entry>
1894 <entry>-</entry>
1895 <entry>-</entry>
1896 <entry>-</entry>
1897 <entry>-</entry>
1898 <entry>-</entry>
1899 <entry>-</entry>
1900 <entry>y<subscript>9</subscript></entry>
1901 <entry>y<subscript>8</subscript></entry>
1902 <entry>y<subscript>7</subscript></entry>
1903 <entry>y<subscript>6</subscript></entry>
1904 <entry>y<subscript>5</subscript></entry>
1905 <entry>y<subscript>4</subscript></entry>
1906 <entry>y<subscript>3</subscript></entry>
1907 <entry>y<subscript>2</subscript></entry>
1908 <entry>y<subscript>1</subscript></entry>
1909 <entry>y<subscript>0</subscript></entry>
1910 </row>
1911 <row id="V4L2-MBUS-FMT-YUYV10-2X10">
1912 <entry>V4L2_MBUS_FMT_YUYV10_2X10</entry>
1913 <entry>0x200b</entry>
1914 <entry></entry>
1915 <entry>-</entry>
1916 <entry>-</entry>
1917 <entry>-</entry>
1918 <entry>-</entry>
1919 <entry>-</entry>
1920 <entry>-</entry>
1921 <entry>-</entry>
1922 <entry>-</entry>
1923 <entry>-</entry>
1924 <entry>-</entry>
1925 <entry>y<subscript>9</subscript></entry>
1926 <entry>y<subscript>8</subscript></entry>
1927 <entry>y<subscript>7</subscript></entry>
1928 <entry>y<subscript>6</subscript></entry>
1929 <entry>y<subscript>5</subscript></entry>
1930 <entry>y<subscript>4</subscript></entry>
1931 <entry>y<subscript>3</subscript></entry>
1932 <entry>y<subscript>2</subscript></entry>
1933 <entry>y<subscript>1</subscript></entry>
1934 <entry>y<subscript>0</subscript></entry>
1935 </row>
1936 <row>
1937 <entry></entry>
1938 <entry></entry>
1939 <entry></entry>
1940 <entry>-</entry>
1941 <entry>-</entry>
1942 <entry>-</entry>
1943 <entry>-</entry>
1944 <entry>-</entry>
1945 <entry>-</entry>
1946 <entry>-</entry>
1947 <entry>-</entry>
1948 <entry>-</entry>
1949 <entry>-</entry>
1950 <entry>u<subscript>9</subscript></entry>
1951 <entry>u<subscript>8</subscript></entry>
1952 <entry>u<subscript>7</subscript></entry>
1953 <entry>u<subscript>6</subscript></entry>
1954 <entry>u<subscript>5</subscript></entry>
1955 <entry>u<subscript>4</subscript></entry>
1956 <entry>u<subscript>3</subscript></entry>
1957 <entry>u<subscript>2</subscript></entry>
1958 <entry>u<subscript>1</subscript></entry>
1959 <entry>u<subscript>0</subscript></entry>
1960 </row>
1961 <row>
1962 <entry></entry>
1963 <entry></entry>
1964 <entry></entry>
1965 <entry>-</entry>
1966 <entry>-</entry>
1967 <entry>-</entry>
1968 <entry>-</entry>
1969 <entry>-</entry>
1970 <entry>-</entry>
1971 <entry>-</entry>
1972 <entry>-</entry>
1973 <entry>-</entry>
1974 <entry>-</entry>
1975 <entry>y<subscript>9</subscript></entry>
1976 <entry>y<subscript>8</subscript></entry>
1977 <entry>y<subscript>7</subscript></entry>
1978 <entry>y<subscript>6</subscript></entry>
1979 <entry>y<subscript>5</subscript></entry>
1980 <entry>y<subscript>4</subscript></entry>
1981 <entry>y<subscript>3</subscript></entry>
1982 <entry>y<subscript>2</subscript></entry>
1983 <entry>y<subscript>1</subscript></entry>
1984 <entry>y<subscript>0</subscript></entry>
1985 </row>
1986 <row>
1987 <entry></entry>
1988 <entry></entry>
1989 <entry></entry>
1990 <entry>-</entry>
1991 <entry>-</entry>
1992 <entry>-</entry>
1993 <entry>-</entry>
1994 <entry>-</entry>
1995 <entry>-</entry>
1996 <entry>-</entry>
1997 <entry>-</entry>
1998 <entry>-</entry>
1999 <entry>-</entry>
2000 <entry>v<subscript>9</subscript></entry>
2001 <entry>v<subscript>8</subscript></entry>
2002 <entry>v<subscript>7</subscript></entry>
2003 <entry>v<subscript>6</subscript></entry>
2004 <entry>v<subscript>5</subscript></entry>
2005 <entry>v<subscript>4</subscript></entry>
2006 <entry>v<subscript>3</subscript></entry>
2007 <entry>v<subscript>2</subscript></entry>
2008 <entry>v<subscript>1</subscript></entry>
2009 <entry>v<subscript>0</subscript></entry>
2010 </row>
2011 <row id="V4L2-MBUS-FMT-YVYU10-2X10">
2012 <entry>V4L2_MBUS_FMT_YVYU10_2X10</entry>
2013 <entry>0x200c</entry>
2014 <entry></entry>
2015 <entry>-</entry>
2016 <entry>-</entry>
2017 <entry>-</entry>
2018 <entry>-</entry>
2019 <entry>-</entry>
2020 <entry>-</entry>
2021 <entry>-</entry>
2022 <entry>-</entry>
2023 <entry>-</entry>
2024 <entry>-</entry>
2025 <entry>y<subscript>9</subscript></entry>
2026 <entry>y<subscript>8</subscript></entry>
2027 <entry>y<subscript>7</subscript></entry>
2028 <entry>y<subscript>6</subscript></entry>
2029 <entry>y<subscript>5</subscript></entry>
2030 <entry>y<subscript>4</subscript></entry>
2031 <entry>y<subscript>3</subscript></entry>
2032 <entry>y<subscript>2</subscript></entry>
2033 <entry>y<subscript>1</subscript></entry>
2034 <entry>y<subscript>0</subscript></entry>
2035 </row>
2036 <row>
2037 <entry></entry>
2038 <entry></entry>
2039 <entry></entry>
2040 <entry>-</entry>
2041 <entry>-</entry>
2042 <entry>-</entry>
2043 <entry>-</entry>
2044 <entry>-</entry>
2045 <entry>-</entry>
2046 <entry>-</entry>
2047 <entry>-</entry>
2048 <entry>-</entry>
2049 <entry>-</entry>
2050 <entry>v<subscript>9</subscript></entry>
2051 <entry>v<subscript>8</subscript></entry>
2052 <entry>v<subscript>7</subscript></entry>
2053 <entry>v<subscript>6</subscript></entry>
2054 <entry>v<subscript>5</subscript></entry>
2055 <entry>v<subscript>4</subscript></entry>
2056 <entry>v<subscript>3</subscript></entry>
2057 <entry>v<subscript>2</subscript></entry>
2058 <entry>v<subscript>1</subscript></entry>
2059 <entry>v<subscript>0</subscript></entry>
2060 </row>
2061 <row>
2062 <entry></entry>
2063 <entry></entry>
2064 <entry></entry>
2065 <entry>-</entry>
2066 <entry>-</entry>
2067 <entry>-</entry>
2068 <entry>-</entry>
2069 <entry>-</entry>
2070 <entry>-</entry>
2071 <entry>-</entry>
2072 <entry>-</entry>
2073 <entry>-</entry>
2074 <entry>-</entry>
2075 <entry>y<subscript>9</subscript></entry>
2076 <entry>y<subscript>8</subscript></entry>
2077 <entry>y<subscript>7</subscript></entry>
2078 <entry>y<subscript>6</subscript></entry>
2079 <entry>y<subscript>5</subscript></entry>
2080 <entry>y<subscript>4</subscript></entry>
2081 <entry>y<subscript>3</subscript></entry>
2082 <entry>y<subscript>2</subscript></entry>
2083 <entry>y<subscript>1</subscript></entry>
2084 <entry>y<subscript>0</subscript></entry>
2085 </row>
2086 <row>
2087 <entry></entry>
2088 <entry></entry>
2089 <entry></entry>
2090 <entry>-</entry>
2091 <entry>-</entry>
2092 <entry>-</entry>
2093 <entry>-</entry>
2094 <entry>-</entry>
2095 <entry>-</entry>
2096 <entry>-</entry>
2097 <entry>-</entry>
2098 <entry>-</entry>
2099 <entry>-</entry>
2100 <entry>u<subscript>9</subscript></entry>
2101 <entry>u<subscript>8</subscript></entry>
2102 <entry>u<subscript>7</subscript></entry>
2103 <entry>u<subscript>6</subscript></entry>
2104 <entry>u<subscript>5</subscript></entry>
2105 <entry>u<subscript>4</subscript></entry>
2106 <entry>u<subscript>3</subscript></entry>
2107 <entry>u<subscript>2</subscript></entry>
2108 <entry>u<subscript>1</subscript></entry>
2109 <entry>u<subscript>0</subscript></entry>
2110 </row>
2111 <row id="V4L2-MBUS-FMT-UYVY8-1X16">
2112 <entry>V4L2_MBUS_FMT_UYVY8_1X16</entry>
2113 <entry>0x200f</entry>
2114 <entry></entry>
2115 <entry>-</entry>
2116 <entry>-</entry>
2117 <entry>-</entry>
2118 <entry>-</entry>
2119 <entry>u<subscript>7</subscript></entry>
2120 <entry>u<subscript>6</subscript></entry>
2121 <entry>u<subscript>5</subscript></entry>
2122 <entry>u<subscript>4</subscript></entry>
2123 <entry>u<subscript>3</subscript></entry>
2124 <entry>u<subscript>2</subscript></entry>
2125 <entry>u<subscript>1</subscript></entry>
2126 <entry>u<subscript>0</subscript></entry>
2127 <entry>y<subscript>7</subscript></entry>
2128 <entry>y<subscript>6</subscript></entry>
2129 <entry>y<subscript>5</subscript></entry>
2130 <entry>y<subscript>4</subscript></entry>
2131 <entry>y<subscript>3</subscript></entry>
2132 <entry>y<subscript>2</subscript></entry>
2133 <entry>y<subscript>1</subscript></entry>
2134 <entry>y<subscript>0</subscript></entry>
2135 </row>
2136 <row>
2137 <entry></entry>
2138 <entry></entry>
2139 <entry></entry>
2140 <entry>-</entry>
2141 <entry>-</entry>
2142 <entry>-</entry>
2143 <entry>-</entry>
2144 <entry>v<subscript>7</subscript></entry>
2145 <entry>v<subscript>6</subscript></entry>
2146 <entry>v<subscript>5</subscript></entry>
2147 <entry>v<subscript>4</subscript></entry>
2148 <entry>v<subscript>3</subscript></entry>
2149 <entry>v<subscript>2</subscript></entry>
2150 <entry>v<subscript>1</subscript></entry>
2151 <entry>v<subscript>0</subscript></entry>
2152 <entry>y<subscript>7</subscript></entry>
2153 <entry>y<subscript>6</subscript></entry>
2154 <entry>y<subscript>5</subscript></entry>
2155 <entry>y<subscript>4</subscript></entry>
2156 <entry>y<subscript>3</subscript></entry>
2157 <entry>y<subscript>2</subscript></entry>
2158 <entry>y<subscript>1</subscript></entry>
2159 <entry>y<subscript>0</subscript></entry>
2160 </row>
2161 <row id="V4L2-MBUS-FMT-VYUY8-1X16">
2162 <entry>V4L2_MBUS_FMT_VYUY8_1X16</entry>
2163 <entry>0x2010</entry>
2164 <entry></entry>
2165 <entry>-</entry>
2166 <entry>-</entry>
2167 <entry>-</entry>
2168 <entry>-</entry>
2169 <entry>v<subscript>7</subscript></entry>
2170 <entry>v<subscript>6</subscript></entry>
2171 <entry>v<subscript>5</subscript></entry>
2172 <entry>v<subscript>4</subscript></entry>
2173 <entry>v<subscript>3</subscript></entry>
2174 <entry>v<subscript>2</subscript></entry>
2175 <entry>v<subscript>1</subscript></entry>
2176 <entry>v<subscript>0</subscript></entry>
2177 <entry>y<subscript>7</subscript></entry>
2178 <entry>y<subscript>6</subscript></entry>
2179 <entry>y<subscript>5</subscript></entry>
2180 <entry>y<subscript>4</subscript></entry>
2181 <entry>y<subscript>3</subscript></entry>
2182 <entry>y<subscript>2</subscript></entry>
2183 <entry>y<subscript>1</subscript></entry>
2184 <entry>y<subscript>0</subscript></entry>
2185 </row>
2186 <row>
2187 <entry></entry>
2188 <entry></entry>
2189 <entry></entry>
2190 <entry>-</entry>
2191 <entry>-</entry>
2192 <entry>-</entry>
2193 <entry>-</entry>
2194 <entry>u<subscript>7</subscript></entry>
2195 <entry>u<subscript>6</subscript></entry>
2196 <entry>u<subscript>5</subscript></entry>
2197 <entry>u<subscript>4</subscript></entry>
2198 <entry>u<subscript>3</subscript></entry>
2199 <entry>u<subscript>2</subscript></entry>
2200 <entry>u<subscript>1</subscript></entry>
2201 <entry>u<subscript>0</subscript></entry>
2202 <entry>y<subscript>7</subscript></entry>
2203 <entry>y<subscript>6</subscript></entry>
2204 <entry>y<subscript>5</subscript></entry>
2205 <entry>y<subscript>4</subscript></entry>
2206 <entry>y<subscript>3</subscript></entry>
2207 <entry>y<subscript>2</subscript></entry>
2208 <entry>y<subscript>1</subscript></entry>
2209 <entry>y<subscript>0</subscript></entry>
2210 </row>
2211 <row id="V4L2-MBUS-FMT-YUYV8-1X16">
2212 <entry>V4L2_MBUS_FMT_YUYV8_1X16</entry>
2213 <entry>0x2011</entry>
2214 <entry></entry>
2215 <entry>-</entry>
2216 <entry>-</entry>
2217 <entry>-</entry>
2218 <entry>-</entry>
2219 <entry>y<subscript>7</subscript></entry>
2220 <entry>y<subscript>6</subscript></entry>
2221 <entry>y<subscript>5</subscript></entry>
2222 <entry>y<subscript>4</subscript></entry>
2223 <entry>y<subscript>3</subscript></entry>
2224 <entry>y<subscript>2</subscript></entry>
2225 <entry>y<subscript>1</subscript></entry>
2226 <entry>y<subscript>0</subscript></entry>
2227 <entry>u<subscript>7</subscript></entry>
2228 <entry>u<subscript>6</subscript></entry>
2229 <entry>u<subscript>5</subscript></entry>
2230 <entry>u<subscript>4</subscript></entry>
2231 <entry>u<subscript>3</subscript></entry>
2232 <entry>u<subscript>2</subscript></entry>
2233 <entry>u<subscript>1</subscript></entry>
2234 <entry>u<subscript>0</subscript></entry>
2235 </row>
2236 <row>
2237 <entry></entry>
2238 <entry></entry>
2239 <entry></entry>
2240 <entry>-</entry>
2241 <entry>-</entry>
2242 <entry>-</entry>
2243 <entry>-</entry>
2244 <entry>y<subscript>7</subscript></entry>
2245 <entry>y<subscript>6</subscript></entry>
2246 <entry>y<subscript>5</subscript></entry>
2247 <entry>y<subscript>4</subscript></entry>
2248 <entry>y<subscript>3</subscript></entry>
2249 <entry>y<subscript>2</subscript></entry>
2250 <entry>y<subscript>1</subscript></entry>
2251 <entry>y<subscript>0</subscript></entry>
2252 <entry>v<subscript>7</subscript></entry>
2253 <entry>v<subscript>6</subscript></entry>
2254 <entry>v<subscript>5</subscript></entry>
2255 <entry>v<subscript>4</subscript></entry>
2256 <entry>v<subscript>3</subscript></entry>
2257 <entry>v<subscript>2</subscript></entry>
2258 <entry>v<subscript>1</subscript></entry>
2259 <entry>v<subscript>0</subscript></entry>
2260 </row>
2261 <row id="V4L2-MBUS-FMT-YVYU8-1X16">
2262 <entry>V4L2_MBUS_FMT_YVYU8_1X16</entry>
2263 <entry>0x2012</entry>
2264 <entry></entry>
2265 <entry>-</entry>
2266 <entry>-</entry>
2267 <entry>-</entry>
2268 <entry>-</entry>
2269 <entry>y<subscript>7</subscript></entry>
2270 <entry>y<subscript>6</subscript></entry>
2271 <entry>y<subscript>5</subscript></entry>
2272 <entry>y<subscript>4</subscript></entry>
2273 <entry>y<subscript>3</subscript></entry>
2274 <entry>y<subscript>2</subscript></entry>
2275 <entry>y<subscript>1</subscript></entry>
2276 <entry>y<subscript>0</subscript></entry>
2277 <entry>v<subscript>7</subscript></entry>
2278 <entry>v<subscript>6</subscript></entry>
2279 <entry>v<subscript>5</subscript></entry>
2280 <entry>v<subscript>4</subscript></entry>
2281 <entry>v<subscript>3</subscript></entry>
2282 <entry>v<subscript>2</subscript></entry>
2283 <entry>v<subscript>1</subscript></entry>
2284 <entry>v<subscript>0</subscript></entry>
2285 </row>
2286 <row>
2287 <entry></entry>
2288 <entry></entry>
2289 <entry></entry>
2290 <entry>-</entry>
2291 <entry>-</entry>
2292 <entry>-</entry>
2293 <entry>-</entry>
2294 <entry>y<subscript>7</subscript></entry>
2295 <entry>y<subscript>6</subscript></entry>
2296 <entry>y<subscript>5</subscript></entry>
2297 <entry>y<subscript>4</subscript></entry>
2298 <entry>y<subscript>3</subscript></entry>
2299 <entry>y<subscript>2</subscript></entry>
2300 <entry>y<subscript>1</subscript></entry>
2301 <entry>y<subscript>0</subscript></entry>
2302 <entry>u<subscript>7</subscript></entry>
2303 <entry>u<subscript>6</subscript></entry>
2304 <entry>u<subscript>5</subscript></entry>
2305 <entry>u<subscript>4</subscript></entry>
2306 <entry>u<subscript>3</subscript></entry>
2307 <entry>u<subscript>2</subscript></entry>
2308 <entry>u<subscript>1</subscript></entry>
2309 <entry>u<subscript>0</subscript></entry>
2310 </row>
2311 <row id="V4L2-MBUS-FMT-YUYV10-1X20">
2312 <entry>V4L2_MBUS_FMT_YUYV10_1X20</entry>
2313 <entry>0x200d</entry>
2314 <entry></entry>
2315 <entry>y<subscript>9</subscript></entry>
2316 <entry>y<subscript>8</subscript></entry>
2317 <entry>y<subscript>7</subscript></entry>
2318 <entry>y<subscript>6</subscript></entry>
2319 <entry>y<subscript>5</subscript></entry>
2320 <entry>y<subscript>4</subscript></entry>
2321 <entry>y<subscript>3</subscript></entry>
2322 <entry>y<subscript>2</subscript></entry>
2323 <entry>y<subscript>1</subscript></entry>
2324 <entry>y<subscript>0</subscript></entry>
2325 <entry>u<subscript>9</subscript></entry>
2326 <entry>u<subscript>8</subscript></entry>
2327 <entry>u<subscript>7</subscript></entry>
2328 <entry>u<subscript>6</subscript></entry>
2329 <entry>u<subscript>5</subscript></entry>
2330 <entry>u<subscript>4</subscript></entry>
2331 <entry>u<subscript>3</subscript></entry>
2332 <entry>u<subscript>2</subscript></entry>
2333 <entry>u<subscript>1</subscript></entry>
2334 <entry>u<subscript>0</subscript></entry>
2335 </row>
2336 <row>
2337 <entry></entry>
2338 <entry></entry>
2339 <entry></entry>
2340 <entry>y<subscript>9</subscript></entry>
2341 <entry>y<subscript>8</subscript></entry>
2342 <entry>y<subscript>7</subscript></entry>
2343 <entry>y<subscript>6</subscript></entry>
2344 <entry>y<subscript>5</subscript></entry>
2345 <entry>y<subscript>4</subscript></entry>
2346 <entry>y<subscript>3</subscript></entry>
2347 <entry>y<subscript>2</subscript></entry>
2348 <entry>y<subscript>1</subscript></entry>
2349 <entry>y<subscript>0</subscript></entry>
2350 <entry>v<subscript>9</subscript></entry>
2351 <entry>v<subscript>8</subscript></entry>
2352 <entry>v<subscript>7</subscript></entry>
2353 <entry>v<subscript>6</subscript></entry>
2354 <entry>v<subscript>5</subscript></entry>
2355 <entry>v<subscript>4</subscript></entry>
2356 <entry>v<subscript>3</subscript></entry>
2357 <entry>v<subscript>2</subscript></entry>
2358 <entry>v<subscript>1</subscript></entry>
2359 <entry>v<subscript>0</subscript></entry>
2360 </row>
2361 <row id="V4L2-MBUS-FMT-YVYU10-1X20">
2362 <entry>V4L2_MBUS_FMT_YVYU10_1X20</entry>
2363 <entry>0x200e</entry>
2364 <entry></entry>
2365 <entry>y<subscript>9</subscript></entry>
2366 <entry>y<subscript>8</subscript></entry>
2367 <entry>y<subscript>7</subscript></entry>
2368 <entry>y<subscript>6</subscript></entry>
2369 <entry>y<subscript>5</subscript></entry>
2370 <entry>y<subscript>4</subscript></entry>
2371 <entry>y<subscript>3</subscript></entry>
2372 <entry>y<subscript>2</subscript></entry>
2373 <entry>y<subscript>1</subscript></entry>
2374 <entry>y<subscript>0</subscript></entry>
2375 <entry>v<subscript>9</subscript></entry>
2376 <entry>v<subscript>8</subscript></entry>
2377 <entry>v<subscript>7</subscript></entry>
2378 <entry>v<subscript>6</subscript></entry>
2379 <entry>v<subscript>5</subscript></entry>
2380 <entry>v<subscript>4</subscript></entry>
2381 <entry>v<subscript>3</subscript></entry>
2382 <entry>v<subscript>2</subscript></entry>
2383 <entry>v<subscript>1</subscript></entry>
2384 <entry>v<subscript>0</subscript></entry>
2385 </row>
2386 <row>
2387 <entry></entry>
2388 <entry></entry>
2389 <entry></entry>
2390 <entry>y<subscript>9</subscript></entry>
2391 <entry>y<subscript>8</subscript></entry>
2392 <entry>y<subscript>7</subscript></entry>
2393 <entry>y<subscript>6</subscript></entry>
2394 <entry>y<subscript>5</subscript></entry>
2395 <entry>y<subscript>4</subscript></entry>
2396 <entry>y<subscript>3</subscript></entry>
2397 <entry>y<subscript>2</subscript></entry>
2398 <entry>y<subscript>1</subscript></entry>
2399 <entry>y<subscript>0</subscript></entry>
2400 <entry>u<subscript>9</subscript></entry>
2401 <entry>u<subscript>8</subscript></entry>
2402 <entry>u<subscript>7</subscript></entry>
2403 <entry>u<subscript>6</subscript></entry>
2404 <entry>u<subscript>5</subscript></entry>
2405 <entry>u<subscript>4</subscript></entry>
2406 <entry>u<subscript>3</subscript></entry>
2407 <entry>u<subscript>2</subscript></entry>
2408 <entry>u<subscript>1</subscript></entry>
2409 <entry>u<subscript>0</subscript></entry>
2410 </row>
2411 </tbody>
2412 </tgroup>
2413 </table>
2414 </section>
2415 </section>
2416</section>
diff --git a/Documentation/DocBook/v4l/v4l2.xml b/Documentation/DocBook/v4l/v4l2.xml
index 7859d7d9da39..2ada2f86bb54 100644
--- a/Documentation/DocBook/v4l/v4l2.xml
+++ b/Documentation/DocBook/v4l/v4l2.xml
@@ -439,6 +439,7 @@ and discussions on the V4L mailing list.</revremark>
439 <section id="radio"> &sub-dev-radio; </section> 439 <section id="radio"> &sub-dev-radio; </section>
440 <section id="rds"> &sub-dev-rds; </section> 440 <section id="rds"> &sub-dev-rds; </section>
441 <section id="event"> &sub-dev-event; </section> 441 <section id="event"> &sub-dev-event; </section>
442 <section id="subdev"> &sub-dev-subdev; </section>
442 </chapter> 443 </chapter>
443 444
444 <chapter id="driver"> 445 <chapter id="driver">
@@ -506,6 +507,9 @@ and discussions on the V4L mailing list.</revremark>
506 &sub-reqbufs; 507 &sub-reqbufs;
507 &sub-s-hw-freq-seek; 508 &sub-s-hw-freq-seek;
508 &sub-streamon; 509 &sub-streamon;
510 &sub-subdev-enum-frame-size;
511 &sub-subdev-enum-mbus-code;
512 &sub-subdev-g-fmt;
509 &sub-subscribe-event; 513 &sub-subscribe-event;
510 <!-- End of ioctls. --> 514 <!-- End of ioctls. -->
511 &sub-mmap; 515 &sub-mmap;
diff --git a/Documentation/DocBook/v4l/vidioc-streamon.xml b/Documentation/DocBook/v4l/vidioc-streamon.xml
index e42bff1f2c0a..75ed39bf4d2b 100644
--- a/Documentation/DocBook/v4l/vidioc-streamon.xml
+++ b/Documentation/DocBook/v4l/vidioc-streamon.xml
@@ -93,6 +93,15 @@ synchronize with other events.</para>
93been allocated (memory mapping) or enqueued (output) yet.</para> 93been allocated (memory mapping) or enqueued (output) yet.</para>
94 </listitem> 94 </listitem>
95 </varlistentry> 95 </varlistentry>
96 <varlistentry>
97 <term><errorcode>EPIPE</errorcode></term>
98 <listitem>
99 <para>The driver implements <link
100 linkend="pad-level-formats">pad-level format configuration</link> and
101 the pipeline configuration is invalid.
102 </para>
103 </listitem>
104 </varlistentry>
96 </variablelist> 105 </variablelist>
97 </refsect1> 106 </refsect1>
98</refentry> 107</refentry>
diff --git a/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml b/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
new file mode 100644
index 000000000000..79ce42b7c60c
--- /dev/null
+++ b/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
@@ -0,0 +1,154 @@
1<refentry id="vidioc-subdev-enum-frame-size">
2 <refmeta>
3 <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refentrytitle>
4 &manvol;
5 </refmeta>
6
7 <refnamediv>
8 <refname>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refname>
9 <refpurpose>Enumerate media bus frame sizes</refpurpose>
10 </refnamediv>
11
12 <refsynopsisdiv>
13 <funcsynopsis>
14 <funcprototype>
15 <funcdef>int <function>ioctl</function></funcdef>
16 <paramdef>int <parameter>fd</parameter></paramdef>
17 <paramdef>int <parameter>request</parameter></paramdef>
18 <paramdef>struct v4l2_subdev_frame_size_enum *
19 <parameter>argp</parameter></paramdef>
20 </funcprototype>
21 </funcsynopsis>
22 </refsynopsisdiv>
23
24 <refsect1>
25 <title>Arguments</title>
26
27 <variablelist>
28 <varlistentry>
29 <term><parameter>fd</parameter></term>
30 <listitem>
31 <para>&fd;</para>
32 </listitem>
33 </varlistentry>
34 <varlistentry>
35 <term><parameter>request</parameter></term>
36 <listitem>
37 <para>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</para>
38 </listitem>
39 </varlistentry>
40 <varlistentry>
41 <term><parameter>argp</parameter></term>
42 <listitem>
43 <para></para>
44 </listitem>
45 </varlistentry>
46 </variablelist>
47 </refsect1>
48
49 <refsect1>
50 <title>Description</title>
51
52 <note>
53 <title>Experimental</title>
54 <para>This is an <link linkend="experimental">experimental</link>
55 interface and may change in the future.</para>
56 </note>
57
58 <para>This ioctl allows applications to enumerate all frame sizes
59 supported by a sub-device on the given pad for the given media bus format.
60 Supported formats can be retrieved with the &VIDIOC-SUBDEV-ENUM-MBUS-CODE;
61 ioctl.</para>
62
63 <para>To enumerate frame sizes applications initialize the
64 <structfield>pad</structfield>, <structfield>code</structfield> and
65 <structfield>index</structfield> fields of the
66 &v4l2-subdev-mbus-code-enum; and call the
67 <constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant> ioctl with a pointer to
68 the structure. Drivers fill the minimum and maximum frame sizes or return
69 an &EINVAL; if one of the input parameters is invalid.</para>
70
71 <para>Sub-devices that only support discrete frame sizes (such as most
72 sensors) will return one or more frame sizes with identical minimum and
73 maximum values.</para>
74
75 <para>Not all possible sizes in given [minimum, maximum] ranges need to be
76 supported. For instance, a scaler that uses a fixed-point scaling ratio
77 might not be able to produce every frame size between the minimum and
78 maximum values. Applications must use the &VIDIOC-SUBDEV-S-FMT; ioctl to
79 try the sub-device for an exact supported frame size.</para>
80
81 <para>Available frame sizes may depend on the current 'try' formats at other
82 pads of the sub-device, as well as on the current active links and the
83 current values of V4L2 controls. See &VIDIOC-SUBDEV-G-FMT; for more
84 information about try formats.</para>
85
86 <table pgwide="1" frame="none" id="v4l2-subdev-frame-size-enum">
87 <title>struct <structname>v4l2_subdev_frame_size_enum</structname></title>
88 <tgroup cols="3">
89 &cs-str;
90 <tbody valign="top">
91 <row>
92 <entry>__u32</entry>
93 <entry><structfield>index</structfield></entry>
94 <entry>Number of the format in the enumeration, set by the
95 application.</entry>
96 </row>
97 <row>
98 <entry>__u32</entry>
99 <entry><structfield>pad</structfield></entry>
100 <entry>Pad number as reported by the media controller API.</entry>
101 </row>
102 <row>
103 <entry>__u32</entry>
104 <entry><structfield>code</structfield></entry>
105 <entry>The media bus format code, as defined in
106 <xref linkend="v4l2-mbus-format" />.</entry>
107 </row>
108 <row>
109 <entry>__u32</entry>
110 <entry><structfield>min_width</structfield></entry>
111 <entry>Minimum frame width, in pixels.</entry>
112 </row>
113 <row>
114 <entry>__u32</entry>
115 <entry><structfield>max_width</structfield></entry>
116 <entry>Maximum frame width, in pixels.</entry>
117 </row>
118 <row>
119 <entry>__u32</entry>
120 <entry><structfield>min_height</structfield></entry>
121 <entry>Minimum frame height, in pixels.</entry>
122 </row>
123 <row>
124 <entry>__u32</entry>
125 <entry><structfield>max_height</structfield></entry>
126 <entry>Maximum frame height, in pixels.</entry>
127 </row>
128 <row>
129 <entry>__u32</entry>
130 <entry><structfield>reserved</structfield>[9]</entry>
131 <entry>Reserved for future extensions. Applications and drivers must
132 set the array to zero.</entry>
133 </row>
134 </tbody>
135 </tgroup>
136 </table>
137 </refsect1>
138
139 <refsect1>
140 &return-value;
141
142 <variablelist>
143 <varlistentry>
144 <term><errorcode>EINVAL</errorcode></term>
145 <listitem>
146 <para>The &v4l2-subdev-frame-size-enum; <structfield>pad</structfield>
147 references a non-existing pad, the <structfield>code</structfield> is
148 invalid for the given pad or the <structfield>index</structfield>
149 field is out of bounds.</para>
150 </listitem>
151 </varlistentry>
152 </variablelist>
153 </refsect1>
154</refentry>
diff --git a/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml b/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
new file mode 100644
index 000000000000..a6b3432449f6
--- /dev/null
+++ b/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
@@ -0,0 +1,119 @@
1<refentry id="vidioc-subdev-enum-mbus-code">
2 <refmeta>
3 <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_MBUS_CODE</refentrytitle>
4 &manvol;
5 </refmeta>
6
7 <refnamediv>
8 <refname>VIDIOC_SUBDEV_ENUM_MBUS_CODE</refname>
9 <refpurpose>Enumerate media bus formats</refpurpose>
10 </refnamediv>
11
12 <refsynopsisdiv>
13 <funcsynopsis>
14 <funcprototype>
15 <funcdef>int <function>ioctl</function></funcdef>
16 <paramdef>int <parameter>fd</parameter></paramdef>
17 <paramdef>int <parameter>request</parameter></paramdef>
18 <paramdef>struct v4l2_subdev_mbus_code_enum *
19 <parameter>argp</parameter></paramdef>
20 </funcprototype>
21 </funcsynopsis>
22 </refsynopsisdiv>
23
24 <refsect1>
25 <title>Arguments</title>
26
27 <variablelist>
28 <varlistentry>
29 <term><parameter>fd</parameter></term>
30 <listitem>
31 <para>&fd;</para>
32 </listitem>
33 </varlistentry>
34 <varlistentry>
35 <term><parameter>request</parameter></term>
36 <listitem>
37 <para>VIDIOC_SUBDEV_ENUM_MBUS_CODE</para>
38 </listitem>
39 </varlistentry>
40 <varlistentry>
41 <term><parameter>argp</parameter></term>
42 <listitem>
43 <para></para>
44 </listitem>
45 </varlistentry>
46 </variablelist>
47 </refsect1>
48
49 <refsect1>
50 <title>Description</title>
51
52 <note>
53 <title>Experimental</title>
54 <para>This is an <link linkend="experimental">experimental</link>
55 interface and may change in the future.</para>
56 </note>
57
58 <para>To enumerate media bus formats available at a given sub-device pad
59 applications initialize the <structfield>pad</structfield> and
60 <structfield>index</structfield> fields of &v4l2-subdev-mbus-code-enum; and
61 call the <constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant> ioctl with a
62 pointer to this structure. Drivers fill the rest of the structure or return
63 an &EINVAL; if either the <structfield>pad</structfield> or
64 <structfield>index</structfield> are invalid. All media bus formats are
65 enumerable by beginning at index zero and incrementing by one until
66 <errorcode>EINVAL</errorcode> is returned.</para>
67
68 <para>Available media bus formats may depend on the current 'try' formats
69 at other pads of the sub-device, as well as on the current active links. See
70 &VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para>
71
72 <table pgwide="1" frame="none" id="v4l2-subdev-mbus-code-enum">
73 <title>struct <structname>v4l2_subdev_mbus_code_enum</structname></title>
74 <tgroup cols="3">
75 &cs-str;
76 <tbody valign="top">
77 <row>
78 <entry>__u32</entry>
79 <entry><structfield>pad</structfield></entry>
80 <entry>Pad number as reported by the media controller API.</entry>
81 </row>
82 <row>
83 <entry>__u32</entry>
84 <entry><structfield>index</structfield></entry>
85 <entry>Number of the format in the enumeration, set by the
86 application.</entry>
87 </row>
88 <row>
89 <entry>__u32</entry>
90 <entry><structfield>code</structfield></entry>
91 <entry>The media bus format code, as defined in
92 <xref linkend="v4l2-mbus-format" />.</entry>
93 </row>
94 <row>
95 <entry>__u32</entry>
96 <entry><structfield>reserved</structfield>[9]</entry>
97 <entry>Reserved for future extensions. Applications and drivers must
98 set the array to zero.</entry>
99 </row>
100 </tbody>
101 </tgroup>
102 </table>
103 </refsect1>
104
105 <refsect1>
106 &return-value;
107
108 <variablelist>
109 <varlistentry>
110 <term><errorcode>EINVAL</errorcode></term>
111 <listitem>
112 <para>The &v4l2-subdev-mbus-code-enum; <structfield>pad</structfield>
113 references a non-existing pad, or the <structfield>index</structfield>
114 field is out of bounds.</para>
115 </listitem>
116 </varlistentry>
117 </variablelist>
118 </refsect1>
119</refentry>
diff --git a/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml b/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
new file mode 100644
index 000000000000..f367c570c530
--- /dev/null
+++ b/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
@@ -0,0 +1,180 @@
1<refentry id="vidioc-subdev-g-fmt">
2 <refmeta>
3 <refentrytitle>ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</refentrytitle>
4 &manvol;
5 </refmeta>
6
7 <refnamediv>
8 <refname>VIDIOC_SUBDEV_G_FMT</refname>
9 <refname>VIDIOC_SUBDEV_S_FMT</refname>
10 <refpurpose>Get or set the data format on a subdev pad</refpurpose>
11 </refnamediv>
12
13 <refsynopsisdiv>
14 <funcsynopsis>
15 <funcprototype>
16 <funcdef>int <function>ioctl</function></funcdef>
17 <paramdef>int <parameter>fd</parameter></paramdef>
18 <paramdef>int <parameter>request</parameter></paramdef>
19 <paramdef>struct v4l2_subdev_format *<parameter>argp</parameter>
20 </paramdef>
21 </funcprototype>
22 </funcsynopsis>
23 </refsynopsisdiv>
24
25 <refsect1>
26 <title>Arguments</title>
27
28 <variablelist>
29 <varlistentry>
30 <term><parameter>fd</parameter></term>
31 <listitem>
32 <para>&fd;</para>
33 </listitem>
34 </varlistentry>
35 <varlistentry>
36 <term><parameter>request</parameter></term>
37 <listitem>
38 <para>VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</para>
39 </listitem>
40 </varlistentry>
41 <varlistentry>
42 <term><parameter>argp</parameter></term>
43 <listitem>
44 <para></para>
45 </listitem>
46 </varlistentry>
47 </variablelist>
48 </refsect1>
49
50 <refsect1>
51 <title>Description</title>
52
53 <note>
54 <title>Experimental</title>
55 <para>This is an <link linkend="experimental">experimental</link>
56 interface and may change in the future.</para>
57 </note>
58
59 <para>These ioctls are used to negotiate the frame format at specific
60 subdev pads in the image pipeline.</para>
61
62 <para>To retrieve the current format applications set the
63 <structfield>pad</structfield> field of a &v4l2-subdev-format; to the
64 desired pad number as reported by the media API and the
65 <structfield>which</structfield> field to
66 <constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. When they call the
67 <constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl with a pointer to this
68 structure the driver fills the members of the <structfield>format</structfield>
69 field.</para>
70
71 <para>To change the current format applications set both the
72 <structfield>pad</structfield> and <structfield>which</structfield> fields
73 and all members of the <structfield>format</structfield> field. When they
74 call the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl with a pointer to this
75 structure the driver verifies the requested format, adjusts it based on the
76 hardware capabilities and configures the device. Upon return the
77 &v4l2-subdev-format; contains the current format as would be returned by a
78 <constant>VIDIOC_SUBDEV_G_FMT</constant> call.</para>
79
80 <para>Applications can query the device capabilities by setting the
81 <structfield>which</structfield> to
82 <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' formats are not
83 applied to the device by the driver, but are changed exactly as active
84 formats and stored in the sub-device file handle. Two applications querying
85 the same sub-device would thus not interact with each other.</para>
86
87 <para>For instance, to try a format at the output pad of a sub-device,
88 applications would first set the try format at the sub-device input with the
89 <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl. They would then either
90 retrieve the default format at the output pad with the
91 <constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl, or set the desired output
92 pad format with the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl and check
93 the returned value.</para>
94
95 <para>Try formats do not depend on active formats, but can depend on the
96 current links configuration or sub-device controls value. For instance, a
97 low-pass noise filter might crop pixels at the frame boundaries, modifying
98 its output frame size.</para>
99
100 <para>Drivers must not return an error solely because the requested format
101 doesn't match the device capabilities. They must instead modify the format
102 to match what the hardware can provide. The modified format should be as
103 close as possible to the original request.</para>
104
105 <table pgwide="1" frame="none" id="v4l2-subdev-format">
106 <title>struct <structname>v4l2_subdev_format</structname></title>
107 <tgroup cols="3">
108 &cs-str;
109 <tbody valign="top">
110 <row>
111 <entry>__u32</entry>
112 <entry><structfield>pad</structfield></entry>
113 <entry>Pad number as reported by the media controller API.</entry>
114 </row>
115 <row>
116 <entry>__u32</entry>
117 <entry><structfield>which</structfield></entry>
118 <entry>Format to modified, from &v4l2-subdev-format-whence;.</entry>
119 </row>
120 <row>
121 <entry>&v4l2-mbus-framefmt;</entry>
122 <entry><structfield>format</structfield></entry>
123 <entry>Definition of an image format, see <xref
124 linkend="v4l2-mbus-framefmt" /> for details.</entry>
125 </row>
126 <row>
127 <entry>__u32</entry>
128 <entry><structfield>reserved</structfield>[8]</entry>
129 <entry>Reserved for future extensions. Applications and drivers must
130 set the array to zero.</entry>
131 </row>
132 </tbody>
133 </tgroup>
134 </table>
135
136 <table pgwide="1" frame="none" id="v4l2-subdev-format-whence">
137 <title>enum <structname>v4l2_subdev_format_whence</structname></title>
138 <tgroup cols="3">
139 &cs-def;
140 <tbody valign="top">
141 <row>
142 <entry>V4L2_SUBDEV_FORMAT_TRY</entry>
143 <entry>0</entry>
144 <entry>Try formats, used for querying device capabilities.</entry>
145 </row>
146 <row>
147 <entry>V4L2_SUBDEV_FORMAT_ACTIVE</entry>
148 <entry>1</entry>
149 <entry>Active formats, applied to the hardware.</entry>
150 </row>
151 </tbody>
152 </tgroup>
153 </table>
154 </refsect1>
155
156 <refsect1>
157 &return-value;
158
159 <variablelist>
160 <varlistentry>
161 <term><errorcode>EBUSY</errorcode></term>
162 <listitem>
163 <para>The format can't be changed because the pad is currently busy.
164 This can be caused, for instance, by an active video stream on the
165 pad. The ioctl must not be retried without performing another action
166 to fix the problem first. Only returned by
167 <constant>VIDIOC_SUBDEV_S_FMT</constant></para>
168 </listitem>
169 </varlistentry>
170 <varlistentry>
171 <term><errorcode>EINVAL</errorcode></term>
172 <listitem>
173 <para>The &v4l2-subdev-format; <structfield>pad</structfield>
174 references a non-existing pad, or the <structfield>which</structfield>
175 field references a non-existing format.</para>
176 </listitem>
177 </varlistentry>
178 </variablelist>
179 </refsect1>
180</refentry>
diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
index bc763db385df..207cc5cceb29 100644
--- a/drivers/media/video/v4l2-subdev.c
+++ b/drivers/media/video/v4l2-subdev.c
@@ -149,6 +149,9 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
149 struct video_device *vdev = video_devdata(file); 149 struct video_device *vdev = video_devdata(file);
150 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); 150 struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
151 struct v4l2_fh *vfh = file->private_data; 151 struct v4l2_fh *vfh = file->private_data;
152#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
153 struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh);
154#endif
152 155
153 switch (cmd) { 156 switch (cmd) {
154 case VIDIOC_QUERYCTRL: 157 case VIDIOC_QUERYCTRL:
@@ -183,7 +186,53 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
183 186
184 case VIDIOC_UNSUBSCRIBE_EVENT: 187 case VIDIOC_UNSUBSCRIBE_EVENT:
185 return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg); 188 return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg);
189#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
190 case VIDIOC_SUBDEV_G_FMT: {
191 struct v4l2_subdev_format *format = arg;
192
193 if (format->which != V4L2_SUBDEV_FORMAT_TRY &&
194 format->which != V4L2_SUBDEV_FORMAT_ACTIVE)
195 return -EINVAL;
196
197 if (format->pad >= sd->entity.num_pads)
198 return -EINVAL;
199
200 return v4l2_subdev_call(sd, pad, get_fmt, subdev_fh, format);
201 }
202
203 case VIDIOC_SUBDEV_S_FMT: {
204 struct v4l2_subdev_format *format = arg;
205
206 if (format->which != V4L2_SUBDEV_FORMAT_TRY &&
207 format->which != V4L2_SUBDEV_FORMAT_ACTIVE)
208 return -EINVAL;
209
210 if (format->pad >= sd->entity.num_pads)
211 return -EINVAL;
186 212
213 return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh, format);
214 }
215
216 case VIDIOC_SUBDEV_ENUM_MBUS_CODE: {
217 struct v4l2_subdev_mbus_code_enum *code = arg;
218
219 if (code->pad >= sd->entity.num_pads)
220 return -EINVAL;
221
222 return v4l2_subdev_call(sd, pad, enum_mbus_code, subdev_fh,
223 code);
224 }
225
226 case VIDIOC_SUBDEV_ENUM_FRAME_SIZE: {
227 struct v4l2_subdev_frame_size_enum *fse = arg;
228
229 if (fse->pad >= sd->entity.num_pads)
230 return -EINVAL;
231
232 return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh,
233 fse);
234 }
235#endif
187 default: 236 default:
188 return -ENOIOCTLCMD; 237 return -ENOIOCTLCMD;
189 } 238 }
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index c33f22a6a404..43918a34db9f 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -372,6 +372,7 @@ header-y += usbdevice_fs.h
372header-y += utime.h 372header-y += utime.h
373header-y += utsname.h 373header-y += utsname.h
374header-y += v4l2-mediabus.h 374header-y += v4l2-mediabus.h
375header-y += v4l2-subdev.h
375header-y += veth.h 376header-y += veth.h
376header-y += vhost.h 377header-y += vhost.h
377header-y += videodev2.h 378header-y += videodev2.h
diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h
new file mode 100644
index 000000000000..8dbb44873821
--- /dev/null
+++ b/include/linux/v4l2-subdev.h
@@ -0,0 +1,90 @@
1/*
2 * V4L2 subdev userspace API
3 *
4 * Copyright (C) 2010 Nokia Corporation
5 *
6 * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
7 * Sakari Ailus <sakari.ailus@iki.fi>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#ifndef __LINUX_V4L2_SUBDEV_H
24#define __LINUX_V4L2_SUBDEV_H
25
26#include <linux/ioctl.h>
27#include <linux/types.h>
28#include <linux/v4l2-mediabus.h>
29
30/**
31 * enum v4l2_subdev_format_whence - Media bus format type
32 * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
33 * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
34 */
35enum v4l2_subdev_format_whence {
36 V4L2_SUBDEV_FORMAT_TRY = 0,
37 V4L2_SUBDEV_FORMAT_ACTIVE = 1,
38};
39
40/**
41 * struct v4l2_subdev_format - Pad-level media bus format
42 * @which: format type (from enum v4l2_subdev_format_whence)
43 * @pad: pad number, as reported by the media API
44 * @format: media bus format (format code and frame size)
45 */
46struct v4l2_subdev_format {
47 __u32 which;
48 __u32 pad;
49 struct v4l2_mbus_framefmt format;
50 __u32 reserved[8];
51};
52
53/**
54 * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
55 * @pad: pad number, as reported by the media API
56 * @index: format index during enumeration
57 * @code: format code (from enum v4l2_mbus_pixelcode)
58 */
59struct v4l2_subdev_mbus_code_enum {
60 __u32 pad;
61 __u32 index;
62 __u32 code;
63 __u32 reserved[9];
64};
65
66/**
67 * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
68 * @pad: pad number, as reported by the media API
69 * @index: format index during enumeration
70 * @code: format code (from enum v4l2_mbus_pixelcode)
71 */
72struct v4l2_subdev_frame_size_enum {
73 __u32 index;
74 __u32 pad;
75 __u32 code;
76 __u32 min_width;
77 __u32 max_width;
78 __u32 min_height;
79 __u32 max_height;
80 __u32 reserved[9];
81};
82
83#define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format)
84#define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format)
85#define VIDIOC_SUBDEV_ENUM_MBUS_CODE \
86 _IOWR('V', 2, struct v4l2_subdev_mbus_code_enum)
87#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
88 _IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
89
90#endif
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index d4d3653426a9..4215650151be 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -21,6 +21,7 @@
21#ifndef _V4L2_SUBDEV_H 21#ifndef _V4L2_SUBDEV_H
22#define _V4L2_SUBDEV_H 22#define _V4L2_SUBDEV_H
23 23
24#include <linux/v4l2-subdev.h>
24#include <media/media-entity.h> 25#include <media/media-entity.h>
25#include <media/v4l2-common.h> 26#include <media/v4l2-common.h>
26#include <media/v4l2-dev.h> 27#include <media/v4l2-dev.h>
@@ -414,6 +415,15 @@ struct v4l2_subdev_ir_ops {
414}; 415};
415 416
416struct v4l2_subdev_pad_ops { 417struct v4l2_subdev_pad_ops {
418 int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
419 struct v4l2_subdev_mbus_code_enum *code);
420 int (*enum_frame_size)(struct v4l2_subdev *sd,
421 struct v4l2_subdev_fh *fh,
422 struct v4l2_subdev_frame_size_enum *fse);
423 int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
424 struct v4l2_subdev_format *format);
425 int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
426 struct v4l2_subdev_format *format);
417}; 427};
418 428
419struct v4l2_subdev_ops { 429struct v4l2_subdev_ops {