Sophie

Sophie

distrib > Mandriva > 2010.1 > x86_64 > media > main-release > by-pkgid > 1af184c486f5d5f476d50602700ee0a0 > files > 33

lib64zvbi-devel-0.2.33-2mdv2010.0.x86_64.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>ZVBI Library: VBI capture device interface</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><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>VBI capture device interface<br>
<small>
[<a class="el" href="group__Raw.html">Raw VBI</a>]</small>
</h1>Platform independent interface to VBI capture device drivers.  
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><b>vbi_capture_buffer</b></td></tr>

<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0ae28639bd50247df2bcda9e79f700d4"></a><!-- doxytag: member="Device::vbi_capture" ref="g0ae28639bd50247df2bcda9e79f700d4" args="" -->
typedef struct <a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opaque device interface handle. <br></td></tr>
<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g963eaf31b897f99aecc8e5607d77f5cc">VBI_CAPTURE_FD_FLAGS</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Device.html#gg963eaf31b897f99aecc8e5607d77f5cc97362e77f99fbf4812f74c79054b96a5">VBI_FD_HAS_SELECT</a> =  1&lt;&lt;0, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Device.html#gg963eaf31b897f99aecc8e5607d77f5cc59852d9c2ea8bbf7f298c48cb336b3df">VBI_FD_HAS_MMAP</a> =  1&lt;&lt;1, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Device.html#gg963eaf31b897f99aecc8e5607d77f5cc12a8ec1f4a85158b41f8457c0d63c2ef">VBI_FD_IS_DEVICE</a> =  1&lt;&lt;2
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properties of capture file handle.  <a href="group__Device.html#g963eaf31b897f99aecc8e5607d77f5cc">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#ga0b81b4226106cf38b541597eff40f2d">vbi_capture_sim_add_noise</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *cap, unsigned int min_freq, unsigned int max_freq, unsigned int amplitude)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g70fb48f27dedf650a3cba0d7470fd47e">vbi_capture_sim_decode_raw</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *cap, vbi_bool enable)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g0663d305bd450136dc0f43ce47d3692c">vbi_capture_sim_new</a> (int scanning, unsigned int *services, vbi_bool interlaced, vbi_bool synchronous)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g85ba4554b337ecb053168bb88f713e5f">vbi_capture_v4l2_new</a> (const char *dev_name, int buffers, unsigned int *services, int strict, char **errorstr, vbi_bool trace)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gcfdfd51fdf1060941f5ef5fc2e69e8e7">vbi_capture_v4l2k_new</a> (const char *dev_name, int fd, int buffers, unsigned int *services, int strict, char **errorstr, vbi_bool trace)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g95a1f12904b62bb7a9324b8ba72f3507">vbi_capture_v4l_new</a> (const char *dev_name, int scanning, unsigned int *services, int strict, char **errorstr, vbi_bool trace)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gb97d3533b2fb01c6b8f0a937ca81b986">vbi_capture_v4l_sidecar_new</a> (const char *dev_name, int given_fd, unsigned int *services, int strict, char **errorstr, vbi_bool trace)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g35992a2ce6a8c9b0c676eb30a52da816">vbi_capture_bktr_new</a> (const char *dev_name, int scanning, unsigned int *services, int strict, char **errstr, vbi_bool trace)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#ge6e4474b6ff1f37313780c40f73ae507">vbi_capture_dvb_filter</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *cap, int pid)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gf211fb350558cde9ce0905f614283769">vbi_capture_dvb_new</a> (char *dev, int scanning, unsigned int *services, int strict, char **errstr, vbi_bool trace) _vbi_deprecated</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g7460e4ad5963e9b901aa4eea108ad24c">vbi_capture_dvb_last_pts</a> (const <a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *cap)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g5e3db7d41909ec8d8da30c8712d8cfdf">vbi_capture_dvb_new2</a> (const char *device_name, unsigned int pid, char **errstr, vbi_bool trace)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gdd95797407676b4d2d31a2cbf6682b4d">vbi_capture_proxy_new</a> (struct <a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, int buffers, int scanning, unsigned int *p_services, int strict, char **pp_errorstr)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g355219890b943b2c366fb0c1f7da0e27">vbi_capture_read_raw</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, void *data, double *timestamp, struct timeval *timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g2bf97281e7004d20029bc9aadbf9ea65">vbi_capture_read_sliced</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, <a class="el" href="structvbi__sliced.html">vbi_sliced</a> *data, int *lines, double *timestamp, struct timeval *timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g55a00f0da8fc248243345acdfc76a22c">vbi_capture_read</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, void *raw_data, <a class="el" href="structvbi__sliced.html">vbi_sliced</a> *sliced_data, int *lines, double *timestamp, struct timeval *timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gc15695974619b04e0765c7edc5995682">vbi_capture_pull_raw</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, vbi_capture_buffer **buffer, struct timeval *timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g59ef49f6211214e5a5f939812cf913b0">vbi_capture_pull_sliced</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, vbi_capture_buffer **buffer, struct timeval *timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g58dcf2387b685b7c1c09a729f07893c8">vbi_capture_pull</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, vbi_capture_buffer **raw_buffer, vbi_capture_buffer **sliced_buffer, struct timeval *timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structvbi__raw__decoder.html">vbi_raw_decoder</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g2d7666a3625938d506046bc6fe1adcc9">vbi_capture_parameters</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gd58b91ceea1da60ce7a591032a691ee8">vbi_capture_fd</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g47f099b5b4285784d72663b2f629e082">vbi_capture_update_services</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, vbi_bool reset, vbi_bool commit, unsigned int services, int strict, char **errorstr)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gd9e2bb5bd6ab0997a5e1739daa168280">vbi_capture_get_scanning</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queries the capture device for the current norm.  <a href="#gd9e2bb5bd6ab0997a5e1739daa168280"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g8c7885a42c125563b77f445aab75d7f4">vbi_capture_flush</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#gec518b62f39b83c80b06cc0a4affbee6">vbi_capture_delete</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">vbi_bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g794cfd70cfdcb9586b7d67a127458da9">vbi_capture_set_video_path</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture, const char *p_dev_video)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set path to video device for TV norm queries.  <a href="#g794cfd70cfdcb9586b7d67a127458da9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Device.html#g963eaf31b897f99aecc8e5607d77f5cc">VBI_CAPTURE_FD_FLAGS</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Device.html#g1fae0f348dc7b2b8239686f6ea5f1228">vbi_capture_get_fd_flags</a> (<a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *capture)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query properties of the capture device file handle.  <a href="#g1fae0f348dc7b2b8239686f6ea5f1228"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Platform independent interface to VBI capture device drivers. <hr><h2>Enumeration Type Documentation</h2>
<a class="anchor" name="g963eaf31b897f99aecc8e5607d77f5cc"></a><!-- doxytag: member="io.h::VBI_CAPTURE_FD_FLAGS" ref="g963eaf31b897f99aecc8e5607d77f5cc" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Device.html#g963eaf31b897f99aecc8e5607d77f5cc">VBI_CAPTURE_FD_FLAGS</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Properties of capture file handle. 
<p>
<dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="gg963eaf31b897f99aecc8e5607d77f5cc97362e77f99fbf4812f74c79054b96a5"></a><!-- doxytag: member="VBI_FD_HAS_SELECT" ref="gg963eaf31b897f99aecc8e5607d77f5cc97362e77f99fbf4812f74c79054b96a5" args="" -->VBI_FD_HAS_SELECT</em>&nbsp;</td><td>
Is set when select(2) can be used to wait for new data on the capture device file handle. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg963eaf31b897f99aecc8e5607d77f5cc59852d9c2ea8bbf7f298c48cb336b3df"></a><!-- doxytag: member="VBI_FD_HAS_MMAP" ref="gg963eaf31b897f99aecc8e5607d77f5cc59852d9c2ea8bbf7f298c48cb336b3df" args="" -->VBI_FD_HAS_MMAP</em>&nbsp;</td><td>
Is set when the capture device supports "user-space DMA". In this case it's more efficient to use one of the "pull" functions to read raw data because otherwise the data has to be copied once more into the passed buffer. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg963eaf31b897f99aecc8e5607d77f5cc12a8ec1f4a85158b41f8457c0d63c2ef"></a><!-- doxytag: member="VBI_FD_IS_DEVICE" ref="gg963eaf31b897f99aecc8e5607d77f5cc12a8ec1f4a85158b41f8457c0d63c2ef" args="" -->VBI_FD_IS_DEVICE</em>&nbsp;</td><td>
Is not set when the capture device file handle is not the actual device. In this case it can only be used for select(2) and not for ioctl(2) </td></tr>
</table>
</dl>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="ga0b81b4226106cf38b541597eff40f2d"></a><!-- doxytag: member="io&#45;sim.h::vbi_capture_sim_add_noise" ref="ga0b81b4226106cf38b541597eff40f2d" args="(vbi_capture *cap, unsigned int min_freq, unsigned int max_freq, unsigned int amplitude)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vbi_capture_sim_add_noise           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>cap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>min_freq</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>max_freq</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>amplitude</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>cap</em>&nbsp;</td><td>Initialized vbi_capture context opened with <a class="el" href="group__Device.html#g0663d305bd450136dc0f43ce47d3692c">vbi_capture_sim_new()</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>min_freq</em>&nbsp;</td><td>Minimum frequency of the noise in Hz. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>max_freq</em>&nbsp;</td><td>Maximum frequency of the noise in Hz. <em>min_freq</em> and <em>max_freq</em> define the cut off frequency at the half power points (gain -3 dB). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>amplitude</em>&nbsp;</td><td>Maximum amplitude of the noise, should lie in range 0 to 256.</td></tr>
  </table>
