mirror of https://gitee.com/openkylin/linux.git
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (655 commits) [media] revert patch: HDIC HD29L2 DMB-TH USB2.0 reference design driver mb86a20s: Add a few more register settings at the init seq mb86a20s: Group registers into the same line [media] [PATCH] don't reset the delivery system on DTV_CLEAR [media] [BUG] it913x-fe fix typo error making SNR levels unstable [media] cx23885: Query the CX25840 during enum_input for status [media] cx25840: Add support for g_input_status [media] rc-videomate-m1f.c Rename to match remote controler name [media] drivers: media: au0828: Fix dependency for VIDEO_AU0828 [media] convert drivers/media/* to use module_platform_driver() [media] drivers: video: cx231xx: Fix dependency for VIDEO_CX231XX_DVB [media] Exynos4 JPEG codec v4l2 driver [media] doc: v4l: selection: choose pixels as units for selection rectangles [media] v4l: s5p-tv: mixer: fix setup of VP scaling [media] v4l: s5p-tv: mixer: add support for selection API [media] v4l: emulate old crop API using extended crop/compose API [media] doc: v4l: add documentation for selection API [media] doc: v4l: add binary images for selection API [media] v4l: add support for selection api [media] hd29l2: fix review findings ...
This commit is contained in:
commit
122804ecb5
|
@ -0,0 +1,59 @@
|
|||
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
|
||||
RU5ErkJggg==
|
|
@ -334,9 +334,10 @@ typedef enum fe_rolloff {
|
|||
<title>fe_delivery_system type</title>
|
||||
<para>Possible values: </para>
|
||||
<programlisting>
|
||||
|
||||
typedef enum fe_delivery_system {
|
||||
SYS_UNDEFINED,
|
||||
SYS_DVBC_ANNEX_AC,
|
||||
SYS_DVBC_ANNEX_A,
|
||||
SYS_DVBC_ANNEX_B,
|
||||
SYS_DVBT,
|
||||
SYS_DSS,
|
||||
|
@ -353,6 +354,7 @@ typedef enum fe_delivery_system {
|
|||
SYS_DAB,
|
||||
SYS_DVBT2,
|
||||
SYS_TURBO,
|
||||
SYS_DVBC_ANNEX_C,
|
||||
} fe_delivery_system_t;
|
||||
</programlisting>
|
||||
</section>
|
||||
|
@ -647,6 +649,18 @@ typedef enum fe_hierarchy {
|
|||
many data types via a single multiplex. The API will soon support this
|
||||
at which point this section will be expanded.</para>
|
||||
</section>
|
||||
<section id="DTV_ENUM_DELSYS">
|
||||
<title><constant>DTV_ENUM_DELSYS</constant></title>
|
||||
<para>A Multi standard frontend needs to advertise the delivery systems provided.
|
||||
Applications need to enumerate the provided delivery systems, before using
|
||||
any other operation with the frontend. Prior to it's introduction,
|
||||
FE_GET_INFO was used to determine a frontend type. A frontend which
|
||||
provides more than a single delivery system, FE_GET_INFO doesn't help much.
|
||||
Applications which intends to use a multistandard frontend must enumerate
|
||||
the delivery systems associated with it, rather than trying to use
|
||||
FE_GET_INFO. In the case of a legacy frontend, the result is just the same
|
||||
as with FE_GET_INFO, but in a more structured format </para>
|
||||
</section>
|
||||
</section>
|
||||
<section id="frontend-property-terrestrial-systems">
|
||||
<title>Properties used on terrestrial delivery systems</title>
|
||||
|
@ -767,7 +781,8 @@ typedef enum fe_hierarchy {
|
|||
<title>Properties used on cable delivery systems</title>
|
||||
<section id="dvbc-params">
|
||||
<title>DVB-C delivery system</title>
|
||||
<para>The DVB-C Annex-A/C is the widely used cable standard. Transmission uses QAM modulation.</para>
|
||||
<para>The DVB-C Annex-A is the widely used cable standard. Transmission uses QAM modulation.</para>
|
||||
<para>The DVB-C Annex-C is optimized for 6MHz, and is used in Japan. It supports a subset of the Annex A modulation types, and a roll-off of 0.13, instead of 0.15</para>
|
||||
<para>The following parameters are valid for DVB-C Annex A/C:</para>
|
||||
<itemizedlist mark='opencircle'>
|
||||
<listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem>
|
||||
|
|
|
@ -45,8 +45,8 @@ transmission. The fontend types are given by fe_type_t type, defined as:</para>
|
|||
</row>
|
||||
<row>
|
||||
<entry id="FE_QAM"><constant>FE_QAM</constant></entry>
|
||||
<entry>For DVB-C annex A/C standard</entry>
|
||||
<entry><constant>SYS_DVBC_ANNEX_AC</constant></entry>
|
||||
<entry>For DVB-C annex A standard</entry>
|
||||
<entry><constant>SYS_DVBC_ANNEX_A</constant></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE_OFDM"><constant>FE_OFDM</constant></entry>
|
||||
|
@ -63,6 +63,10 @@ transmission. The fontend types are given by fe_type_t type, defined as:</para>
|
|||
<para>Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're
|
||||
supported via the new <link linkend="FE_GET_SET_PROPERTY">FE_GET_PROPERTY/FE_GET_SET_PROPERTY</link> ioctl's, using the <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> parameter.
|
||||
</para>
|
||||
|
||||
<para>The usage of this field is deprecated, as it doesn't report all supported standards, and
|
||||
will provide an incomplete information for frontends that support multiple delivery systems.
|
||||
Please use <link linkend="DTV_ENUM_DELSYS">DTV_ENUM_DELSYS</link> instead.</para>
|
||||
</section>
|
||||
|
||||
<section id="fe-caps-t">
|
||||
|
|
|
@ -0,0 +1,206 @@
|
|||
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
|
|
@ -178,11 +178,3 @@ in the frequency range from 87,5 to 108,0 MHz</title>
|
|||
</biblioentry>
|
||||
|
||||
</bibliography>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1168,6 +1168,8 @@ dheight = format.fmt.pix.height;
|
|||
</section>
|
||||
</section>
|
||||
|
||||
&sub-selection-api;
|
||||
|
||||
<section id="streaming-par">
|
||||
<title>Streaming Parameters</title>
|
||||
|
||||
|
@ -1195,11 +1197,3 @@ separate parameters for input and output devices.</para>
|
|||
<para>These ioctls are optional, drivers need not implement
|
||||
them. If so, they return the &EINVAL;.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1082,7 +1082,7 @@ until the time in the timestamp field has arrived. I would like to
|
|||
follow SGI's lead, and adopt a multimedia timestamping system like
|
||||
their UST (Unadjusted System Time). See
|
||||
http://web.archive.org/web/*/http://reality.sgi.com
|
||||
/cpirazzi_engr/lg/time/intro.html.
|
||||
/cpirazzi_engr/lg/time/intro.html.
|
||||
UST uses timestamps that are 64-bit signed integers
|
||||
(not struct timeval's) and given in nanosecond units. The UST clock
|
||||
starts at zero when the system is booted and runs continuously and
|
||||
|
@ -2376,6 +2376,23 @@ that used it. It was originally scheduled for removal in 2.6.35.
|
|||
<listitem>
|
||||
<para>V4L2_CTRL_FLAG_VOLATILE was added to signal volatile controls to userspace.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Add selection API for extended control over cropping and
|
||||
composing. Does not affect the compatibility of current drivers and
|
||||
applications. See <link linkend="selection-api"> selection API </link> for
|
||||
details.</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>V4L2 in Linux 3.3</title>
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Added <constant>V4L2_CID_ALPHA_COMPONENT</constant> control
|
||||
to the <link linkend="control">User controls class</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</section>
|
||||
|
||||
|
@ -2489,6 +2506,9 @@ ioctls.</para>
|
|||
<listitem>
|
||||
<para>&VIDIOC-CREATE-BUFS; and &VIDIOC-PREPARE-BUF; ioctls.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Selection API. <xref linkend="selection-api" /></para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
@ -2507,11 +2527,3 @@ interfaces and should not be implemented in new drivers.</para>
|
|||
</itemizedlist>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -323,12 +323,6 @@ minimum value disables backlight compensation.</entry>
|
|||
<entry>Switch on or off the illuminator 1 or 2 of the device
|
||||
(usually a microscope).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_LASTP1</constant></entry>
|
||||
<entry></entry>
|
||||
<entry>End of the predefined control IDs (currently
|
||||
<constant>V4L2_CID_ILLUMINATORS_2</constant> + 1).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_MIN_BUFFERS_FOR_CAPTURE</constant></entry>
|
||||
<entry>integer</entry>
|
||||
|
@ -345,6 +339,25 @@ and used as a hint to determine the number of OUTPUT buffers to pass to REQBUFS.
|
|||
The value is the minimum number of OUTPUT buffers that is necessary for hardware
|
||||
to work.</entry>
|
||||
</row>
|
||||
<row id="v4l2-alpha-component">
|
||||
<entry><constant>V4L2_CID_ALPHA_COMPONENT</constant></entry>
|
||||
<entry>integer</entry>
|
||||
<entry> Sets the alpha color component on the capture device or on
|
||||
the capture buffer queue of a mem-to-mem device. When a mem-to-mem
|
||||
device produces frame format that includes an alpha component
|
||||
(e.g. <link linkend="rgb-formats">packed RGB image formats</link>)
|
||||
and the alpha value is not defined by the mem-to-mem input data
|
||||
this control lets you select the alpha component value of all
|
||||
pixels. It is applicable to any pixel format that contains an alpha
|
||||
component.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_LASTP1</constant></entry>
|
||||
<entry></entry>
|
||||
<entry>End of the predefined control IDs (currently
|
||||
<constant>V4L2_CID_ALPHA_COMPONENT</constant> + 1).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_CID_PRIVATE_BASE</constant></entry>
|
||||
<entry></entry>
|
||||
|
@ -3329,6 +3342,16 @@ interface and may change in the future.</para>
|
|||
<entry>The short circuit protection of the flash
|
||||
controller has been triggered.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FLASH_FAULT_OVER_CURRENT</constant></entry>
|
||||
<entry>Current in the LED power supply has exceeded the limit
|
||||
specific to the flash controller.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FLASH_FAULT_INDICATOR</constant></entry>
|
||||
<entry>The flash controller has detected a short or open
|
||||
circuit condition on the indicator LED.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</entrytbl>
|
||||
</row>
|
||||
|
@ -3357,11 +3380,3 @@ interface and may change in the future.</para>
|
|||
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "common.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -108,11 +108,3 @@ linkend="mmap">memory mapping</link> or <link
|
|||
linkend="userp">user pointer</link>) I/O. See <xref
|
||||
linkend="io" /> for details.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -16,11 +16,3 @@ Applications send data to be converted to the driver through a
|
|||
I/O.</para>
|
||||
|
||||
<para>[to do]</para>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -15,11 +15,3 @@ receive the result data either with &func-read; and &func-write;
|
|||
functions, or through the streaming I/O mechanism.</para>
|
||||
|
||||
<para>[to do]</para>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -41,11 +41,3 @@ intermediate step leading up to that information. See the documentation for the
|
|||
event you want to subscribe to whether this is applicable for that event or not.</para>
|
||||
</listitem>
|
||||
</orderedlist></para>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -154,11 +154,3 @@ data flow. For more information see <xref linkend="crop" />.</para>
|
|||
however the framebuffer interface of the driver may support the
|
||||
<constant>FBIOBLANK</constant> ioctl.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -104,11 +104,3 @@ linkend="mmap">memory mapping</link> or <link
|
|||
linkend="userp">user pointer</link>) I/O. See <xref
|
||||
linkend="io" /> for details.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -369,11 +369,3 @@ reasons. <!-- video4linux-list@redhat.com on 22 Oct 2002 subject
|
|||
<para>To start or stop the frame buffer overlay applications call
|
||||
the &VIDIOC-OVERLAY; ioctl.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -47,11 +47,3 @@ depending on the selected frequency. The &VIDIOC-G-TUNER; or
|
|||
&VIDIOC-G-MODULATOR; ioctl
|
||||
reports the supported frequency range.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -337,11 +337,3 @@ an &EBUSY; if the required hardware resources are temporarily
|
|||
unavailable, for example the device is already in use by another
|
||||
process.</para>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -29,10 +29,10 @@ returned by the &VIDIOC-QUERYCAP; ioctl. Any tuner that supports RDS
|
|||
will set the <constant>V4L2_TUNER_CAP_RDS</constant> flag in
|
||||
the <structfield>capability</structfield> field of &v4l2-tuner;. If
|
||||
the driver only passes RDS blocks without interpreting the data
|
||||
the <constant>V4L2_TUNER_SUB_RDS_BLOCK_IO</constant> flag has to be
|
||||
the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be
|
||||
set, see <link linkend="reading-rds-data">Reading RDS data</link>.
|
||||
For future use the
|
||||
flag <constant>V4L2_TUNER_SUB_RDS_CONTROLS</constant> has also been
|
||||
flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> has also been
|
||||
defined. However, a driver for a radio tuner with this capability does
|
||||
not yet exist, so if you are planning to write such a driver you
|
||||
should discuss this on the linux-media mailing list: &v4l-ml;.</para>
|
||||
|
@ -52,9 +52,9 @@ field of &v4l2-modulator;.
|
|||
In order to enable the RDS transmission one must set the <constant>V4L2_TUNER_SUB_RDS</constant>
|
||||
bit in the <structfield>txsubchans</structfield> field of &v4l2-modulator;.
|
||||
If the driver only passes RDS blocks without interpreting the data
|
||||
the <constant>V4L2_TUNER_SUB_RDS_BLOCK_IO</constant> flag has to be set. If the
|
||||
the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be set. If the
|
||||
tuner is capable of handling RDS entities like program identification codes and radio
|
||||
text, the flag <constant>V4L2_TUNER_SUB_RDS_CONTROLS</constant> should be set,
|
||||
text, the flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> should be set,
|
||||
see <link linkend="writing-rds-data">Writing RDS data</link> and
|
||||
<link linkend="fm-tx-controls">FM Transmitter Control Reference</link>.</para>
|
||||
</section>
|
||||
|
@ -194,11 +194,3 @@ as follows:</para>
|
|||
</tgroup>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -697,12 +697,3 @@ Sliced VBI services</link> for a description of the line payload.</entry>
|
|||
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -27,11 +27,3 @@ kernel 2.6.37.</para>
|
|||
|
||||
<para>Modern devices all use the <link linkend="raw-vbi">raw</link> or
|
||||
<link linkend="sliced">sliced</link> VBI API.</para>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -198,11 +198,3 @@ devices with the videodev module.</para>
|
|||
<para>to do</para>
|
||||
</section>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -60,11 +60,3 @@ descriptor.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -69,11 +69,3 @@ their respective function and parameters are specified in <xref
|
|||
the parameter remains unmodified.</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -181,11 +181,3 @@ complete the request.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -74,11 +74,3 @@ mapped yet.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -111,11 +111,3 @@ system has been reached.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -117,11 +117,3 @@ than <constant>OPEN_MAX</constant>.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -179,11 +179,3 @@ type of device.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -128,11 +128,3 @@ zero or greater than <constant>FD_SETSIZE</constant>.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -126,11 +126,3 @@ type of device.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1282,11 +1282,3 @@ line, top field first. The bottom field is transmitted first.</entry>
|
|||
</mediaobject>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -158,10 +158,3 @@ still don't use libv4l.</para>
|
|||
</section>
|
||||
|
||||
</section>
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -60,11 +60,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -137,11 +137,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -141,11 +141,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -144,11 +144,3 @@ CbCr plane has as many pad bytes after its rows.</para>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -64,11 +64,3 @@ layout of macroblocks</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -164,11 +164,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -428,8 +428,11 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
|||
<para>Bit 7 is the most significant bit. The value of a = alpha
|
||||
bits is undefined when reading from the driver, ignored when writing
|
||||
to the driver, except when alpha blending has been negotiated for a
|
||||
<link linkend="overlay">Video Overlay</link> or <link
|
||||
linkend="osd">Video Output Overlay</link>.</para>
|
||||
<link linkend="overlay">Video Overlay</link> or <link linkend="osd">
|
||||
Video Output Overlay</link> or when alpha component has been configured
|
||||
for a <link linkend="capture">Video Capture</link> by means of <link
|
||||
linkend="v4l2-alpha-component"> <constant>V4L2_CID_ALPHA_COMPONENT
|
||||
</constant> </link> control.</para>
|
||||
|
||||
<example>
|
||||
<title><constant>V4L2_PIX_FMT_BGR24</constant> 4 × 4 pixel
|
||||
|
@ -930,11 +933,3 @@ See &v4l-dvb; for access instructions.</para>
|
|||
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -234,11 +234,3 @@ linkend="osd">Video Output Overlay</link>.</para>
|
|||
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -81,11 +81,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -65,11 +65,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -65,11 +65,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -65,11 +65,3 @@ columns and rows.</para>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -118,11 +118,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -118,11 +118,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -79,11 +79,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -147,11 +147,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -131,11 +131,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -145,11 +145,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -147,11 +147,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -152,11 +152,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -151,11 +151,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -118,11 +118,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -118,11 +118,3 @@ pixel image</title>
|
|||
</example>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "pixfmt.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -891,6 +891,11 @@ kernel sources in the file <filename>Documentation/video4linux/cx2341x/README.hm
|
|||
<entry>'M310'</entry>
|
||||
<entry>Compressed BGGR Bayer format used by the gspca driver.</entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-JL2005BCD">
|
||||
<entry><constant>V4L2_PIX_FMT_JL2005BCD</constant></entry>
|
||||
<entry>'JL20'</entry>
|
||||
<entry>JPEG compressed RGGB Bayer format used by the gspca driver.</entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-OV511">
|
||||
<entry><constant>V4L2_PIX_FMT_OV511</constant></entry>
|
||||
<entry>'O511'</entry>
|
||||
|
@ -998,11 +1003,3 @@ the other bits are set to 0.</entry>
|
|||
</tgroup>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -0,0 +1,321 @@
|
|||
<section id="selection-api">
|
||||
|
||||
<title>Experimental API for cropping, composing and scaling</title>
|
||||
|
||||
<note>
|
||||
<title>Experimental</title>
|
||||
|
||||
<para>This is an <link linkend="experimental">experimental</link>
|
||||
interface and may change in the future.</para>
|
||||
</note>
|
||||
|
||||
<section>
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>Some video capture devices can sample a subsection of a picture and
|
||||
shrink or enlarge it to an image of arbitrary size. Next, the devices can
|
||||
insert the image into larger one. Some video output devices can crop part of an
|
||||
input image, scale it up or down and insert it at an arbitrary scan line and
|
||||
horizontal offset into a video signal. We call these abilities cropping,
|
||||
scaling and composing.</para>
|
||||
|
||||
<para>On a video <emphasis>capture</emphasis> device the source is a video
|
||||
signal, and the cropping target determine the area actually sampled. The sink
|
||||
is an image stored in a memory buffer. The composing area specifies which part
|
||||
of the buffer is actually written to by the hardware. </para>
|
||||
|
||||
<para>On a video <emphasis>output</emphasis> device the source is an image in a
|
||||
memory buffer, and the cropping target is a part of an image to be shown on a
|
||||
display. The sink is the display or the graphics screen. The application may
|
||||
select the part of display where the image should be displayed. The size and
|
||||
position of such a window is controlled by the compose target.</para>
|
||||
|
||||
<para>Rectangles for all cropping and composing targets are defined even if the
|
||||
device does supports neither cropping nor composing. Their size and position
|
||||
will be fixed in such a case. If the device does not support scaling then the
|
||||
cropping and composing rectangles have the same size.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Selection targets</title>
|
||||
|
||||
<figure id="sel-targets-capture">
|
||||
<title>Cropping and composing targets</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="selection.png" format="PNG" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Targets used by a cropping, composing and scaling
|
||||
process</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
||||
<title>Configuration</title>
|
||||
|
||||
<para>Applications can use the <link linkend="vidioc-g-selection">selection
|
||||
API</link> to select an area in a video signal or a buffer, and to query for
|
||||
default settings and hardware limits.</para>
|
||||
|
||||
<para>Video hardware can have various cropping, composing and scaling
|
||||
limitations. It may only scale up or down, support only discrete scaling
|
||||
factors, or have different scaling abilities in the horizontal and vertical
|
||||
directions. Also it may not support scaling at all. At the same time the
|
||||
cropping/composing rectangles may have to be aligned, and both the source and
|
||||
the sink may have arbitrary upper and lower size limits. Therefore, as usual,
|
||||
drivers are expected to adjust the requested parameters and return the actual
|
||||
values selected. An application can control the rounding behaviour using <link
|
||||
linkend="v4l2-sel-flags"> constraint flags </link>.</para>
|
||||
|
||||
<section>
|
||||
|
||||
<title>Configuration of video capture</title>
|
||||
|
||||
<para>See figure <xref linkend="sel-targets-capture" /> for examples of the
|
||||
selection targets available for a video capture device. It is recommended to
|
||||
configure the cropping targets before to the composing targets.</para>
|
||||
|
||||
<para>The range of coordinates of the top left corner, width and height of
|
||||
areas that can be sampled is given by the <constant> V4L2_SEL_TGT_CROP_BOUNDS
|
||||
</constant> target. It is recommended for the driver developers to put the
|
||||
top/left corner at position <constant> (0,0) </constant>. The rectangle's
|
||||
coordinates are expressed in pixels.</para>
|
||||
|
||||
<para>The top left corner, width and height of the source rectangle, that is
|
||||
the area actually sampled, is given by the <constant> V4L2_SEL_TGT_CROP_ACTIVE
|
||||
</constant> target. It uses the same coordinate system as <constant>
|
||||
V4L2_SEL_TGT_CROP_BOUNDS </constant>. The active cropping area must lie
|
||||
completely inside the capture boundaries. The driver may further adjust the
|
||||
requested size and/or position according to hardware limitations.</para>
|
||||
|
||||
<para>Each capture device has a default source rectangle, given by the
|
||||
<constant> V4L2_SEL_TGT_CROP_DEFAULT </constant> target. This rectangle shall
|
||||
over what the driver writer considers the complete picture. Drivers shall set
|
||||
the active crop rectangle to the default when the driver is first loaded, but
|
||||
not later.</para>
|
||||
|
||||
<para>The composing targets refer to a memory buffer. The limits of composing
|
||||
coordinates are obtained using <constant> V4L2_SEL_TGT_COMPOSE_BOUNDS
|
||||
</constant>. All coordinates are expressed in pixels. The rectangle's top/left
|
||||
corner must be located at position <constant> (0,0) </constant>. The width and
|
||||
height are equal to the image size set by <constant> VIDIOC_S_FMT </constant>.
|
||||
</para>
|
||||
|
||||
<para>The part of a buffer into which the image is inserted by the hardware is
|
||||
controlled by the <constant> V4L2_SEL_TGT_COMPOSE_ACTIVE </constant> target.
|
||||
The rectangle's coordinates are also expressed in the same coordinate system as
|
||||
the bounds rectangle. The composing rectangle must lie completely inside bounds
|
||||
rectangle. The driver must adjust the composing rectangle to fit to the
|
||||
bounding limits. Moreover, the driver can perform other adjustments according
|
||||
to hardware limitations. The application can control rounding behaviour using
|
||||
<link linkend="v4l2-sel-flags"> constraint flags </link>.</para>
|
||||
|
||||
<para>For capture devices the default composing rectangle is queried using
|
||||
<constant> V4L2_SEL_TGT_COMPOSE_DEFAULT </constant>. It is usually equal to the
|
||||
bounding rectangle.</para>
|
||||
|
||||
<para>The part of a buffer that is modified by the hardware is given by
|
||||
<constant> V4L2_SEL_TGT_COMPOSE_PADDED </constant>. It contains all pixels
|
||||
defined using <constant> V4L2_SEL_TGT_COMPOSE_ACTIVE </constant> plus all
|
||||
padding data modified by hardware during insertion process. All pixels outside
|
||||
this rectangle <emphasis>must not</emphasis> be changed by the hardware. The
|
||||
content of pixels that lie inside the padded area but outside active area is
|
||||
undefined. The application can use the padded and active rectangles to detect
|
||||
where the rubbish pixels are located and remove them if needed.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
||||
<title>Configuration of video output</title>
|
||||
|
||||
<para>For output devices targets and ioctls are used similarly to the video
|
||||
capture case. The <emphasis> composing </emphasis> rectangle refers to the
|
||||
insertion of an image into a video signal. The cropping rectangles refer to a
|
||||
memory buffer. It is recommended to configure the composing targets before to
|
||||
the cropping targets.</para>
|
||||
|
||||
<para>The cropping targets refer to the memory buffer that contains an image to
|
||||
be inserted into a video signal or graphical screen. The limits of cropping
|
||||
coordinates are obtained using <constant> V4L2_SEL_TGT_CROP_BOUNDS </constant>.
|
||||
All coordinates are expressed in pixels. The top/left corner is always point
|
||||
<constant> (0,0) </constant>. The width and height is equal to the image size
|
||||
specified using <constant> VIDIOC_S_FMT </constant> ioctl.</para>
|
||||
|
||||
<para>The top left corner, width and height of the source rectangle, that is
|
||||
the area from which image date are processed by the hardware, is given by the
|
||||
<constant> V4L2_SEL_TGT_CROP_ACTIVE </constant>. Its coordinates are expressed
|
||||
in in the same coordinate system as the bounds rectangle. The active cropping
|
||||
area must lie completely inside the crop boundaries and the driver may further
|
||||
adjust the requested size and/or position according to hardware
|
||||
limitations.</para>
|
||||
|
||||
<para>For output devices the default cropping rectangle is queried using
|
||||
<constant> V4L2_SEL_TGT_CROP_DEFAULT </constant>. It is usually equal to the
|
||||
bounding rectangle.</para>
|
||||
|
||||
<para>The part of a video signal or graphics display where the image is
|
||||
inserted by the hardware is controlled by <constant>
|
||||
V4L2_SEL_TGT_COMPOSE_ACTIVE </constant> target. The rectangle's coordinates
|
||||
are expressed in pixels. The composing rectangle must lie completely inside the
|
||||
bounds rectangle. The driver must adjust the area to fit to the bounding
|
||||
limits. Moreover, the driver can perform other adjustments according to
|
||||
hardware limitations. </para>
|
||||
|
||||
<para>The device has a default composing rectangle, given by the <constant>
|
||||
V4L2_SEL_TGT_COMPOSE_DEFAULT </constant> target. This rectangle shall cover what
|
||||
the driver writer considers the complete picture. It is recommended for the
|
||||
driver developers to put the top/left corner at position <constant> (0,0)
|
||||
</constant>. Drivers shall set the active composing rectangle to the default
|
||||
one when the driver is first loaded.</para>
|
||||
|
||||
<para>The devices may introduce additional content to video signal other than
|
||||
an image from memory buffers. It includes borders around an image. However,
|
||||
such a padded area is driver-dependent feature not covered by this document.
|
||||
Driver developers are encouraged to keep padded rectangle equal to active one.
|
||||
The padded target is accessed by the <constant> V4L2_SEL_TGT_COMPOSE_PADDED
|
||||
</constant> identifier. It must contain all pixels from the <constant>
|
||||
V4L2_SEL_TGT_COMPOSE_ACTIVE </constant> target.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
||||
<title>Scaling control.</title>
|
||||
|
||||
<para>An application can detect if scaling is performed by comparing the width
|
||||
and the height of rectangles obtained using <constant> V4L2_SEL_TGT_CROP_ACTIVE
|
||||
</constant> and <constant> V4L2_SEL_TGT_COMPOSE_ACTIVE </constant> targets. If
|
||||
these are not equal then the scaling is applied. The application can compute
|
||||
the scaling ratios using these values.</para>
|
||||
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
||||
<title>Comparison with old cropping API.</title>
|
||||
|
||||
<para>The selection API was introduced to cope with deficiencies of previous
|
||||
<link linkend="crop"> API </link>, that was designed to control simple capture
|
||||
devices. Later the cropping API was adopted by video output drivers. The ioctls
|
||||
are used to select a part of the display were the video signal is inserted. It
|
||||
should be considered as an API abuse because the described operation is
|
||||
actually the composing. The selection API makes a clear distinction between
|
||||
composing and cropping operations by setting the appropriate targets. The V4L2
|
||||
API lacks any support for composing to and cropping from an image inside a
|
||||
memory buffer. The application could configure a capture device to fill only a
|
||||
part of an image by abusing V4L2 API. Cropping a smaller image from a larger
|
||||
one is achieved by setting the field <structfield>
|
||||
&v4l2-pix-format;::bytesperline </structfield>. Introducing an image offsets
|
||||
could be done by modifying field <structfield> &v4l2-buffer;::m:userptr
|
||||
</structfield> before calling <constant> VIDIOC_QBUF </constant>. Those
|
||||
operations should be avoided because they are not portable (endianness), and do
|
||||
not work for macroblock and Bayer formats and mmap buffers. The selection API
|
||||
deals with configuration of buffer cropping/composing in a clear, intuitive and
|
||||
portable way. Next, with the selection API the concepts of the padded target
|
||||
and constraints flags are introduced. Finally, <structname> &v4l2-crop;
|
||||
</structname> and <structname> &v4l2-cropcap; </structname> have no reserved
|
||||
fields. Therefore there is no way to extend their functionality. The new
|
||||
<structname> &v4l2-selection; </structname> provides a lot of place for future
|
||||
extensions. Driver developers are encouraged to implement only selection API.
|
||||
The former cropping API would be simulated using the new one. </para>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Examples</title>
|
||||
<example>
|
||||
<title>Resetting the cropping parameters</title>
|
||||
|
||||
<para>(A video capture device is assumed; change <constant>
|
||||
V4L2_BUF_TYPE_VIDEO_CAPTURE </constant> for other devices; change target to
|
||||
<constant> V4L2_SEL_TGT_COMPOSE_* </constant> family to configure composing
|
||||
area)</para>
|
||||
|
||||
<programlisting>
|
||||
|
||||
&v4l2-selection; sel = {
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
.target = V4L2_SEL_TGT_CROP_DEFAULT,
|
||||
};
|
||||
ret = ioctl(fd, &VIDIOC-G-SELECTION;, &sel);
|
||||
if (ret)
|
||||
exit(-1);
|
||||
sel.target = V4L2_SEL_TGT_CROP_ACTIVE;
|
||||
ret = ioctl(fd, &VIDIOC-S-SELECTION;, &sel);
|
||||
if (ret)
|
||||
exit(-1);
|
||||
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>Simple downscaling</title>
|
||||
<para>Setting a composing area on output of size of <emphasis> at most
|
||||
</emphasis> half of limit placed at a center of a display.</para>
|
||||
<programlisting>
|
||||
|
||||
&v4l2-selection; sel = {
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
|
||||
.target = V4L2_SEL_TGT_COMPOSE_BOUNDS,
|
||||
};
|
||||
struct v4l2_rect r;
|
||||
|
||||
ret = ioctl(fd, &VIDIOC-G-SELECTION;, &sel);
|
||||
if (ret)
|
||||
exit(-1);
|
||||
/* setting smaller compose rectangle */
|
||||
r.width = sel.r.width / 2;
|
||||
r.height = sel.r.height / 2;
|
||||
r.left = sel.r.width / 4;
|
||||
r.top = sel.r.height / 4;
|
||||
sel.r = r;
|
||||
sel.target = V4L2_SEL_TGT_COMPOSE_ACTIVE;
|
||||
sel.flags = V4L2_SEL_FLAG_LE;
|
||||
ret = ioctl(fd, &VIDIOC-S-SELECTION;, &sel);
|
||||
if (ret)
|
||||
exit(-1);
|
||||
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>Querying for scaling factors</title>
|
||||
<para>A video output device is assumed; change <constant>
|
||||
V4L2_BUF_TYPE_VIDEO_OUTPUT </constant> for other devices</para>
|
||||
<programlisting>
|
||||
|
||||
&v4l2-selection; compose = {
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
|
||||
.target = V4L2_SEL_TGT_COMPOSE_ACTIVE,
|
||||
};
|
||||
&v4l2-selection; crop = {
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
|
||||
.target = V4L2_SEL_TGT_CROP_ACTIVE,
|
||||
};
|
||||
double hscale, vscale;
|
||||
|
||||
ret = ioctl(fd, &VIDIOC-G-SELECTION;, &compose);
|
||||
if (ret)
|
||||
exit(-1);
|
||||
ret = ioctl(fd, &VIDIOC-G-SELECTION;, &crop);
|
||||
if (ret)
|
||||
exit(-1);
|
||||
|
||||
/* computing scaling factors */
|
||||
hscale = (double)compose.r.width / crop.r.width;
|
||||
vscale = (double)compose.r.height / crop.r.height;
|
||||
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
</section>
|
||||
|
||||
</section>
|
|
@ -501,6 +501,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||
&sub-g-output;
|
||||
&sub-g-parm;
|
||||
&sub-g-priority;
|
||||
&sub-g-selection;
|
||||
&sub-g-sliced-vbi-cap;
|
||||
&sub-g-std;
|
||||
&sub-g-tuner;
|
||||
|
|
|
@ -228,11 +228,3 @@ is out of bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -156,11 +156,3 @@ bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -311,11 +311,3 @@ out of bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -196,11 +196,3 @@ is out of bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -381,11 +381,3 @@ is out of bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -127,11 +127,3 @@ this control belongs to.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -312,10 +312,3 @@ to store the payload and this error code is returned.</para>
|
|||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -295,7 +295,8 @@ set this field to zero.</entry>
|
|||
<entry>The device is capable of non-destructive overlays.
|
||||
When the driver clears this flag, only destructive overlays are
|
||||
supported. There are no drivers yet which support both destructive and
|
||||
non-destructive overlays.</entry>
|
||||
non-destructive overlays. Video Output Overlays are in practice always
|
||||
non-destructive.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FBUF_CAP_CHROMAKEY</constant></entry>
|
||||
|
@ -339,8 +340,8 @@ blending makes no sense for destructive overlays.</entry>
|
|||
<row>
|
||||
<entry><constant>V4L2_FBUF_CAP_SRC_CHROMAKEY</constant></entry>
|
||||
<entry>0x0080</entry>
|
||||
<entry>The device supports Source Chroma-keying. Framebuffer pixels
|
||||
with the chroma-key colors are replaced by video pixels, which is exactly opposite of
|
||||
<entry>The device supports Source Chroma-keying. Video pixels
|
||||
with the chroma-key colors are replaced by framebuffer pixels, which is exactly opposite of
|
||||
<constant>V4L2_FBUF_CAP_CHROMAKEY</constant></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
@ -356,7 +357,9 @@ with the chroma-key colors are replaced by video pixels, which is exactly opposi
|
|||
<entry><constant>V4L2_FBUF_FLAG_PRIMARY</constant></entry>
|
||||
<entry>0x0001</entry>
|
||||
<entry>The framebuffer is the primary graphics surface.
|
||||
In other words, the overlay is destructive. [?]</entry>
|
||||
In other words, the overlay is destructive. This flag is typically set by any
|
||||
driver that doesn't have the <constant>V4L2_FBUF_CAP_EXTERNOVERLAY</constant>
|
||||
capability and it is cleared otherwise.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_FBUF_FLAG_OVERLAY</constant></entry>
|
||||
|
@ -366,9 +369,8 @@ size as the capture. [?]</entry>
|
|||
</row>
|
||||
<row>
|
||||
<entry spanname="hspan">The purpose of
|
||||
<constant>V4L2_FBUF_FLAG_PRIMARY</constant> and
|
||||
<constant>V4L2_FBUF_FLAG_OVERLAY</constant> was never quite clear.
|
||||
Most drivers seem to ignore these flags. For compatibility with the
|
||||
Most drivers seem to ignore this flag. For compatibility with the
|
||||
<wordasword>bttv</wordasword> driver applications should set the
|
||||
<constant>V4L2_FBUF_FLAG_OVERLAY</constant> flag.</entry>
|
||||
</row>
|
||||
|
|
|
@ -135,11 +135,3 @@ wrong.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -236,11 +236,3 @@ mode.</entry>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -133,11 +133,3 @@ priority.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -0,0 +1,304 @@
|
|||
<refentry id="vidioc-g-selection">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl VIDIOC_G_SELECTION, VIDIOC_S_SELECTION</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>VIDIOC_G_SELECTION</refname>
|
||||
<refname>VIDIOC_S_SELECTION</refname>
|
||||
<refpurpose>Get or set one of the selection rectangles</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct v4l2_selection *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>VIDIOC_G_SELECTION, VIDIOC_S_SELECTION</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<note>
|
||||
<title>Experimental</title>
|
||||
<para>This is an <link linkend="experimental"> experimental </link>
|
||||
interface and may change in the future.</para>
|
||||
</note>
|
||||
|
||||
<para>The ioctls are used to query and configure selection rectangles.</para>
|
||||
|
||||
<para> To query the cropping (composing) rectangle set <structfield>
|
||||
&v4l2-selection;::type </structfield> to the respective buffer type. Do not
|
||||
use multiplanar buffers. Use <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE
|
||||
</constant> instead of <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
|
||||
</constant>. Use <constant> V4L2_BUF_TYPE_VIDEO_OUTPUT </constant> instead of
|
||||
<constant> V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE </constant>. The next step is
|
||||
setting <structfield> &v4l2-selection;::target </structfield> to value
|
||||
<constant> V4L2_SEL_TGT_CROP_ACTIVE </constant> (<constant>
|
||||
V4L2_SEL_TGT_COMPOSE_ACTIVE </constant>). Please refer to table <xref
|
||||
linkend="v4l2-sel-target" /> or <xref linkend="selection-api" /> for additional
|
||||
targets. Fields <structfield> &v4l2-selection;::flags </structfield> and
|
||||
<structfield> &v4l2-selection;::reserved </structfield> are ignored and they
|
||||
must be filled with zeros. The driver fills the rest of the structure or
|
||||
returns &EINVAL; if incorrect buffer type or target was used. If cropping
|
||||
(composing) is not supported then the active rectangle is not mutable and it is
|
||||
always equal to the bounds rectangle. Finally, structure <structfield>
|
||||
&v4l2-selection;::r </structfield> is filled with the current cropping
|
||||
(composing) coordinates. The coordinates are expressed in driver-dependent
|
||||
units. The only exception are rectangles for images in raw formats, whose
|
||||
coordinates are always expressed in pixels. </para>
|
||||
|
||||
<para> To change the cropping (composing) rectangle set <structfield>
|
||||
&v4l2-selection;::type </structfield> to the respective buffer type. Do not
|
||||
use multiplanar buffers. Use <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE
|
||||
</constant> instead of <constant> V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
|
||||
</constant>. Use <constant> V4L2_BUF_TYPE_VIDEO_OUTPUT </constant> instead of
|
||||
<constant> V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE </constant>. The next step is
|
||||
setting <structfield> &v4l2-selection;::target </structfield> to value
|
||||
<constant> V4L2_SEL_TGT_CROP_ACTIVE </constant> (<constant>
|
||||
V4L2_SEL_TGT_COMPOSE_ACTIVE </constant>). Please refer to table <xref
|
||||
linkend="v4l2-sel-target" /> or <xref linkend="selection-api" /> for additional
|
||||
targets. Set desired active area into the field <structfield>
|
||||
&v4l2-selection;::r </structfield>. Field <structfield>
|
||||
&v4l2-selection;::reserved </structfield> is ignored and must be filled with
|
||||
zeros. The driver may adjust the rectangle coordinates. An application may
|
||||
introduce constraints to control rounding behaviour. Set the field
|
||||
<structfield> &v4l2-selection;::flags </structfield> to one of values:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><constant>0</constant> - The driver can adjust the rectangle size freely
|
||||
and shall choose a crop/compose rectangle as close as possible to the requested
|
||||
one.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><constant>V4L2_SEL_FLAG_GE</constant> - The driver is not allowed to
|
||||
shrink the rectangle. The original rectangle must lay inside the adjusted
|
||||
one.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><constant>V4L2_SEL_FLAG_LE</constant> - The driver is not allowed to
|
||||
enlarge the rectangle. The adjusted rectangle must lay inside the original
|
||||
one.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><constant>V4L2_SEL_FLAG_GE | V4L2_SEL_FLAG_LE</constant> - The driver
|
||||
must choose the size exactly the same as in the requested rectangle.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
Please refer to <xref linkend="sel-const-adjust" />.
|
||||
|
||||
</para>
|
||||
|
||||
<para> The driver may have to adjusts the requested dimensions against hardware
|
||||
limits and other parts as the pipeline, i.e. the bounds given by the
|
||||
capture/output window or TV display. The closest possible values of horizontal
|
||||
and vertical offset and sizes are chosen according to following priority:
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Satisfy constraints from <structfield>&v4l2-selection;::flags</structfield>.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Adjust width, height, left, and top to hardware limits and alignments.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Keep center of adjusted rectangle as close as possible to the original one.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Keep width and height as close as possible to original ones.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Keep horizontal and vertical offset as close as possible to original ones.</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
On success the field <structfield> &v4l2-selection;::r </structfield> contains
|
||||
the adjusted rectangle. When the parameters are unsuitable the application may
|
||||
modify the cropping (composing) or image parameters and repeat the cycle until
|
||||
satisfactory parameters have been negotiated. If constraints flags have to be
|
||||
violated at then ERANGE is returned. The error indicates that <emphasis> there
|
||||
exist no rectangle </emphasis> that satisfies the constraints.</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<table frame="none" pgwide="1" id="v4l2-sel-target">
|
||||
<title>Selection targets.</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_CROP_ACTIVE</constant></entry>
|
||||
<entry>0</entry>
|
||||
<entry>area that is currently cropped by hardware</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_CROP_DEFAULT</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>suggested cropping rectangle that covers the "whole picture"</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_CROP_BOUNDS</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>limits for the cropping rectangle</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_COMPOSE_ACTIVE</constant></entry>
|
||||
<entry>256</entry>
|
||||
<entry>area to which data are composed by hardware</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_COMPOSE_DEFAULT</constant></entry>
|
||||
<entry>257</entry>
|
||||
<entry>suggested composing rectangle that covers the "whole picture"</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_COMPOSE_BOUNDS</constant></entry>
|
||||
<entry>258</entry>
|
||||
<entry>limits for the composing rectangle</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_TGT_COMPOSE_PADDED</constant></entry>
|
||||
<entry>259</entry>
|
||||
<entry>the active area and all padding pixels that are inserted or modified by the hardware</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<table frame="none" pgwide="1" id="v4l2-sel-flags">
|
||||
<title>Selection constraint flags</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_FLAG_GE</constant></entry>
|
||||
<entry>0x00000001</entry>
|
||||
<entry>indicate that adjusted rectangle must contain a rectangle from <structfield>&v4l2-selection;::r</structfield></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SEL_FLAG_LE</constant></entry>
|
||||
<entry>0x00000002</entry>
|
||||
<entry>indicate that adjusted rectangle must be inside a rectangle from <structfield>&v4l2-selection;::r</structfield></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<section>
|
||||
<figure id="sel-const-adjust">
|
||||
<title>Size adjustments with constraint flags.</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="constraints.png" format="PNG" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Behaviour of rectangle adjustment for different constraint
|
||||
flags.</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<refsect1>
|
||||
<table pgwide="1" frame="none" id="v4l2-selection">
|
||||
<title>struct <structname>v4l2_selection</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>type</structfield></entry>
|
||||
<entry>Type of the buffer (from &v4l2-buf-type;)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>target</structfield></entry>
|
||||
<entry>used to select between <link linkend="v4l2-sel-target"> cropping and composing rectangles </link></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>flags</structfield></entry>
|
||||
<entry>control over coordinates adjustments, refer to <link linkend="v4l2-sel-flags">selection flags</link></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>&v4l2-rect;</entry>
|
||||
<entry><structfield>r</structfield></entry>
|
||||
<entry>selection rectangle</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>reserved[9]</structfield></entry>
|
||||
<entry>Reserved fields for future use</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The buffer <structfield> &v4l2-selection;::type </structfield>
|
||||
or <structfield> &v4l2-selection;::target </structfield> is not supported, or
|
||||
the <structfield> &v4l2-selection;::flags </structfield> are invalid.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ERANGE</errorcode></term>
|
||||
<listitem>
|
||||
<para>it is not possible to adjust a rectangle <structfield>
|
||||
&v4l2-selection;::r </structfield> that satisfies all contraints from
|
||||
<structfield> &v4l2-selection;::flags </structfield>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>it is not possible to apply change of selection rectangle at the moment.
|
||||
Usually because streaming is in progress.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
|
@ -88,11 +88,3 @@ standards.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -318,6 +318,16 @@ standard.</para><!-- FIXME what if PAL+NTSC and Bi but not SAP? --></entry>
|
|||
<entry>RDS capture is supported. This capability is only valid for
|
||||
radio tuners.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant></entry>
|
||||
<entry>0x0100</entry>
|
||||
<entry>The RDS data is passed as unparsed RDS blocks.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant></entry>
|
||||
<entry>0x0200</entry>
|
||||
<entry>The RDS data is parsed by the hardware and set via controls.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
@ -525,11 +535,3 @@ out of bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -100,11 +100,3 @@ supported, or the <structfield>index</structfield> is out of bounds.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -443,11 +443,3 @@ or this particular menu item is not supported by the driver.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -125,11 +125,3 @@ wrong.</para>
|
|||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-parent-document: "v4l2.sgml"
|
||||
indent-tabs-mode: nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -27,8 +27,8 @@ use IO::Handle;
|
|||
"or51211", "or51132_qam", "or51132_vsb", "bluebird",
|
||||
"opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718",
|
||||
"af9015", "ngene", "az6027", "lme2510_lg", "lme2510c_s7395",
|
||||
"lme2510c_s7395_old", "drxk", "drxk_terratec_h5", "tda10071",
|
||||
"it9135" );
|
||||
"lme2510c_s7395_old", "drxk", "drxk_terratec_h5",
|
||||
"drxk_hauppauge_hvr930c", "tda10071", "it9135", "it9137");
|
||||
|
||||
# Check args
|
||||
syntax() if (scalar(@ARGV) != 1);
|
||||
|
@ -644,6 +644,24 @@ sub drxk {
|
|||
"$fwfile"
|
||||
}
|
||||
|
||||
sub drxk_hauppauge_hvr930c {
|
||||
my $url = "http://www.wintvcd.co.uk/drivers/";
|
||||
my $zipfile = "HVR-9x0_5_10_325_28153_SIGNED.zip";
|
||||
my $hash = "83ab82e7e9480ec8bf1ae0155ca63c88";
|
||||
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
|
||||
my $drvfile = "HVR-900/emOEM.sys";
|
||||
my $fwfile = "dvb-usb-hauppauge-hvr930c-drxk.fw";
|
||||
|
||||
checkstandard();
|
||||
|
||||
wgetfile($zipfile, $url . $zipfile);
|
||||
verify($zipfile, $hash);
|
||||
unzip($zipfile, $tmpdir);
|
||||
extract("$tmpdir/$drvfile", 0x117b0, 42692, "$fwfile");
|
||||
|
||||
"$fwfile"
|
||||
}
|
||||
|
||||
sub drxk_terratec_h5 {
|
||||
my $url = "http://www.linuxtv.org/downloads/firmware/";
|
||||
my $hash = "19000dada8e2741162ccc50cc91fa7f1";
|
||||
|
@ -658,6 +676,26 @@ sub drxk_terratec_h5 {
|
|||
}
|
||||
|
||||
sub it9135 {
|
||||
my $sourcefile = "dvb-usb-it9135.zip";
|
||||
my $url = "http://www.ite.com.tw/uploads/firmware/v3.6.0.0/$sourcefile";
|
||||
my $hash = "1e55f6c8833f1d0ae067c2bb2953e6a9";
|
||||
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 0);
|
||||
my $outfile = "dvb-usb-it9135.fw";
|
||||
my $fwfile1 = "dvb-usb-it9135-01.fw";
|
||||
my $fwfile2 = "dvb-usb-it9135-02.fw";
|
||||
|
||||
checkstandard();
|
||||
|
||||
wgetfile($sourcefile, $url);
|
||||
unzip($sourcefile, $tmpdir);
|
||||
verify("$tmpdir/$outfile", $hash);
|
||||
extract("$tmpdir/$outfile", 64, 8128, "$fwfile1");
|
||||
extract("$tmpdir/$outfile", 12866, 5817, "$fwfile2");
|
||||
|
||||
"$fwfile1 $fwfile2"
|
||||
}
|
||||
|
||||
sub it9137 {
|
||||
my $url = "http://kworld.server261.com/kworld/CD/ITE_TiVme/V1.00/";
|
||||
my $zipfile = "Driver_V10.323.1.0412.100412.zip";
|
||||
my $hash = "79b597dc648698ed6820845c0c9d0d37";
|
||||
|
|
|
@ -439,41 +439,6 @@ Who: Jean Delvare <khali@linux-fr.org>
|
|||
|
||||
----------------------------
|
||||
|
||||
What: Support for driver specific ioctls in the pwc driver (everything
|
||||
defined in media/pwc-ioctl.h)
|
||||
When: 3.3
|
||||
Why: This stems from the v4l1 era, with v4l2 everything can be done with
|
||||
standardized v4l2 API calls
|
||||
Who: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: Driver specific sysfs API in the pwc driver
|
||||
When: 3.3
|
||||
Why: Setting pan/tilt should be done with v4l2 controls, like with other
|
||||
cams. The button is available as a standard input device
|
||||
Who: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: Driver specific use of pixfmt.priv in the pwc driver
|
||||
When: 3.3
|
||||
Why: The .priv field never was intended for this, setting a framerate is
|
||||
support using the standardized S_PARM ioctl
|
||||
Who: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: Software emulation of arbritary resolutions in the pwc driver
|
||||
When: 3.3
|
||||
Why: The pwc driver claims to support any resolution between 160x120
|
||||
and 640x480, but emulates this by simply drawing a black border
|
||||
around the image. Userspace can draw its own black border if it
|
||||
really wants one.
|
||||
Who: Hans de Goede <hdegoede@redhat.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: For VIDIOC_S_FREQUENCY the type field must match the device node's type.
|
||||
If not, return -EINVAL.
|
||||
When: 3.2
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
0 -> Unknown board (au0828)
|
||||
1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721e,2040:721f,2040:7280,0fd9:0008]
|
||||
1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721e,2040:721f,2040:7280,0fd9:0008,2040:7260,2040:7213]
|
||||
2 -> Hauppauge HVR850 (au0828) [2040:7240]
|
||||
3 -> DViCO FusionHDTV USB (au0828) [0fe9:d620]
|
||||
4 -> Hauppauge HVR950Q rev xxF8 (au0828) [2040:7201,2040:7211,2040:7281]
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
70 -> Prolink Pixelview PV-BT878P+ (Rev.4C,8E)
|
||||
71 -> Lifeview FlyVideo 98EZ (capture only) LR51 [1851:1851]
|
||||
72 -> Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) [1554:4011]
|
||||
73 -> Sensoray 311 [6000:0311]
|
||||
73 -> Sensoray 311/611 [6000:0311,6000:0611]
|
||||
74 -> RemoteVision MX (RV605)
|
||||
75 -> Powercolor MTV878/ MTV878R/ MTV878F
|
||||
76 -> Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) [0e11:0079]
|
||||
|
@ -158,3 +158,4 @@
|
|||
157 -> Geovision GV-800(S) (master) [800a:763d]
|
||||
158 -> Geovision GV-800(S) (slave) [800b:763d,800c:763d,800d:763d]
|
||||
159 -> ProVideo PV183 [1830:1540,1831:1540,1832:1540,1833:1540,1834:1540,1835:1540,1836:1540,1837:1540]
|
||||
160 -> Tongwei Video Technology TD-3116 [f200:3116]
|
||||
|
|
|
@ -29,3 +29,6 @@
|
|||
28 -> LEADTEK WinFast PxTV1200 [107d:6f22]
|
||||
29 -> GoTView X5 3D Hybrid [5654:2390]
|
||||
30 -> NetUP Dual DVB-T/C-CI RF [1b55:e2e4]
|
||||
31 -> Leadtek Winfast PxDVR3200 H XC4000 [107d:6f39]
|
||||
32 -> MPX-885
|
||||
33 -> Mygica X8507 [14f1:8502]
|
||||
|
|
|
@ -85,3 +85,5 @@
|
|||
84 -> Samsung SMT 7020 DVB-S [18ac:dc00,18ac:dccd]
|
||||
85 -> Twinhan VP-1027 DVB-S [1822:0023]
|
||||
86 -> TeVii S464 DVB-S/S2 [d464:9022]
|
||||
87 -> Leadtek WinFast DTV2000 H PLUS [107d:6f42]
|
||||
88 -> Leadtek WinFast DTV1800 H (XC4000) [107d:6f38]
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500]
|
||||
11 -> Terratec Hybrid XS (em2880)
|
||||
12 -> Kworld PVR TV 2800 RF (em2820/em2840)
|
||||
13 -> Terratec Prodigy XS (em2880) [0ccd:0047]
|
||||
13 -> Terratec Prodigy XS (em2880)
|
||||
14 -> SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 (em2820/em2840)
|
||||
15 -> V-Gear PocketTV (em2800)
|
||||
16 -> Hauppauge WinTV HVR 950 (em2883) [2040:6513,2040:6517,2040:651b]
|
||||
|
@ -40,7 +40,7 @@
|
|||
39 -> KWorld PVRTV 300U (em2861) [eb1a:e300]
|
||||
40 -> Plextor ConvertX PX-TV100U (em2861) [093b:a005]
|
||||
41 -> Kworld 350 U DVB-T (em2870) [eb1a:e350]
|
||||
42 -> Kworld 355 U DVB-T (em2870) [eb1a:e355,eb1a:e357]
|
||||
42 -> Kworld 355 U DVB-T (em2870) [eb1a:e355,eb1a:e357,eb1a:e359]
|
||||
43 -> Terratec Cinergy T XS (em2870) [0ccd:0043]
|
||||
44 -> Terratec Cinergy T XS (MT2060) (em2870)
|
||||
45 -> Pinnacle PCTV DVB-T (em2870)
|
||||
|
@ -64,7 +64,7 @@
|
|||
64 -> Easy Cap Capture DC-60 (em2860)
|
||||
65 -> IO-DATA GV-MVP/SZ (em2820/em2840) [04bb:0515]
|
||||
66 -> Empire dual TV (em2880)
|
||||
67 -> Terratec Grabby (em2860) [0ccd:0096]
|
||||
67 -> Terratec Grabby (em2860) [0ccd:0096,0ccd:10AF]
|
||||
68 -> Terratec AV350 (em2860) [0ccd:0084]
|
||||
69 -> KWorld ATSC 315U HDTV TV Box (em2882) [eb1a:a313]
|
||||
70 -> Evga inDtube (em2882)
|
||||
|
@ -76,3 +76,7 @@
|
|||
76 -> KWorld PlusTV 340U or UB435-Q (ATSC) (em2870) [1b80:a340]
|
||||
77 -> EM2874 Leadership ISDBT (em2874)
|
||||
78 -> PCTV nanoStick T2 290e (em28174)
|
||||
79 -> Terratec Cinergy H5 (em2884) [0ccd:10a2,0ccd:10ad]
|
||||
80 -> PCTV DVB-S2 Stick (460e) (em28174)
|
||||
81 -> Hauppauge WinTV HVR 930C (em2884) [2040:1605]
|
||||
82 -> Terratec Cinergy HTC Stick (em2884) [0ccd:00b2]
|
||||
|
|
|
@ -186,3 +186,4 @@
|
|||
185 -> MagicPro ProHDTV Pro2 DMB-TH/Hybrid [17de:d136]
|
||||
186 -> Beholder BeholdTV 501 [5ace:5010]
|
||||
187 -> Beholder BeholdTV 503 FM [5ace:5030]
|
||||
188 -> Sensoray 811/911 [6000:0811,6000:0911]
|
||||
|
|
|
@ -7,3 +7,5 @@
|
|||
6 -> Hauppauge WinTV-HVR2200 [0070:8901]
|
||||
7 -> Hauppauge WinTV-HVR2250 [0070:8891,0070:8851]
|
||||
8 -> Hauppauge WinTV-HVR2250 [0070:88A1]
|
||||
9 -> Hauppauge WinTV-HVR2200 [0070:8940]
|
||||
10 -> Hauppauge WinTV-HVR2200 [0070:8953]
|
||||
|
|
|
@ -189,6 +189,7 @@ ov519 05a9:0511 Video Blaster WebCam 3/WebCam Plus, D-Link USB Digital Video Ca
|
|||
ov519 05a9:0518 Creative WebCam
|
||||
ov519 05a9:0519 OV519 Microphone
|
||||
ov519 05a9:0530 OmniVision
|
||||
ov534_9 05a9:1550 OmniVision VEHO Filmscanner
|
||||
ov519 05a9:2800 OmniVision SuperCAM
|
||||
ov519 05a9:4519 Webcam Classic
|
||||
ov534_9 05a9:8065 OmniVision test kit ov538+ov9712
|
||||
|
@ -278,6 +279,7 @@ pac7302 093a:2628 Genius iLook 300
|
|||
pac7302 093a:2629 Genious iSlim 300
|
||||
pac7302 093a:262a Webcam 300k
|
||||
pac7302 093a:262c Philips SPC 230 NC
|
||||
jl2005bcd 0979:0227 Various brands, 19 known cameras supported
|
||||
jeilinj 0979:0280 Sakar 57379
|
||||
jeilinj 0979:0280 Sportscam DV15
|
||||
zc3xx 0ac8:0302 Z-star Vimicro zc0302
|
||||
|
|
|
@ -612,6 +612,12 @@ You can set a pointer to a mutex_lock in struct video_device. Usually this
|
|||
will be either a top-level mutex or a mutex per device node. If you want
|
||||
finer-grained locking then you have to set it to NULL and do you own locking.
|
||||
|
||||
It is up to the driver developer to decide which method to use. However, if
|
||||
your driver has high-latency operations (for example, changing the exposure
|
||||
of a USB webcam might take a long time), then you might be better off with
|
||||
doing your own locking if you want to allow the user to do other things with
|
||||
the device while waiting for the high-latency command to finish.
|
||||
|
||||
If a lock is specified then all file operations will be serialized on that
|
||||
lock. If you use videobuf then you must pass the same lock to the videobuf
|
||||
queue initialize function: if videobuf has to wait for a frame to arrive, then
|
||||
|
@ -619,6 +625,11 @@ it will temporarily unlock the lock and relock it afterwards. If your driver
|
|||
also waits in the code, then you should do the same to allow other processes
|
||||
to access the device node while the first process is waiting for something.
|
||||
|
||||
In the case of videobuf2 you will need to implement the wait_prepare and
|
||||
wait_finish callbacks to unlock/lock if applicable. In particular, if you use
|
||||
the lock in struct video_device then you must unlock/lock this mutex in
|
||||
wait_prepare and wait_finish.
|
||||
|
||||
The implementation of a hotplug disconnect should also take the lock before
|
||||
calling v4l2_device_disconnect.
|
||||
|
||||
|
|
|
@ -2821,6 +2821,14 @@ L: platform-driver-x86@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/platform/x86/fujitsu-laptop.c
|
||||
|
||||
FUJITSU M-5MO LS CAMERA ISP DRIVER
|
||||
M: Kyungmin Park <kyungmin.park@samsung.com>
|
||||
M: Heungjun Kim <riverful.kim@samsung.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/video/m5mols/
|
||||
F: include/media/m5mols.h
|
||||
|
||||
FUSE: FILESYSTEM IN USERSPACE
|
||||
M: Miklos Szeredi <miklos@szeredi.hu>
|
||||
L: fuse-devel@lists.sourceforge.net
|
||||
|
|
|
@ -26,7 +26,7 @@ config MEDIA_TUNER
|
|||
select MEDIA_TUNER_XC4000 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_MT20XX if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_TDA8290 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_TEA5761 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_TEA5761 if !MEDIA_TUNER_CUSTOMISE && EXPERIMENTAL
|
||||
select MEDIA_TUNER_TEA5767 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_TDA9887 if !MEDIA_TUNER_CUSTOMISE
|
||||
|
@ -116,6 +116,13 @@ config MEDIA_TUNER_MT2060
|
|||
help
|
||||
A driver for the silicon IF tuner MT2060 from Microtune.
|
||||
|
||||
config MEDIA_TUNER_MT2063
|
||||
tristate "Microtune MT2063 silicon IF tuner"
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
default m if MEDIA_TUNER_CUSTOMISE
|
||||
help
|
||||
A driver for the silicon IF tuner MT2063 from Microtune.
|
||||
|
||||
config MEDIA_TUNER_MT2266
|
||||
tristate "Microtune MT2266 silicon tuner"
|
||||
depends on VIDEO_MEDIA && I2C
|
||||
|
|
|
@ -18,6 +18,7 @@ obj-$(CONFIG_MEDIA_TUNER_TDA18271) += tda18271.o
|
|||
obj-$(CONFIG_MEDIA_TUNER_XC5000) += xc5000.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_XC4000) += xc4000.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2060) += mt2060.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2063) += mt2063.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2266) += mt2266.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_QT1010) += qt1010.o
|
||||
obj-$(CONFIG_MEDIA_TUNER_MT2131) += mt2131.o
|
||||
|
|
|
@ -151,7 +151,7 @@ static int max2165_set_bandwidth(struct max2165_priv *priv, u32 bw)
|
|||
{
|
||||
u8 val;
|
||||
|
||||
if (bw == BANDWIDTH_8_MHZ)
|
||||
if (bw == 8000000)
|
||||
val = priv->bb_filter_8mhz_cfg;
|
||||
else
|
||||
val = priv->bb_filter_7mhz_cfg;
|
||||
|
@ -257,39 +257,28 @@ static void max2165_debug_status(struct max2165_priv *priv)
|
|||
dprintk("VCO: %d, VCO Sub-band: %d, ADC: %d\n", vco, vco_sub_band, adc);
|
||||
}
|
||||
|
||||
static int max2165_set_params(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
static int max2165_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct max2165_priv *priv = fe->tuner_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret;
|
||||
|
||||
dprintk("%s() frequency=%d (Hz)\n", __func__, params->frequency);
|
||||
if (fe->ops.info.type == FE_ATSC) {
|
||||
return -EINVAL;
|
||||
} else if (fe->ops.info.type == FE_OFDM) {
|
||||
dprintk("%s() OFDM\n", __func__);
|
||||
switch (params->u.ofdm.bandwidth) {
|
||||
case BANDWIDTH_6_MHZ:
|
||||
return -EINVAL;
|
||||
case BANDWIDTH_7_MHZ:
|
||||
case BANDWIDTH_8_MHZ:
|
||||
priv->frequency = params->frequency;
|
||||
priv->bandwidth = params->u.ofdm.bandwidth;
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "MAX2165 bandwidth not set!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
printk(KERN_ERR "MAX2165 modulation type not supported!\n");
|
||||
switch (c->bandwidth_hz) {
|
||||
case 7000000:
|
||||
case 8000000:
|
||||
priv->frequency = c->frequency;
|
||||
break;
|
||||
default:
|
||||
printk(KERN_INFO "MAX2165: bandwidth %d Hz not supported.\n",
|
||||
c->bandwidth_hz);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dprintk("%s() frequency=%d\n", __func__, priv->frequency);
|
||||
dprintk("%s() frequency=%d\n", __func__, c->frequency);
|
||||
|
||||
if (fe->ops.i2c_gate_ctrl)
|
||||
fe->ops.i2c_gate_ctrl(fe, 1);
|
||||
max2165_set_bandwidth(priv, priv->bandwidth);
|
||||
max2165_set_bandwidth(priv, c->bandwidth_hz);
|
||||
ret = max2165_set_rf(priv, priv->frequency);
|
||||
mdelay(50);
|
||||
max2165_debug_status(priv);
|
||||
|
@ -370,7 +359,7 @@ static int max2165_init(struct dvb_frontend *fe)
|
|||
|
||||
max2165_read_rom_table(priv);
|
||||
|
||||
max2165_set_bandwidth(priv, BANDWIDTH_8_MHZ);
|
||||
max2165_set_bandwidth(priv, 8000000);
|
||||
|
||||
if (fe->ops.i2c_gate_ctrl)
|
||||
fe->ops.i2c_gate_ctrl(fe, 0);
|
||||
|
|
|
@ -214,22 +214,22 @@ static int mc44s803_init(struct dvb_frontend *fe)
|
|||
return err;
|
||||
}
|
||||
|
||||
static int mc44s803_set_params(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
static int mc44s803_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct mc44s803_priv *priv = fe->tuner_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
u32 r1, r2, n1, n2, lo1, lo2, freq, val;
|
||||
int err;
|
||||
|
||||
priv->frequency = params->frequency;
|
||||
priv->frequency = c->frequency;
|
||||
|
||||
r1 = MC44S803_OSC / 1000000;
|
||||
r2 = MC44S803_OSC / 100000;
|
||||
|
||||
n1 = (params->frequency + MC44S803_IF1 + 500000) / 1000000;
|
||||
n1 = (c->frequency + MC44S803_IF1 + 500000) / 1000000;
|
||||
freq = MC44S803_OSC / r1 * n1;
|
||||
lo1 = ((60 * n1) + (r1 / 2)) / r1;
|
||||
freq = freq - params->frequency;
|
||||
freq = freq - c->frequency;
|
||||
|
||||
n2 = (freq - MC44S803_IF2 + 50000) / 100000;
|
||||
lo2 = ((60 * n2) + (r2 / 2)) / r2;
|
||||
|
|
|
@ -153,8 +153,9 @@ static int mt2060_spurcheck(u32 lo1,u32 lo2,u32 if2)
|
|||
#define IF2 36150 // IF2 frequency = 36.150 MHz
|
||||
#define FREF 16000 // Quartz oscillator 16 MHz
|
||||
|
||||
static int mt2060_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
||||
static int mt2060_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct mt2060_priv *priv;
|
||||
int ret=0;
|
||||
int i=0;
|
||||
|
@ -176,8 +177,7 @@ static int mt2060_set_params(struct dvb_frontend *fe, struct dvb_frontend_parame
|
|||
|
||||
mt2060_writeregs(priv,b,2);
|
||||
|
||||
freq = params->frequency / 1000; // Hz -> kHz
|
||||
priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;
|
||||
freq = c->frequency / 1000; /* Hz -> kHz */
|
||||
|
||||
f_lo1 = freq + if1 * 1000;
|
||||
f_lo1 = (f_lo1 / 250) * 250;
|
||||
|
@ -293,10 +293,9 @@ static int mt2060_get_frequency(struct dvb_frontend *fe, u32 *frequency)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt2060_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
|
||||
static int mt2060_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
|
||||
{
|
||||
struct mt2060_priv *priv = fe->tuner_priv;
|
||||
*bandwidth = priv->bandwidth;
|
||||
*frequency = IF2 * 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -356,7 +355,7 @@ static const struct dvb_tuner_ops mt2060_tuner_ops = {
|
|||
|
||||
.set_params = mt2060_set_params,
|
||||
.get_frequency = mt2060_get_frequency,
|
||||
.get_bandwidth = mt2060_get_bandwidth
|
||||
.get_if_frequency = mt2060_get_if_frequency,
|
||||
};
|
||||
|
||||
/* This functions tries to identify a MT2060 tuner by reading the PART/REV register. This is hasty. */
|
||||
|
|
|
@ -97,7 +97,6 @@ struct mt2060_priv {
|
|||
struct i2c_adapter *i2c;
|
||||
|
||||
u32 frequency;
|
||||
u32 bandwidth;
|
||||
u16 if1_freq;
|
||||
u8 fmfreq;
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,36 @@
|
|||
#ifndef __MT2063_H__
|
||||
#define __MT2063_H__
|
||||
|
||||
#include "dvb_frontend.h"
|
||||
|
||||
struct mt2063_config {
|
||||
u8 tuner_address;
|
||||
u32 refclock;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_MEDIA_TUNER_MT2063) || (defined(CONFIG_MEDIA_TUNER_MT2063_MODULE) && defined(MODULE))
|
||||
struct dvb_frontend *mt2063_attach(struct dvb_frontend *fe,
|
||||
struct mt2063_config *config,
|
||||
struct i2c_adapter *i2c);
|
||||
|
||||
#else
|
||||
|
||||
static inline struct dvb_frontend *mt2063_attach(struct dvb_frontend *fe,
|
||||
struct mt2063_config *config,
|
||||
struct i2c_adapter *i2c)
|
||||
{
|
||||
printk(KERN_WARNING "%s: Driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int mt2063_setTune(struct dvb_frontend *fe, u32 f_in,
|
||||
u32 bw_in,
|
||||
enum MTTune_atv_standard tv_type);
|
||||
|
||||
/* FIXME: Should use the standard DVB attachment interfaces */
|
||||
unsigned int tuner_MT2063_SoftwareShutdown(struct dvb_frontend *fe);
|
||||
unsigned int tuner_MT2063_ClearPowerMaskBits(struct dvb_frontend *fe);
|
||||
|
||||
#endif /* CONFIG_DVB_MT2063 */
|
||||
|
||||
#endif /* __MT2063_H__ */
|
|
@ -92,9 +92,9 @@ static int mt2131_writeregs(struct mt2131_priv *priv,u8 *buf, u8 len)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt2131_set_params(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
static int mt2131_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct mt2131_priv *priv;
|
||||
int ret=0, i;
|
||||
u32 freq;
|
||||
|
@ -105,12 +105,8 @@ static int mt2131_set_params(struct dvb_frontend *fe,
|
|||
u8 lockval = 0;
|
||||
|
||||
priv = fe->tuner_priv;
|
||||
if (fe->ops.info.type == FE_OFDM)
|
||||
priv->bandwidth = params->u.ofdm.bandwidth;
|
||||
else
|
||||
priv->bandwidth = 0;
|
||||
|
||||
freq = params->frequency / 1000; // Hz -> kHz
|
||||
freq = c->frequency / 1000; /* Hz -> kHz */
|
||||
dprintk(1, "%s() freq=%d\n", __func__, freq);
|
||||
|
||||
f_lo1 = freq + MT2131_IF1 * 1000;
|
||||
|
@ -193,14 +189,6 @@ static int mt2131_get_frequency(struct dvb_frontend *fe, u32 *frequency)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mt2131_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
|
||||
{
|
||||
struct mt2131_priv *priv = fe->tuner_priv;
|
||||
dprintk(1, "%s()\n", __func__);
|
||||
*bandwidth = priv->bandwidth;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt2131_get_status(struct dvb_frontend *fe, u32 *status)
|
||||
{
|
||||
struct mt2131_priv *priv = fe->tuner_priv;
|
||||
|
@ -263,7 +251,6 @@ static const struct dvb_tuner_ops mt2131_tuner_ops = {
|
|||
|
||||
.set_params = mt2131_set_params,
|
||||
.get_frequency = mt2131_get_frequency,
|
||||
.get_bandwidth = mt2131_get_bandwidth,
|
||||
.get_status = mt2131_get_status
|
||||
};
|
||||
|
||||
|
@ -281,7 +268,6 @@ struct dvb_frontend * mt2131_attach(struct dvb_frontend *fe,
|
|||
return NULL;
|
||||
|
||||
priv->cfg = cfg;
|
||||
priv->bandwidth = 6000000; /* 6MHz */
|
||||
priv->i2c = i2c;
|
||||
|
||||
if (mt2131_readreg(priv, 0, &id) != 0) {
|
||||
|
|
|
@ -38,7 +38,6 @@ struct mt2131_priv {
|
|||
struct i2c_adapter *i2c;
|
||||
|
||||
u32 frequency;
|
||||
u32 bandwidth;
|
||||
};
|
||||
|
||||
#endif /* __MT2131_PRIV_H__ */
|
||||
|
|
|
@ -122,8 +122,9 @@ static u8 mt2266_vhf[] = { 0x1d, 0xfe, 0x00, 0x00, 0xb4, 0x03, 0xa5, 0xa5,
|
|||
|
||||
#define FREF 30000 // Quartz oscillator 30 MHz
|
||||
|
||||
static int mt2266_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
|
||||
static int mt2266_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
struct mt2266_priv *priv;
|
||||
int ret=0;
|
||||
u32 freq;
|
||||
|
@ -135,32 +136,32 @@ static int mt2266_set_params(struct dvb_frontend *fe, struct dvb_frontend_parame
|
|||
|
||||
priv = fe->tuner_priv;
|
||||
|
||||
freq = params->frequency / 1000; // Hz -> kHz
|
||||
freq = priv->frequency / 1000; /* Hz -> kHz */
|
||||
if (freq < 470000 && freq > 230000)
|
||||
return -EINVAL; /* Gap between VHF and UHF bands */
|
||||
priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;
|
||||
priv->frequency = freq * 1000;
|
||||
|
||||
priv->frequency = c->frequency;
|
||||
tune = 2 * freq * (8192/16) / (FREF/16);
|
||||
band = (freq < 300000) ? MT2266_VHF : MT2266_UHF;
|
||||
if (band == MT2266_VHF)
|
||||
tune *= 2;
|
||||
|
||||
switch (params->u.ofdm.bandwidth) {
|
||||
case BANDWIDTH_6_MHZ:
|
||||
switch (c->bandwidth_hz) {
|
||||
case 6000000:
|
||||
mt2266_writeregs(priv, mt2266_init_6mhz,
|
||||
sizeof(mt2266_init_6mhz));
|
||||
break;
|
||||
case BANDWIDTH_7_MHZ:
|
||||
mt2266_writeregs(priv, mt2266_init_7mhz,
|
||||
sizeof(mt2266_init_7mhz));
|
||||
break;
|
||||
case BANDWIDTH_8_MHZ:
|
||||
default:
|
||||
case 8000000:
|
||||
mt2266_writeregs(priv, mt2266_init_8mhz,
|
||||
sizeof(mt2266_init_8mhz));
|
||||
break;
|
||||
case 7000000:
|
||||
default:
|
||||
mt2266_writeregs(priv, mt2266_init_7mhz,
|
||||
sizeof(mt2266_init_7mhz));
|
||||
break;
|
||||
}
|
||||
priv->bandwidth = c->bandwidth_hz;
|
||||
|
||||
if (band == MT2266_VHF && priv->band == MT2266_UHF) {
|
||||
dprintk("Switch from UHF to VHF");
|
||||
|
|
|
@ -3979,54 +3979,47 @@ static int mxl5005s_AssignTunerMode(struct dvb_frontend *fe, u32 mod_type,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mxl5005s_set_params(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
static int mxl5005s_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct mxl5005s_state *state = fe->tuner_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
u32 delsys = c->delivery_system;
|
||||
u32 bw = c->bandwidth_hz;
|
||||
u32 req_mode, req_bw = 0;
|
||||
int ret;
|
||||
|
||||
dprintk(1, "%s()\n", __func__);
|
||||
|
||||
if (fe->ops.info.type == FE_ATSC) {
|
||||
switch (params->u.vsb.modulation) {
|
||||
case VSB_8:
|
||||
req_mode = MXL_ATSC; break;
|
||||
default:
|
||||
case QAM_64:
|
||||
case QAM_256:
|
||||
case QAM_AUTO:
|
||||
req_mode = MXL_QAM; break;
|
||||
}
|
||||
} else
|
||||
switch (delsys) {
|
||||
case SYS_ATSC:
|
||||
req_mode = MXL_ATSC;
|
||||
req_bw = MXL5005S_BANDWIDTH_6MHZ;
|
||||
break;
|
||||
case SYS_DVBC_ANNEX_B:
|
||||
req_mode = MXL_QAM;
|
||||
req_bw = MXL5005S_BANDWIDTH_6MHZ;
|
||||
break;
|
||||
default: /* Assume DVB-T */
|
||||
req_mode = MXL_DVBT;
|
||||
switch (bw) {
|
||||
case 6000000:
|
||||
req_bw = MXL5005S_BANDWIDTH_6MHZ;
|
||||
break;
|
||||
case 7000000:
|
||||
req_bw = MXL5005S_BANDWIDTH_7MHZ;
|
||||
break;
|
||||
case 8000000:
|
||||
case 0:
|
||||
req_bw = MXL5005S_BANDWIDTH_8MHZ;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Change tuner for new modulation type if reqd */
|
||||
if (req_mode != state->current_mode) {
|
||||
switch (req_mode) {
|
||||
case MXL_ATSC:
|
||||
case MXL_QAM:
|
||||
req_bw = MXL5005S_BANDWIDTH_6MHZ;
|
||||
break;
|
||||
case MXL_DVBT:
|
||||
default:
|
||||
/* Assume DVB-T */
|
||||
switch (params->u.ofdm.bandwidth) {
|
||||
case BANDWIDTH_6_MHZ:
|
||||
req_bw = MXL5005S_BANDWIDTH_6MHZ;
|
||||
break;
|
||||
case BANDWIDTH_7_MHZ:
|
||||
req_bw = MXL5005S_BANDWIDTH_7MHZ;
|
||||
break;
|
||||
case BANDWIDTH_AUTO:
|
||||
case BANDWIDTH_8_MHZ:
|
||||
req_bw = MXL5005S_BANDWIDTH_8MHZ;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (req_mode != state->current_mode ||
|
||||
req_bw != state->Chan_Bandwidth) {
|
||||
state->current_mode = req_mode;
|
||||
ret = mxl5005s_reconfigure(fe, req_mode, req_bw);
|
||||
|
||||
|
@ -4034,8 +4027,8 @@ static int mxl5005s_set_params(struct dvb_frontend *fe,
|
|||
ret = 0;
|
||||
|
||||
if (ret == 0) {
|
||||
dprintk(1, "%s() freq=%d\n", __func__, params->frequency);
|
||||
ret = mxl5005s_SetRfFreqHz(fe, params->frequency);
|
||||
dprintk(1, "%s() freq=%d\n", __func__, c->frequency);
|
||||
ret = mxl5005s_SetRfFreqHz(fe, c->frequency);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -165,6 +165,8 @@ struct mxl5007t_state {
|
|||
struct reg_pair_t tab_init_cable[ARRAY_SIZE(init_tab_cable)];
|
||||
struct reg_pair_t tab_rftune[ARRAY_SIZE(reg_pair_rftune)];
|
||||
|
||||
enum mxl5007t_if_freq if_freq;
|
||||
|
||||
u32 frequency;
|
||||
u32 bandwidth;
|
||||
};
|
||||
|
@ -286,6 +288,8 @@ static void mxl5007t_set_if_freq_bits(struct mxl5007t_state *state,
|
|||
/* set inverted IF or normal IF */
|
||||
set_reg_bits(state->tab_init, 0x02, 0x10, invert_if ? 0x10 : 0x00);
|
||||
|
||||
state->if_freq = if_freq;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -612,47 +616,43 @@ static int mxl5007t_get_status(struct dvb_frontend *fe, u32 *status)
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static int mxl5007t_set_params(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
static int mxl5007t_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
u32 delsys = c->delivery_system;
|
||||
struct mxl5007t_state *state = fe->tuner_priv;
|
||||
enum mxl5007t_bw_mhz bw;
|
||||
enum mxl5007t_mode mode;
|
||||
int ret;
|
||||
u32 freq = params->frequency;
|
||||
u32 freq = c->frequency;
|
||||
|
||||
if (fe->ops.info.type == FE_ATSC) {
|
||||
switch (params->u.vsb.modulation) {
|
||||
case VSB_8:
|
||||
case VSB_16:
|
||||
mode = MxL_MODE_ATSC;
|
||||
break;
|
||||
case QAM_64:
|
||||
case QAM_256:
|
||||
mode = MxL_MODE_CABLE;
|
||||
break;
|
||||
default:
|
||||
mxl_err("modulation not set!");
|
||||
return -EINVAL;
|
||||
}
|
||||
switch (delsys) {
|
||||
case SYS_ATSC:
|
||||
mode = MxL_MODE_ATSC;
|
||||
bw = MxL_BW_6MHz;
|
||||
} else if (fe->ops.info.type == FE_OFDM) {
|
||||
switch (params->u.ofdm.bandwidth) {
|
||||
case BANDWIDTH_6_MHZ:
|
||||
break;
|
||||
case SYS_DVBC_ANNEX_B:
|
||||
mode = MxL_MODE_CABLE;
|
||||
bw = MxL_BW_6MHz;
|
||||
break;
|
||||
case SYS_DVBT:
|
||||
case SYS_DVBT2:
|
||||
mode = MxL_MODE_DVBT;
|
||||
switch (c->bandwidth_hz) {
|
||||
case 6000000:
|
||||
bw = MxL_BW_6MHz;
|
||||
break;
|
||||
case BANDWIDTH_7_MHZ:
|
||||
case 7000000:
|
||||
bw = MxL_BW_7MHz;
|
||||
break;
|
||||
case BANDWIDTH_8_MHZ:
|
||||
case 8000000:
|
||||
bw = MxL_BW_8MHz;
|
||||
break;
|
||||
default:
|
||||
mxl_err("bandwidth not set!");
|
||||
return -EINVAL;
|
||||
}
|
||||
mode = MxL_MODE_DVBT;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
mxl_err("modulation type not supported!");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -671,8 +671,7 @@ static int mxl5007t_set_params(struct dvb_frontend *fe,
|
|||
goto fail;
|
||||
|
||||
state->frequency = freq;
|
||||
state->bandwidth = (fe->ops.info.type == FE_OFDM) ?
|
||||
params->u.ofdm.bandwidth : 0;
|
||||
state->bandwidth = c->bandwidth_hz;
|
||||
fail:
|
||||
mutex_unlock(&state->lock);
|
||||
|
||||
|
@ -738,6 +737,50 @@ static int mxl5007t_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mxl5007t_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
|
||||
{
|
||||
struct mxl5007t_state *state = fe->tuner_priv;
|
||||
|
||||
*frequency = 0;
|
||||
|
||||
switch (state->if_freq) {
|
||||
case MxL_IF_4_MHZ:
|
||||
*frequency = 4000000;
|
||||
break;
|
||||
case MxL_IF_4_5_MHZ:
|
||||
*frequency = 4500000;
|
||||
break;
|
||||
case MxL_IF_4_57_MHZ:
|
||||
*frequency = 4570000;
|
||||
break;
|
||||
case MxL_IF_5_MHZ:
|
||||
*frequency = 5000000;
|
||||
break;
|
||||
case MxL_IF_5_38_MHZ:
|
||||
*frequency = 5380000;
|
||||
break;
|
||||
case MxL_IF_6_MHZ:
|
||||
*frequency = 6000000;
|
||||
break;
|
||||
case MxL_IF_6_28_MHZ:
|
||||
*frequency = 6280000;
|
||||
break;
|
||||
case MxL_IF_9_1915_MHZ:
|
||||
*frequency = 9191500;
|
||||
break;
|
||||
case MxL_IF_35_25_MHZ:
|
||||
*frequency = 35250000;
|
||||
break;
|
||||
case MxL_IF_36_15_MHZ:
|
||||
*frequency = 36150000;
|
||||
break;
|
||||
case MxL_IF_44_MHZ:
|
||||
*frequency = 44000000;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mxl5007t_release(struct dvb_frontend *fe)
|
||||
{
|
||||
struct mxl5007t_state *state = fe->tuner_priv;
|
||||
|
@ -767,6 +810,7 @@ static struct dvb_tuner_ops mxl5007t_tuner_ops = {
|
|||
.get_frequency = mxl5007t_get_frequency,
|
||||
.get_bandwidth = mxl5007t_get_bandwidth,
|
||||
.release = mxl5007t_release,
|
||||
.get_if_frequency = mxl5007t_get_if_frequency,
|
||||
};
|
||||
|
||||
static int mxl5007t_get_chip_id(struct mxl5007t_state *state)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue