Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > b7b6877999d0754e8ed227e0b2f603dc > files > 55

syntek-1.3.1-6mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>SyntekUSBVideoCamera: stk11xx-v4l.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<h1>stk11xx-v4l.c</h1><a href="stk11xx-v4l_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;linux/module.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;linux/init.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;linux/kernel.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;linux/version.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;linux/errno.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;linux/slab.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;linux/kref.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;linux/vmalloc.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#if LINUX_VERSION_CODE &gt;= KERNEL_VERSION(2,6,27)</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#include &lt;linux/mm.h&gt;</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;linux/videodev.h&gt;</span>
<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span>
<a name="l00047"></a>00047 
<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;linux/usb.h&gt;</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include &lt;media/v4l2-common.h&gt;</span>
<a name="l00050"></a>00050 <span class="preprocessor">#include &lt;media/v4l2-ioctl.h&gt;</span>
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 <span class="preprocessor">#include "<a class="code" href="stk11xx_8h.html" title="Driver for Syntek USB video camera.">stk11xx.h</a>"</span>
<a name="l00053"></a>00053 
<a name="l00054"></a>00054 
<a name="l00055"></a><a class="code" href="stk11xx-v4l_8c.html#9b7273f902f9cb582947ef10f7e67a8c">00055</a> <span class="keyword">static</span> <span class="keyword">struct </span>file_operations <a class="code" href="stk11xx-v4l_8c.html#9b7273f902f9cb582947ef10f7e67a8c">v4l_stk11xx_fops</a>;
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 
<a name="l00062"></a><a class="code" href="stk11xx_8h.html#4977da08718c28052dab2096023754e2">00062</a> <span class="keyword">const</span> <span class="keyword">struct </span>stk11xx_coord <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES] = {
<a name="l00063"></a>00063     {   80,   60 },
<a name="l00064"></a>00064     {  128,   96 },
<a name="l00065"></a>00065     {  160,  120 },
<a name="l00066"></a>00066     {  213,  160 },
<a name="l00067"></a>00067     {  320,  240 },
<a name="l00068"></a>00068     {  640,  480 },
<a name="l00069"></a>00069     {  800,  600 },
<a name="l00070"></a>00070     { 1024,  768 },
<a name="l00071"></a>00071     { 1280, 1024 }
<a name="l00072"></a>00072 };
<a name="l00073"></a>00073 
<a name="l00074"></a>00074 
<a name="l00079"></a><a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">00079</a> <span class="keyword">static</span> <span class="keyword">struct </span>v4l2_queryctrl <a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>[] = {
<a name="l00080"></a>00080     {
<a name="l00081"></a>00081         .id      = V4L2_CID_BRIGHTNESS,
<a name="l00082"></a>00082         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00083"></a>00083         .name    = <span class="stringliteral">"Brightness"</span>,
<a name="l00084"></a>00084         .minimum = 0,
<a name="l00085"></a>00085         .maximum = 0xff00,
<a name="l00086"></a>00086         .step    = 1,
<a name="l00087"></a>00087         .default_value = 0x7f00,
<a name="l00088"></a>00088     },
<a name="l00089"></a>00089     {
<a name="l00090"></a>00090         .id      = V4L2_CID_WHITENESS,
<a name="l00091"></a>00091         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00092"></a>00092         .name    = <span class="stringliteral">"Whiteness"</span>,
<a name="l00093"></a>00093         .minimum = 0,
<a name="l00094"></a>00094         .maximum = 0xff00,
<a name="l00095"></a>00095         .step    = 1,
<a name="l00096"></a>00096         .default_value = 0x7f00,
<a name="l00097"></a>00097     },
<a name="l00098"></a>00098     {
<a name="l00099"></a>00099         .id      = V4L2_CID_SATURATION,
<a name="l00100"></a>00100         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00101"></a>00101         .name    = <span class="stringliteral">"Saturation"</span>,
<a name="l00102"></a>00102         .minimum = 0,
<a name="l00103"></a>00103         .maximum = 0xff00,
<a name="l00104"></a>00104         .step    = 1,
<a name="l00105"></a>00105         .default_value = 0x7f00,
<a name="l00106"></a>00106     },
<a name="l00107"></a>00107     {
<a name="l00108"></a>00108         .id      = V4L2_CID_CONTRAST,
<a name="l00109"></a>00109         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00110"></a>00110         .name    = <span class="stringliteral">"Contrast"</span>,
<a name="l00111"></a>00111         .minimum = 0,
<a name="l00112"></a>00112         .maximum = 0xff00,
<a name="l00113"></a>00113         .step    = 1,
<a name="l00114"></a>00114         .default_value = 0x7f00,
<a name="l00115"></a>00115     },
<a name="l00116"></a>00116 };
<a name="l00117"></a>00117 
<a name="l00118"></a>00118 
<a name="l00130"></a><a class="code" href="stk11xx_8h.html#ee51a96a13692d189e6d91bd781afa7f">00130</a> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(<span class="keyword">struct</span> usb_stk11xx *dev, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)
<a name="l00131"></a>00131 {
<a name="l00132"></a>00132     <span class="keywordtype">int</span> i;
<a name="l00133"></a>00133     <span class="keywordtype">int</span> find;
<a name="l00134"></a>00134 
<a name="l00135"></a>00135 
<a name="l00136"></a>00136     <span class="comment">// Check width and height</span>
<a name="l00137"></a>00137     <span class="comment">// Notice : this test is usefull for the Kopete application !</span>
<a name="l00138"></a>00138 
<a name="l00139"></a>00139     <span class="comment">// Driver can't build an image smaller than the minimal resolution !</span>
<a name="l00140"></a>00140     <span class="keywordflow">if</span> ((width &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x)
<a name="l00141"></a>00141             || (height &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y)) {
<a name="l00142"></a>00142         width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x;
<a name="l00143"></a>00143         height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y;
<a name="l00144"></a>00144     }
<a name="l00145"></a>00145 
<a name="l00146"></a>00146     <span class="comment">// Driver can't build an image bigger than the maximal resolution !</span>
<a name="l00147"></a>00147     <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l00148"></a>00148         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l00149"></a>00149             <span class="keywordflow">if</span> ((width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x)
<a name="l00150"></a>00150                 || (height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y)) {
<a name="l00151"></a>00151                 width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x;
<a name="l00152"></a>00152                 height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y;
<a name="l00153"></a>00153             }
<a name="l00154"></a>00154             <span class="keywordflow">break</span>;
<a name="l00155"></a>00155 
<a name="l00156"></a>00156         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l00157"></a>00157             <span class="keywordflow">if</span> ((width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].x)
<a name="l00158"></a>00158                 || (height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].y)) {
<a name="l00159"></a>00159                 width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].x;
<a name="l00160"></a>00160                 height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].y;
<a name="l00161"></a>00161             }
<a name="l00162"></a>00162             <span class="keywordflow">break</span>;
<a name="l00163"></a>00163 
<a name="l00164"></a>00164         <span class="keywordflow">default</span>:
<a name="l00165"></a>00165             <span class="keywordflow">return</span> -1;
<a name="l00166"></a>00166     }
<a name="l00167"></a>00167 
<a name="l00168"></a>00168 
<a name="l00169"></a>00169     <span class="comment">// Seek the best resolution</span>
<a name="l00170"></a>00170     <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l00171"></a>00171         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l00172"></a>00172             <span class="keywordflow">for</span> (i=0, find=0; i&lt;STK11XX_NBR_SIZES; i++) {
<a name="l00173"></a>00173                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].x &lt;= width &amp;&amp; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].y &lt;= height)
<a name="l00174"></a>00174                     find = i;
<a name="l00175"></a>00175             }
<a name="l00176"></a>00176             <span class="keywordflow">break</span>;
<a name="l00177"></a>00177 
<a name="l00178"></a>00178         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l00179"></a>00179             <span class="keywordflow">for</span> (i=0, find=0; i&lt;STK11XX_NBR_SIZES-3; i++) {
<a name="l00180"></a>00180                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].x &lt;= width &amp;&amp; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].y &lt;= height)
<a name="l00181"></a>00181                     find = i;
<a name="l00182"></a>00182             }
<a name="l00183"></a>00183             <span class="keywordflow">break</span>;
<a name="l00184"></a>00184 
<a name="l00185"></a>00185         <span class="keywordflow">default</span>:
<a name="l00186"></a>00186             <span class="keywordflow">return</span> -1;
<a name="l00187"></a>00187     }
<a name="l00188"></a>00188 
<a name="l00189"></a>00189     <span class="comment">// Save the new resolution</span>
<a name="l00190"></a>00190     dev-&gt;resolution = find;
<a name="l00191"></a>00191 
<a name="l00192"></a>00192     <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set mode %d [%dx%d]\n"</span>, dev-&gt;resolution,
<a name="l00193"></a>00193             <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[dev-&gt;resolution].x, <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[dev-&gt;resolution].y);
<a name="l00194"></a>00194 
<a name="l00195"></a>00195     <span class="comment">// Save the new size</span>
<a name="l00196"></a>00196     dev-&gt;view.x = width;
<a name="l00197"></a>00197     dev-&gt;view.y = height;
<a name="l00198"></a>00198 
<a name="l00199"></a>00199 
<a name="l00200"></a>00200     <span class="comment">// Calculate the frame size</span>
<a name="l00201"></a>00201     <span class="keywordflow">switch</span> (dev-&gt;resolution) {
<a name="l00202"></a>00202         <span class="keywordflow">case</span> STK11XX_80x60:
<a name="l00203"></a>00203         <span class="keywordflow">case</span> STK11XX_128x96:
<a name="l00204"></a>00204         <span class="keywordflow">case</span> STK11XX_160x120:
<a name="l00205"></a>00205         <span class="keywordflow">case</span> STK11XX_213x160:
<a name="l00206"></a>00206         <span class="keywordflow">case</span> STK11XX_320x240:
<a name="l00207"></a>00207         <span class="keywordflow">case</span> STK11XX_640x480:
<a name="l00208"></a>00208             dev-&gt;image.x = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].x;
<a name="l00209"></a>00209             dev-&gt;image.y = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].y;
<a name="l00210"></a>00210             dev-&gt;frame_size = dev-&gt;image.x * dev-&gt;image.y;
<a name="l00211"></a>00211             <span class="keywordflow">break</span>;
<a name="l00212"></a>00212 
<a name="l00213"></a>00213         <span class="keywordflow">case</span> STK11XX_800x600:
<a name="l00214"></a>00214         <span class="keywordflow">case</span> STK11XX_1024x768:
<a name="l00215"></a>00215         <span class="keywordflow">case</span> STK11XX_1280x1024:
<a name="l00216"></a>00216             dev-&gt;image.x = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].x;
<a name="l00217"></a>00217             dev-&gt;image.y = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].y;
<a name="l00218"></a>00218             dev-&gt;frame_size = dev-&gt;image.x * dev-&gt;image.y;
<a name="l00219"></a>00219             <span class="keywordflow">break</span>;
<a name="l00220"></a>00220     }
<a name="l00221"></a>00221 
<a name="l00222"></a>00222 
<a name="l00223"></a>00223     <span class="comment">// Calculate the image size</span>
<a name="l00224"></a>00224     <span class="keywordflow">switch</span> (dev-&gt;vsettings.palette) {
<a name="l00225"></a>00225         <span class="keywordflow">case</span> STK11XX_PALETTE_RGB24:
<a name="l00226"></a>00226         <span class="keywordflow">case</span> STK11XX_PALETTE_BGR24:
<a name="l00227"></a>00227             dev-&gt;view_size = 3 * dev-&gt;view.x * dev-&gt;view.y;
<a name="l00228"></a>00228             dev-&gt;image_size = 3 * dev-&gt;frame_size;
<a name="l00229"></a>00229             <span class="keywordflow">break</span>;
<a name="l00230"></a>00230 
<a name="l00231"></a>00231         <span class="keywordflow">case</span> STK11XX_PALETTE_RGB32:
<a name="l00232"></a>00232         <span class="keywordflow">case</span> STK11XX_PALETTE_BGR32:
<a name="l00233"></a>00233             dev-&gt;view_size = 3 * dev-&gt;view.x * dev-&gt;view.y;
<a name="l00234"></a>00234             dev-&gt;image_size = 4 * dev-&gt;frame_size;
<a name="l00235"></a>00235             <span class="keywordflow">break</span>;
<a name="l00236"></a>00236 
<a name="l00237"></a>00237         <span class="keywordflow">case</span> STK11XX_PALETTE_UYVY:
<a name="l00238"></a>00238         <span class="keywordflow">case</span> STK11XX_PALETTE_YUYV:
<a name="l00239"></a>00239             dev-&gt;view_size = 2 * dev-&gt;view.x * dev-&gt;view.y;
<a name="l00240"></a>00240             dev-&gt;image_size = 2 * dev-&gt;frame_size;
<a name="l00241"></a>00241             <span class="keywordflow">break</span>;
<a name="l00242"></a>00242     }
<a name="l00243"></a>00243 
<a name="l00244"></a>00244     <span class="keywordflow">return</span> 0;
<a name="l00245"></a>00245 }
<a name="l00246"></a>00246 
<a name="l00247"></a>00247 
<a name="l00258"></a><a class="code" href="stk11xx-v4l_8c.html#d9cad7787e40bec3f52a71257c625ab3">00258</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#d9cad7787e40bec3f52a71257c625ab3" title="Open the video device.">v4l_stk11xx_open</a>(<span class="keyword">struct</span> inode *inode, <span class="keyword">struct</span> file *fp)
<a name="l00259"></a>00259 {
<a name="l00260"></a>00260     <span class="keywordtype">int</span> err;
<a name="l00261"></a>00261 
<a name="l00262"></a>00262     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00263"></a>00263     <span class="keyword">struct </span>video_device *vdev;
<a name="l00264"></a>00264     
<a name="l00265"></a>00265     vdev = video_devdata(fp);
<a name="l00266"></a>00266     dev = video_get_drvdata(video_devdata(fp));
<a name="l00267"></a>00267 
<a name="l00268"></a>00268     <span class="keywordflow">if</span> (dev == NULL) {
<a name="l00269"></a>00269         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Device not initialized !!!\n"</span>);
<a name="l00270"></a>00270         BUG();
<a name="l00271"></a>00271     }
<a name="l00272"></a>00272 
<a name="l00273"></a>00273     <span class="keywordflow">if</span> (dev-&gt;vopen) {
<a name="l00274"></a>00274         <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Device is busy, someone is using the device\n"</span>);
<a name="l00275"></a>00275         <span class="keywordflow">return</span> -EBUSY;
<a name="l00276"></a>00276     }
<a name="l00277"></a>00277 
<a name="l00278"></a>00278     <span class="comment">// Allocate memory</span>
<a name="l00279"></a>00279     err = <a class="code" href="stk11xx-buf_8c.html#a04b5e0d601d6e4bd6a5dd53579b9628" title="Allocate all ISOC buffers.">stk11xx_allocate_buffers</a>(dev);
<a name="l00280"></a>00280 
<a name="l00281"></a>00281     <span class="keywordflow">if</span> (err &lt; 0) {
<a name="l00282"></a>00282         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Failed to allocate buffer memory !\n"</span>);
<a name="l00283"></a>00283         <span class="keywordflow">return</span> err;
<a name="l00284"></a>00284     }
<a name="l00285"></a>00285     
<a name="l00286"></a>00286     <span class="comment">// Reset buffers and parameters</span>
<a name="l00287"></a>00287     <a class="code" href="stk11xx-buf_8c.html#0440ed10dc62dfbe7cec72e328dec04f" title="Reset all ISOC buffers.">stk11xx_reset_buffers</a>(dev);
<a name="l00288"></a>00288 
<a name="l00289"></a>00289     <span class="comment">// Settings</span>
<a name="l00290"></a>00290     dev-&gt;error_status = 0;
<a name="l00291"></a>00291     dev-&gt;visoc_errors = 0;
<a name="l00292"></a>00292     dev-&gt;vframes_error = 0;
<a name="l00293"></a>00293     dev-&gt;vframes_dumped = 0;
<a name="l00294"></a>00294     dev-&gt;vsettings.hue = 0xffff;
<a name="l00295"></a>00295     dev-&gt;vsettings.depth = 24;
<a name="l00296"></a>00296     dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR24;
<a name="l00297"></a>00297 
<a name="l00298"></a>00298     <span class="comment">// Select the resolution by default</span>
<a name="l00299"></a>00299     <a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(dev, 640, 480);
<a name="l00300"></a>00300 
<a name="l00301"></a>00301     <span class="comment">// Initialize the device</span>
<a name="l00302"></a>00302     <a class="code" href="stk11xx-dev_8c.html#e3ca760fb15d38628de5bfd1e43d6f29" title="This function initializes the device for the stream.">dev_stk11xx_init_camera</a>(dev);
<a name="l00303"></a>00303     <a class="code" href="stk11xx-dev_8c.html#e978d7adfeabe3e7c31076fddee9a744" title="This function switchs on the camera.">dev_stk11xx_camera_on</a>(dev);
<a name="l00304"></a>00304     <a class="code" href="stk11xx-dev_8c.html#5c487b95ff9a43ca810016c688052bfa" title="Reconfigure the camera before the stream.">dev_stk11xx_reconf_camera</a>(dev);
<a name="l00305"></a>00305 
<a name="l00306"></a>00306     <span class="comment">// Init Isoc and URB</span>
<a name="l00307"></a>00307     err = <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l00308"></a>00308 
<a name="l00309"></a>00309     <span class="keywordflow">if</span> (err) {
<a name="l00310"></a>00310         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Failed to init ISOC stuff !\n"</span>);
<a name="l00311"></a>00311         <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l00312"></a>00312         <a class="code" href="stk11xx-buf_8c.html#3bc8bb033fc9697ba1e8b42be11a6efe" title="Release all buffers.">stk11xx_free_buffers</a>(dev);
<a name="l00313"></a>00313         <span class="keywordflow">return</span> err;
<a name="l00314"></a>00314     }
<a name="l00315"></a>00315 
<a name="l00316"></a>00316     <span class="comment">// Start the video stream</span>
<a name="l00317"></a>00317     <a class="code" href="stk11xx-dev_8c.html#b21443fb38d3de22db64c6d4435babbc" title="This function sets the device to start the stream.">dev_stk11xx_start_stream</a>(dev);
<a name="l00318"></a>00318 
<a name="l00319"></a>00319     <span class="comment">// Video settings</span>
<a name="l00320"></a>00320     <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l00321"></a>00321 
<a name="l00322"></a>00322     dev-&gt;vopen++;
<a name="l00323"></a>00323     fp-&gt;private_data = vdev;
<a name="l00324"></a>00324 
<a name="l00325"></a>00325     <span class="keywordflow">return</span> 0;
<a name="l00326"></a>00326 }
<a name="l00327"></a>00327 
<a name="l00328"></a>00328 
<a name="l00339"></a><a class="code" href="stk11xx-v4l_8c.html#1c1d2854c3d127dde05c86084d2afe30">00339</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#1c1d2854c3d127dde05c86084d2afe30" title="Release an opened file.">v4l_stk11xx_release</a>(<span class="keyword">struct</span> inode *inode, <span class="keyword">struct</span> file *fp)
<a name="l00340"></a>00340 {
<a name="l00341"></a>00341     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00342"></a>00342     <span class="keyword">struct </span>video_device *vdev;
<a name="l00343"></a>00343     
<a name="l00344"></a>00344     vdev = video_devdata(fp);
<a name="l00345"></a>00345     dev = video_get_drvdata(video_devdata(fp));
<a name="l00346"></a>00346 
<a name="l00347"></a>00347     <span class="keywordflow">if</span> (dev-&gt;vopen == 0)
<a name="l00348"></a>00348         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"v4l_release called on closed device\n"</span>);
<a name="l00349"></a>00349 
<a name="l00350"></a>00350     <span class="comment">// Stop the video stream</span>
<a name="l00351"></a>00351     <a class="code" href="stk11xx-dev_8c.html#939f02cad30ad386080f8024741237bd" title="This function sets the device to stop the stream.">dev_stk11xx_stop_stream</a>(dev);
<a name="l00352"></a>00352 
<a name="l00353"></a>00353     <span class="comment">// ISOC and URB cleanup</span>
<a name="l00354"></a>00354     <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l00355"></a>00355 
<a name="l00356"></a>00356     <span class="comment">// Free memory</span>
<a name="l00357"></a>00357     <a class="code" href="stk11xx-buf_8c.html#3bc8bb033fc9697ba1e8b42be11a6efe" title="Release all buffers.">stk11xx_free_buffers</a>(dev);
<a name="l00358"></a>00358 
<a name="l00359"></a>00359     <span class="comment">// Switch off the camera</span>
<a name="l00360"></a>00360     <a class="code" href="stk11xx-dev_8c.html#865eb05993bb42c88ce5c73fb39b210d" title="This function switchs off the camera.">dev_stk11xx_camera_off</a>(dev);
<a name="l00361"></a>00361 
<a name="l00362"></a>00362     <a class="code" href="stk11xx-dev_8c.html#33117e9ffbc424c68d29dad93f6675c2" title="Wake-up the camera.">dev_stk11xx_camera_asleep</a>(dev);
<a name="l00363"></a>00363 
<a name="l00364"></a>00364     dev-&gt;vopen--;
<a name="l00365"></a>00365 
<a name="l00366"></a>00366     <span class="keywordflow">return</span> 0;
<a name="l00367"></a>00367 }
<a name="l00368"></a>00368 
<a name="l00369"></a>00369 
<a name="l00383"></a><a class="code" href="stk11xx-v4l_8c.html#e125a26fc4f36a4b64418acb87b958a4">00383</a> <span class="keyword">static</span> ssize_t <a class="code" href="stk11xx-v4l_8c.html#e125a26fc4f36a4b64418acb87b958a4" title="Read the video device.">v4l_stk11xx_read</a>(<span class="keyword">struct</span> file *fp, <span class="keywordtype">char</span> __user *buf,
<a name="l00384"></a>00384         <span class="keywordtype">size_t</span> count, loff_t *f_pos)
<a name="l00385"></a>00385 {
<a name="l00386"></a>00386     <span class="keywordtype">int</span> noblock = fp-&gt;f_flags &amp; O_NONBLOCK;
<a name="l00387"></a>00387 
<a name="l00388"></a>00388     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00389"></a>00389     <span class="keyword">struct </span>video_device *vdev;
<a name="l00390"></a>00390 
<a name="l00391"></a>00391     <span class="keywordtype">int</span> bytes_to_read;
<a name="l00392"></a>00392     <span class="keywordtype">void</span> *image_buffer_addr;
<a name="l00393"></a>00393     
<a name="l00394"></a>00394     DECLARE_WAITQUEUE(wait, current);
<a name="l00395"></a>00395 
<a name="l00396"></a>00396     vdev = video_devdata(fp);
<a name="l00397"></a>00397     dev = video_get_drvdata(video_devdata(fp));
<a name="l00398"></a>00398 
<a name="l00399"></a>00399     <a class="code" href="stk11xx_8h.html#649dee4d247234a95351c9d56205623b">STK_STREAM</a>(<span class="stringliteral">"Read vdev=0x%p, buf=0x%p, count=%zd\n"</span>, vdev, buf, count);
<a name="l00400"></a>00400 
<a name="l00401"></a>00401     <span class="keywordflow">if</span> (dev == NULL)
<a name="l00402"></a>00402         <span class="keywordflow">return</span> -EFAULT;
<a name="l00403"></a>00403 
<a name="l00404"></a>00404     <span class="keywordflow">if</span> (vdev == NULL)
<a name="l00405"></a>00405         <span class="keywordflow">return</span> -EFAULT;
<a name="l00406"></a>00406 
<a name="l00407"></a>00407     <span class="keywordflow">if</span> (dev-&gt;image_read_pos == 0) {
<a name="l00408"></a>00408         add_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00409"></a>00409 
<a name="l00410"></a>00410         <span class="keywordflow">while</span> (dev-&gt;full_frames == NULL) {
<a name="l00411"></a>00411             <span class="keywordflow">if</span> (dev-&gt;error_status) {
<a name="l00412"></a>00412                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00413"></a>00413                 set_current_state(TASK_RUNNING);
<a name="l00414"></a>00414                 <span class="keywordflow">return</span> -dev-&gt;error_status ;
<a name="l00415"></a>00415             }
<a name="l00416"></a>00416 
<a name="l00417"></a>00417             <span class="keywordflow">if</span> (noblock) {
<a name="l00418"></a>00418                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00419"></a>00419                 set_current_state(TASK_RUNNING);
<a name="l00420"></a>00420                 <span class="keywordflow">return</span> -EWOULDBLOCK;
<a name="l00421"></a>00421             }
<a name="l00422"></a>00422 
<a name="l00423"></a>00423             <span class="keywordflow">if</span> (signal_pending(current)) {
<a name="l00424"></a>00424                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00425"></a>00425                 set_current_state(TASK_RUNNING);
<a name="l00426"></a>00426                 <span class="keywordflow">return</span> -ERESTARTSYS;
<a name="l00427"></a>00427             }
<a name="l00428"></a>00428 
<a name="l00429"></a>00429             schedule();
<a name="l00430"></a>00430             set_current_state(TASK_INTERRUPTIBLE);
<a name="l00431"></a>00431         }
<a name="l00432"></a>00432 
<a name="l00433"></a>00433         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00434"></a>00434         set_current_state(TASK_RUNNING);
<a name="l00435"></a>00435 
<a name="l00436"></a>00436         <span class="keywordflow">if</span> (<a class="code" href="stk11xx-buf_8c.html#21bfe8791f1f53fcd64a185dc6fdc686" title="Handler frame.">stk11xx_handle_frame</a>(dev))
<a name="l00437"></a>00437             <span class="keywordflow">return</span> -EFAULT;
<a name="l00438"></a>00438     }
<a name="l00439"></a>00439 
<a name="l00440"></a>00440     bytes_to_read = dev-&gt;view_size;
<a name="l00441"></a>00441 
<a name="l00442"></a>00442     <span class="keywordflow">if</span> (count + dev-&gt;image_read_pos &gt; bytes_to_read)
<a name="l00443"></a>00443         count = bytes_to_read - dev-&gt;image_read_pos;
<a name="l00444"></a>00444 
<a name="l00445"></a>00445     image_buffer_addr = dev-&gt;image_data;
<a name="l00446"></a>00446     image_buffer_addr += dev-&gt;images[dev-&gt;fill_image].offset;
<a name="l00447"></a>00447     image_buffer_addr += dev-&gt;image_read_pos;
<a name="l00448"></a>00448 
<a name="l00449"></a>00449     <span class="keywordflow">if</span> (copy_to_user(buf, image_buffer_addr, count))
<a name="l00450"></a>00450         <span class="keywordflow">return</span> -EFAULT;
<a name="l00451"></a>00451     
<a name="l00452"></a>00452     dev-&gt;image_read_pos += count;
<a name="l00453"></a>00453     
<a name="l00454"></a>00454     <span class="keywordflow">if</span> (dev-&gt;image_read_pos &gt;= bytes_to_read) {
<a name="l00455"></a>00455         dev-&gt;image_read_pos = 0;
<a name="l00456"></a>00456         <a class="code" href="stk11xx-buf_8c.html#5805bf7c1173f7f6063c1c5934c73e1b" title="Prepare the next image.">stk11xx_next_image</a>(dev);
<a name="l00457"></a>00457     }
<a name="l00458"></a>00458 
<a name="l00459"></a>00459     <span class="keywordflow">return</span> count;
<a name="l00460"></a>00460 }
<a name="l00461"></a>00461 
<a name="l00462"></a>00462 
<a name="l00471"></a><a class="code" href="stk11xx-v4l_8c.html#159e3f9cb0b7adb3d1b9e64298d2b42b">00471</a> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#159e3f9cb0b7adb3d1b9e64298d2b42b" title="Polling function.">v4l_stk11xx_poll</a>(<span class="keyword">struct</span> file *fp, poll_table *wait)
<a name="l00472"></a>00472 {
<a name="l00473"></a>00473     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00474"></a>00474     <span class="keyword">struct </span>video_device *vdev;
<a name="l00475"></a>00475     
<a name="l00476"></a>00476     vdev = video_devdata(fp);
<a name="l00477"></a>00477     dev = video_get_drvdata(video_devdata(fp));
<a name="l00478"></a>00478 
<a name="l00479"></a>00479     <a class="code" href="stk11xx_8h.html#649dee4d247234a95351c9d56205623b">STK_STREAM</a>(<span class="stringliteral">"Poll\n"</span>);
<a name="l00480"></a>00480 
<a name="l00481"></a>00481     <span class="keywordflow">if</span> (vdev == NULL)
<a name="l00482"></a>00482         <span class="keywordflow">return</span> -EFAULT;
<a name="l00483"></a>00483 
<a name="l00484"></a>00484     <span class="keywordflow">if</span> (dev == NULL)
<a name="l00485"></a>00485         <span class="keywordflow">return</span> -EFAULT;
<a name="l00486"></a>00486 
<a name="l00487"></a>00487     poll_wait(fp, &amp;dev-&gt;wait_frame, wait);
<a name="l00488"></a>00488 
<a name="l00489"></a>00489     <span class="keywordflow">if</span> (dev-&gt;error_status)
<a name="l00490"></a>00490         <span class="keywordflow">return</span> POLLERR;
<a name="l00491"></a>00491 
<a name="l00492"></a>00492     <span class="keywordflow">if</span> (dev-&gt;full_frames != NULL)
<a name="l00493"></a>00493         <span class="keywordflow">return</span> (POLLIN | POLLRDNORM);
<a name="l00494"></a>00494 
<a name="l00495"></a>00495     <span class="keywordflow">return</span> 0;
<a name="l00496"></a>00496 }
<a name="l00497"></a>00497 
<a name="l00498"></a>00498 
<a name="l00509"></a><a class="code" href="stk11xx-v4l_8c.html#1baaafe560fe7466c7062aacd02aff8c">00509</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#1baaafe560fe7466c7062aacd02aff8c" title="Memory map.">v4l_stk11xx_mmap</a>(<span class="keyword">struct</span> file *fp, <span class="keyword">struct</span> vm_area_struct *vma)
<a name="l00510"></a>00510 {
<a name="l00511"></a>00511     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
<a name="l00512"></a>00512 
<a name="l00513"></a>00513     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size;
<a name="l00514"></a>00514     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> start;
<a name="l00515"></a>00515     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pos;
<a name="l00516"></a>00516     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> page;
<a name="l00517"></a>00517 
<a name="l00518"></a>00518     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00519"></a>00519 
<a name="l00520"></a>00520     <span class="keyword">struct </span>video_device *vdev;
<a name="l00521"></a>00521     
<a name="l00522"></a>00522     vdev = video_devdata(fp);
<a name="l00523"></a>00523     dev = video_get_drvdata(video_devdata(fp));
<a name="l00524"></a>00524 
<a name="l00525"></a>00525     <a class="code" href="stk11xx_8h.html#649dee4d247234a95351c9d56205623b">STK_STREAM</a>(<span class="stringliteral">"mmap\n"</span>);
<a name="l00526"></a>00526 
<a name="l00527"></a>00527     start = vma-&gt;vm_start;
<a name="l00528"></a>00528     size = vma-&gt;vm_end - vma-&gt;vm_start;
<a name="l00529"></a>00529 
<a name="l00530"></a>00530     <span class="comment">// Find the buffer for this mapping...</span>
<a name="l00531"></a>00531     <span class="keywordflow">for</span> (i=0; i&lt;dev-&gt;nbuffers; i++) {
<a name="l00532"></a>00532         pos = dev-&gt;images[i].offset;
<a name="l00533"></a>00533 
<a name="l00534"></a>00534         <span class="keywordflow">if</span> ((pos &gt;&gt; PAGE_SHIFT) == vma-&gt;vm_pgoff)
<a name="l00535"></a>00535             <span class="keywordflow">break</span>;
<a name="l00536"></a>00536     }
<a name="l00537"></a>00537 
<a name="l00538"></a>00538     <span class="comment">// If no buffer found !</span>
<a name="l00539"></a>00539     <span class="keywordflow">if</span> (i == <a class="code" href="stk11xx_8h.html#aece77d67ce4d8f6c8e27269d33c9d89">STK11XX_MAX_IMAGES</a>) {
<a name="l00540"></a>00540         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"mmap no buffer found !\n"</span>);
<a name="l00541"></a>00541         <span class="keywordflow">return</span> -EINVAL;
<a name="l00542"></a>00542     }
<a name="l00543"></a>00543 
<a name="l00544"></a>00544     <span class="keywordflow">if</span> (i == 0) {
<a name="l00545"></a>00545         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> total_size;
<a name="l00546"></a>00546 
<a name="l00547"></a>00547         total_size = dev-&gt;nbuffers * dev-&gt;len_per_image;
<a name="l00548"></a>00548 
<a name="l00549"></a>00549         <span class="keywordflow">if</span> (size != dev-&gt;len_per_image &amp;&amp; size != total_size)
<a name="l00550"></a>00550             <span class="keywordflow">return</span> -EINVAL;
<a name="l00551"></a>00551     }
<a name="l00552"></a>00552     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (size &gt; dev-&gt;len_per_image)
<a name="l00553"></a>00553         <span class="keywordflow">return</span> -EINVAL;
<a name="l00554"></a>00554 
<a name="l00555"></a>00555     vma-&gt;vm_flags |= VM_IO;
<a name="l00556"></a>00556 
<a name="l00557"></a>00557     pos = (<span class="keywordtype">unsigned</span> long) dev-&gt;image_data;
<a name="l00558"></a>00558 
<a name="l00559"></a>00559     while (size &gt; 0) {
<a name="l00560"></a>00560         page = vmalloc_to_pfn((<span class="keywordtype">void</span> *) pos);
<a name="l00561"></a>00561 
<a name="l00562"></a>00562         <span class="keywordflow">if</span> (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
<a name="l00563"></a>00563             <span class="keywordflow">return</span> -EAGAIN;
<a name="l00564"></a>00564 
<a name="l00565"></a>00565         start += PAGE_SIZE;
<a name="l00566"></a>00566         pos += PAGE_SIZE;
<a name="l00567"></a>00567 
<a name="l00568"></a>00568         <span class="keywordflow">if</span> (size &gt; PAGE_SIZE)
<a name="l00569"></a>00569             size -= PAGE_SIZE;
<a name="l00570"></a>00570         <span class="keywordflow">else</span>
<a name="l00571"></a>00571             size = 0;
<a name="l00572"></a>00572     }
<a name="l00573"></a>00573 
<a name="l00574"></a>00574     <span class="keywordflow">return</span> 0;
<a name="l00575"></a>00575 }
<a name="l00576"></a>00576 
<a name="l00577"></a>00577 
<a name="l00590"></a><a class="code" href="stk11xx-v4l_8c.html#e791183c09f41bf23d9bc5853d0c080f">00590</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#e791183c09f41bf23d9bc5853d0c080f" title="Manage IOCTL.">v4l_stk11xx_do_ioctl</a>(<span class="keyword">struct</span> inode *inode, <span class="keyword">struct</span> file *fp,
<a name="l00591"></a>00591         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cmd, <span class="keywordtype">void</span> __user *arg)
<a name="l00592"></a>00592 {
<a name="l00593"></a>00593     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00594"></a>00594     <span class="keyword">struct </span>video_device *vdev;
<a name="l00595"></a>00595 
<a name="l00596"></a>00596     DECLARE_WAITQUEUE(wait, current);
<a name="l00597"></a>00597     
<a name="l00598"></a>00598     vdev = video_devdata(fp);
<a name="l00599"></a>00599     dev = video_get_drvdata(video_devdata(fp));
<a name="l00600"></a>00600 
<a name="l00601"></a>00601 <span class="preprocessor">#if (CONFIG_STK11XX_DEBUG == 1)</span>
<a name="l00602"></a>00602 <span class="preprocessor"></span>    v4l_printk_ioctl(cmd);
<a name="l00603"></a>00603 <span class="preprocessor">#endif</span>
<a name="l00604"></a>00604 <span class="preprocessor"></span>
<a name="l00605"></a>00605     <span class="keywordflow">switch</span> (cmd) {
<a name="l00606"></a>00606         <span class="comment">// Video 4 Linux v1</span>
<a name="l00607"></a>00607 
<a name="l00608"></a>00608         <span class="keywordflow">case</span> VIDIOCGCAP:
<a name="l00609"></a>00609             {
<a name="l00610"></a>00610                 <span class="keyword">struct </span>video_capability *cap = arg;
<a name="l00611"></a>00611 
<a name="l00612"></a>00612                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGCAP\n"</span>);
<a name="l00613"></a>00613 
<a name="l00614"></a>00614                 memset(cap, 0, <span class="keyword">sizeof</span>(*cap));
<a name="l00615"></a>00615                 strlcpy(cap-&gt;name, <span class="stringliteral">"stk11xx"</span>, <span class="keyword">sizeof</span>(cap-&gt;name));
<a name="l00616"></a>00616                 cap-&gt;type = VID_TYPE_CAPTURE;
<a name="l00617"></a>00617                 cap-&gt;channels = 1;
<a name="l00618"></a>00618                 cap-&gt;audios = 0;
<a name="l00619"></a>00619 
<a name="l00620"></a>00620                 <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l00621"></a>00621                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l00622"></a>00622                         cap-&gt;minwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].x;
<a name="l00623"></a>00623                         cap-&gt;minheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].y;
<a name="l00624"></a>00624                         cap-&gt;maxwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].x;
<a name="l00625"></a>00625                         cap-&gt;maxheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].y;
<a name="l00626"></a>00626                         <span class="keywordflow">break</span>;
<a name="l00627"></a>00627 
<a name="l00628"></a>00628                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l00629"></a>00629                         cap-&gt;minwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].x;
<a name="l00630"></a>00630                         cap-&gt;minheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].y;
<a name="l00631"></a>00631                         cap-&gt;maxwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].x;
<a name="l00632"></a>00632                         cap-&gt;maxheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].y;
<a name="l00633"></a>00633                         <span class="keywordflow">break</span>;
<a name="l00634"></a>00634                 }
<a name="l00635"></a>00635             }
<a name="l00636"></a>00636             <span class="keywordflow">break</span>;
<a name="l00637"></a>00637     
<a name="l00638"></a>00638         <span class="keywordflow">case</span> VIDIOCGCHAN:
<a name="l00639"></a>00639             {
<a name="l00640"></a>00640                 <span class="keyword">struct </span>video_channel *v = arg;
<a name="l00641"></a>00641 
<a name="l00642"></a>00642                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGCHAN\n"</span>);
<a name="l00643"></a>00643 
<a name="l00644"></a>00644                 <span class="keywordflow">if</span> (v-&gt;channel != 0)
<a name="l00645"></a>00645                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00646"></a>00646             
<a name="l00647"></a>00647                 v-&gt;flags = 0;
<a name="l00648"></a>00648                 v-&gt;tuners = 0;
<a name="l00649"></a>00649                 v-&gt;type = VIDEO_TYPE_CAMERA;
<a name="l00650"></a>00650                 strcpy(v-&gt;name, <span class="stringliteral">"Webcam"</span>);
<a name="l00651"></a>00651             }
<a name="l00652"></a>00652             <span class="keywordflow">break</span>;
<a name="l00653"></a>00653 
<a name="l00654"></a>00654         <span class="keywordflow">case</span> VIDIOCSCHAN:
<a name="l00655"></a>00655             {
<a name="l00656"></a>00656                 <span class="keyword">struct </span>video_channel *v = arg;
<a name="l00657"></a>00657 
<a name="l00658"></a>00658                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSCHAN\n"</span>);
<a name="l00659"></a>00659 
<a name="l00660"></a>00660                 <span class="keywordflow">if</span> (v-&gt;channel != 0)
<a name="l00661"></a>00661                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00662"></a>00662             }
<a name="l00663"></a>00663             <span class="keywordflow">break</span>;
<a name="l00664"></a>00664 
<a name="l00665"></a>00665         <span class="keywordflow">case</span> VIDIOCGPICT:
<a name="l00666"></a>00666             {
<a name="l00667"></a>00667                 <span class="keyword">struct </span>video_picture *p = arg;
<a name="l00668"></a>00668 
<a name="l00669"></a>00669                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGPICT\n"</span>);
<a name="l00670"></a>00670 
<a name="l00671"></a>00671                 p-&gt;brightness = dev-&gt;vsettings.brightness;
<a name="l00672"></a>00672                 p-&gt;contrast = dev-&gt;vsettings.contrast;
<a name="l00673"></a>00673                 p-&gt;whiteness = dev-&gt;vsettings.whiteness;
<a name="l00674"></a>00674                 p-&gt;colour = dev-&gt;vsettings.colour;
<a name="l00675"></a>00675                 p-&gt;depth = dev-&gt;vsettings.depth;
<a name="l00676"></a>00676                 p-&gt;palette = dev-&gt;vsettings.palette;
<a name="l00677"></a>00677                 p-&gt;hue = dev-&gt;vsettings.hue;
<a name="l00678"></a>00678 
<a name="l00679"></a>00679                 <span class="keywordflow">switch</span> (dev-&gt;vsettings.palette) {
<a name="l00680"></a>00680                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR24:
<a name="l00681"></a>00681                         p-&gt;palette = VIDEO_PALETTE_RGB24;
<a name="l00682"></a>00682                         <span class="keywordflow">break</span>;
<a name="l00683"></a>00683 
<a name="l00684"></a>00684                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR32:
<a name="l00685"></a>00685                         p-&gt;palette = VIDEO_PALETTE_RGB32;
<a name="l00686"></a>00686                         <span class="keywordflow">break</span>;
<a name="l00687"></a>00687 
<a name="l00688"></a>00688                     <span class="keywordflow">case</span> STK11XX_PALETTE_UYVY:
<a name="l00689"></a>00689                         p-&gt;palette = VIDEO_PALETTE_UYVY;
<a name="l00690"></a>00690                         <span class="keywordflow">break</span>;
<a name="l00691"></a>00691 
<a name="l00692"></a>00692                     <span class="keywordflow">case</span> STK11XX_PALETTE_YUYV:
<a name="l00693"></a>00693                         p-&gt;palette = VIDEO_PALETTE_YUYV;
<a name="l00694"></a>00694                         <span class="keywordflow">break</span>;
<a name="l00695"></a>00695                 }
<a name="l00696"></a>00696             }
<a name="l00697"></a>00697             <span class="keywordflow">break</span>;
<a name="l00698"></a>00698 
<a name="l00699"></a>00699         <span class="keywordflow">case</span> VIDIOCSPICT:
<a name="l00700"></a>00700             {
<a name="l00701"></a>00701                 <span class="keyword">struct </span>video_picture *p = arg;
<a name="l00702"></a>00702 
<a name="l00703"></a>00703                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSPICT\n"</span>);
<a name="l00704"></a>00704 
<a name="l00705"></a>00705                 dev-&gt;vsettings.brightness = p-&gt;brightness;
<a name="l00706"></a>00706                 dev-&gt;vsettings.contrast = p-&gt;contrast;
<a name="l00707"></a>00707                 dev-&gt;vsettings.whiteness = p-&gt;whiteness;
<a name="l00708"></a>00708                 dev-&gt;vsettings.colour = p-&gt;colour;
<a name="l00709"></a>00709                 dev-&gt;vsettings.hue = p-&gt;hue;
<a name="l00710"></a>00710                 
<a name="l00711"></a>00711                 <span class="keywordflow">if</span> (p-&gt;palette &amp;&amp; p-&gt;palette != dev-&gt;vsettings.palette) {
<a name="l00712"></a>00712                     <span class="keywordflow">switch</span> (p-&gt;palette) {
<a name="l00713"></a>00713                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB24:
<a name="l00714"></a>00714                             dev-&gt;vsettings.depth = 24;
<a name="l00715"></a>00715                             dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR24;
<a name="l00716"></a>00716                             <span class="keywordflow">break</span>;
<a name="l00717"></a>00717 
<a name="l00718"></a>00718                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB32:
<a name="l00719"></a>00719                             dev-&gt;vsettings.depth = 32;
<a name="l00720"></a>00720                             dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR32;
<a name="l00721"></a>00721                             <span class="keywordflow">break</span>;
<a name="l00722"></a>00722 
<a name="l00723"></a>00723                         <span class="keywordflow">case</span> VIDEO_PALETTE_UYVY:
<a name="l00724"></a>00724                             dev-&gt;vsettings.depth = 16;
<a name="l00725"></a>00725                             dev-&gt;vsettings.palette = STK11XX_PALETTE_UYVY;
<a name="l00726"></a>00726                             <span class="keywordflow">break</span>;
<a name="l00727"></a>00727 
<a name="l00728"></a>00728                         <span class="keywordflow">case</span> VIDEO_PALETTE_YUYV:
<a name="l00729"></a>00729                             dev-&gt;vsettings.depth = 16;
<a name="l00730"></a>00730                             dev-&gt;vsettings.palette = STK11XX_PALETTE_YUYV;
<a name="l00731"></a>00731                             <span class="keywordflow">break</span>;
<a name="l00732"></a>00732 
<a name="l00733"></a>00733                         <span class="keywordflow">default</span>:
<a name="l00734"></a>00734                             <span class="keywordflow">return</span> -EINVAL;
<a name="l00735"></a>00735                     }
<a name="l00736"></a>00736                 }
<a name="l00737"></a>00737 
<a name="l00738"></a>00738                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l00739"></a>00739 
<a name="l00740"></a>00740                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSPICT done\n"</span>);
<a name="l00741"></a>00741             }
<a name="l00742"></a>00742             <span class="keywordflow">break</span>;
<a name="l00743"></a>00743 
<a name="l00744"></a>00744         <span class="keywordflow">case</span> VIDIOCGWIN:
<a name="l00745"></a>00745             {
<a name="l00746"></a>00746                 <span class="keyword">struct </span>video_window *vw = arg;
<a name="l00747"></a>00747 
<a name="l00748"></a>00748                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGWIN\n"</span>);
<a name="l00749"></a>00749 
<a name="l00750"></a>00750                 vw-&gt;x = 0;
<a name="l00751"></a>00751                 vw-&gt;y = 0;
<a name="l00752"></a>00752                 vw-&gt;width = dev-&gt;view.x;
<a name="l00753"></a>00753                 vw-&gt;height = dev-&gt;view.y;
<a name="l00754"></a>00754                 vw-&gt;chromakey = 0;
<a name="l00755"></a>00755             }
<a name="l00756"></a>00756             <span class="keywordflow">break</span>;
<a name="l00757"></a>00757 
<a name="l00758"></a>00758         <span class="keywordflow">case</span> VIDIOCSWIN:
<a name="l00759"></a>00759             {
<a name="l00760"></a>00760                 <span class="keyword">struct </span>video_window *vw = arg;
<a name="l00761"></a>00761 
<a name="l00762"></a>00762                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSWIN\n"</span>);
<a name="l00763"></a>00763 
<a name="l00764"></a>00764                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set x=%d, y=%d\n"</span>, vw-&gt;x, vw-&gt;y);
<a name="l00765"></a>00765                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set width=%d, height=%d\n"</span>, vw-&gt;width, vw-&gt;height);
<a name="l00766"></a>00766                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Flags = %X\n"</span>, vw-&gt;flags);
<a name="l00767"></a>00767 
<a name="l00768"></a>00768                 <span class="comment">// Stop the video stream</span>
<a name="l00769"></a>00769                 <a class="code" href="stk11xx-dev_8c.html#939f02cad30ad386080f8024741237bd" title="This function sets the device to stop the stream.">dev_stk11xx_stop_stream</a>(dev);
<a name="l00770"></a>00770             
<a name="l00771"></a>00771                 <span class="comment">// ISOC and URB cleanup</span>
<a name="l00772"></a>00772                 <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l00773"></a>00773 
<a name="l00774"></a>00774                 <span class="comment">// Switch off the camera</span>
<a name="l00775"></a>00775                 <a class="code" href="stk11xx-dev_8c.html#865eb05993bb42c88ce5c73fb39b210d" title="This function switchs off the camera.">dev_stk11xx_camera_off</a>(dev);
<a name="l00776"></a>00776 
<a name="l00777"></a>00777                 <a class="code" href="stk11xx-dev_8c.html#33117e9ffbc424c68d29dad93f6675c2" title="Wake-up the camera.">dev_stk11xx_camera_asleep</a>(dev);
<a name="l00778"></a>00778 
<a name="l00779"></a>00779                 <span class="comment">// Select the new video mode</span>
<a name="l00780"></a>00780                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(dev, vw-&gt;width, vw-&gt;height)) {
<a name="l00781"></a>00781                     <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Select video mode failed !\n"</span>);
<a name="l00782"></a>00782                     <span class="keywordflow">return</span> -EAGAIN;
<a name="l00783"></a>00783                 }
<a name="l00784"></a>00784 
<a name="l00785"></a>00785                 <span class="comment">// Clear the buffers</span>
<a name="l00786"></a>00786                 <a class="code" href="stk11xx-buf_8c.html#cd7e46aba32bcbb5d429b21878d44845" title="Clear current buffers.">stk11xx_clear_buffers</a>(dev);
<a name="l00787"></a>00787 
<a name="l00788"></a>00788                 <span class="comment">// Initialize the device</span>
<a name="l00789"></a>00789                 <a class="code" href="stk11xx-dev_8c.html#e3ca760fb15d38628de5bfd1e43d6f29" title="This function initializes the device for the stream.">dev_stk11xx_init_camera</a>(dev);
<a name="l00790"></a>00790                 <a class="code" href="stk11xx-dev_8c.html#e978d7adfeabe3e7c31076fddee9a744" title="This function switchs on the camera.">dev_stk11xx_camera_on</a>(dev);
<a name="l00791"></a>00791                 <a class="code" href="stk11xx-dev_8c.html#5c487b95ff9a43ca810016c688052bfa" title="Reconfigure the camera before the stream.">dev_stk11xx_reconf_camera</a>(dev);
<a name="l00792"></a>00792 
<a name="l00793"></a>00793                 <span class="comment">// ISOC and URB init</span>
<a name="l00794"></a>00794                 <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l00795"></a>00795 
<a name="l00796"></a>00796                 <span class="comment">// Re-start the stream</span>
<a name="l00797"></a>00797                 <a class="code" href="stk11xx-dev_8c.html#b21443fb38d3de22db64c6d4435babbc" title="This function sets the device to start the stream.">dev_stk11xx_start_stream</a>(dev);
<a name="l00798"></a>00798 
<a name="l00799"></a>00799                 <span class="comment">// Video settings</span>
<a name="l00800"></a>00800                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l00801"></a>00801             }
<a name="l00802"></a>00802             <span class="keywordflow">break</span>;
<a name="l00803"></a>00803 
<a name="l00804"></a>00804         <span class="keywordflow">case</span> VIDIOCGFBUF:
<a name="l00805"></a>00805             {
<a name="l00806"></a>00806                 <span class="keyword">struct </span>video_buffer *vb = arg;
<a name="l00807"></a>00807 
<a name="l00808"></a>00808                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGFBUF\n"</span>);
<a name="l00809"></a>00809 
<a name="l00810"></a>00810                 memset(vb, 0, <span class="keyword">sizeof</span>(*vb));
<a name="l00811"></a>00811             }
<a name="l00812"></a>00812             <span class="keywordflow">break</span>;
<a name="l00813"></a>00813 
<a name="l00814"></a>00814         <span class="keywordflow">case</span> VIDIOCGMBUF:
<a name="l00815"></a>00815             {
<a name="l00816"></a>00816                 <span class="keywordtype">int</span> i;
<a name="l00817"></a>00817                 <span class="keyword">struct </span>video_mbuf *vm = arg;
<a name="l00818"></a>00818 
<a name="l00819"></a>00819                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGMBUF\n"</span>);
<a name="l00820"></a>00820 
<a name="l00821"></a>00821                 memset(vm, 0, <span class="keyword">sizeof</span>(*vm));
<a name="l00822"></a>00822 
<a name="l00823"></a>00823                 vm-&gt;size = dev-&gt;nbuffers * dev-&gt;len_per_image;
<a name="l00824"></a>00824                 vm-&gt;frames = dev-&gt;nbuffers;
<a name="l00825"></a>00825 
<a name="l00826"></a>00826                 <span class="keywordflow">for</span> (i=0; i&lt;dev-&gt;nbuffers; i++)
<a name="l00827"></a>00827                     vm-&gt;offsets[i] = i * dev-&gt;len_per_image;
<a name="l00828"></a>00828             }
<a name="l00829"></a>00829             <span class="keywordflow">break</span>;
<a name="l00830"></a>00830 
<a name="l00831"></a>00831         <span class="keywordflow">case</span> VIDIOCMCAPTURE:
<a name="l00832"></a>00832             {
<a name="l00833"></a>00833                 <span class="keyword">struct </span>video_mmap *vm = arg;
<a name="l00834"></a>00834 
<a name="l00835"></a>00835                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCMCAPTURE format=%d\n"</span>, vm-&gt;format);
<a name="l00836"></a>00836 
<a name="l00837"></a>00837                 <span class="keywordflow">if</span> (vm-&gt;frame &lt; 0 || vm-&gt;frame &gt;= dev-&gt;nbuffers)
<a name="l00838"></a>00838                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00839"></a>00839 
<a name="l00840"></a>00840                 <span class="keywordflow">if</span> (vm-&gt;format) {
<a name="l00841"></a>00841                     <span class="keywordflow">switch</span> (vm-&gt;format) {
<a name="l00842"></a>00842                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB32:
<a name="l00843"></a>00843                             <span class="keywordflow">break</span>;
<a name="l00844"></a>00844 
<a name="l00845"></a>00845                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB24:
<a name="l00846"></a>00846                             <span class="keywordflow">break</span>;
<a name="l00847"></a>00847 
<a name="l00848"></a>00848                         <span class="keywordflow">case</span> VIDEO_PALETTE_UYVY:
<a name="l00849"></a>00849                             <span class="keywordflow">break</span>;
<a name="l00850"></a>00850 
<a name="l00851"></a>00851                         <span class="keywordflow">case</span> VIDEO_PALETTE_YUYV:
<a name="l00852"></a>00852                             <span class="keywordflow">break</span>;
<a name="l00853"></a>00853 
<a name="l00854"></a>00854                         <span class="keywordflow">default</span>:
<a name="l00855"></a>00855                             <span class="keywordflow">return</span> -EINVAL;
<a name="l00856"></a>00856                     }
<a name="l00857"></a>00857                 }
<a name="l00858"></a>00858 
<a name="l00859"></a>00859                 <span class="keywordflow">if</span> ((vm-&gt;width != dev-&gt;view.x) || (vm-&gt;height != dev-&gt;view.y)) 
<a name="l00860"></a>00860                     <span class="keywordflow">return</span> -EAGAIN;
<a name="l00861"></a>00861 
<a name="l00862"></a>00862                 <span class="keywordflow">if</span> (dev-&gt;image_used[vm-&gt;frame])
<a name="l00863"></a>00863                     <span class="keywordflow">return</span> -EBUSY;
<a name="l00864"></a>00864 
<a name="l00865"></a>00865                 dev-&gt;image_used[vm-&gt;frame] = 1;
<a name="l00866"></a>00866 
<a name="l00867"></a>00867                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCMCAPTURE done\n"</span>);
<a name="l00868"></a>00868             }
<a name="l00869"></a>00869             <span class="keywordflow">break</span>;
<a name="l00870"></a>00870 
<a name="l00871"></a>00871         <span class="keywordflow">case</span> VIDIOCSYNC:
<a name="l00872"></a>00872             {
<a name="l00873"></a>00873                 <span class="keywordtype">int</span> ret;
<a name="l00874"></a>00874                 <span class="keywordtype">int</span> *mbuf = arg;
<a name="l00875"></a>00875 
<a name="l00876"></a>00876                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSYNC\n"</span>);
<a name="l00877"></a>00877 
<a name="l00878"></a>00878                 <span class="keywordflow">if</span> (*mbuf &lt; 0 || *mbuf &gt;= dev-&gt;nbuffers)
<a name="l00879"></a>00879                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00880"></a>00880 
<a name="l00881"></a>00881                 <span class="keywordflow">if</span> (dev-&gt;image_used[*mbuf] == 0)
<a name="l00882"></a>00882                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00883"></a>00883 
<a name="l00884"></a>00884                 add_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00885"></a>00885 
<a name="l00886"></a>00886                 <span class="keywordflow">while</span> (dev-&gt;full_frames == NULL) {
<a name="l00887"></a>00887                     <span class="keywordflow">if</span> (dev-&gt;error_status) {
<a name="l00888"></a>00888                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00889"></a>00889                         set_current_state(TASK_RUNNING);
<a name="l00890"></a>00890                         <span class="keywordflow">return</span> -dev-&gt;error_status;
<a name="l00891"></a>00891                     }
<a name="l00892"></a>00892 
<a name="l00893"></a>00893                     <span class="keywordflow">if</span> (signal_pending(current)) {
<a name="l00894"></a>00894                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00895"></a>00895                         set_current_state(TASK_RUNNING);
<a name="l00896"></a>00896                         <span class="keywordflow">return</span> -ERESTARTSYS;
<a name="l00897"></a>00897                     }
<a name="l00898"></a>00898 
<a name="l00899"></a>00899                     schedule();
<a name="l00900"></a>00900                     set_current_state(TASK_INTERRUPTIBLE);
<a name="l00901"></a>00901                 }
<a name="l00902"></a>00902 
<a name="l00903"></a>00903                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00904"></a>00904                 set_current_state(TASK_RUNNING);
<a name="l00905"></a>00905 
<a name="l00906"></a>00906                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSYNC: frame ready\n"</span>);
<a name="l00907"></a>00907 
<a name="l00908"></a>00908                 dev-&gt;fill_image = *mbuf;
<a name="l00909"></a>00909 
<a name="l00910"></a>00910                 ret = <a class="code" href="stk11xx-buf_8c.html#21bfe8791f1f53fcd64a185dc6fdc686" title="Handler frame.">stk11xx_handle_frame</a>(dev);
<a name="l00911"></a>00911 
<a name="l00912"></a>00912                 <span class="keywordflow">if</span> (ret != 0)
<a name="l00913"></a>00913                     <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"VIDIOCSYNC error !\n"</span>);
<a name="l00914"></a>00914 
<a name="l00915"></a>00915                 dev-&gt;image_used[*mbuf] = 0;
<a name="l00916"></a>00916             }
<a name="l00917"></a>00917             <span class="keywordflow">break</span>;
<a name="l00918"></a>00918 
<a name="l00919"></a>00919         <span class="keywordflow">case</span> VIDIOCGAUDIO:
<a name="l00920"></a>00920             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGAUDIO\n"</span>);
<a name="l00921"></a>00921             <span class="keywordflow">return</span> -EINVAL;
<a name="l00922"></a>00922             <span class="keywordflow">break</span>;
<a name="l00923"></a>00923 
<a name="l00924"></a>00924         <span class="keywordflow">case</span> VIDIOCSAUDIO:
<a name="l00925"></a>00925             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSAUDIO\n"</span>);
<a name="l00926"></a>00926             <span class="keywordflow">return</span> -EINVAL;
<a name="l00927"></a>00927             <span class="keywordflow">break</span>;
<a name="l00928"></a>00928 
<a name="l00929"></a>00929         <span class="keywordflow">case</span> VIDIOCGUNIT:
<a name="l00930"></a>00930             {
<a name="l00931"></a>00931                 <span class="keyword">struct </span>video_unit *vu = arg;
<a name="l00932"></a>00932 
<a name="l00933"></a>00933                 vu-&gt;video = dev-&gt;vdev-&gt;minor &amp; 0x3f;
<a name="l00934"></a>00934                 vu-&gt;audio = -1;
<a name="l00935"></a>00935                 vu-&gt;vbi = -1;
<a name="l00936"></a>00936                 vu-&gt;radio = -1;
<a name="l00937"></a>00937                 vu-&gt;teletext = -1;
<a name="l00938"></a>00938             }
<a name="l00939"></a>00939             <span class="keywordflow">break</span>;
<a name="l00940"></a>00940 
<a name="l00941"></a>00941 
<a name="l00942"></a>00942         <span class="comment">// Video 4 Linux v2</span>
<a name="l00943"></a>00943 
<a name="l00944"></a>00944         <span class="keywordflow">case</span> VIDIOC_QUERYCAP:
<a name="l00945"></a>00945             {
<a name="l00946"></a>00946                 <span class="keyword">struct </span>v4l2_capability *cap = arg;
<a name="l00947"></a>00947 
<a name="l00948"></a>00948                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QUERYCAP\n"</span>);
<a name="l00949"></a>00949 
<a name="l00950"></a>00950                 memset(cap, 0, <span class="keyword">sizeof</span>(*cap));
<a name="l00951"></a>00951                 strlcpy(cap-&gt;driver, <span class="stringliteral">"stk11xx"</span>, <span class="keyword">sizeof</span>(cap-&gt;driver));
<a name="l00952"></a>00952 
<a name="l00953"></a>00953                 cap-&gt;capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
<a name="l00954"></a>00954                 cap-&gt;version = (__u32) <a class="code" href="stk11xx_8h.html#deb97232a92a9bf74cc96d45637116ae">DRIVER_VERSION_NUM</a>, strlcpy(cap-&gt;card, dev-&gt;vdev-&gt;name, <span class="keyword">sizeof</span>(cap-&gt;card));
<a name="l00955"></a>00955             
<a name="l00956"></a>00956                 <span class="keywordflow">if</span> (usb_make_path(dev-&gt;udev, cap-&gt;bus_info, <span class="keyword">sizeof</span>(cap-&gt;bus_info)) &lt; 0)
<a name="l00957"></a>00957                     strlcpy(cap-&gt;bus_info, dev-&gt;vdev-&gt;name, <span class="keyword">sizeof</span>(cap-&gt;bus_info));
<a name="l00958"></a>00958             }
<a name="l00959"></a>00959             <span class="keywordflow">break</span>;
<a name="l00960"></a>00960 
<a name="l00961"></a>00961         <span class="keywordflow">case</span> VIDIOC_ENUMINPUT:
<a name="l00962"></a>00962             {
<a name="l00963"></a>00963                 <span class="keyword">struct </span>v4l2_input *i = arg;
<a name="l00964"></a>00964 
<a name="l00965"></a>00965                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_ENUMINPUT %d\n"</span>, i-&gt;index);
<a name="l00966"></a>00966 
<a name="l00967"></a>00967                 <span class="keywordflow">if</span> (i-&gt;index)
<a name="l00968"></a>00968                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00969"></a>00969 
<a name="l00970"></a>00970                 strlcpy(i-&gt;name, <span class="stringliteral">"USB"</span>, <span class="keyword">sizeof</span>(i-&gt;name));
<a name="l00971"></a>00971                 i-&gt;type = V4L2_INPUT_TYPE_CAMERA;
<a name="l00972"></a>00972             }
<a name="l00973"></a>00973             <span class="keywordflow">break</span>;
<a name="l00974"></a>00974 
<a name="l00975"></a>00975         <span class="keywordflow">case</span> VIDIOC_G_INPUT:
<a name="l00976"></a>00976             {
<a name="l00977"></a>00977                 <span class="keyword">struct </span>v4l2_input *i = arg;
<a name="l00978"></a>00978 
<a name="l00979"></a>00979                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET INPUT %d\n"</span>, i-&gt;index);
<a name="l00980"></a>00980 
<a name="l00981"></a>00981                 <span class="keywordflow">if</span> (i-&gt;index)
<a name="l00982"></a>00982                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00983"></a>00983             }
<a name="l00984"></a>00984             <span class="keywordflow">break</span>;
<a name="l00985"></a>00985 
<a name="l00986"></a>00986         <span class="keywordflow">case</span> VIDIOC_S_INPUT:
<a name="l00987"></a>00987             {
<a name="l00988"></a>00988                 <span class="keyword">struct </span>v4l2_input *i = arg;
<a name="l00989"></a>00989 
<a name="l00990"></a>00990                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET INPUT %d\n"</span>, i-&gt;index);
<a name="l00991"></a>00991 
<a name="l00992"></a>00992                 <span class="keywordflow">if</span> (i-&gt;index != 0)
<a name="l00993"></a>00993                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00994"></a>00994             }
<a name="l00995"></a>00995             <span class="keywordflow">break</span>;
<a name="l00996"></a>00996 
<a name="l00997"></a>00997         <span class="keywordflow">case</span> VIDIOC_QUERYCTRL:
<a name="l00998"></a>00998             {
<a name="l00999"></a>00999                 <span class="keywordtype">int</span> i;
<a name="l01000"></a>01000                 <span class="keywordtype">int</span> nbr;
<a name="l01001"></a>01001                 <span class="keyword">struct </span>v4l2_queryctrl *c = arg;
<a name="l01002"></a>01002 
<a name="l01003"></a>01003                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QUERYCTRL id = %d\n"</span>, c-&gt;id);
<a name="l01004"></a>01004 
<a name="l01005"></a>01005                 nbr = <span class="keyword">sizeof</span>(<a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>)/<span class="keyword">sizeof</span>(<span class="keyword">struct</span> v4l2_queryctrl);
<a name="l01006"></a>01006 
<a name="l01007"></a>01007                 <span class="keywordflow">for</span> (i=0; i&lt;nbr; i++) {
<a name="l01008"></a>01008                     <span class="keywordflow">if</span> (<a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>[i].<span class="keywordtype">id</span> == c-&gt;id) {
<a name="l01009"></a>01009                         <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QUERYCTRL found\n"</span>);
<a name="l01010"></a>01010                         memcpy(c, &amp;<a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>[i], <span class="keyword">sizeof</span>(<span class="keyword">struct</span> v4l2_queryctrl));
<a name="l01011"></a>01011                         <span class="keywordflow">break</span>;
<a name="l01012"></a>01012                     }
<a name="l01013"></a>01013                 }
<a name="l01014"></a>01014 
<a name="l01015"></a>01015                 <span class="keywordflow">if</span> (i &gt;= nbr)
<a name="l01016"></a>01016                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01017"></a>01017             }
<a name="l01018"></a>01018             <span class="keywordflow">break</span>;
<a name="l01019"></a>01019 
<a name="l01020"></a>01020         <span class="keywordflow">case</span> VIDIOC_G_CTRL:
<a name="l01021"></a>01021             {
<a name="l01022"></a>01022                 <span class="keyword">struct </span>v4l2_control *c = arg;
<a name="l01023"></a>01023 
<a name="l01024"></a>01024                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET CTRL id=%d\n"</span>, c-&gt;id);
<a name="l01025"></a>01025 
<a name="l01026"></a>01026                 <span class="keywordflow">switch</span> (c-&gt;id) {
<a name="l01027"></a>01027                     <span class="keywordflow">case</span> V4L2_CID_BRIGHTNESS:
<a name="l01028"></a>01028                         c-&gt;value = dev-&gt;vsettings.brightness;
<a name="l01029"></a>01029                         <span class="keywordflow">break</span>;
<a name="l01030"></a>01030 
<a name="l01031"></a>01031                     <span class="keywordflow">case</span> V4L2_CID_WHITENESS:
<a name="l01032"></a>01032                         c-&gt;value = dev-&gt;vsettings.whiteness;
<a name="l01033"></a>01033                         <span class="keywordflow">break</span>;
<a name="l01034"></a>01034 
<a name="l01035"></a>01035                     <span class="keywordflow">case</span> V4L2_CID_SATURATION:
<a name="l01036"></a>01036                         c-&gt;value = dev-&gt;vsettings.colour;
<a name="l01037"></a>01037                         <span class="keywordflow">break</span>;
<a name="l01038"></a>01038 
<a name="l01039"></a>01039                     <span class="keywordflow">case</span> V4L2_CID_CONTRAST:
<a name="l01040"></a>01040                         c-&gt;value = dev-&gt;vsettings.contrast;
<a name="l01041"></a>01041                         <span class="keywordflow">break</span>;
<a name="l01042"></a>01042 
<a name="l01043"></a>01043                     <span class="keywordflow">default</span>:
<a name="l01044"></a>01044                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01045"></a>01045                 }
<a name="l01046"></a>01046             }
<a name="l01047"></a>01047             <span class="keywordflow">break</span>;
<a name="l01048"></a>01048 
<a name="l01049"></a>01049         <span class="keywordflow">case</span> VIDIOC_S_CTRL:
<a name="l01050"></a>01050             {
<a name="l01051"></a>01051                 <span class="keyword">struct </span>v4l2_control *c = arg;
<a name="l01052"></a>01052 
<a name="l01053"></a>01053                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET CTRL id=%d value=%d\n"</span>, c-&gt;id, c-&gt;value);
<a name="l01054"></a>01054 
<a name="l01055"></a>01055                 <span class="keywordflow">switch</span> (c-&gt;id) {
<a name="l01056"></a>01056                     <span class="keywordflow">case</span> V4L2_CID_BRIGHTNESS:
<a name="l01057"></a>01057                         dev-&gt;vsettings.brightness = (0xff00 &amp; c-&gt;value);
<a name="l01058"></a>01058                         <span class="keywordflow">break</span>;
<a name="l01059"></a>01059 
<a name="l01060"></a>01060                     <span class="keywordflow">case</span> V4L2_CID_WHITENESS:
<a name="l01061"></a>01061                         dev-&gt;vsettings.whiteness = (0xff00 &amp; c-&gt;value);
<a name="l01062"></a>01062                         <span class="keywordflow">break</span>;
<a name="l01063"></a>01063 
<a name="l01064"></a>01064                     <span class="keywordflow">case</span> V4L2_CID_SATURATION:
<a name="l01065"></a>01065                         dev-&gt;vsettings.colour = (0xff00 &amp; c-&gt;value);
<a name="l01066"></a>01066                         <span class="keywordflow">break</span>;
<a name="l01067"></a>01067 
<a name="l01068"></a>01068                     <span class="keywordflow">case</span> V4L2_CID_CONTRAST:
<a name="l01069"></a>01069                         dev-&gt;vsettings.contrast = (0xff00 &amp; c-&gt;value);
<a name="l01070"></a>01070                         <span class="keywordflow">break</span>;
<a name="l01071"></a>01071 
<a name="l01072"></a>01072                     <span class="keywordflow">default</span>:
<a name="l01073"></a>01073                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01074"></a>01074                 }
<a name="l01075"></a>01075 
<a name="l01076"></a>01076                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l01077"></a>01077             }
<a name="l01078"></a>01078             <span class="keywordflow">break</span>;
<a name="l01079"></a>01079 
<a name="l01080"></a>01080         <span class="keywordflow">case</span> VIDIOC_ENUM_FMT:
<a name="l01081"></a>01081             {
<a name="l01082"></a>01082                 <span class="keywordtype">int</span> index;
<a name="l01083"></a>01083                 <span class="keyword">struct </span>v4l2_fmtdesc *fmtd = arg;
<a name="l01084"></a>01084 
<a name="l01085"></a>01085                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_ENUM_FMT %d\n"</span>, fmtd-&gt;index);
<a name="l01086"></a>01086 
<a name="l01087"></a>01087                 <span class="keywordflow">if</span> (fmtd-&gt;index != 0)
<a name="l01088"></a>01088                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01089"></a>01089 
<a name="l01090"></a>01090                 index = fmtd-&gt;index;
<a name="l01091"></a>01091 
<a name="l01092"></a>01092                 memset(fmtd, 0, <span class="keyword">sizeof</span>(*fmtd));
<a name="l01093"></a>01093 
<a name="l01094"></a>01094                 fmtd-&gt;type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
<a name="l01095"></a>01095                 fmtd-&gt;index = index;
<a name="l01096"></a>01096 
<a name="l01097"></a>01097                 <span class="keywordflow">switch</span> (index) {
<a name="l01098"></a>01098                     <span class="keywordflow">case</span> 0:
<a name="l01099"></a>01099                         fmtd-&gt;flags = 0;
<a name="l01100"></a>01100                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_RGB24;
<a name="l01101"></a>01101 
<a name="l01102"></a>01102                         strcpy(fmtd-&gt;description, <span class="stringliteral">"rgb24"</span>);
<a name="l01103"></a>01103                         <span class="keywordflow">break</span>;
<a name="l01104"></a>01104 
<a name="l01105"></a>01105                     <span class="keywordflow">case</span> 1:
<a name="l01106"></a>01106                         fmtd-&gt;flags = 0;
<a name="l01107"></a>01107                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_RGB32;
<a name="l01108"></a>01108 
<a name="l01109"></a>01109                         strcpy(fmtd-&gt;description, <span class="stringliteral">"rgb32"</span>);
<a name="l01110"></a>01110                         <span class="keywordflow">break</span>;
<a name="l01111"></a>01111 
<a name="l01112"></a>01112                     <span class="keywordflow">case</span> 2:
<a name="l01113"></a>01113                         fmtd-&gt;flags = 0;
<a name="l01114"></a>01114                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_BGR24;
<a name="l01115"></a>01115 
<a name="l01116"></a>01116                         strcpy(fmtd-&gt;description, <span class="stringliteral">"bgr24"</span>);
<a name="l01117"></a>01117                         <span class="keywordflow">break</span>;
<a name="l01118"></a>01118 
<a name="l01119"></a>01119                     <span class="keywordflow">case</span> 3:
<a name="l01120"></a>01120                         fmtd-&gt;flags = 0;
<a name="l01121"></a>01121                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_BGR32;
<a name="l01122"></a>01122 
<a name="l01123"></a>01123                         strcpy(fmtd-&gt;description, <span class="stringliteral">"bgr32"</span>);
<a name="l01124"></a>01124                         <span class="keywordflow">break</span>;
<a name="l01125"></a>01125 
<a name="l01126"></a>01126                     <span class="keywordflow">case</span> 4:
<a name="l01127"></a>01127                         fmtd-&gt;flags = 0;
<a name="l01128"></a>01128                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_UYVY;
<a name="l01129"></a>01129 
<a name="l01130"></a>01130                         strcpy(fmtd-&gt;description, <span class="stringliteral">"uyvy"</span>);
<a name="l01131"></a>01131                         <span class="keywordflow">break</span>;
<a name="l01132"></a>01132 
<a name="l01133"></a>01133                     <span class="keywordflow">case</span> 5:
<a name="l01134"></a>01134                         fmtd-&gt;flags = 0;
<a name="l01135"></a>01135                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_YUYV;
<a name="l01136"></a>01136 
<a name="l01137"></a>01137                         strcpy(fmtd-&gt;description, <span class="stringliteral">"yuyv"</span>);
<a name="l01138"></a>01138                         <span class="keywordflow">break</span>;
<a name="l01139"></a>01139 
<a name="l01140"></a>01140                     <span class="keywordflow">default</span>:
<a name="l01141"></a>01141                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01142"></a>01142                 }
<a name="l01143"></a>01143             }
<a name="l01144"></a>01144             <span class="keywordflow">break</span>;
<a name="l01145"></a>01145 
<a name="l01146"></a>01146         <span class="keywordflow">case</span> VIDIOC_G_FMT:
<a name="l01147"></a>01147             {
<a name="l01148"></a>01148                 <span class="keyword">struct </span>v4l2_format *fmtd = arg;
<a name="l01149"></a>01149                 <span class="keyword">struct </span>v4l2_pix_format pix_format;
<a name="l01150"></a>01150 
<a name="l01151"></a>01151                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET FMT %d\n"</span>, fmtd-&gt;type);
<a name="l01152"></a>01152 
<a name="l01153"></a>01153                 <span class="keywordflow">if</span> (fmtd-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01154"></a>01154                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01155"></a>01155 
<a name="l01156"></a>01156                 pix_format.width = dev-&gt;view.x;
<a name="l01157"></a>01157                 pix_format.height = dev-&gt;view.y;
<a name="l01158"></a>01158                 pix_format.field = V4L2_FIELD_NONE;
<a name="l01159"></a>01159                 pix_format.colorspace = V4L2_COLORSPACE_SRGB;
<a name="l01160"></a>01160                 pix_format.priv = 0;
<a name="l01161"></a>01161 
<a name="l01162"></a>01162                 <span class="keywordflow">switch</span> (dev-&gt;vsettings.palette) {
<a name="l01163"></a>01163                     <span class="keywordflow">case</span> STK11XX_PALETTE_RGB24:
<a name="l01164"></a>01164                         pix_format.pixelformat = V4L2_PIX_FMT_RGB24;
<a name="l01165"></a>01165                         pix_format.sizeimage = pix_format.width * pix_format.height * 3;
<a name="l01166"></a>01166                         pix_format.bytesperline = 3 * pix_format.width;
<a name="l01167"></a>01167                         <span class="keywordflow">break</span>;
<a name="l01168"></a>01168 
<a name="l01169"></a>01169                     <span class="keywordflow">case</span> STK11XX_PALETTE_RGB32:
<a name="l01170"></a>01170                         pix_format.pixelformat = V4L2_PIX_FMT_RGB32;
<a name="l01171"></a>01171                         pix_format.sizeimage = pix_format.width * pix_format.height * 4;
<a name="l01172"></a>01172                         pix_format.bytesperline = 4 * pix_format.width;
<a name="l01173"></a>01173                         <span class="keywordflow">break</span>;
<a name="l01174"></a>01174 
<a name="l01175"></a>01175                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR24:
<a name="l01176"></a>01176                         pix_format.pixelformat = V4L2_PIX_FMT_BGR24;
<a name="l01177"></a>01177                         pix_format.sizeimage = pix_format.width * pix_format.height * 3;
<a name="l01178"></a>01178                         pix_format.bytesperline = 3 * pix_format.width;
<a name="l01179"></a>01179                         <span class="keywordflow">break</span>;
<a name="l01180"></a>01180 
<a name="l01181"></a>01181                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR32:
<a name="l01182"></a>01182                         pix_format.pixelformat = V4L2_PIX_FMT_BGR32;
<a name="l01183"></a>01183                         pix_format.sizeimage = pix_format.width * pix_format.height * 4;
<a name="l01184"></a>01184                         pix_format.bytesperline = 4 * pix_format.width;
<a name="l01185"></a>01185                         <span class="keywordflow">break</span>;
<a name="l01186"></a>01186 
<a name="l01187"></a>01187                     <span class="keywordflow">case</span> STK11XX_PALETTE_UYVY:
<a name="l01188"></a>01188                         pix_format.pixelformat = V4L2_PIX_FMT_UYVY;
<a name="l01189"></a>01189                         pix_format.sizeimage = pix_format.width * pix_format.height * 2;
<a name="l01190"></a>01190                         pix_format.bytesperline = 2 * pix_format.width;
<a name="l01191"></a>01191                         <span class="keywordflow">break</span>;
<a name="l01192"></a>01192 
<a name="l01193"></a>01193                     <span class="keywordflow">case</span> STK11XX_PALETTE_YUYV:
<a name="l01194"></a>01194                         pix_format.pixelformat = V4L2_PIX_FMT_YUYV;
<a name="l01195"></a>01195                         pix_format.sizeimage = pix_format.width * pix_format.height * 2;
<a name="l01196"></a>01196                         pix_format.bytesperline = 2 * pix_format.width;
<a name="l01197"></a>01197                         <span class="keywordflow">break</span>;
<a name="l01198"></a>01198                 }
<a name="l01199"></a>01199 
<a name="l01200"></a>01200                 memcpy(&amp;(fmtd-&gt;fmt.pix), &amp;pix_format, <span class="keyword">sizeof</span>(pix_format));
<a name="l01201"></a>01201             }
<a name="l01202"></a>01202             <span class="keywordflow">break</span>;
<a name="l01203"></a>01203 
<a name="l01204"></a>01204         <span class="keywordflow">case</span> VIDIOC_TRY_FMT:
<a name="l01205"></a>01205             {
<a name="l01206"></a>01206                 <span class="keyword">struct </span>v4l2_format *fmtd = arg;
<a name="l01207"></a>01207 
<a name="l01208"></a>01208                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"TRY FMT %d\n"</span>, fmtd-&gt;type);
<a name="l01209"></a>01209 
<a name="l01210"></a>01210                 <span class="keywordflow">if</span> (fmtd-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01211"></a>01211                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01212"></a>01212 
<a name="l01213"></a>01213                 <span class="keywordflow">switch</span> (fmtd-&gt;fmt.pix.pixelformat) {
<a name="l01214"></a>01214                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB24:
<a name="l01215"></a>01215                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR24:
<a name="l01216"></a>01216                         dev-&gt;vsettings.depth = 24;
<a name="l01217"></a>01217                         <span class="keywordflow">break</span>;
<a name="l01218"></a>01218 
<a name="l01219"></a>01219                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB32:
<a name="l01220"></a>01220                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR32:
<a name="l01221"></a>01221                         dev-&gt;vsettings.depth = 32;
<a name="l01222"></a>01222                         <span class="keywordflow">break</span>;
<a name="l01223"></a>01223 
<a name="l01224"></a>01224                     <span class="keywordflow">case</span> V4L2_PIX_FMT_UYVY:
<a name="l01225"></a>01225                     <span class="keywordflow">case</span> V4L2_PIX_FMT_YUYV:
<a name="l01226"></a>01226                         dev-&gt;vsettings.depth = 16;
<a name="l01227"></a>01227                         <span class="keywordflow">break</span>;
<a name="l01228"></a>01228 
<a name="l01229"></a>01229                     <span class="keywordflow">default</span>:
<a name="l01230"></a>01230                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01231"></a>01231                 }
<a name="l01232"></a>01232 
<a name="l01233"></a>01233                 <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l01234"></a>01234                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l01235"></a>01235                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x)
<a name="l01236"></a>01236                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x;
<a name="l01237"></a>01237                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x)
<a name="l01238"></a>01238                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x;
<a name="l01239"></a>01239     
<a name="l01240"></a>01240                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y)
<a name="l01241"></a>01241                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y;
<a name="l01242"></a>01242                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y)
<a name="l01243"></a>01243                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y;
<a name="l01244"></a>01244                         <span class="keywordflow">break</span>;
<a name="l01245"></a>01245 
<a name="l01246"></a>01246                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l01247"></a>01247                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].x)
<a name="l01248"></a>01248                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].x;
<a name="l01249"></a>01249                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x)
<a name="l01250"></a>01250                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x;
<a name="l01251"></a>01251     
<a name="l01252"></a>01252                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].y)
<a name="l01253"></a>01253                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].y;
<a name="l01254"></a>01254                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y)
<a name="l01255"></a>01255                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y;
<a name="l01256"></a>01256                         <span class="keywordflow">break</span>;
<a name="l01257"></a>01257                 }
<a name="l01258"></a>01258 
<a name="l01259"></a>01259             }
<a name="l01260"></a>01260             <span class="keywordflow">break</span>;
<a name="l01261"></a>01261 
<a name="l01262"></a>01262         <span class="keywordflow">case</span> VIDIOC_S_FMT:
<a name="l01263"></a>01263             {
<a name="l01264"></a>01264                 <span class="keyword">struct </span>v4l2_format *fmtd = arg;
<a name="l01265"></a>01265 
<a name="l01266"></a>01266                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET FMT %d : %d\n"</span>, fmtd-&gt;type, fmtd-&gt;fmt.pix.pixelformat);
<a name="l01267"></a>01267 
<a name="l01268"></a>01268                 <span class="keywordflow">if</span> (fmtd-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01269"></a>01269                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01270"></a>01270 
<a name="l01271"></a>01271                 <span class="keywordflow">switch</span> (fmtd-&gt;fmt.pix.pixelformat) {
<a name="l01272"></a>01272                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB24:
<a name="l01273"></a>01273                         dev-&gt;vsettings.depth = 24;
<a name="l01274"></a>01274                         dev-&gt;vsettings.palette = STK11XX_PALETTE_RGB24;
<a name="l01275"></a>01275                         <span class="keywordflow">break</span>;
<a name="l01276"></a>01276 
<a name="l01277"></a>01277                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB32:
<a name="l01278"></a>01278                         dev-&gt;vsettings.depth = 32;
<a name="l01279"></a>01279                         dev-&gt;vsettings.palette = STK11XX_PALETTE_RGB32;
<a name="l01280"></a>01280                         <span class="keywordflow">break</span>;
<a name="l01281"></a>01281 
<a name="l01282"></a>01282                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR24:
<a name="l01283"></a>01283                         dev-&gt;vsettings.depth = 24;
<a name="l01284"></a>01284                         dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR24;
<a name="l01285"></a>01285                         <span class="keywordflow">break</span>;
<a name="l01286"></a>01286 
<a name="l01287"></a>01287                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR32:
<a name="l01288"></a>01288                         dev-&gt;vsettings.depth = 32;
<a name="l01289"></a>01289                         dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR32;
<a name="l01290"></a>01290                         <span class="keywordflow">break</span>;
<a name="l01291"></a>01291 
<a name="l01292"></a>01292                     <span class="keywordflow">case</span> V4L2_PIX_FMT_UYVY:
<a name="l01293"></a>01293                         dev-&gt;vsettings.depth = 16;
<a name="l01294"></a>01294                         dev-&gt;vsettings.palette = STK11XX_PALETTE_UYVY;
<a name="l01295"></a>01295                         <span class="keywordflow">break</span>;
<a name="l01296"></a>01296 
<a name="l01297"></a>01297                     <span class="keywordflow">case</span> V4L2_PIX_FMT_YUYV:
<a name="l01298"></a>01298                         dev-&gt;vsettings.depth = 16;
<a name="l01299"></a>01299                         dev-&gt;vsettings.palette = STK11XX_PALETTE_YUYV;
<a name="l01300"></a>01300                         <span class="keywordflow">break</span>;
<a name="l01301"></a>01301 
<a name="l01302"></a>01302                     <span class="keywordflow">default</span>:
<a name="l01303"></a>01303                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01304"></a>01304                 }
<a name="l01305"></a>01305 
<a name="l01306"></a>01306                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set width=%d, height=%d\n"</span>, fmtd-&gt;fmt.pix.width, fmtd-&gt;fmt.pix.height);
<a name="l01307"></a>01307 
<a name="l01308"></a>01308                 <span class="comment">// Stop the video stream</span>
<a name="l01309"></a>01309                 <a class="code" href="stk11xx-dev_8c.html#939f02cad30ad386080f8024741237bd" title="This function sets the device to stop the stream.">dev_stk11xx_stop_stream</a>(dev);
<a name="l01310"></a>01310             
<a name="l01311"></a>01311                 <span class="comment">// ISOC and URB cleanup</span>
<a name="l01312"></a>01312                 <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l01313"></a>01313 
<a name="l01314"></a>01314                 <span class="comment">// Switch off the camera</span>
<a name="l01315"></a>01315                 <a class="code" href="stk11xx-dev_8c.html#865eb05993bb42c88ce5c73fb39b210d" title="This function switchs off the camera.">dev_stk11xx_camera_off</a>(dev);
<a name="l01316"></a>01316 
<a name="l01317"></a>01317                 <a class="code" href="stk11xx-dev_8c.html#33117e9ffbc424c68d29dad93f6675c2" title="Wake-up the camera.">dev_stk11xx_camera_asleep</a>(dev);
<a name="l01318"></a>01318 
<a name="l01319"></a>01319                 <span class="comment">// Select the new video mode</span>
<a name="l01320"></a>01320                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(dev, fmtd-&gt;fmt.pix.width, fmtd-&gt;fmt.pix.height)) {
<a name="l01321"></a>01321                     <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Select video mode failed !\n"</span>);
<a name="l01322"></a>01322                     <span class="keywordflow">return</span> -EAGAIN;
<a name="l01323"></a>01323                 }
<a name="l01324"></a>01324 
<a name="l01325"></a>01325                 <span class="comment">// Clear the buffers</span>
<a name="l01326"></a>01326                 <a class="code" href="stk11xx-buf_8c.html#cd7e46aba32bcbb5d429b21878d44845" title="Clear current buffers.">stk11xx_clear_buffers</a>(dev);
<a name="l01327"></a>01327 
<a name="l01328"></a>01328                 <span class="comment">// Initialize the device</span>
<a name="l01329"></a>01329                 <a class="code" href="stk11xx-dev_8c.html#e3ca760fb15d38628de5bfd1e43d6f29" title="This function initializes the device for the stream.">dev_stk11xx_init_camera</a>(dev);
<a name="l01330"></a>01330                 <a class="code" href="stk11xx-dev_8c.html#e978d7adfeabe3e7c31076fddee9a744" title="This function switchs on the camera.">dev_stk11xx_camera_on</a>(dev);
<a name="l01331"></a>01331                 <a class="code" href="stk11xx-dev_8c.html#5c487b95ff9a43ca810016c688052bfa" title="Reconfigure the camera before the stream.">dev_stk11xx_reconf_camera</a>(dev);
<a name="l01332"></a>01332 
<a name="l01333"></a>01333                 <span class="comment">// ISOC and URB init</span>
<a name="l01334"></a>01334                 <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l01335"></a>01335 
<a name="l01336"></a>01336                 <span class="comment">// Re-start the stream</span>
<a name="l01337"></a>01337                 <a class="code" href="stk11xx-dev_8c.html#b21443fb38d3de22db64c6d4435babbc" title="This function sets the device to start the stream.">dev_stk11xx_start_stream</a>(dev);
<a name="l01338"></a>01338 
<a name="l01339"></a>01339                 <span class="comment">// Video settings</span>
<a name="l01340"></a>01340                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l01341"></a>01341             }
<a name="l01342"></a>01342             <span class="keywordflow">break</span>;
<a name="l01343"></a>01343 
<a name="l01344"></a>01344         <span class="keywordflow">case</span> VIDIOC_QUERYSTD:
<a name="l01345"></a>01345             {
<a name="l01346"></a>01346                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"QUERY STD\n"</span>);
<a name="l01347"></a>01347                 <span class="keywordflow">return</span> -EINVAL;
<a name="l01348"></a>01348             }
<a name="l01349"></a>01349             <span class="keywordflow">break</span>;
<a name="l01350"></a>01350 
<a name="l01351"></a>01351         <span class="keywordflow">case</span> VIDIOC_G_STD:
<a name="l01352"></a>01352             {
<a name="l01353"></a>01353                 v4l2_std_id *std = arg;
<a name="l01354"></a>01354 
<a name="l01355"></a>01355                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET STD\n"</span>);
<a name="l01356"></a>01356         
<a name="l01357"></a>01357                 *std = V4L2_STD_UNKNOWN;
<a name="l01358"></a>01358             }
<a name="l01359"></a>01359             <span class="keywordflow">break</span>;
<a name="l01360"></a>01360 
<a name="l01361"></a>01361         <span class="keywordflow">case</span> VIDIOC_S_STD:
<a name="l01362"></a>01362             {
<a name="l01363"></a>01363                 v4l2_std_id *std = arg;
<a name="l01364"></a>01364 
<a name="l01365"></a>01365                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET STD\n"</span>);
<a name="l01366"></a>01366                 
<a name="l01367"></a>01367                 <span class="keywordflow">if</span> (*std != V4L2_STD_UNKNOWN)
<a name="l01368"></a>01368                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01369"></a>01369             }
<a name="l01370"></a>01370             <span class="keywordflow">break</span>;
<a name="l01371"></a>01371 
<a name="l01372"></a>01372         <span class="keywordflow">case</span> VIDIOC_ENUMSTD:
<a name="l01373"></a>01373             {
<a name="l01374"></a>01374                 <span class="keyword">struct </span>v4l2_standard *std = arg;
<a name="l01375"></a>01375 
<a name="l01376"></a>01376                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_ENUMSTD\n"</span>);
<a name="l01377"></a>01377 
<a name="l01378"></a>01378                 <span class="keywordflow">if</span> (std-&gt;index != 0)
<a name="l01379"></a>01379                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01380"></a>01380 
<a name="l01381"></a>01381                 std-&gt;id = V4L2_STD_UNKNOWN;
<a name="l01382"></a>01382                 strncpy(std-&gt;name, <span class="stringliteral">"webcam"</span>, <span class="keyword">sizeof</span>(std-&gt;name));
<a name="l01383"></a>01383 
<a name="l01384"></a>01384                 <span class="keywordflow">break</span>;
<a name="l01385"></a>01385             }
<a name="l01386"></a>01386 
<a name="l01387"></a>01387         <span class="keywordflow">case</span> VIDIOC_REQBUFS:
<a name="l01388"></a>01388             {
<a name="l01389"></a>01389                 <span class="keywordtype">int</span> nbuffers;
<a name="l01390"></a>01390                 <span class="keyword">struct </span>v4l2_requestbuffers *rb = arg;
<a name="l01391"></a>01391 
<a name="l01392"></a>01392                 <span class="keywordflow">if</span> (rb-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01393"></a>01393                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01394"></a>01394 
<a name="l01395"></a>01395                 <span class="keywordflow">if</span> (rb-&gt;memory != V4L2_MEMORY_MMAP)
<a name="l01396"></a>01396                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01397"></a>01397 
<a name="l01398"></a>01398                 nbuffers = rb-&gt;count;
<a name="l01399"></a>01399 
<a name="l01400"></a>01400                 <span class="keywordflow">if</span> (nbuffers &lt; 2)
<a name="l01401"></a>01401                     nbuffers = 2;
<a name="l01402"></a>01402                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nbuffers &gt; dev-&gt;nbuffers)
<a name="l01403"></a>01403                     nbuffers = dev-&gt;nbuffers;
<a name="l01404"></a>01404 
<a name="l01405"></a>01405                 rb-&gt;count = dev-&gt;nbuffers;
<a name="l01406"></a>01406             }
<a name="l01407"></a>01407             <span class="keywordflow">break</span>;
<a name="l01408"></a>01408 
<a name="l01409"></a>01409         <span class="keywordflow">case</span> VIDIOC_QUERYBUF:
<a name="l01410"></a>01410             {
<a name="l01411"></a>01411                 <span class="keywordtype">int</span> index;
<a name="l01412"></a>01412                 <span class="keyword">struct </span>v4l2_buffer *buf = arg;
<a name="l01413"></a>01413 
<a name="l01414"></a>01414                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"QUERY BUFFERS %d %d\n"</span>, buf-&gt;index, dev-&gt;nbuffers);
<a name="l01415"></a>01415 
<a name="l01416"></a>01416                 <span class="keywordflow">if</span> (buf-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01417"></a>01417                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01418"></a>01418 
<a name="l01419"></a>01419                 <span class="keywordflow">if</span> (buf-&gt;memory != V4L2_MEMORY_MMAP) 
<a name="l01420"></a>01420                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01421"></a>01421 
<a name="l01422"></a>01422                 index = buf-&gt;index;
<a name="l01423"></a>01423 
<a name="l01424"></a>01424                 <span class="keywordflow">if</span> (index &lt; 0 || index &gt;= dev-&gt;nbuffers)
<a name="l01425"></a>01425                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01426"></a>01426 
<a name="l01427"></a>01427                 memset(buf, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> v4l2_buffer));
<a name="l01428"></a>01428 
<a name="l01429"></a>01429                 buf-&gt;type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
<a name="l01430"></a>01430                 buf-&gt;index = index;
<a name="l01431"></a>01431                 buf-&gt;m.offset = index * dev-&gt;len_per_image;
<a name="l01432"></a>01432                 buf-&gt;bytesused = dev-&gt;image_size;
<a name="l01433"></a>01433                 buf-&gt;field = V4L2_FIELD_NONE;
<a name="l01434"></a>01434                 buf-&gt;memory = V4L2_MEMORY_MMAP;
<a name="l01435"></a>01435                 buf-&gt;length = dev-&gt;len_per_image;
<a name="l01436"></a>01436             }
<a name="l01437"></a>01437             <span class="keywordflow">break</span>;
<a name="l01438"></a>01438 
<a name="l01439"></a>01439         <span class="keywordflow">case</span> VIDIOC_QBUF:
<a name="l01440"></a>01440             {
<a name="l01441"></a>01441                 <span class="keyword">struct </span>v4l2_buffer *buf = arg;
<a name="l01442"></a>01442 
<a name="l01443"></a>01443                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QBUF\n"</span>);
<a name="l01444"></a>01444 
<a name="l01445"></a>01445                 <span class="keywordflow">if</span> (buf-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01446"></a>01446                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01447"></a>01447 
<a name="l01448"></a>01448                 <span class="keywordflow">if</span> (buf-&gt;memory != V4L2_MEMORY_MMAP)
<a name="l01449"></a>01449                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01450"></a>01450 
<a name="l01451"></a>01451                 <span class="keywordflow">if</span> (buf-&gt;index &lt; 0 || buf-&gt;index &gt;= dev-&gt;nbuffers)
<a name="l01452"></a>01452                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01453"></a>01453 
<a name="l01454"></a>01454                 buf-&gt;flags |= V4L2_BUF_FLAG_QUEUED;
<a name="l01455"></a>01455                 buf-&gt;flags &amp;= ~V4L2_BUF_FLAG_DONE;
<a name="l01456"></a>01456             }
<a name="l01457"></a>01457             <span class="keywordflow">break</span>;
<a name="l01458"></a>01458 
<a name="l01459"></a>01459         <span class="keywordflow">case</span> VIDIOC_DQBUF:
<a name="l01460"></a>01460             {
<a name="l01461"></a>01461                 <span class="keywordtype">int</span> ret;
<a name="l01462"></a>01462                 <span class="keyword">struct </span>v4l2_buffer *buf = arg;
<a name="l01463"></a>01463 
<a name="l01464"></a>01464                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_DQBUF\n"</span>);
<a name="l01465"></a>01465                 
<a name="l01466"></a>01466                 <span class="keywordflow">if</span> (buf-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01467"></a>01467                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01468"></a>01468 
<a name="l01469"></a>01469                 add_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01470"></a>01470 
<a name="l01471"></a>01471                 <span class="keywordflow">while</span> (dev-&gt;full_frames == NULL) {
<a name="l01472"></a>01472                     <span class="keywordflow">if</span> (dev-&gt;error_status) {
<a name="l01473"></a>01473                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01474"></a>01474                         set_current_state(TASK_RUNNING);
<a name="l01475"></a>01475 
<a name="l01476"></a>01476                         <span class="keywordflow">return</span> -dev-&gt;error_status;
<a name="l01477"></a>01477                     }
<a name="l01478"></a>01478 
<a name="l01479"></a>01479                     <span class="keywordflow">if</span> (signal_pending(current)) {
<a name="l01480"></a>01480                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01481"></a>01481                         set_current_state(TASK_RUNNING);
<a name="l01482"></a>01482 
<a name="l01483"></a>01483                         <span class="keywordflow">return</span> -ERESTARTSYS;
<a name="l01484"></a>01484                     }
<a name="l01485"></a>01485 
<a name="l01486"></a>01486                     schedule();
<a name="l01487"></a>01487                     set_current_state(TASK_INTERRUPTIBLE);
<a name="l01488"></a>01488                 }
<a name="l01489"></a>01489 
<a name="l01490"></a>01490                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01491"></a>01491                 set_current_state(TASK_RUNNING);
<a name="l01492"></a>01492 
<a name="l01493"></a>01493                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_DQBUF : frame ready.\n"</span>);
<a name="l01494"></a>01494 
<a name="l01495"></a>01495                 ret = <a class="code" href="stk11xx-buf_8c.html#21bfe8791f1f53fcd64a185dc6fdc686" title="Handler frame.">stk11xx_handle_frame</a>(dev);
<a name="l01496"></a>01496 
<a name="l01497"></a>01497                 <span class="keywordflow">if</span> (ret)
<a name="l01498"></a>01498                     <span class="keywordflow">return</span> -EFAULT;
<a name="l01499"></a>01499 
<a name="l01500"></a>01500                 buf-&gt;index = dev-&gt;fill_image;
<a name="l01501"></a>01501                 buf-&gt;bytesused = dev-&gt;image_size;
<a name="l01502"></a>01502                 buf-&gt;flags = V4L2_BUF_FLAG_MAPPED;
<a name="l01503"></a>01503                 buf-&gt;field = V4L2_FIELD_NONE;
<a name="l01504"></a>01504                 do_gettimeofday(&amp;buf-&gt;timestamp);
<a name="l01505"></a>01505                 buf-&gt;sequence = 0;
<a name="l01506"></a>01506                 buf-&gt;memory = V4L2_MEMORY_MMAP;
<a name="l01507"></a>01507                 buf-&gt;m.offset = dev-&gt;fill_image * dev-&gt;len_per_image;
<a name="l01508"></a>01508                 buf-&gt;length = buf-&gt;bytesused;
<a name="l01509"></a>01509 
<a name="l01510"></a>01510                 <a class="code" href="stk11xx-buf_8c.html#5805bf7c1173f7f6063c1c5934c73e1b" title="Prepare the next image.">stk11xx_next_image</a>(dev);
<a name="l01511"></a>01511             }
<a name="l01512"></a>01512             <span class="keywordflow">break</span>;
<a name="l01513"></a>01513 
<a name="l01514"></a>01514         <span class="keywordflow">case</span> VIDIOC_STREAMON:
<a name="l01515"></a>01515             {
<a name="l01516"></a>01516                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_STREAMON\n"</span>);
<a name="l01517"></a>01517 
<a name="l01518"></a>01518                 <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l01519"></a>01519             }
<a name="l01520"></a>01520             <span class="keywordflow">break</span>;
<a name="l01521"></a>01521 
<a name="l01522"></a>01522         <span class="keywordflow">case</span> VIDIOC_STREAMOFF:
<a name="l01523"></a>01523             {
<a name="l01524"></a>01524                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_STREAMOFF\n"</span>);
<a name="l01525"></a>01525 
<a name="l01526"></a>01526                 <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l01527"></a>01527             }
<a name="l01528"></a>01528             <span class="keywordflow">break</span>;
<a name="l01529"></a>01529 
<a name="l01530"></a>01530         <span class="keywordflow">case</span> VIDIOC_G_PARM:
<a name="l01531"></a>01531             {
<a name="l01532"></a>01532                 <span class="keyword">struct </span>v4l2_streamparm *sp = arg;
<a name="l01533"></a>01533 
<a name="l01534"></a>01534                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET PARM %d\n"</span>, sp-&gt;type);
<a name="l01535"></a>01535 
<a name="l01536"></a>01536                 <span class="keywordflow">if</span> (sp-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01537"></a>01537                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01538"></a>01538 
<a name="l01539"></a>01539                 sp-&gt;parm.capture.capability = 0;
<a name="l01540"></a>01540                 sp-&gt;parm.capture.capturemode = 0;
<a name="l01541"></a>01541                 sp-&gt;parm.capture.timeperframe.numerator = 1;
<a name="l01542"></a>01542                 sp-&gt;parm.capture.timeperframe.denominator = 30;
<a name="l01543"></a>01543                 sp-&gt;parm.capture.readbuffers = 2;
<a name="l01544"></a>01544                 sp-&gt;parm.capture.extendedmode = 0;
<a name="l01545"></a>01545             }
<a name="l01546"></a>01546             <span class="keywordflow">break</span>;
<a name="l01547"></a>01547 
<a name="l01548"></a>01548 
<a name="l01549"></a>01549         <span class="keywordflow">case</span> VIDIOC_G_AUDIO:
<a name="l01550"></a>01550             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET AUDIO\n"</span>);
<a name="l01551"></a>01551             <span class="keywordflow">return</span> -EINVAL;
<a name="l01552"></a>01552             <span class="keywordflow">break</span>;
<a name="l01553"></a>01553 
<a name="l01554"></a>01554         <span class="keywordflow">case</span> VIDIOC_S_AUDIO:
<a name="l01555"></a>01555             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET AUDIO\n"</span>);
<a name="l01556"></a>01556             <span class="keywordflow">return</span> -EINVAL;
<a name="l01557"></a>01557             <span class="keywordflow">break</span>;
<a name="l01558"></a>01558 
<a name="l01559"></a>01559         <span class="keywordflow">case</span> VIDIOC_S_TUNER:
<a name="l01560"></a>01560             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET TUNER\n"</span>);
<a name="l01561"></a>01561             <span class="keywordflow">return</span> -EINVAL;
<a name="l01562"></a>01562             <span class="keywordflow">break</span>;
<a name="l01563"></a>01563 
<a name="l01564"></a>01564         <span class="keywordflow">case</span> VIDIOC_G_FBUF:
<a name="l01565"></a>01565         <span class="keywordflow">case</span> VIDIOC_S_FBUF:
<a name="l01566"></a>01566         <span class="keywordflow">case</span> VIDIOC_OVERLAY:
<a name="l01567"></a>01567             <span class="keywordflow">return</span> -EINVAL;
<a name="l01568"></a>01568             <span class="keywordflow">break</span>;
<a name="l01569"></a>01569 
<a name="l01570"></a>01570         <span class="keywordflow">case</span> VIDIOC_G_TUNER:
<a name="l01571"></a>01571         <span class="keywordflow">case</span> VIDIOC_G_FREQUENCY:
<a name="l01572"></a>01572         <span class="keywordflow">case</span> VIDIOC_S_FREQUENCY:
<a name="l01573"></a>01573             <span class="keywordflow">return</span> -EINVAL;
<a name="l01574"></a>01574             <span class="keywordflow">break</span>;
<a name="l01575"></a>01575 
<a name="l01576"></a>01576         <span class="keywordflow">case</span> VIDIOC_QUERYMENU:
<a name="l01577"></a>01577             <span class="keywordflow">return</span> -EINVAL;
<a name="l01578"></a>01578             <span class="keywordflow">break</span>;
<a name="l01579"></a>01579 <span class="comment">/*</span>
<a name="l01580"></a>01580 <span class="comment">        case VIDIOC_CROPCAP:</span>
<a name="l01581"></a>01581 <span class="comment">            {</span>
<a name="l01582"></a>01582 <span class="comment">                struct v4l2_cropcap cc;</span>
<a name="l01583"></a>01583 <span class="comment"></span>
<a name="l01584"></a>01584 <span class="comment">                cc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;</span>
<a name="l01585"></a>01585 <span class="comment">                cc.pixelaspect.numerator = 1;</span>
<a name="l01586"></a>01586 <span class="comment">                cc.pixelaspect.denominator = 1;</span>
<a name="l01587"></a>01587 <span class="comment">                cc.bounds.top = 0;</span>
<a name="l01588"></a>01588 <span class="comment">                cc.bounds.left = 0;</span>
<a name="l01589"></a>01589 <span class="comment">                cc.bounds.width = 640;</span>
<a name="l01590"></a>01590 <span class="comment">                cc.bounds.height = 480;</span>
<a name="l01591"></a>01591 <span class="comment">                cc.defrect.top = 0;</span>
<a name="l01592"></a>01592 <span class="comment">                cc.defrect.left = 0;</span>
<a name="l01593"></a>01593 <span class="comment">                cc.defrect.width = 640;</span>
<a name="l01594"></a>01594 <span class="comment">                cc.defrect.height = 480;</span>
<a name="l01595"></a>01595 <span class="comment"></span>
<a name="l01596"></a>01596 <span class="comment">                memcpy(arg, &amp;cc, sizeof(cc));</span>
<a name="l01597"></a>01597 <span class="comment">            }</span>
<a name="l01598"></a>01598 <span class="comment">            break;</span>
<a name="l01599"></a>01599 <span class="comment">*/</span>
<a name="l01600"></a>01600         <span class="keywordflow">default</span>:
<a name="l01601"></a>01601             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"IOCTL unknown !\n"</span>);
<a name="l01602"></a>01602             <span class="keywordflow">return</span> -ENOIOCTLCMD;
<a name="l01603"></a>01603     }
<a name="l01604"></a>01604 
<a name="l01605"></a>01605     <span class="keywordflow">return</span> 0;
<a name="l01606"></a>01606 }
<a name="l01607"></a>01607 
<a name="l01608"></a>01608 
<a name="l01621"></a><a class="code" href="stk11xx-v4l_8c.html#7b92f4afecdd87647a24fb121e7df39d">01621</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#7b92f4afecdd87647a24fb121e7df39d" title="Manage IOCTL.">v4l_stk11xx_ioctl</a>(<span class="keyword">struct</span> inode *inode, <span class="keyword">struct</span> file *fp,
<a name="l01622"></a>01622         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cmd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> arg)
<a name="l01623"></a>01623 {
<a name="l01624"></a>01624     <span class="keywordtype">int</span> err;
<a name="l01625"></a>01625     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l01626"></a>01626     <span class="keyword">struct </span>video_device *vdev;
<a name="l01627"></a>01627     
<a name="l01628"></a>01628     vdev = video_devdata(fp);
<a name="l01629"></a>01629     dev = video_get_drvdata(video_devdata(fp));
<a name="l01630"></a>01630 
<a name="l01631"></a>01631     <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"v4l_stk11xx_ioctl %02X\n"</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) cmd);
<a name="l01632"></a>01632 
<a name="l01633"></a>01633     <span class="keywordflow">if</span> (dev == NULL)
<a name="l01634"></a>01634         <span class="keywordflow">return</span> -EFAULT;
<a name="l01635"></a>01635 
<a name="l01636"></a>01636     <span class="keywordflow">if</span> (vdev == NULL)
<a name="l01637"></a>01637         <span class="keywordflow">return</span> -EFAULT;
<a name="l01638"></a>01638 
<a name="l01639"></a>01639     err = <a class="code" href="stk11xx-v4l_8c.html#e791183c09f41bf23d9bc5853d0c080f" title="Manage IOCTL.">v4l_stk11xx_do_ioctl</a>(inode, fp, cmd, (<span class="keywordtype">void</span> __user *) arg);
<a name="l01640"></a>01640 
<a name="l01641"></a>01641     <span class="keywordflow">return</span> err;
<a name="l01642"></a>01642 }
<a name="l01643"></a>01643 
<a name="l01644"></a>01644 
<a name="l01654"></a><a class="code" href="stk11xx_8h.html#ea83cb34e801e4b0470c848174128aeb">01654</a> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#5fb1deffc636cce6dffc8b5e971e6115" title="Register the video device.">v4l_stk11xx_register_video_device</a>(<span class="keyword">struct</span> usb_stk11xx *dev)
<a name="l01655"></a>01655 {
<a name="l01656"></a>01656     <span class="keywordtype">int</span> err;
<a name="l01657"></a>01657 
<a name="l01658"></a>01658     strcpy(dev-&gt;vdev-&gt;name, <a class="code" href="stk11xx_8h.html#ae26107a17c06584f8bbd0d6fb91013d">DRIVER_DESC</a>);
<a name="l01659"></a>01659 
<a name="l01660"></a>01660 <span class="preprocessor">#if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2,6,27)</span>
<a name="l01661"></a>01661 <span class="preprocessor"></span>    dev-&gt;vdev-&gt;dev = &amp;dev-&gt;interface-&gt;dev;
<a name="l01662"></a>01662     dev-&gt;vdev-&gt;owner = THIS_MODULE;
<a name="l01663"></a>01663     dev-&gt;vdev-&gt;type = VID_TYPE_CAPTURE;
<a name="l01664"></a>01664 <span class="preprocessor">#else</span>
<a name="l01665"></a>01665 <span class="preprocessor"></span>    dev-&gt;vdev-&gt;parent = &amp;dev-&gt;interface-&gt;dev;
<a name="l01666"></a>01666 <span class="preprocessor">#endif</span>
<a name="l01667"></a>01667 <span class="preprocessor"></span>
<a name="l01668"></a>01668 <span class="preprocessor">#if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2,6,24)</span>
<a name="l01669"></a>01669 <span class="preprocessor"></span>    dev-&gt;vdev-&gt;hardware = <a class="code" href="stk11xx_8h.html#02acd2788e2df6e66e06dff1b96b88b7">VID_HARDWARE_STK11XX</a>;
<a name="l01670"></a>01670 <span class="preprocessor">#endif</span>
<a name="l01671"></a>01671 <span class="preprocessor"></span>    dev-&gt;vdev-&gt;fops = &amp;<a class="code" href="stk11xx-v4l_8c.html#9b7273f902f9cb582947ef10f7e67a8c">v4l_stk11xx_fops</a>;
<a name="l01672"></a>01672     dev-&gt;vdev-&gt;release = video_device_release;
<a name="l01673"></a>01673     dev-&gt;vdev-&gt;minor = -1;
<a name="l01674"></a>01674 
<a name="l01675"></a>01675     video_set_drvdata(dev-&gt;vdev, dev);
<a name="l01676"></a>01676 
<a name="l01677"></a>01677     err = video_register_device(dev-&gt;vdev, VFL_TYPE_GRABBER, -1);
<a name="l01678"></a>01678 
<a name="l01679"></a>01679     <span class="keywordflow">if</span> (err)
<a name="l01680"></a>01680         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Video register fail !\n"</span>);
<a name="l01681"></a>01681     <span class="keywordflow">else</span>
<a name="l01682"></a>01682         <a class="code" href="stk11xx_8h.html#55d1b4af8174ee2f44f9ea2e18f6392d">STK_INFO</a>(<span class="stringliteral">"Syntek USB2.0 Camera is now controlling video device /dev/video%d\n"</span>, dev-&gt;vdev-&gt;minor);
<a name="l01683"></a>01683 
<a name="l01684"></a>01684     <span class="keywordflow">return</span> err;
<a name="l01685"></a>01685 }
<a name="l01686"></a>01686 
<a name="l01687"></a>01687 
<a name="l01697"></a><a class="code" href="stk11xx_8h.html#8abb280daa1010eece7e965f3a6471ba">01697</a> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#62bc2469df7a6e1d2fe8c455012bd9ad" title="Unregister the video device.">v4l_stk11xx_unregister_video_device</a>(<span class="keyword">struct</span> usb_stk11xx *dev)
<a name="l01698"></a>01698 {
<a name="l01699"></a>01699     <a class="code" href="stk11xx_8h.html#55d1b4af8174ee2f44f9ea2e18f6392d">STK_INFO</a>(<span class="stringliteral">"Syntek USB2.0 Camera release resources video device /dev/video%d\n"</span>, dev-&gt;vdev-&gt;minor);
<a name="l01700"></a>01700 
<a name="l01701"></a>01701     video_set_drvdata(dev-&gt;vdev, NULL);
<a name="l01702"></a>01702     video_unregister_device(dev-&gt;vdev);
<a name="l01703"></a>01703 
<a name="l01704"></a>01704     <span class="keywordflow">return</span> 0;
<a name="l01705"></a>01705 }
<a name="l01706"></a>01706 
<a name="l01707"></a>01707 
<a name="l01713"></a>01713 <span class="keyword">static</span> <span class="keyword">struct </span>file_operations <a class="code" href="stk11xx-v4l_8c.html#9b7273f902f9cb582947ef10f7e67a8c">v4l_stk11xx_fops</a> = {
<a name="l01714"></a>01714     .owner = THIS_MODULE,
<a name="l01715"></a>01715     .open = <a class="code" href="stk11xx-v4l_8c.html#d9cad7787e40bec3f52a71257c625ab3" title="Open the video device.">v4l_stk11xx_open</a>,
<a name="l01716"></a>01716     .release = <a class="code" href="stk11xx-v4l_8c.html#1c1d2854c3d127dde05c86084d2afe30" title="Release an opened file.">v4l_stk11xx_release</a>,
<a name="l01717"></a>01717     .read = <a class="code" href="stk11xx-v4l_8c.html#e125a26fc4f36a4b64418acb87b958a4" title="Read the video device.">v4l_stk11xx_read</a>,
<a name="l01718"></a>01718     .poll = <a class="code" href="stk11xx-v4l_8c.html#159e3f9cb0b7adb3d1b9e64298d2b42b" title="Polling function.">v4l_stk11xx_poll</a>,
<a name="l01719"></a>01719     .mmap = <a class="code" href="stk11xx-v4l_8c.html#1baaafe560fe7466c7062aacd02aff8c" title="Memory map.">v4l_stk11xx_mmap</a>,
<a name="l01720"></a>01720     .ioctl = <a class="code" href="stk11xx-v4l_8c.html#7b92f4afecdd87647a24fb121e7df39d" title="Manage IOCTL.">v4l_stk11xx_ioctl</a>,
<a name="l01721"></a>01721 <span class="preprocessor">#ifdef CONFIG_COMPAT</span>
<a name="l01722"></a>01722 <span class="preprocessor"></span>    .compat_ioctl = v4l_compat_ioctl32,
<a name="l01723"></a>01723 <span class="preprocessor">#endif</span>
<a name="l01724"></a>01724 <span class="preprocessor"></span>    .llseek = no_llseek
<a name="l01725"></a>01725 };
<a name="l01726"></a>01726 
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sun Sep 20 12:18:50 2009 for SyntekUSBVideoCamera by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>