Commit e3172349 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull media updates from Mauro Carvalho Chehab:
 - V4L2 API additions to better support JPEG compression control
 - media API additions to properly support MPEG decoders
 - V4L2 API additions for image crop/scaling
 - a few other V4L2 API DocBook fixes/improvements
 - two new DVB frontend drivers: m88rs2000 and rtl2830
 - two new DVB drivers: az6007 and rtl28xxu
 - a framework for ISA drivers, that removed lots of common code found
   at the ISA radio drivers
 - a new FM transmitter driver (radio-keene)
 - a GPIO-based IR receiver driver
 - a new sensor driver: mt9m032
 - some new video drivers: adv7183, blackfin, mx2_emmaprp, sii9234_drv,
   vs6624
 - several new board additions, driver fixes, improvements and cleanups.

* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (295 commits)
  [media] update CARDLIST.em28xx
  [media] partially reverts changeset fa5527cd
  [media] stb0899: fix the limits for signal strength values
  [media] em28xx: support for 2304:0242 PCTV QuatroStick (510e)
  [media] em28xx: support for 2013:0251 PCTV QuatroStick nano (520e)
  [media] -EINVAL -> -ENOTTY
  [media] gspca - sn9c20x: Cleanup source
  [media] gspca - sn9c20x: Simplify register write for capture start/stop
  [media] gspca - sn9c20x: Add automatic JPEG compression mechanism
  [media] gspca - sn9c20x: Greater delay in case of sensor no response
  [media] gspca - sn9c20x: Optimize the code of write sequences
  [media] gspca - sn9c20x: Add the JPEG compression quality control
  [media] gspca - sn9c20x: Add a delay after Omnivision sensor reset
  [media] gspca - sn9c20x: Propagate USB errors to higher level
  [media] gspca - sn9c20x: Use the new video control mechanism
  [media] gspca - sn9c20x: Fix loss of frame start
  [media] gspca - zc3xx: Lack of register 08 value for sensor cs2102k
  [media] gspca - ov534_9: Add brightness to OmniVision 5621 sensor
  [media] gspca - zc3xx: Add V4L2_CID_JPEG_COMPRESSION_QUALITY control support
  [media] pvrusb2: fix 7MHz & 8MHz DVB-T tuner support for HVR1900 rev D1F5
  ...
parents f37ab0fb 7483d45f
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -128,6 +128,26 @@ url="http://www.ijg.org">http://www.ijg.org</ulink>)</corpauthor>
      <subtitle>Version 1.02</subtitle>
    </biblioentry>

    <biblioentry id="itu-t81">
      <abbrev>ITU-T.81</abbrev>
      <authorgroup>
	<corpauthor>International Telecommunication Union
