Home | History | Annotate | Download | only in doc
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
      2 <html>
      3 <head>
      4   <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
      5   <title>v4l-test: Test environment for Video For Linux Two (V4L2) API</title>
      6 </head>
      7 <body>
      8 <p>
      9 <a href="#what">What is this?</a> |
     10 <a href="#build">How to build?</a> |
     11 <a href="#run">How to run?</a> |
     12 <a href="#v4l2">V4L2</a> |
     13 <a href="#code_coverage">Code Coverage</a> |
     14 <a href="#status">Status</a> |
     15 <a href="results.html">Results</a> |
     16 <a href="#others">Similar projects</a> |
     17 <a href="#feedback">Feedback</a><br>
     18 </p>
     19 <hr style="width: 100%; height: 2px;">
     20 
     21 <h1>v4l-test: Test environment for Video For Linux Two (V4L2) API</h1>
     22 <p>
     23 Download <a href="http://sourceforge.net/project/showfiles.php?group_id=247983">v4l-test</a>
     24 or visit <a href="http://sourceforge.net/projects/v4l-test/">v4l-test project page</a> at
     25 <a href="http://sourceforge.net">sourceforge.net</a> .
     26 </p>
     27 
     28 <h2><a name="what">What is this?</a></h2>
     29 <p>
     30 v4l-test is a test environment for V4L2 drivers. The V4L2 drivers
     31 are running under Linux in kernel space. This test environment is
     32 running in userspace and tries what normal video application would do.
     33 It also tries some things which are supposed to test the error handling
     34 mechanisms of a V4L2 driver. These are the "invalid test cases".
     35 </p>
     36 <p>
     37 The V4L2 API only covers webcams and analog tuner cards. The digital
     38 broadcast is out of the scope of V4L2 API so it is also out of the
     39 scope of this test environment. See
     40 <a href="http://linuxtv.org/docs/dvbapi/dvbapi.html">Linux DVB API</a>
     41 for digital broadcast and
     42 <a href="spec/x16430.htm">Chapter 6.3 Relation of V4L2 to other Linux
     43 multimedia APIs</a> in V4L2 specification.
     44 </p>
     45 
     46 <h2><a name="build">How to build?</a></h2>
     47 <p>
     48 To build the test environment you will need a C compiler, "make" and
     49 the CUnit development files installed. Just type "make" and the test
     50 environment is ready.
     51 </p>
     52 
     53 <h2><a name="run">How to run?</a></h2>
     54 <p>
     55 You need to have a video device (i.e. webcam, tuner card, etc.)
     56 connected to your system and available under /dev/video0. If you don't
     57 have any hardware device available, you can still test the "Virtual
     58 Video Driver". To compile this you need to compile your kernel with
     59 CONFIG_VIDEO_VIVI=m under:
     60 </p>
     61 <pre>
     62   -&gt; Device Drivers
     63     -&gt; Multimedia devices
     64       -&gt; Video For Linux
     65         -&gt; Video capture adapters
     66           -&gt; Virtual Video Driver
     67 </pre>
     68 <p>
     69 At this point you can execute v4l-test.
     70 </p>
     71 
     72 <h2><a name="v4l2">Video for Linux Two Specification</a></h2>
     73 <p>
     74 The <a href="spec/index.html">V4L2 API specification</a>
     75 revision 0.24 is the base for this test environment. The most recent
     76 version can be found at
     77 <a href="http://v4l2spec.bytesex.org/spec/">http://v4l2spec.bytesex.org/spec/</a> .
     78 </p>
     79 
     80 <h2><a name="code_coverage">Code Coverage</a></h2>
     81 <p>
     82 The code coverage shows which lines of the code were executed and how
     83 many times. The measurement results gives you a feedback about the
     84 quality of the test cases. You can measure the code coverage of a
     85 kernel module with the
     86 <a href="http://ltp.sourceforge.net/coverage/gcov.php">gocv</a> and
     87 <a href="http://ltp.sourceforge.net/coverage/lcov.php">lcov</a> softwares.
     88 </p>
     89 
     90 <h2><a name="status">Current status</a></h2>
     91 <p>
     92 Currently all test are running and evaluated automatically. This might
     93 change in future if we want to test for example plugging and unplugging
     94 a USB video device or ask the user if a received picture make sense or
     95 not.
     96 </p>
     97 <p>
     98 The following tables give an overview about the current state of
     99 implemented test cases.</p>
    100 
    101 <table border="1" cellpadding="2"
    102  cellspacing="0">
    103   <thead>
    104     <tr>
    105       <td><b>V4L API element</b></td>
    106       <td><b>Covered?</b></td>
    107       <td><b>Note</b></td>
    108     </tr>
    109   </thead>
    110   <tbody>
    111     <tr>
    112       <td>V4L2 <a href="spec/r7626.htm">close()</a></td>
    113       <td>yes</td>
    114       <td>All</td>
    115     </tr>
    116     <tr>
    117       <td>V4L2 <a href="spec/r7667.htm">ioctl()</a></td>
    118       <td>yes</td>
    119       <td>All</td>
    120     </tr>
    121     <tr>
    122       <td>ioctl <a href="spec/r7771.htm">VIDIOC_CROPCAP</a></td>
    123       <td>yes, only when STREAM_OFF</td>
    124       <td>Opt.</td>
    125     </tr>
    126     <tr>
    127       <td>ioctl <a href="spec/r7900.htm">VIDIOC_DBG_G_REGISTER</a></td>
    128       <td>no</td>
    129       <td><a href="spec/x16453.htm">Exp.</a></td>
    130     </tr>
    131     <tr>
    132       <td>ioctl <a href="spec/r7900.htm">VIDIOC_DBG_S_REGISTER</a></td>
    133       <td>no</td>
    134       <td><a href="spec/x16453.htm">Exp.</a></td>
    135     </tr>
    136     <tr>
    137       <td>ioctl <a href="spec/r8087.htm">VIDIOC_ENCODER_CMD</a></td>
    138       <td>no</td>
    139       <td><a href="spec/x16453.htm">Exp.</a></td>
    140     </tr>
    141     <tr>
    142       <td>ioctl <a href="spec/r8087.htm">VIDIOC_TRY_ENCODER_CMD</a></td>
    143       <td>no</td>
    144       <td><a href="spec/x16453.htm">Exp.</a></td>
    145     </tr>
    146     <tr>
    147       <td>ioctl <a href="spec/r8242.htm">VIDIOC_ENUMAUDIO</a></td>
    148       <td>yes, only when STREAM_OFF</td>
    149       <td>Enum.</td>
    150     </tr>
    151     <tr>
    152       <td>ioctl <a href="spec/r8304.htm">VIDIOC_ENUMAUDOUT</a></td>
    153       <td>yes, only when STREAM_OFF</td>
    154       <td>Enum.</td>
    155     </tr>
    156     <tr>
    157       <td>ioctl <a href="spec/r8367.htm">VIDIOC_ENUM_FMT</a></td>
    158       <td>yes, only when STREAM_OFF</td>
    159       <td>Enum.</td>
    160     </tr>
    161     <tr>
    162       <td>ioctl <a href="spec/r8494.htm">VIDIOC_ENUM_FRAMESIZES</a></td>
    163       <td>yes, only when STREAM_OFF</td>
    164       <td><a href="spec/x16453.htm">Exp.</a> Enum.</td>
    165     </tr>
    166     <tr>
    167       <td>ioctl <a href="spec/r8724.htm">VIDIOC_ENUM_FRAMEINTERVALS</a></td>
    168       <td>no</td>
    169       <td><a href="spec/x16453.htm">Exp.</a> Enum.</td>
    170     </tr>
    171     <tr>
    172       <td>ioctl <a href="spec/r8936.htm">VIDIOC_ENUMINPUT</a></td>
    173       <td>yes, only when STREAM_OFF</td>
    174       <td>Enum.</td>
    175     </tr>
    176     <tr>
    177       <td>ioctl <a href="spec/r9149.htm">VIDIOC_ENUMOUTPUT</a></td>
    178       <td>yes, only when STREAM_OFF</td>
    179       <td>Enum.</td>
    180     </tr>
    181     <tr>
    182       <td>ioctl <a href="spec/r9288.htm">VIDIOC_ENUMSTD</a></td>
    183       <td>yes, only when STREAM_OFF</td>
    184       <td>Enum.</td>
    185     </tr>
    186     <tr>
    187       <td>ioctl <a href="spec/r9539.htm">VIDIOC_G_AUDIO</a></td>
    188       <td>yes, only when STREAM_OFF</td>
    189       <td>Opt.</td>
    190     </tr>
    191     <tr>
    192       <td>ioctl <a href="spec/r9539.htm">VIDIOC_S_AUDIO</a></td>
    193       <td>yes, only when STREAM_OFF</td>
    194       <td>Opt.</td>
    195     </tr>
    196     <tr>
    197       <td>ioctl <a href="spec/r9688.htm">VIDIOC_G_AUDOUT</a></td>
    198       <td>yes, only when STREAM_OFF</td>
    199       <td>Opt.</td>
    200     </tr>
    201     <tr>
    202       <td>ioctl <a href="spec/r9688.htm">VIDIOC_S_AUDOUT</a></td>
    203       <td>yes, only when STREAM_OFF</td>
    204       <td>Opt.</td>
    205     </tr>
    206     <tr>
    207       <td>ioctl <a href="spec/r9804.htm">VIDIOC_G_CHIP_IDENT</a></td>
    208       <td>no</td>
    209       <td><a href="spec/x16453.htm">Exp.</a></td>
    210     </tr>
    211     <tr>
    212       <td>ioctl <a href="spec/r9994.htm">VIDIOC_G_CROP</a></td>
    213       <td>yes, only when STREAM_OFF</td>
    214       <td>Opt.</td>
    215     </tr>
    216     <tr>
    217       <td>ioctl <a href="spec/r9994.htm">VIDIOC_S_CROP</a></td>
    218       <td>yes, only when STREAM_OFF</td>
    219       <td>Opt.</td>
    220     </tr>
    221     <tr>
    222       <td>ioctl <a href="spec/r10104.htm">VIDIOC_G_CTRL</a></td>
    223       <td>yes, only when STREAM_OFF</td>
    224       <td><br></td>
    225     </tr>
    226     <tr>
    227       <td>ioctl <a href="spec/r10104.htm">VIDIOC_S_CTRL</a></td>
    228       <td>yes, only when STREAM_OFF</td>
    229       <td><br></td>
    230     </tr>
    231     <tr>
    232       <td>ioctl <a href="spec/r10211.htm">VIDIOC_G_ENC_INDEX</a></td>
    233       <td>no</td>
    234       <td><a href="spec/x16453.htm">Exp.</a></td>
    235     </tr>
    236     <tr>
    237       <td>ioctl <a href="spec/r10386.htm">VIDIOC_G_EXT_CTRLS</a></td>
    238       <td>yes, only when STREAM_OFF, currently only zero and one item</td>
    239       <td>Opt.</td>
    240     </tr>
    241     <tr>
    242       <td>ioctl <a href="spec/r10386.htm">VIDIOC_S_EXT_CTRLS</a></td>
    243       <td>yes, only when STREAM_OFF, only with zero item</td>
    244       <td>Opt.</td>
    245     </tr>
    246     <tr>
    247       <td>ioctl <a href="spec/r10386.htm">VIDIOC_TRY_EXT_CTRLS</a></td>
    248       <td>yes, only when STREAM_OFF, only with zero item</td>
    249       <td>Opt.</td>
    250     </tr>
    251     <tr>
    252       <td>ioctl <a href="spec/r10595.htm">VIDIOC_G_FBUF</a></td>
    253       <td>no</td>
    254       <td>Opt.</td>
    255     </tr>
    256     <tr>
    257       <td>ioctl <a href="spec/r10595.htm">VIDIOC_S_FBUF</a></td>
    258       <td>no</td>
    259       <td>Opt.</td>
    260     </tr>
    261     <tr>
    262       <td>ioctl <a href="spec/r10944.htm">VIDIOC_G_FMT</a></td>
    263       <td>yes, only when STREAM_OFF</td>
    264       <td>Opt.</td>
    265     </tr>
    266     <tr>
    267       <td>ioctl <a href="spec/r10944.htm">VIDIOC_S_FMT</a></td>
    268       <td>yes, only when STREAM_OFF</td>
    269       <td>Opt.</td>
    270     </tr>
    271     <tr>
    272       <td>ioctl <a href="spec/r10944.htm">VIDIOC_TRY_FMT</a></td>
    273       <td>no</td>
    274       <td>Opt.</td>
    275     </tr>
    276     <tr>
    277       <td>ioctl <a href="spec/r11094.htm">VIDIOC_G_FREQUENCY</a></td>
    278       <td>yes, only when STREAM_OFF</td>
    279       <td>Opt.</td>
    280     </tr>
    281     <tr>
    282       <td>ioctl <a href="spec/r11094.htm">VIDIOC_S_FREQUENCY</a></td>
    283       <td>yes, only when STREAM_OFF</td>
    284       <td>Opt.</td>
    285     </tr>
    286     <tr>
    287       <td>ioctl <a href="spec/r11217.htm">VIDIOC_G_INPUT</a></td>
    288       <td>yes, only when STREAM_OFF</td>
    289       <td>Opt.</td>
    290     </tr>
    291     <tr>
    292       <td>ioctl <a href="spec/r11217.htm">VIDIOC_S_INPUT</a></td>
    293       <td>yes, only when STREAM_OFF</td>
    294       <td>Opt.</td>
    295     </tr>
    296     <tr>
    297       <td>ioctl <a href="spec/r11285.htm">VIDIOC_G_JPEGCOMP</a></td>
    298       <td>yes, only when STREAM_OFF</td>
    299       <td>Opt.</td>
    300     </tr>
    301     <tr>
    302       <td>ioctl <a href="spec/r11285.htm">VIDIOC_S_JPEGCOMP</a></td>
    303       <td>no</td>
    304       <td>Opt.</td>
    305     </tr>
    306     <tr>
    307       <td>ioctl <a href="spec/r11430.htm">VIDIOC_G_MODULATOR</a></td>
    308       <td>yes, only when STREAM_OFF</td>
    309       <td>Opt.</td>
    310     </tr>
    311     <tr>
    312       <td>ioctl <a href="spec/r11430.htm">VIDIOC_S_MODULATOR</a></td>
    313       <td>no</td>
    314       <td>Opt.</td>
    315     </tr>
    316     <tr>
    317       <td>ioctl <a href="spec/r11612.htm">VIDIOC_G_OUTPUT</a></td>
    318       <td>yes, only when STREAM_OFF</td>
    319       <td>Opt.</td>
    320     </tr>
    321     <tr>
    322       <td>ioctl <a href="spec/r11612.htm">VIDIOC_S_OUTPUT</a></td>
    323       <td>yes, only when STREAM_OFF</td>
    324       <td>Opt.</td>
    325     </tr>
    326     <tr>
    327       <td>ioctl <a href="spec/r11680.htm">VIDIOC_G_PARM</a></td>
    328       <td>yes, only when STREAM_OFF</td>
    329       <td>Opt.</td>
    330     </tr>
    331     <tr>
    332       <td>ioctl <a href="spec/r11680.htm">VIDIOC_S_PARM</a></td>
    333       <td>no</td>
    334       <td>Opt.</td>
    335     </tr>
    336     <tr>
    337       <td>ioctl <a href="spec/r11946.htm">VIDIOC_G_PRIORITY</a></td>
    338       <td>yes, only when STREAM_OFF</td>
    339       <td>Opt.</td>
    340     </tr>
    341     <tr>
    342       <td>ioctl <a href="spec/r11946.htm">VIDIOC_S_PRIORITY</a></td>
    343       <td>yes, only when STREAM_OFF</td>
    344       <td>Opt.</td>
    345     </tr>
    346     <tr>
    347       <td>ioctl <a href="spec/r12051.htm">VIDIOC_G_SLICED_VBI_CAP</a></td>
    348       <td>yes, only when STREAM_OFF</td>
    349       <td>Opt.</td>
    350     </tr>
    351     <tr>
    352       <td>ioctl <a href="spec/r12265.htm">VIDIOC_G_STD</a></td>
    353       <td>yes, only when STREAM_OFF</td>
    354       <td>Opt.</td>
    355     </tr>
    356     <tr>
    357       <td>ioctl <a href="spec/r12265.htm">VIDIOC_S_STD</a></td>
    358       <td>yes, only when STREAM_OFF</td>
    359       <td>Opt.</td>
    360     </tr>
    361     <tr>
    362       <td>ioctl <a href="spec/r12342.htm">VIDIOC_G_TUNER</a></td>
    363       <td>yes, only when STREAM_OFF</td>
    364       <td><br></td>
    365     </tr>
    366     <tr>
    367       <td>ioctl <a href="spec/r12342.htm">VIDIOC_S_TUNER</a></td>
    368       <td>yes, only when STREAM_OFF</td>
    369       <td><br></td>
    370     </tr>
    371     <tr>
    372       <td>ioctl <a href="spec/r12784.htm">VIDIOC_LOG_STATUS</a></td>
    373       <td>yes, only when STREAM_OFF</td>
    374       <td>Opt.</td>
    375     </tr>
    376     <tr>
    377       <td>ioctl <a href="spec/r12816.htm">VIDIOC_OVERLAY</a></td>
    378       <td>no</td>
    379       <td>Opt.</td>
    380     </tr>
    381     <tr>
    382       <td>ioctl <a href="spec/r12878.htm">VIDIOC_QBUF</a></td>
    383       <td>no</td>
    384       <td>Opt.</td>
    385     </tr>
    386     <tr>
    387       <td>ioctl <a href="spec/r12878.htm">VIDIOC_DQBUF</a></td>
    388       <td>no</td>
    389       <td>Opt.</td>
    390     </tr>
    391     <tr>
    392       <td>ioctl <a href="spec/r13022.htm">VIDIOC_QUERYBUF</a></td>
    393       <td>yes, only when STREAM_OFF</td>
    394       <td>Opt.</td>
    395     </tr>
    396     <tr>
    397       <td>ioctl <a href="spec/r13105.htm">VIDIOC_QUERYCAP</a></td>
    398       <td>yes, only when STREAM_OFF</td>
    399       <td>All</td>
    400     </tr>
    401     <tr>
    402       <td>ioctl <a href="spec/r13317.htm">VIDIOC_QUERYCTRL</a></td>
    403       <td>yes, only private and user controls;
    404           only user controls with V4L2_CTRL_FLAG_NEXT_CTRL</td>
    405       <td>Enum.</td>
    406     </tr>
    407     <tr>
    408       <td>ioctl <a href="spec/r13317.htm">VIDIOC_QUERYMENU</a></td>
    409       <td>yes, only when STREAM_OFF</td>
    410       <td>Enum.</td>
    411     </tr>
    412     <tr>
    413       <td>ioctl <a href="spec/r13641.htm">VIDIOC_QUERYSTD</a></td>
    414       <td>yes, only when STREAM_OFF</td>
    415       <td>Opt.</td>
    416     </tr>
    417     <tr>
    418       <td>ioctl <a href="spec/r13696.htm">VIDIOC_REQBUFS</a></td>
    419       <td>yes, only when STREAM_OFF</td>
    420       <td>Opt.</td>
    421     </tr>
    422     <tr>
    423       <td>ioctl <a href="spec/r13817.htm">VIDIOC_STREAMON</a></td>
    424       <td>no</td>
    425       <td>Opt.</td>
    426     </tr>
    427     <tr>
    428       <td>ioctl <a href="spec/r13817.htm">VIDIOC_STREAMOFF</a></td>
    429       <td>no</td>
    430       <td>Opt.</td>
    431     </tr>
    432     <tr>
    433       <td>V4L2 <a href="spec/r13889.htm">mmap()</a></td>
    434       <td>no</td>
    435       <td>Opt.</td>
    436     </tr>
    437     <tr>
    438       <td>V4L2 <a href="spec/r14037.htm">munmap()</a></td>
    439       <td>no</td>
    440       <td>Opt.</td>
    441     </tr>
    442     <tr>
    443       <td>V4L2 <a href="spec/r14090.htm">open()</a></td>
    444       <td>yes, partly</td>
    445       <td>All</td>
    446     </tr>
    447     <tr>
    448       <td>V4L2 <a href="spec/r14169.htm">poll()</a></td>
    449       <td>no</td>
    450       <td>Opt.</td>
    451     </tr>
    452     <tr>
    453       <td>V4L2 <a href="spec/r14264.htm">read()</a></td>
    454       <td>no</td>
    455       <td>Opt.</td>
    456     </tr>
    457     <tr>
    458       <td>V4L2 <a href="spec/r14390.htm">select()</a></td>
    459       <td>no</td>
    460       <td>Opt.</td>
    461     </tr>
    462     <tr>
    463       <td>V4L2 <a href="spec/r14496.htm">write()</a></td>
    464       <td>no</td>
    465       <td>Opt.</td>
    466     </tr>
    467   </tbody>
    468 </table>
    469 
    470 <p>
    471 All: all drivers should support<br>
    472 Opt.: optional<br>
    473 Enum.: enumeration, will return EINVAL for the first unknown entry<br>
    474 Exp.: experimental, may change in future
    475 </p>
    476 
    477 <p>The following actions are not part of the V4L2 API but they might have
    478 influence on the V4L2 API functions:</p>
    479 
    480 <table border="1" cellpadding="2"
    481  cellspacing="0">
    482   <thead>
    483     <tr>
    484       <td><b>Action</b></td>
    485       <td><b>Covered?</b></td>
    486     </tr>
    487   </thead>
    488   <tbody>
    489     <tr>
    490       <td>Load kernel module</td>
    491       <td>no</td>
    492     </tr>
    493     <tr>
    494       <td>Unload kernel module</td>
    495       <td>no</td>
    496     </tr>
    497     <tr>
    498       <td>USB connect event (in case of USB webcams)</td>
    499       <td>no</td>
    500     </tr>
    501     <tr>
    502       <td>USB disconnect event (in case of USB webcams)</td>
    503       <td>no</td>
    504     </tr>
    505     <tr>
    506       <td>Suspend</td>
    507       <td>no</td>
    508     </tr>
    509     <tr>
    510       <td>Resume</td>
    511       <td>no</td>
    512     </tr>
    513     <tr>
    514       <td>Check for memory leak (e.g. analyze /proc/slab_allocators)</td>
    515       <td>no</td>
    516     </tr>
    517     <tr>
    518       <td>Opening /dev/video0 multiple times</td>
    519       <td>no</td>
    520     </tr>
    521     <tr>
    522       <td>Using /dev/video0 from a multi-threaded or multi-process environment paralell</td>
    523       <td>no</td>
    524     </tr>
    525   </tbody>
    526 </table>
    527 
    528 
    529 <h2><a name="others">Similar projects</a></h2>
    530 <p>
    531 There migth be similar projects which also tries to test the V4L2 API.
    532 So far I could find the following:
    533 </p>
    534 <ul>
    535   <li>A <a href="http://www.linuxtv.org/wiki/index.php/V4L_Test_Suite">
    536   list of V4L and V4L2 test drivers and applications</a> at
    537   <a href="http://www.linuxtv.org/wiki/index.php/Main_Page">LinuxTV Wiki</a>
    538   </li>
    539   <li><a href="http://www.linuxowl.com/v4ltest.html">v4ltest</a><br>
    540   </li>
    541   <li>test cases in <a href="http://linuxtv.org/hg/dvb-apps/file">dvb-apps repository</a>, under /test directory
    542   </li>
    543   <li>test cases in <a href="http://linuxtv.org/hg/v4l-dvb/file">v4l-dvb repository</a>, under /v4l2-apps/test directory
    544   </li>
    545   <li>this test environment is also available under <a href="http://ltp.sourceforge.net/">Linux Test Project</a>
    546       (LTP), under directory testcases/kernel/device-drivers/v4l/user_space
    547   </li>
    548 </ul>
    549 <p>
    550 Please let me know if this list misses other V4L or V4L2 test project.
    551 </p>
    552 <p>
    553 The following documents and articles are useful if you are dealing with V4L2:
    554 </p>
    555 <ul>
    556   <li>
    557   <a href="http://v4l2spec.bytesex.org/spec/">Video for Linux Two API Specification</a>
    558   </li>
    559   <li>
    560   <a href="http://lwn.net/Articles/203924/">The Video4Linux2 API series</a> at
    561   <a href="http://lwn.net/">lwn.net</a>
    562   </li>
    563   <li><a href="http://freshmeat.net/projects/libv4l">libv4l</a>
    564       <a href="http://people.atrpms.net/~hdegoede/libv4l-0.5.8.tar.gz">0.5.8</a>
    565   </li>
    566   <li>Simple V4L2 video viewer: <a href="http://moinejf.free.fr/svv.c">svv.c</a>,
    567       writen by <a href="http://moinejf.free.fr/">Jean-Franois Moine</a>
    568   </li>
    569 </ul>
    570 <p>
    571 For USB or V4L loopback testing:
    572 </p>
    573 <ul>
    574   <li>
    575   <a href="http://sourceforge.net/projects/usbip/">USB/IP</a>
    576   </li>
    577   <li>
    578   <a href="http://www.linux-usb.org/gadget/">Linux-USB Gadget API Framework</a>
    579   </li>
    580   <li>
    581   <a href="http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice">
    582   Video4Linux Loopback Device
    583   </a>
    584   </li>
    585 </ul>
    586 <p>
    587 And what else can we read if we are looking for webcam test ideas:
    588 </p>
    589 <ul>
    590   <li>
    591   <a href="http://www.microsoft.com/whdc/device/media/vidcap-drvtest.mspx">
    592   Testing Windows Video Capture Drivers
    593   </a>
    594   </li>
    595   <li>
    596   <a href="http://www.microsoft.com/whdc/device/media/WebCam_VidTests.mspx">
    597   Webcam Video Fidelity Tests
    598   </a>
    599 </ul>
    600 
    601 <h2><a name="feedback">Feedbacks</a></h2>
    602 <p>Any feedbacks, comments, ideas, etc. are welcome at the author's email address.
    603 You can find the email address in the source package in the README file.</p>
    604 <hr style="width: 100%; height: 2px;">
    605 <p>Last changed:
    606 Thu Jul 23 06:47:49 CEST 2009
    607 </p>
    608 <p>
    609   <a href="http://validator.w3.org/check?uri=referer"><img
    610      src="http://www.w3.org/Icons/valid-html401"
    611      alt="Valid HTML 4.01 Strict" height="31" width="88"></a>
    612   <a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=247983&type=4" width="125" height="37" alt="SourceForge.net Logo"></a>
    613 </p>
    614 
    615 </body>
    616 </html>
    617