</dl>
This function shapes the white noise to be added to simulated raw VBI data. By default no noise is added. To disable the noise set <em>amplitude</em> to zero.<p>
To produce realistic noise <em>min_freq</em> = 0, <em>max_freq</em> = 5e6 and <em>amplitude</em> = 20 to 50 seems appropriate.<p>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.26 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g70fb48f27dedf650a3cba0d7470fd47e"></a><!-- doxytag: member="io&#45;sim.h::vbi_capture_sim_decode_raw" ref="g70fb48f27dedf650a3cba0d7470fd47e" args="(vbi_capture *cap, vbi_bool enable)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vbi_capture_sim_decode_raw           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>cap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>enable</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>cap</em>&nbsp;</td><td>Initialized vbi_capture context opened with <a class="el" href="group__Device.html#g0663d305bd450136dc0f43ce47d3692c">vbi_capture_sim_new()</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>enable</em>&nbsp;</td><td><code>TRUE</code> to enable decoding of the simulated raw VBI data.</td></tr>
  </table>
</dl>
By default this module generates sliced VBI data and converts it to raw VBI data, returning both through the read functions. With this function you can enable decoding of the raw VBI data back to sliced VBI data, which is mainly interesting to test the libzvbi bit slicer and raw VBI decoder.<p>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.22 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g0663d305bd450136dc0f43ce47d3692c"></a><!-- doxytag: member="io&#45;sim.h::vbi_capture_sim_new" ref="g0663d305bd450136dc0f43ce47d3692c" args="(int scanning, unsigned int *services, vbi_bool interlaced, vbi_bool synchronous)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_sim_new           </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>scanning</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>interlaced</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>synchronous</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>scanning</em>&nbsp;</td><td>Whether to simulate a device receiving PAL/SECAM (value 625) or NTSC (525) video. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This parameter must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be simulated. On return the services actually simulated will be stored here. Currently Teletext System B, VPS, PAL WSS and PAL/NTSC Closed Caption are supported. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>interlaced</em>&nbsp;</td><td>If <code>TRUE</code> the simulated raw VBI images will be interlaced like video images. Otherwise they will contain fields in sequential order, the first field at the top. Usually real devices provide sequential images. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>synchronous</em>&nbsp;</td><td>If <code>FALSE</code> raw VBI images will be delayed by one field (putting a bottom field first in raw VBI images), simulating defective hardware. The <em>interlaced</em> and <em>synchronous</em> parameters correspond to fields in struct <a class="el" href="structvbi__raw__decoder.html" title="Raw vbi decoder context.">vbi_raw_decoder</a>.</td></tr>
  </table>