(<ulink url="http://www.itu.int">http://www.itu.int</ulink>)</corpauthor>
      </authorgroup>
      <title>ITU-T Recommendation T.81
"Information Technology &mdash; Digital Compression and Coding of Continous-Tone
Still Images &mdash; Requirements and Guidelines"</title>
    </biblioentry>

    <biblioentry id="w3c-jpeg-jfif">
      <abbrev>W3C JPEG JFIF</abbrev>
      <authorgroup>
	<corpauthor>The World Wide Web Consortium (<ulink
url="http://www.w3.org/Graphics/JPEG">http://www.w3.org</ulink>)</corpauthor>
      </authorgroup>
      <title>JPEG JFIF</title>
    </biblioentry>

    <biblioentry id="smpte12m">
      <abbrev>SMPTE&nbsp;12M</abbrev>
      <authorgroup>
+14 −0
Original line number Diff line number Diff line
@@ -2393,6 +2393,20 @@ details.</para>
	    to the <link linkend="control">User controls class</link>.
	  </para>
        </listitem>
        <listitem>
	  <para>Added the device_caps field to struct v4l2_capabilities and added the new
	  V4L2_CAP_DEVICE_CAPS capability.</para>
        </listitem>
      </orderedlist>
    </section>

    <section>
      <title>V4L2 in Linux 3.4</title>
      <orderedlist>
        <listitem>
	  <para>Added <link linkend="jpeg-controls">JPEG compression control
	  class</link>.</para>
        </listitem>
      </orderedlist>
    </section>

+220 −0
Original line number Diff line number Diff line
@@ -1284,6 +1284,49 @@ values are:</entry>
capturing. This is not done by muting audio hardware, which can still
produce a slight hiss, but in the encoder itself, guaranteeing a fixed
and reproducible audio bitstream. 0 = unmuted, 1 = muted.</entry>
	      </row>
	      <row><entry></entry></row>
	      <row id="v4l2-mpeg-audio-dec-playback">
		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK</constant>&nbsp;</entry>
		<entry>enum&nbsp;v4l2_mpeg_audio_dec_playback</entry>
	      </row><row><entry spanname="descr">Determines how monolingual audio should be played back.
Possible values are:</entry>
	      </row>
	      <row>
		<entrytbl spanname="descr" cols="2">
		  <tbody valign="top">
		    <row>
		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO</constant>&nbsp;</entry>
		      <entry>Automatically determines the best playback mode.</entry>
		    </row>
		    <row>
		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO</constant>&nbsp;</entry>
		      <entry>Stereo playback.</entry>
		    </row>
		    <row>
		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT</constant>&nbsp;</entry>
		      <entry>Left channel playback.</entry>
		    </row>
		    <row>
		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT</constant>&nbsp;</entry>
		      <entry>Right channel playback.</entry>
		    </row>
		    <row>
		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO</constant>&nbsp;</entry>
		      <entry>Mono playback.</entry>
		    </row>
		    <row>
		      <entry><constant>V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO</constant>&nbsp;</entry>
		      <entry>Stereo playback with swapped left and right channels.</entry>
		    </row>
		  </tbody>
		</entrytbl>
	      </row>
	      <row><entry></entry></row>
	      <row id="v4l2-mpeg-audio-dec-multilingual-playback">
		<entry spanname="id"><constant>V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK</constant>&nbsp;</entry>
		<entry>enum&nbsp;v4l2_mpeg_audio_dec_playback</entry>
	      </row><row><entry spanname="descr">Determines how multilingual audio should be played back.</entry>
	      </row>
	      <row><entry></entry></row>
	      <row id="v4l2-mpeg-video-encoding">
@@ -1447,6 +1490,22 @@ of the video. The supplied 32-bit integer is interpreted as follows (bit
		  </tbody>
		</entrytbl>
	      </row>
	      <row><entry></entry></row>
	      <row id="v4l2-mpeg-video-dec-pts">
		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_DEC_PTS</constant>&nbsp;</entry>
		<entry>integer64</entry>
	      </row><row><entry spanname="descr">This read-only control returns the
33-bit video Presentation Time Stamp as defined in ITU T-REC-H.222.0 and ISO/IEC 13818-1 of
the currently displayed frame. This is the same PTS as is used in &VIDIOC-DECODER-CMD;.</entry>
	      </row>
	      <row><entry></entry></row>
	      <row id="v4l2-mpeg-video-dec-frame">
		<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_DEC_FRAME</constant>&nbsp;</entry>
		<entry>integer64</entry>
	      </row><row><entry spanname="descr">This read-only control returns the
frame counter of the frame that is currently displayed (decoded). This value is reset to 0 whenever
the decoder is started.</entry>
	      </row>


	      <row><entry></entry></row>
@@ -3377,6 +3436,167 @@ interface and may change in the future.</para>
	</tbody>
      </tgroup>
      </table>
    </section>

    <section id="jpeg-controls">
      <title>JPEG Control Reference</title>
      <para>The JPEG class includes controls for common features of JPEG
      encoders and decoders. Currently it includes features for codecs
      implementing progressive baseline DCT compression process with
      Huffman entrophy coding.</para>
      <table pgwide="1" frame="none" id="jpeg-control-id">
      <title>JPEG Control IDs</title>

      <tgroup cols="4">
	<colspec colname="c1" colwidth="1*" />
	<colspec colname="c2" colwidth="6*" />
	<colspec colname="c3" colwidth="2*" />
	<colspec colname="c4" colwidth="6*" />
	<spanspec namest="c1" nameend="c2" spanname="id" />
	<spanspec namest="c2" nameend="c4" spanname="descr" />
	<thead>
	  <row>
	    <entry spanname="id" align="left">ID</entry>
	    <entry align="left">Type</entry>
	  </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry>
	  </row>
	</thead>
	<tbody valign="top">
	  <row><entry></entry></row>
	  <row>
	    <entry spanname="id"><constant>V4L2_CID_JPEG_CLASS</constant>&nbsp;</entry>
	    <entry>class</entry>
	  </row><row><entry spanname="descr">The JPEG class descriptor. Calling
	  &VIDIOC-QUERYCTRL; for this control will return a description of this
	  control class.

	</entry>
	  </row>
	  <row>
	    <entry spanname="id"><constant>V4L2_CID_JPEG_CHROMA_SUBSAMPLING</constant></entry>
	    <entry>menu</entry>
	  </row>
	  <row id="jpeg-chroma-subsampling-control">
	    <entry spanname="descr">The chroma subsampling factors describe how
	    each component of an input image is sampled, in respect to maximum
	    sample rate in each spatial dimension. See <xref linkend="itu-t81"/>,
	    clause A.1.1. for more details. The <constant>
	    V4L2_CID_JPEG_CHROMA_SUBSAMPLING</constant> control determines how
	    Cb and Cr components are downsampled after coverting an input image
	    from RGB to Y'CbCr color space.
	    </entry>
	  </row>
	  <row>
	    <entrytbl spanname="descr" cols="2">
	      <tbody valign="top">
		<row>
		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_444</constant>
		  </entry><entry>No chroma subsampling, each pixel has
		  Y, Cr and Cb values.</entry>
		</row>
		<row>
		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_422</constant>
		  </entry><entry>Horizontally subsample Cr, Cb components
		  by a factor of 2.</entry>
		</row>
		<row>
		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_420</constant>
		  </entry><entry>Subsample Cr, Cb components horizontally
		  and vertically by 2.</entry>
		</row>
		<row>
		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_411</constant>
		  </entry><entry>Horizontally subsample Cr, Cb components
		  by a factor of 4.</entry>
		</row>
		<row>
		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_410</constant>
		  </entry><entry>Subsample Cr, Cb components horizontally
		  by 4 and vertically by 2.</entry>
		</row>
		<row>
		  <entry><constant>V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY</constant>
		  </entry><entry>Use only luminance component.</entry>
		</row>
	      </tbody>
	    </entrytbl>
	  </row>
	  <row>
	    <entry spanname="id"><constant>V4L2_CID_JPEG_RESTART_INTERVAL</constant>
	    </entry><entry>integer</entry>
	  </row>
	  <row><entry spanname="descr">
	      The restart interval determines an interval of inserting RSTm
	      markers (m = 0..7). The purpose of these markers is to additionally
	      reinitialize the encoder process, in order to process blocks of
	      an image independently.
	      For the lossy compression processes the restart interval unit is
	      MCU (Minimum Coded Unit) and its value is contained in DRI
	      (Define Restart Interval) marker. If <constant>
	      V4L2_CID_JPEG_RESTART_INTERVAL</constant> control is set to 0,
	      DRI and RSTm markers will not be inserted.
	    </entry>
	  </row>
	  <row id="jpeg-quality-control">
	    <entry spanname="id"><constant>V4L2_CID_JPEG_COMPRESION_QUALITY</constant></entry>
	    <entry>integer</entry>
	  </row>
	  <row>
	    <entry spanname="descr">
	      <constant>V4L2_CID_JPEG_COMPRESION_QUALITY</constant> control
	      determines trade-off between image quality and size.
	      It provides simpler method for applications to control image quality,
	      without a need for direct reconfiguration of luminance and chrominance
	      quantization tables.

	      In cases where a driver uses quantization tables configured directly
	      by an application, using interfaces defined elsewhere, <constant>
	      V4L2_CID_JPEG_COMPRESION_QUALITY</constant> control should be set
	      by driver to 0.

	      <para>The value range of this control is driver-specific. Only
	      positive, non-zero values are meaningful. The recommended range
	      is 1 - 100, where larger values correspond to better image quality.
	      </para>
	    </entry>
	    </row>
	  <row id="jpeg-active-marker-control">
	    <entry spanname="id"><constant>V4L2_CID_JPEG_ACTIVE_MARKER</constant></entry>
	    <entry>bitmask</entry>
	  </row>
	  <row>
	    <entry spanname="descr">Specify which JPEG markers are included
	    in compressed stream. This control is valid only for encoders.
	    </entry>
	  </row>
	  <row>
	    <entrytbl spanname="descr" cols="2">
	      <tbody valign="top">
		<row>
		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_APP0</constant></entry>
		  <entry>Application data segment APP<subscript>0</subscript>.</entry>
		</row><row>
		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_APP1</constant></entry>
		  <entry>Application data segment APP<subscript>1</subscript>.</entry>
		</row><row>
		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_COM</constant></entry>
		  <entry>Comment segment.</entry>
		</row><row>
		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_DQT</constant></entry>
		  <entry>Quantization tables segment.</entry>
		</row><row>
		  <entry><constant>V4L2_JPEG_ACTIVE_MARKER_DHT</constant></entry>
		  <entry>Huffman tables segment.</entry>
		</row>
	      </tbody>
	    </entrytbl>
	  </row>
	  <row><entry></entry></row>
	</tbody>
      </tgroup>
      </table>
      <para>For more details about JPEG specification, refer
      to <xref linkend="itu-t81"/>, <xref linkend="jfif"/>,
      <xref linkend="w3c-jpeg-jfif"/>.</para>
    </section>
</section>
+6 −2
Original line number Diff line number Diff line
@@ -52,6 +52,10 @@ cropping and composing rectangles have the same size.</para>
	  </textobject>
	</mediaobject>
      </figure>

For complete list of the available selection targets see table <xref
linkend="v4l2-sel-target"/>

    </section>

  <section>
@@ -186,7 +190,7 @@ V4L2_SEL_TGT_COMPOSE_ACTIVE </constant> target.</para>

   <section>

     <title>Scaling control.</title>
     <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
@@ -200,7 +204,7 @@ the scaling ratios using these values.</para>

  <section>

    <title>Comparison with old cropping API.</title>
    <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
+18 −1
Original line number Diff line number Diff line
@@ -127,6 +127,22 @@ structs, ioctls) must be noted in more detail in the history chapter
(compat.xml), along with the possible impact on existing drivers and
applications. -->

      <revision>
	<revnumber>3.4</revnumber>
	<date>2012-01-25</date>
	<authorinitials>sn</authorinitials>
	<revremark>Added <link linkend="jpeg-controls">JPEG compression
	    control class.</link>
	</revremark>
      </revision>

      <revision>
	<revnumber>3.3</revnumber>
	<date>2012-01-11</date>
	<authorinitials>hv</authorinitials>
	<revremark>Added device_caps field to struct v4l2_capabilities.</revremark>
      </revision>

      <revision>
	<revnumber>3.2</revnumber>
	<date>2011-08-26</date>
@@ -417,7 +433,7 @@ and discussions on the V4L mailing list.</revremark>
</partinfo>

<title>Video for Linux Two API Specification</title>
 <subtitle>Revision 3.2</subtitle>
 <subtitle>Revision 3.3</subtitle>

  <chapter id="common">
    &sub-common;
@@ -473,6 +489,7 @@ and discussions on the V4L mailing list.</revremark>
    &sub-cropcap;
    &sub-dbg-g-chip-ident;
    &sub-dbg-g-register;
    &sub-decoder-cmd;
    &sub-dqevent;
    &sub-encoder-cmd;
    &sub-enumaudio;
Loading