[media] DocBook media: update three sections of common.xml

Updates for the "Tuners and Modulators", "Video Standards" and
"Digital Video (DV) Timings" sections.

Besides lots of trivial little fixes the main changes are:

- Remove two footnotes from "Video Standards": the first is a discussion
  of alternative methods of setting standards, which is pretty pointless
  since the standards API is effectively frozen anyway, and the second
  points to 'rationale' that makes little or no sense to me.

- Clarify a few things in the "Digital Video (DV) Timings" section.
  It was awkwardly formatted as well: there used to be a list with
  multiple bullets that has been reduced to a single item, so drop the
  list and rewrite that text.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
Hans Verkuil 2014-01-07 09:39:57 -03:00 committed by Mauro Carvalho Chehab
parent 1c656c87ac
commit d4d6819f9b

View File

@ -449,7 +449,7 @@ the tuner.</para>
video inputs.</para> video inputs.</para>
<para>To query and change tuner properties applications use the <para>To query and change tuner properties applications use the
&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctl, respectively. The &VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctls, respectively. The
&v4l2-tuner; returned by <constant>VIDIOC_G_TUNER</constant> also &v4l2-tuner; returned by <constant>VIDIOC_G_TUNER</constant> also
contains signal status information applicable when the tuner of the contains signal status information applicable when the tuner of the
current video or radio input is queried. Note that current video or radio input is queried. Note that
@ -514,7 +514,7 @@ standards or variations of standards. Each video input and output may
support another set of standards. This set is reported by the support another set of standards. This set is reported by the
<structfield>std</structfield> field of &v4l2-input; and <structfield>std</structfield> field of &v4l2-input; and
&v4l2-output; returned by the &VIDIOC-ENUMINPUT; and &v4l2-output; returned by the &VIDIOC-ENUMINPUT; and
&VIDIOC-ENUMOUTPUT; ioctl, respectively.</para> &VIDIOC-ENUMOUTPUT; ioctls, respectively.</para>
<para>V4L2 defines one bit for each analog video standard <para>V4L2 defines one bit for each analog video standard
currently in use worldwide, and sets aside bits for driver defined currently in use worldwide, and sets aside bits for driver defined
@ -545,28 +545,10 @@ automatically.</para>
<para>To query and select the standard used by the current video <para>To query and select the standard used by the current video
input or output applications call the &VIDIOC-G-STD; and input or output applications call the &VIDIOC-G-STD; and
&VIDIOC-S-STD; ioctl, respectively. The <emphasis>received</emphasis> &VIDIOC-S-STD; ioctl, respectively. The <emphasis>received</emphasis>
standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the parameter of all these ioctls is a pointer to a &v4l2-std-id; type (a standard set), <emphasis>not</emphasis> an index into the standard enumeration.<footnote> standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the
<para>An alternative to the current scheme is to use pointers parameter of all these ioctls is a pointer to a &v4l2-std-id; type
to indices as arguments of <constant>VIDIOC_G_STD</constant> and (a standard set), <emphasis>not</emphasis> an index into the standard
<constant>VIDIOC_S_STD</constant>, the &v4l2-input; and enumeration. Drivers must implement all video standard ioctls
&v4l2-output; <structfield>std</structfield> field would be a set of
indices like <structfield>audioset</structfield>.</para>
<para>Indices are consistent with the rest of the API
and identify the standard unambiguously. In the present scheme of
things an enumerated standard is looked up by &v4l2-std-id;. Now the
standards supported by the inputs of a device can overlap. Just
assume the tuner and composite input in the example above both
exist on a device. An enumeration of "PAL-B/G", "PAL-H/I" suggests
a choice which does not exist. We cannot merge or omit sets, because
applications would be unable to find the standards reported by
<constant>VIDIOC_G_STD</constant>. That leaves separate enumerations
for each input. Also selecting a standard by &v4l2-std-id; can be
ambiguous. Advantage of this method is that applications need not
identify the standard indirectly, after enumerating.</para><para>So in
summary, the lookup itself is unavoidable. The difference is only
whether the lookup is necessary to find an enumerated standard or to
switch to a standard by &v4l2-std-id;.</para>
</footnote> Drivers must implement all video standard ioctls
when the device has one or more video inputs or outputs.</para> when the device has one or more video inputs or outputs.</para>
<para>Special rules apply to devices such as USB cameras where the notion of video <para>Special rules apply to devices such as USB cameras where the notion of video
@ -585,17 +567,10 @@ to zero and the <constant>VIDIOC_G_STD</constant>,
<constant>VIDIOC_S_STD</constant>, <constant>VIDIOC_S_STD</constant>,
<constant>VIDIOC_QUERYSTD</constant> and <constant>VIDIOC_QUERYSTD</constant> and
<constant>VIDIOC_ENUMSTD</constant> ioctls shall return the <constant>VIDIOC_ENUMSTD</constant> ioctls shall return the
&ENOTTY;.<footnote> &ENOTTY; or the &EINVAL;.</para>
<para>See <xref linkend="buffer" /> for a rationale.</para>
<para>Applications can make use of the <xref linkend="input-capabilities" /> and <para>Applications can make use of the <xref linkend="input-capabilities" /> and
<xref linkend="output-capabilities"/> flags to determine whether the video standard ioctls <xref linkend="output-capabilities"/> flags to determine whether the video standard ioctls
are available for the device.</para> can be used with the given input or output.</para>
<para>See <xref linkend="buffer" /> for a rationale. Probably
even USB cameras follow some well known video standard. It might have
been better to explicitly indicate elsewhere if a device cannot live
up to normal expectations, instead of this exception.</para>
</footnote></para>
<example> <example>
<title>Information about the current video standard</title> <title>Information about the current video standard</title>
@ -604,22 +579,22 @@ up to normal expectations, instead of this exception.</para>
&v4l2-std-id; std_id; &v4l2-std-id; std_id;
&v4l2-standard; standard; &v4l2-standard; standard;
if (-1 == ioctl (fd, &VIDIOC-G-STD;, &amp;std_id)) { if (-1 == ioctl(fd, &VIDIOC-G-STD;, &amp;std_id)) {
/* Note when VIDIOC_ENUMSTD always returns ENOTTY this /* Note when VIDIOC_ENUMSTD always returns ENOTTY this
is no video device or it falls under the USB exception, is no video device or it falls under the USB exception,
and VIDIOC_G_STD returning ENOTTY is no error. */ and VIDIOC_G_STD returning ENOTTY is no error. */
perror ("VIDIOC_G_STD"); perror("VIDIOC_G_STD");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
memset (&amp;standard, 0, sizeof (standard)); memset(&amp;standard, 0, sizeof(standard));
standard.index = 0; standard.index = 0;
while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &amp;standard)) { while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &amp;standard)) {
if (standard.id &amp; std_id) { if (standard.id &amp; std_id) {
printf ("Current video standard: %s\n", standard.name); printf("Current video standard: %s\n", standard.name);
exit (EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
standard.index++; standard.index++;
@ -629,8 +604,8 @@ while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &amp;standard)) {
empty unless this device falls under the USB exception. */ empty unless this device falls under the USB exception. */
if (errno == EINVAL || standard.index == 0) { if (errno == EINVAL || standard.index == 0) {
perror ("VIDIOC_ENUMSTD"); perror("VIDIOC_ENUMSTD");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
</programlisting> </programlisting>
</example> </example>
@ -643,26 +618,26 @@ input</title>
&v4l2-input; input; &v4l2-input; input;
&v4l2-standard; standard; &v4l2-standard; standard;
memset (&amp;input, 0, sizeof (input)); memset(&amp;input, 0, sizeof(input));
if (-1 == ioctl (fd, &VIDIOC-G-INPUT;, &amp;input.index)) { if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &amp;input.index)) {
perror ("VIDIOC_G_INPUT"); perror("VIDIOC_G_INPUT");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (-1 == ioctl (fd, &VIDIOC-ENUMINPUT;, &amp;input)) { if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &amp;input)) {
perror ("VIDIOC_ENUM_INPUT"); perror("VIDIOC_ENUM_INPUT");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
printf ("Current input %s supports:\n", input.name); printf("Current input %s supports:\n", input.name);
memset (&amp;standard, 0, sizeof (standard)); memset(&amp;standard, 0, sizeof(standard));
standard.index = 0; standard.index = 0;
while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &amp;standard)) { while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &amp;standard)) {
if (standard.id &amp; input.std) if (standard.id &amp; input.std)
printf ("%s\n", standard.name); printf("%s\n", standard.name);
standard.index++; standard.index++;
} }
@ -671,8 +646,8 @@ while (0 == ioctl (fd, &VIDIOC-ENUMSTD;, &amp;standard)) {
empty unless this device falls under the USB exception. */ empty unless this device falls under the USB exception. */
if (errno != EINVAL || standard.index == 0) { if (errno != EINVAL || standard.index == 0) {
perror ("VIDIOC_ENUMSTD"); perror("VIDIOC_ENUMSTD");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
</programlisting> </programlisting>
</example> </example>
@ -684,21 +659,21 @@ if (errno != EINVAL || standard.index == 0) {
&v4l2-input; input; &v4l2-input; input;
&v4l2-std-id; std_id; &v4l2-std-id; std_id;
memset (&amp;input, 0, sizeof (input)); memset(&amp;input, 0, sizeof(input));
if (-1 == ioctl (fd, &VIDIOC-G-INPUT;, &amp;input.index)) { if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &amp;input.index)) {
perror ("VIDIOC_G_INPUT"); perror("VIDIOC_G_INPUT");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (-1 == ioctl (fd, &VIDIOC-ENUMINPUT;, &amp;input)) { if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &amp;input)) {
perror ("VIDIOC_ENUM_INPUT"); perror("VIDIOC_ENUM_INPUT");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (0 == (input.std &amp; V4L2_STD_PAL_BG)) { if (0 == (input.std &amp; V4L2_STD_PAL_BG)) {
fprintf (stderr, "Oops. B/G PAL is not supported.\n"); fprintf(stderr, "Oops. B/G PAL is not supported.\n");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
/* Note this is also supposed to work when only B /* Note this is also supposed to work when only B
@ -706,9 +681,9 @@ if (0 == (input.std &amp; V4L2_STD_PAL_BG)) {
std_id = V4L2_STD_PAL_BG; std_id = V4L2_STD_PAL_BG;
if (-1 == ioctl (fd, &VIDIOC-S-STD;, &amp;std_id)) { if (-1 == ioctl(fd, &VIDIOC-S-STD;, &amp;std_id)) {
perror ("VIDIOC_S_STD"); perror("VIDIOC_S_STD");
exit (EXIT_FAILURE); exit(EXIT_FAILURE);
} }
</programlisting> </programlisting>
</example> </example>
@ -721,26 +696,25 @@ corresponding video timings. Today there are many more different hardware interf
such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry
video signals and there is a need to extend the API to select the video timings video signals and there is a need to extend the API to select the video timings
for these interfaces. Since it is not possible to extend the &v4l2-std-id; due to for these interfaces. Since it is not possible to extend the &v4l2-std-id; due to
the limited bits available, a new set of IOCTLs was added to set/get video timings at the limited bits available, a new set of ioctls was added to set/get video timings at
the input and output: </para><itemizedlist> the input and output.</para>
<listitem>
<para>DV Timings: This will allow applications to define detailed <para>These ioctls deal with the detailed digital video timings that define
video timings for the interface. This includes parameters such as width, height, each video format. This includes parameters such as the active video width and height,
polarities, frontporch, backporch etc. The <filename>linux/v4l2-dv-timings.h</filename> signal polarities, frontporches, backporches, sync widths etc. The <filename>linux/v4l2-dv-timings.h</filename>
header can be used to get the timings of the formats in the <xref linkend="cea861" /> and header can be used to get the timings of the formats in the <xref linkend="cea861" /> and
<xref linkend="vesadmt" /> standards. <xref linkend="vesadmt" /> standards.
</para> </para>
</listitem>
</itemizedlist> <para>To enumerate and query the attributes of the DV timings supported by a device
<para>To enumerate and query the attributes of the DV timings supported by a device,
applications use the &VIDIOC-ENUM-DV-TIMINGS; and &VIDIOC-DV-TIMINGS-CAP; ioctls. applications use the &VIDIOC-ENUM-DV-TIMINGS; and &VIDIOC-DV-TIMINGS-CAP; ioctls.
To set DV timings for the device, applications use the To set DV timings for the device applications use the
&VIDIOC-S-DV-TIMINGS; ioctl and to get current DV timings they use the &VIDIOC-S-DV-TIMINGS; ioctl and to get current DV timings they use the
&VIDIOC-G-DV-TIMINGS; ioctl. To detect the DV timings as seen by the video receiver applications &VIDIOC-G-DV-TIMINGS; ioctl. To detect the DV timings as seen by the video receiver applications
use the &VIDIOC-QUERY-DV-TIMINGS; ioctl.</para> use the &VIDIOC-QUERY-DV-TIMINGS; ioctl.</para>
<para>Applications can make use of the <xref linkend="input-capabilities" /> and <para>Applications can make use of the <xref linkend="input-capabilities" /> and
<xref linkend="output-capabilities"/> flags to decide what ioctls are available to set the <xref linkend="output-capabilities"/> flags to determine whether the digital video ioctls
video timings for the device.</para> can be used with the given input or output.</para>
</section> </section>
&sub-controls; &sub-controls;