</dl>
This function opens a simulated VBI device providing raw and sliced VBI data. It can be used to test applications in absence of a real device.<p>
The VBI data is valid but limited. Just one Teletext page and one line of roll-up caption. The WSS and VPS data is set to defaults, the VPS contains no CNI.<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>The simulation does not run in real time. Reading from the simulated device will return data immediately.</dd></dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure (out of memory).</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.22 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g85ba4554b337ecb053168bb88f713e5f"></a><!-- doxytag: member="io.h::vbi_capture_v4l2_new" ref="g85ba4554b337ecb053168bb88f713e5f" args="(const char *dev_name, int buffers, unsigned int *services, int strict, char **errorstr, vbi_bool trace)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_v4l2_new           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>dev_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>buffers</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev_name</em>&nbsp;</td><td>Name of the device to open, usually one of <code>/dev/vbi</code> or <code>/dev/vbi0</code> and up. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buffers</em>&nbsp;</td><td>Number of device buffers for raw vbi data, when the driver supports streaming. Otherwise one bounce buffer is allocated for <a class="el" href="group__Device.html#g58dcf2387b685b7c1c09a729f07893c8">vbi_capture_pull()</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. If this parameter is <code>NULL</code>, no services will be installed. You can do so later with <a class="el" href="group__Device.html#g47f099b5b4285784d72663b2f629e082">vbi_capture_update_services()</a>; note the reset parameter must be set to <code>TRUE</code> in this case. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress messages on stderr.</td></tr>
  </table>
</dl>
Note: Starting with libzvbi 0.2.9 the V4L2 0.20 API is no longer supported. The function still recognizes V4L2 0.20 drivers for debugging purposes and supports Linux 2.6 V4L2 drivers.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure. </dd></dl>

</div>
</div><p>
<a class="anchor" name="gcfdfd51fdf1060941f5ef5fc2e69e8e7"></a><!-- doxytag: member="io.h::vbi_capture_v4l2k_new" ref="gcfdfd51fdf1060941f5ef5fc2e69e8e7" args="(const char *dev_name, int fd, int buffers, unsigned int *services, int strict, char **errorstr, vbi_bool trace)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_v4l2k_new           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>dev_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>fd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>buffers</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev_name</em>&nbsp;</td><td>Name of the device to open, usually one of <code>/dev/vbi</code> or <code>/dev/vbi0</code> and up. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>fd</em>&nbsp;</td><td>File handle of VBI device if already opened by caller, else value -1. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buffers</em>&nbsp;</td><td>Number of device buffers for raw vbi data, when the driver supports streaming. Otherwise one bounce buffer is allocated for <a class="el" href="group__Device.html#g58dcf2387b685b7c1c09a729f07893c8">vbi_capture_pull()</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. If this parameter is <code>NULL</code>, no services will be installed. You can do so later with <a class="el" href="group__Device.html#g47f099b5b4285784d72663b2f629e082">vbi_capture_update_services()</a>; note the reset parameter must be set to <code>TRUE</code> in this case. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress messages on stderr.</td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g95a1f12904b62bb7a9324b8ba72f3507"></a><!-- doxytag: member="io.h::vbi_capture_v4l_new" ref="g95a1f12904b62bb7a9324b8ba72f3507" args="(const char *dev_name, int scanning, unsigned int *services, int strict, char **errorstr, vbi_bool trace)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_v4l_new           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>dev_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>scanning</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev_name</em>&nbsp;</td><td>Name of the device to open, usually one of <code>/dev/vbi</code> or <code>/dev/vbi0</code> and up. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>scanning</em>&nbsp;</td><td>Can be used to specify the current TV norm for old drivers which don't support ioctls to query the current norm. Value is 625 (PAL/SECAM family) or 525 (NTSC family). Set to 0 if you don't know the norm. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. If this parameter is <code>NULL</code>, no services will be installed. You can do so later with <a class="el" href="group__Device.html#g47f099b5b4285784d72663b2f629e082">vbi_capture_update_services()</a>; note the reset parameter must be set to <code>TRUE</code> in this case. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress messages on stderr.</td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure. </dd></dl>

</div>
</div><p>
<a class="anchor" name="gb97d3533b2fb01c6b8f0a937ca81b986"></a><!-- doxytag: member="io.h::vbi_capture_v4l_sidecar_new" ref="gb97d3533b2fb01c6b8f0a937ca81b986" args="(const char *dev_name, int given_fd, unsigned int *services, int strict, char **errorstr, vbi_bool trace)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_v4l_sidecar_new           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>dev_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>given_fd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev_name</em>&nbsp;</td><td>Name of the device to open, usually one of <code>/dev/vbi</code> or <code>/dev/vbi0</code> and up. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>given_fd</em>&nbsp;</td><td>File handle of an already open video device, usually one of <code>/dev/video</code> or <code>/dev/video0</code> and up. Must be assorted with the named vbi device, i.e. refer to the same driver instance and hardware. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. If this parameter is <code>NULL</code>, no services will be installed. You can do so later with <a class="el" href="group__Device.html#g47f099b5b4285784d72663b2f629e082">vbi_capture_update_services()</a>; note the reset parameter must be set to <code>TRUE</code> in this case. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress messages on stderr.</td></tr>
  </table>
</dl>
This functions behaves much like vbi_capture_v4l_new, with the sole difference that it uses the given file handle to determine the current video standard if such queries aren't supported by the VBI device.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g35992a2ce6a8c9b0c676eb30a52da816"></a><!-- doxytag: member="io.h::vbi_capture_bktr_new" ref="g35992a2ce6a8c9b0c676eb30a52da816" args="(const char *dev_name, int scanning, unsigned int *services, int strict, char **errstr, vbi_bool trace)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_bktr_new           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>dev_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>scanning</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev_name</em>&nbsp;</td><td>Name of the device to open. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>scanning</em>&nbsp;</td><td>The current video standard. Value is 625 (PAL/SECAM family) or 525 (NTSC family). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress messages on stderr.</td></tr>
  </table>
</dl>
<dl class="bug" compact><dt><b><a class="el" href="bug.html#_bug000005">Bug:</a></b></dt><dd>You must enable continuous video capturing to read VBI data from the bktr driver, using an RGB video format, and the VBI device must be opened before video capturing starts (METEORCAPTUR).</dd></dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure. </dd></dl>

</div>
</div><p>
<a class="anchor" name="ge6e4474b6ff1f37313780c40f73ae507"></a><!-- doxytag: member="io.h::vbi_capture_dvb_filter" ref="ge6e4474b6ff1f37313780c40f73ae507" args="(vbi_capture *cap, int pid)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_dvb_filter           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>cap</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>pid</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>cap</em>&nbsp;</td><td>Initialized DVB vbi_capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pid</em>&nbsp;</td><td>Filter out a stream with this PID.</td></tr>
  </table>
</dl>
Programs the DVB device transport stream demultiplexer on the DVB capture device to filter out packets with this PID.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on failure, 0 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="gf211fb350558cde9ce0905f614283769"></a><!-- doxytag: member="io.h::vbi_capture_dvb_new" ref="gf211fb350558cde9ce0905f614283769" args="(char *dev, int scanning, unsigned int *services, int strict, char **errstr, vbi_bool trace) _vbi_deprecated" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_dvb_new           </td>
          <td>(</td>
          <td class="paramtype">char *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>scanning</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>Name of the DVB device to open. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>scanning</em>&nbsp;</td><td>Ignored. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>Ignored. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Ignored. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> the function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress and warning messages on stderr.</td></tr>
  </table>
</dl>
<dl class="deprecated" compact><dt><b><a class="el" href="deprecated.html#_deprecated000003">Deprecated:</a></b></dt><dd>This function is deprecated. Use <a class="el" href="group__Device.html#g5e3db7d41909ec8d8da30c8712d8cfdf">vbi_capture_dvb_new2()</a> instead.</dd></dl>
Initializes a vbi_capture context reading from a Linux DVB device. You must call <a class="el" href="group__Device.html#ge6e4474b6ff1f37313780c40f73ae507">vbi_capture_dvb_filter()</a> before you can read.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure.</dd></dl>
<dl class="bug" compact><dt><b><a class="el" href="bug.html#_bug000007">Bug:</a></b></dt><dd>This function ignores the scanning, services and strict parameter. The read method of this DVB capture context returns -1 on timeout instead of 0. It returns 0 when a single read() does not complete a frame, regardless if the timeout expired. (Decoding resumes with the next call.) Older versions pass select or read EINTR errors back to the caller. They may return partial frames when VBI data of one frame is distributed across multiple PES packets. They will not return VPS, CC, or WSS data and can malfunction or segfault given unusual PES streams. On error and select timeout older versions invariably print a warning on stderr. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g7460e4ad5963e9b901aa4eea108ad24c"></a><!-- doxytag: member="io.h::vbi_capture_dvb_last_pts" ref="g7460e4ad5963e9b901aa4eea108ad24c" args="(const vbi_capture *cap)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int64_t vbi_capture_dvb_last_pts           </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>cap</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>cap</em>&nbsp;</td><td>Initialized DVB vbi_capture context.</td></tr>
  </table>
</dl>
Returns the presentation time stamp associated with the data last read from the context. The PTS refers to the first sliced VBI line, not the last packet containing data of that frame.<p>
Note timestamps returned by vbi_capture read functions contain the system time (gettimeofday()) when the packet containing the first sliced line was captured, not the PTS.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Presentation time stamp (33 bits).</dd></dl>
<dl class="bug" compact><dt><b><a class="el" href="bug.html#_bug000006">Bug:</a></b></dt><dd>The read functions should return the PTS along with the capture timestamp.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.13 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g5e3db7d41909ec8d8da30c8712d8cfdf"></a><!-- doxytag: member="io.h::vbi_capture_dvb_new2" ref="g5e3db7d41909ec8d8da30c8712d8cfdf" args="(const char *device_name, unsigned int pid, char **errstr, vbi_bool trace)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a>* vbi_capture_dvb_new2           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>device_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>trace</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>device_name</em>&nbsp;</td><td>Name of the DVB device to open. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pid</em>&nbsp;</td><td>Filter out a stream with this PID. You can pass 0 here and set or change the PID later with <a class="el" href="group__Device.html#ge6e4474b6ff1f37313780c40f73ae507">vbi_capture_dvb_filter()</a>. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errstr</em>&nbsp;</td><td>If not <code>NULL</code> the function stores a pointer to an error description here. You must free() this string when no longer needed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>trace</em>&nbsp;</td><td>If <code>TRUE</code> print progress and warning messages on stderr.</td></tr>
  </table>
</dl>
Initializes a vbi_capture context reading from a Linux DVB device.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.13 </dd></dl>

</div>
</div><p>
<a class="anchor" name="gdd95797407676b4d2d31a2cbf6682b4d"></a><!-- doxytag: member="io.h::vbi_capture_proxy_new" ref="gdd95797407676b4d2d31a2cbf6682b4d" args="(struct vbi_proxy_client *vpc, int buffers, int scanning, unsigned int *p_services, int strict, char **pp_errorstr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> * vbi_capture_proxy_new           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>p_proxy_client</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>buffers</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>scanning</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>p_services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>pp_errorstr</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>p_proxy_client</em>&nbsp;</td><td>Reference to an initialized proxy client context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buffers</em>&nbsp;</td><td>Number of intermediate buffers on server side of the proxy socket connection. (Note this is not related to the device buffer count parameter of <em>v4l2_new</em> et.al.) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>scanning</em>&nbsp;</td><td>This indicates the current norm: 625 for PAL and 525 for NTSC; set to 0 if you don't know (you should not attempt to query the device for the norm, as this parameter is only required for v4l1 drivers which don't support video standard query ioctls) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. If this parameter is <code>NULL</code>, no services will be installed. You can do so later with <a class="el" href="group__Device.html#g47f099b5b4285784d72663b2f629e082">vbi_capture_update_services()</a>; note the reset parameter must be set to <code>TRUE</code> in this case. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pp_errorstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed.</td></tr>
  </table>
</dl>
Open a new connection to a VBI proxy to open a VBI device for the given services. On side of the proxy daemon, one of the regular capture context creation functions (e.g. v4l2_new) is invoked. If the creation succeeds, and any of the requested services are available, capturing is started and all captured data is forwarded transparently to the client.<p>
Whenever possible the proxy should be used instead of opening the device directly, since it allows the user to start multiple VBI clients in parallel. When this function fails (usually because the user hasn't started the proxy daemon) applications should automatically fall back to opening the device directly.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized vbi_capture context, <code>NULL</code> on failure.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g355219890b943b2c366fb0c1f7da0e27"></a><!-- doxytag: member="io.h::vbi_capture_read_raw" ref="g355219890b943b2c366fb0c1f7da0e27" args="(vbi_capture *capture, void *data, double *timestamp, struct timeval *timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_read_raw           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timeval *&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi_capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>Store the raw vbi data here. Use <a class="el" href="group__Device.html#g2d7666a3625938d506046bc6fe1adcc9">vbi_capture_parameters()</a> to determine the buffer size. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timestamp</em>&nbsp;</td><td>On success the capture instant in seconds and fractions since 1970-01-01 00:00 of the video frame will be stored here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>Wait timeout, will be read only.</td></tr>
  </table>
</dl>
Read a raw vbi frame from the capture device.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error, examine <code>errno</code> for details. The function also fails if vbi data is not available in raw format. 0 on timeout, 1 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g2bf97281e7004d20029bc9aadbf9ea65"></a><!-- doxytag: member="io.h::vbi_capture_read_sliced" ref="g2bf97281e7004d20029bc9aadbf9ea65" args="(vbi_capture *capture, vbi_sliced *data, int *lines, double *timestamp, struct timeval *timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_read_sliced           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structvbi__sliced.html">vbi_sliced</a> *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>lines</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timeval *&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>Stores the sliced vbi data here. Use <a class="el" href="group__Device.html#g2d7666a3625938d506046bc6fe1adcc9">vbi_capture_parameters()</a> to determine the buffer size. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>lines</em>&nbsp;</td><td>Stores number of vbi lines decoded and stored in <em>data</em>, which can be zero, here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timestamp</em>&nbsp;</td><td>On success the capture instant in seconds and fractions since 1970-01-01 00:00 will be stored here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>Wait timeout, will be read only.</td></tr>
  </table>
</dl>
Read a sliced vbi frame, that is an array of <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a> structures, from the capture device.<p>
Note: it's generally more efficient to use <a class="el" href="group__Device.html#g59ef49f6211214e5a5f939812cf913b0">vbi_capture_pull_sliced()</a> instead, as that one may avoid having to copy sliced data into the given buffer (e.g. for the VBI proxy)<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error, examine <code>errno</code> for details. 0 on timeout, 1 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g55a00f0da8fc248243345acdfc76a22c"></a><!-- doxytag: member="io.h::vbi_capture_read" ref="g55a00f0da8fc248243345acdfc76a22c" args="(vbi_capture *capture, void *raw_data, vbi_sliced *sliced_data, int *lines, double *timestamp, struct timeval *timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_read           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>raw_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structvbi__sliced.html">vbi_sliced</a> *&nbsp;</td>
          <td class="paramname"> <em>sliced_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>lines</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timeval *&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>raw_data</em>&nbsp;</td><td>Stores the raw vbi data here. Use <a class="el" href="group__Device.html#g2d7666a3625938d506046bc6fe1adcc9">vbi_capture_parameters()</a> to determine the buffer size. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>sliced_data</em>&nbsp;</td><td>Stores the sliced vbi data here. Use <a class="el" href="group__Device.html#g2d7666a3625938d506046bc6fe1adcc9">vbi_capture_parameters()</a> to determine the buffer size. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>lines</em>&nbsp;</td><td>Stores number of vbi lines decoded and stored in <em>data</em>, which can be zero, here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timestamp</em>&nbsp;</td><td>On success the capture instant in seconds and fractions since 1970-01-01 00:00 will be stored here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>Wait timeout, will be read only.</td></tr>
  </table>
</dl>
Read a raw vbi frame from the capture device, decode to sliced data and also read the sliced vbi frame, that is an array of <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a> structures, from the capture device.<p>
Note: depending on the driver, captured raw data may have to be copied from the capture buffer into the given buffer (e.g. for v4l2 streams which use memory mapped buffers.) It's generally more efficient to use one of the <a class="el" href="group__Device.html#g58dcf2387b685b7c1c09a729f07893c8">vbi_capture_pull()</a> interfaces, especially if you don't require access to raw data at all.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error, examine <code>errno</code> for details. The function also fails if vbi data is not available in raw format. 0 on timeout, 1 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="gc15695974619b04e0765c7edc5995682"></a><!-- doxytag: member="io.h::vbi_capture_pull_raw" ref="gc15695974619b04e0765c7edc5995682" args="(vbi_capture *capture, vbi_capture_buffer **buffer, struct timeval *timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_pull_raw           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_capture_buffer **&nbsp;</td>
          <td class="paramname"> <em>buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timeval *&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buffer</em>&nbsp;</td><td>Store pointer to a vbi_capture_buffer here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>Wait timeout, will be read only.</td></tr>
  </table>
</dl>
Read a raw vbi frame from the capture device, returning a pointer to the image in <em>buffer-&gt;data</em>, which has <em>buffer-&gt;size</em>. The data remains valid until the next <a class="el" href="group__Device.html#gc15695974619b04e0765c7edc5995682">vbi_capture_pull_raw()</a> call and must be read only.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error, examine <code>errno</code> for details. The function also fails if vbi data is not available in raw format. 0 on timeout, 1 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g59ef49f6211214e5a5f939812cf913b0"></a><!-- doxytag: member="io.h::vbi_capture_pull_sliced" ref="g59ef49f6211214e5a5f939812cf913b0" args="(vbi_capture *capture, vbi_capture_buffer **buffer, struct timeval *timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_pull_sliced           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_capture_buffer **&nbsp;</td>
          <td class="paramname"> <em>buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timeval *&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buffer</em>&nbsp;</td><td>Store pointer to a vbi_capture_buffer here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>Wait timeout, will be read only.</td></tr>
  </table>
</dl>
Read a sliced vbi frame, that is an array of <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a>, from the capture device, returning a pointer to the array as <em>buffer-&gt;data</em>. <em>buffer-&gt;size</em> is the size of the array, that is the number of lines decoded, which can be zero, <em>times the size of structure <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a></em>. The data remains valid until the next <a class="el" href="group__Device.html#g59ef49f6211214e5a5f939812cf913b0">vbi_capture_pull_sliced()</a> call and must be read only.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error, examine <code>errno</code> for details. 0 on timeout, 1 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g58dcf2387b685b7c1c09a729f07893c8"></a><!-- doxytag: member="io.h::vbi_capture_pull" ref="g58dcf2387b685b7c1c09a729f07893c8" args="(vbi_capture *capture, vbi_capture_buffer **raw_buffer, vbi_capture_buffer **sliced_buffer, struct timeval *timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_pull           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_capture_buffer **&nbsp;</td>
          <td class="paramname"> <em>raw_buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_capture_buffer **&nbsp;</td>
          <td class="paramname"> <em>sliced_buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timeval *&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>raw_buffer</em>&nbsp;</td><td>Store pointer to a vbi_capture_buffer here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>sliced_buffer</em>&nbsp;</td><td>Store pointer to a vbi_capture_buffer here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>Wait timeout, will be read only.</td></tr>
  </table>
</dl>
Read a raw vbi frame from the capture device and decode to sliced data. Both raw and sliced data is returned, a pointer to the raw image as raw_buffer-&gt;data and a pointer to an array of <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a> as sliced_buffer-&gt;data. Note sliced_buffer-&gt;size is the size of the array in bytes. That is the number of lines decoded, which can be zero, times the size of the <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a> structure.<p>
The raw and sliced data remains valid until the next <a class="el" href="group__Device.html#g58dcf2387b685b7c1c09a729f07893c8">vbi_capture_pull()</a> call and must be read only.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>-1 on error, examine <code>errno</code> for details. The function also fails if vbi data is not available in raw format. 0 on timeout, 1 on success. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g2d7666a3625938d506046bc6fe1adcc9"></a><!-- doxytag: member="io.h::vbi_capture_parameters" ref="g2d7666a3625938d506046bc6fe1adcc9" args="(vbi_capture *capture)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structvbi__raw__decoder.html">vbi_raw_decoder</a>* vbi_capture_parameters           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context.</td></tr>
  </table>
</dl>
Describe the captured data. Raw vbi frames consist of <a class="el" href="structvbi__raw__decoder.html#b77ddf5224b63d84d66c36daded1ab90">vbi_raw_decoder.count</a>[0] + <a class="el" href="structvbi__raw__decoder.html#b77ddf5224b63d84d66c36daded1ab90">vbi_raw_decoder.count</a>[1] lines in <a class="el" href="structvbi__raw__decoder.html#042431c6c0abab3eeecce4f9a014bd1d">vbi_raw_decoder.sampling_format</a>, each <a class="el" href="structvbi__raw__decoder.html#0610feb3dba297670cadb678d8370e80">vbi_raw_decoder.bytes_per_line</a>. Sliced vbi arrays consist of zero to <a class="el" href="structvbi__raw__decoder.html#b77ddf5224b63d84d66c36daded1ab90">vbi_raw_decoder.count</a>[0] + <a class="el" href="structvbi__raw__decoder.html#b77ddf5224b63d84d66c36daded1ab90">vbi_raw_decoder.count</a>[1] <a class="el" href="structvbi__sliced.html" title="This structure holds one scan line of sliced vbi data.">vbi_sliced</a> structures.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Pointer to a <a class="el" href="structvbi__raw__decoder.html" title="Raw vbi decoder context.">vbi_raw_decoder</a> structure, read only. </dd></dl>

</div>
</div><p>
<a class="anchor" name="gd58b91ceea1da60ce7a591032a691ee8"></a><!-- doxytag: member="io.h::vbi_capture_fd" ref="gd58b91ceea1da60ce7a591032a691ee8" args="(vbi_capture *capture)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_fd           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context, can be <code>NULL</code>.</td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>The file descriptor used to read from the device. If not applicable (e.g. when using the proxy) or the <em>capture</em> context is invalid -1 will be returned. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g47f099b5b4285784d72663b2f629e082"></a><!-- doxytag: member="io.h::vbi_capture_update_services" ref="g47f099b5b4285784d72663b2f629e082" args="(vbi_capture *capture, vbi_bool reset, vbi_bool commit, unsigned int services, int strict, char **errorstr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int vbi_capture_update_services           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>reset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool&nbsp;</td>
          <td class="paramname"> <em>commit</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>services</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>strict</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>errorstr</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>reset</em>&nbsp;</td><td><code>TRUE</code> to clear all previous services before adding new ones (by invoking <a class="el" href="group__Rawdec.html#geeda3450a070ed6825a9918dc81f1c33">vbi_raw_decoder_reset()</a> at the appropriate time.) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>commit</em>&nbsp;</td><td><code>TRUE</code> to apply all previously added services to the device; when doing subsequent calls of this function, commit should be set <code>TRUE</code> for the last call. Reading data cannot continue before changes were commited (because capturing has to be suspended to allow resizing the VBI image.) Note this flag is ignored when using the VBI proxy. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>services</em>&nbsp;</td><td>This must point to a set of <a class="el" href="sliced_8h.html#VBI_SLICED_">VBI_SLICED_</a> symbols describing the data services to be decoded. On return the services actually decodable will be stored here. See vbi_raw_decoder_add() for details. If you want to capture raw data only, set to <code>VBI_SLICED_VBI_525</code>, <code>VBI_SLICED_VBI_625</code> or both. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>strict</em>&nbsp;</td><td>Will be passed to vbi_raw_decoder_add(). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>errorstr</em>&nbsp;</td><td>If not <code>NULL</code> this function stores a pointer to an error description here. You must free() this string when no longer needed.</td></tr>
  </table>
</dl>
Add and/or remove one or more services to an already initialized capture context. Can be used to dynamically change the set of active services. Internally the function will restart parameter negotiation with the VBI device driver and then call <a class="el" href="group__Rawdec.html#g18c46d4a4885261c45e32e8eb509d1b9">vbi_raw_decoder_add_services()</a>. You may call <a class="el" href="group__Rawdec.html#geeda3450a070ed6825a9918dc81f1c33">vbi_raw_decoder_reset()</a> before using this function to rebuild your service mask from scratch. Note that the number of VBI lines may change with this call (even if a negative result is returned) so you have to check the size of your buffers.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Bitmask of supported services among those requested (not including previously added services), 0 upon errors. </dd></dl>

</div>
</div><p>
<a class="anchor" name="gd9e2bb5bd6ab0997a5e1739daa168280"></a><!-- doxytag: member="io.h::vbi_capture_get_scanning" ref="gd9e2bb5bd6ab0997a5e1739daa168280" args="(vbi_capture *capture)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_capture_get_scanning           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Queries the capture device for the current norm. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context.</td></tr>
  </table>
</dl>
This function is intended to allow the application to check for asynchronous norm changes, i.e. by a different application using the same device.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Value 625 for PAL/SECAM norms, 525 for NTSC; 0 if unknown, -1 on error. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g8c7885a42c125563b77f445aab75d7f4"></a><!-- doxytag: member="io.h::vbi_capture_flush" ref="g8c7885a42c125563b77f445aab75d7f4" args="(vbi_capture *capture)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vbi_capture_flush           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context.</td></tr>
  </table>
</dl>
After a channel change this function should be used to discard all VBI data in intermediate buffers which may still originate from the previous channel. 
</div>
</div><p>
<a class="anchor" name="gec518b62f39b83c80b06cc0a4affbee6"></a><!-- doxytag: member="io.h::vbi_capture_delete" ref="gec518b62f39b83c80b06cc0a4affbee6" args="(vbi_capture *capture)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vbi_capture_delete           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context, can be <code>NULL</code>.</td></tr>
  </table>
</dl>
Free all resources associated with the <em>capture</em> context. 
</div>
</div><p>
<a class="anchor" name="g794cfd70cfdcb9586b7d67a127458da9"></a><!-- doxytag: member="io.h::vbi_capture_set_video_path" ref="g794cfd70cfdcb9586b7d67a127458da9" args="(vbi_capture *capture, const char *p_dev_video)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">vbi_bool vbi_capture_set_video_path           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>p_dev_video</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set path to video device for TV norm queries. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_dev_video</em>&nbsp;</td><td>Path to a video device (e.g. /dev/video) which refers to the same hardware as the VBI device which is used for capturing. Note: only useful for old video4linux drivers which don't support norm queries through VBI devices.</td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Returns <code>TRUE</code> if the configuration option and parameters are supported; else <code>FALSE</code>. </dd></dl>

</div>
</div><p>
<a class="anchor" name="g1fae0f348dc7b2b8239686f6ea5f1228"></a><!-- doxytag: member="io.h::vbi_capture_get_fd_flags" ref="g1fae0f348dc7b2b8239686f6ea5f1228" args="(vbi_capture *capture)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Device.html#g963eaf31b897f99aecc8e5607d77f5cc">VBI_CAPTURE_FD_FLAGS</a> vbi_capture_get_fd_flags           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Device.html#g0ae28639bd50247df2bcda9e79f700d4">vbi_capture</a> *&nbsp;</td>
          <td class="paramname"> <em>capture</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Query properties of the capture device file handle. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>capture</em>&nbsp;</td><td>Initialized vbi capture context. </td></tr>
  </table>
</dl>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Wed May 27 04:47:58 2009 for ZVBI Library 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>