Sophie

Sophie

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

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 proxy 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 proxy interface<br>
<small>
[<a class="el" href="group__Raw.html">Raw VBI</a>]</small>
</h1>Receiving sliced or raw data from VBI proxy daemon.  
<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"><a class="el" href="structvbi__channel__profile.html">vbi_channel_profile</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Proxy scheduler parameters for background channel switching.  <a href="structvbi__channel__profile.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4005728b4ad4d31d9fefeb5276ceaaec"></a><!-- doxytag: member="Proxy::VBIPROXY_VERSION" ref="g4005728b4ad4d31d9fefeb5276ceaaec" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g4005728b4ad4d31d9fefeb5276ceaaec">VBIPROXY_VERSION</a>&nbsp;&nbsp;&nbsp;0x00000100</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Proxy protocol version: major, minor and patchlevel. <br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Proxy client context.  <a href="#gab2f04f908db9ebbf164b449627a14d5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g6167d8b953d67d12588d8498683febb0">VBI_PROXY_CLIENT_CALLBACK</a> (void *p_client_data, <a class="el" href="group__Proxy.html#gbfd77fe6f5a861be3b969296dbf3d5e6">VBI_PROXY_EV_TYPE</a> ev_mask)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Function prototype for proxy client callback.  <a href="#g6167d8b953d67d12588d8498683febb0"></a><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__Proxy.html#gbfd77fe6f5a861be3b969296dbf3d5e6">VBI_PROXY_EV_TYPE</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggbfd77fe6f5a861be3b969296dbf3d5e6285660044a32dd0580e4622268c00082">VBI_PROXY_EV_CHN_GRANTED</a> =  1&lt;&lt;0, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggbfd77fe6f5a861be3b969296dbf3d5e6ddcfbfc01b52bdfe124ea9f42be241b8">VBI_PROXY_EV_CHN_CHANGED</a> =  1&lt;&lt;1, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggbfd77fe6f5a861be3b969296dbf3d5e615cb820873d66434caa0a6d2c570e1bb">VBI_PROXY_EV_NORM_CHANGED</a> =  1&lt;&lt;2, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggbfd77fe6f5a861be3b969296dbf3d5e60028ea2bc152c1c64ab36c8c5dc77e6b">VBI_PROXY_EV_CHN_RECLAIMED</a> =  1&lt;&lt;3, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggbfd77fe6f5a861be3b969296dbf3d5e6835427be7576f6d4382b1f33f4ceb0d3">VBI_PROXY_EV_NONE</a> =  0
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Bits in event mask parameter to proxy client callback function.  <a href="group__Proxy.html#gbfd77fe6f5a861be3b969296dbf3d5e6">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g28e1cf279bbebd767bb0306d58f23c12">VBI_PROXY_SUSPEND</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg28e1cf279bbebd767bb0306d58f23c12a16b05f1dad8d4d55c048e254bffd026">VBI_PROXY_SUSPEND_START</a>, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg28e1cf279bbebd767bb0306d58f23c120d9f01abd95b7fbc3c2e43f0fa14b1ae">VBI_PROXY_SUSPEND_STOP</a>
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modes for channel suspend requests.  <a href="group__Proxy.html#g28e1cf279bbebd767bb0306d58f23c12">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g9ca63563efa7a5d9a8bb6c7adf340a35">VBI_CHN_PRIO</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg9ca63563efa7a5d9a8bb6c7adf340a356962df92254babcc38cedc34b2cedff0">VBI_CHN_PRIO_BACKGROUND</a> =  1, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg9ca63563efa7a5d9a8bb6c7adf340a35668674cf7d12cf074a872eac6dc6c72e">VBI_CHN_PRIO_INTERACTIVE</a> =  2, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg9ca63563efa7a5d9a8bb6c7adf340a350ebe0fbef345199f0285781a11e569f7">VBI_CHN_PRIO_DEFAULT</a> =  VBI_CHN_PRIO_INTERACTIVE, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg9ca63563efa7a5d9a8bb6c7adf340a355b9343488d5c95932fda1b08b4dda059">VBI_CHN_PRIO_RECORD</a> =  3
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Priority levels for channel switching (equivalent to enum v4l2_priority).  <a href="group__Proxy.html#g9ca63563efa7a5d9a8bb6c7adf340a35">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g6fb45c3d8d84da5474293868a0bb19f6">VBI_CHN_SUBPRIO</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg6fb45c3d8d84da5474293868a0bb19f66307bc4f8947e2ac90cc58077ed1067e">VBI_CHN_SUBPRIO_MINIMAL</a> =  0x00, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg6fb45c3d8d84da5474293868a0bb19f6347f5d1cd95d0c29d911ee37876d93d0">VBI_CHN_SUBPRIO_CHECK</a> =  0x10, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg6fb45c3d8d84da5474293868a0bb19f6454cab0d20e7c49b2c6cc40731020318">VBI_CHN_SUBPRIO_UPDATE</a> =  0x20, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg6fb45c3d8d84da5474293868a0bb19f698d4a0b5bc9ca9ba9fb7b2fccea4dbc5">VBI_CHN_SUBPRIO_INITIAL</a> =  0x30, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg6fb45c3d8d84da5474293868a0bb19f6214e0812e830d59685cf4f2f97c9733e">VBI_CHN_SUBPRIO_VPS_PDC</a> =  0x40
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sub-priorities for channel scheduling at "background" priority.  <a href="group__Proxy.html#g6fb45c3d8d84da5474293868a0bb19f6">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#ge91928475c4bcdd0dac2ee99b9cd00cc">VBI_PROXY_DAEMON_FLAGS</a> { <a class="el" href="group__Proxy.html#gge91928475c4bcdd0dac2ee99b9cd00cc358fb7caa13dd304b1e473f8554a3dee">VBI_PROXY_DAEMON_NO_TIMEOUTS</a> =  1&lt;&lt;0
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">General flags sent by the proxy daemon to clients during connect.  <a href="group__Proxy.html#ge91928475c4bcdd0dac2ee99b9cd00cc">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g581f5300956a18bbb02a44781dc4a426">VBI_PROXY_CLIENT_FLAGS</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg581f5300956a18bbb02a44781dc4a426857579ec05cb945ce259968572df7ffb">VBI_PROXY_CLIENT_NO_TIMEOUTS</a> =  1&lt;&lt;0, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gg581f5300956a18bbb02a44781dc4a426af044fb11fdaba2fdd32610e0af2e0aa">VBI_PROXY_CLIENT_NO_STATUS_IND</a> =  1&lt;&lt;1
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">General flags sent by clients to the proxy daemon during connect.  <a href="group__Proxy.html#g581f5300956a18bbb02a44781dc4a426">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#ge4aeb134137c683f751a9f2a8c71dbac">VBI_PROXY_CHN_FLAGS</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gge4aeb134137c683f751a9f2a8c71dbac7cc3ddc1ac2cf3a2f70c4a7b6b479ebb">VBI_PROXY_CHN_RELEASE</a> =  1&lt;&lt;0, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gge4aeb134137c683f751a9f2a8c71dbac1f9975b7c0dff51d8f3eeba591082b79">VBI_PROXY_CHN_TOKEN</a> =  1&lt;&lt;1, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gge4aeb134137c683f751a9f2a8c71dbac5fe94ed6e9ff0a4edf0f44ba8991fd39">VBI_PROXY_CHN_FLUSH</a> =  1&lt;&lt;2, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gge4aeb134137c683f751a9f2a8c71dbac7d790dcd715ab5bb49716906f0336ec2">VBI_PROXY_CHN_NORM</a> =  1&lt;&lt;3, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#gge4aeb134137c683f751a9f2a8c71dbac26b75480c6d3223e2a463f68e9586baa">VBI_PROXY_CHN_FAIL</a> =  1&lt;&lt;4, 
<br>
&nbsp;&nbsp;<b>VBI_PROXY_CHN_NONE</b> =  0
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel notification flags.  <a href="group__Proxy.html#ge4aeb134137c683f751a9f2a8c71dbac">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#gfc94b45e79b4b6e95727eefc4719f886">VBI_DRIVER_API_REV</a> { <br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggfc94b45e79b4b6e95727eefc4719f886f0bcffa97d087fe46399db74d4551209">VBI_API_UNKNOWN</a>, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggfc94b45e79b4b6e95727eefc4719f886dfb540192720d6bfcf3235437ea7322d">VBI_API_V4L1</a>, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggfc94b45e79b4b6e95727eefc4719f886442bf707b98497bd723948b10ec29b30">VBI_API_V4L2</a>, 
<br>
&nbsp;&nbsp;<a class="el" href="group__Proxy.html#ggfc94b45e79b4b6e95727eefc4719f8862fefcd42220b87db61461ac2e1c3eefa">VBI_API_BKTR</a>
<br>
 }</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Identification of the VBI device driver type.  <a href="group__Proxy.html#gfc94b45e79b4b6e95727eefc4719f886">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#gf151aaa16e1e75028ebc14f5806764b1">vbi_proxy_client_create</a> (const char *dev_name, const char *p_client_name, <a class="el" href="group__Proxy.html#g581f5300956a18bbb02a44781dc4a426">VBI_PROXY_CLIENT_FLAGS</a> client_flags, char **pp_errorstr, int trace_level)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#gee5e06c064de7a4beace254ba8fbfe24">vbi_proxy_client_destroy</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc)</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__Proxy.html#g72f0ac4a7555b0b7b800b91da55a5f89">vbi_proxy_client_get_capture_if</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns capture interface for an initialized proxy client.  <a href="#g72f0ac4a7555b0b7b800b91da55a5f89"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Proxy.html#g6167d8b953d67d12588d8498683febb0">VBI_PROXY_CLIENT_CALLBACK</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g8a18d110b84474c80c1e20a58dafc87b">vbi_proxy_client_set_callback</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, <a class="el" href="group__Proxy.html#g6167d8b953d67d12588d8498683febb0">VBI_PROXY_CLIENT_CALLBACK</a> *p_callback, void *p_data)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Installs callback function for asynchronous events.  <a href="#g8a18d110b84474c80c1e20a58dafc87b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__Proxy.html#gfc94b45e79b4b6e95727eefc4719f886">VBI_DRIVER_API_REV</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#gc9e40a9fc8899b4d19658498d977714d">vbi_proxy_client_get_driver_api</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the driver type behind the actual capture device.  <a href="#gc9e40a9fc8899b4d19658498d977714d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g6df1340cb05b5bd3892f68ccdd649431">vbi_proxy_client_channel_request</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, <a class="el" href="group__Proxy.html#g9ca63563efa7a5d9a8bb6c7adf340a35">VBI_CHN_PRIO</a> chn_prio, <a class="el" href="structvbi__channel__profile.html">vbi_channel_profile</a> *chn_profile)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#ge413ccff125269262a6a4512df66af70">vbi_proxy_client_channel_notify</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, <a class="el" href="group__Proxy.html#ge4aeb134137c683f751a9f2a8c71dbac">VBI_PROXY_CHN_FLAGS</a> notify_flags, unsigned int scanning)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g11ec95f6b94e2dd93c0a46cb4a08a98c">vbi_proxy_client_channel_suspend</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, <a class="el" href="group__Proxy.html#g28e1cf279bbebd767bb0306d58f23c12">VBI_PROXY_SUSPEND</a> cmd)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g1d7c1a8a506ae8eec540f62e2551708a">vbi_proxy_client_device_ioctl</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, int request, void *p_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wrapper for ioctl requests on the VBI device.  <a href="#g1d7c1a8a506ae8eec540f62e2551708a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Proxy.html#g30512e9c958d378e7ced6441673b9bd0">vbi_proxy_client_get_channel_desc</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc, unsigned int *p_scanning, vbi_bool *p_granted)</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__Proxy.html#ga411ff2caabf63c07365b1a1696132e9">vbi_proxy_client_has_channel_control</a> (<a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *vpc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query if the client is currently allowed to switch channels.  <a href="#ga411ff2caabf63c07365b1a1696132e9"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Receiving sliced or raw data from VBI proxy daemon. 
<p>
Using the VBI proxy daemon instead of capturing directly from a VBI device allows multiple clients to capture concurrently, e.g. to decode multiple data services. <hr><h2>Typedef Documentation</h2>
<a class="anchor" name="gab2f04f908db9ebbf164b449627a14d5"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client" ref="gab2f04f908db9ebbf164b449627a14d5" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> <a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Proxy client context. 
<p>
A reference to this anonymous structure is returned by vbi_proxy_client_create and must be passed to the device capture interface and/or all subsequent calls to proxy client interface functions. The contents of this structure are private and must not be accessed or changed by the caller. 
</div>
</div><p>
<a class="anchor" name="g6167d8b953d67d12588d8498683febb0"></a><!-- doxytag: member="proxy&#45;client.h::VBI_PROXY_CLIENT_CALLBACK" ref="g6167d8b953d67d12588d8498683febb0" args="(void *p_client_data, VBI_PROXY_EV_TYPE ev_mask)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef void <a class="el" href="group__Proxy.html#g6167d8b953d67d12588d8498683febb0">VBI_PROXY_CLIENT_CALLBACK</a>(void *p_client_data, <a class="el" href="group__Proxy.html#gbfd77fe6f5a861be3b969296dbf3d5e6">VBI_PROXY_EV_TYPE</a> ev_mask)          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Function prototype for proxy client callback. 
<p>
The first parameter is the value which the client passed when installing the callback; it's just passed through to the callback unmodified. The second parameter contains one or more bits to describe which events occured wince the last call. 
</div>
</div><p>
<hr><h2>Enumeration Type Documentation</h2>
<a class="anchor" name="gbfd77fe6f5a861be3b969296dbf3d5e6"></a><!-- doxytag: member="proxy&#45;client.h::VBI_PROXY_EV_TYPE" ref="gbfd77fe6f5a861be3b969296dbf3d5e6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#gbfd77fe6f5a861be3b969296dbf3d5e6">VBI_PROXY_EV_TYPE</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Bits in event mask parameter to proxy client callback function. 
<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="ggbfd77fe6f5a861be3b969296dbf3d5e6285660044a32dd0580e4622268c00082"></a><!-- doxytag: member="VBI_PROXY_EV_CHN_GRANTED" ref="ggbfd77fe6f5a861be3b969296dbf3d5e6285660044a32dd0580e4622268c00082" args="" -->VBI_PROXY_EV_CHN_GRANTED</em>&nbsp;</td><td>
Channel control token was granted, client may now change the channel. Note: client should return the token after the channel change was completed (the channel will still remain reserved for the requested time) </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggbfd77fe6f5a861be3b969296dbf3d5e6ddcfbfc01b52bdfe124ea9f42be241b8"></a><!-- doxytag: member="VBI_PROXY_EV_CHN_CHANGED" ref="ggbfd77fe6f5a861be3b969296dbf3d5e6ddcfbfc01b52bdfe124ea9f42be241b8" args="" -->VBI_PROXY_EV_CHN_CHANGED</em>&nbsp;</td><td>
Channel (e.g. TV tuner frequency) was changed by another client. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggbfd77fe6f5a861be3b969296dbf3d5e615cb820873d66434caa0a6d2c570e1bb"></a><!-- doxytag: member="VBI_PROXY_EV_NORM_CHANGED" ref="ggbfd77fe6f5a861be3b969296dbf3d5e615cb820873d66434caa0a6d2c570e1bb" args="" -->VBI_PROXY_EV_NORM_CHANGED</em>&nbsp;</td><td>
Norm was changed by another client (in a way which affects VBI, e.g. changes between PAL/SECAM are ignored.) The client must update its services, else no data will be forwarded by the proxy until the norm is changed back. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggbfd77fe6f5a861be3b969296dbf3d5e60028ea2bc152c1c64ab36c8c5dc77e6b"></a><!-- doxytag: member="VBI_PROXY_EV_CHN_RECLAIMED" ref="ggbfd77fe6f5a861be3b969296dbf3d5e60028ea2bc152c1c64ab36c8c5dc77e6b" args="" -->VBI_PROXY_EV_CHN_RECLAIMED</em>&nbsp;</td><td>
Proxy requests to return the channel control token. The client is no longer allowed to switch the channel and must immediately reply with a channel notification with flag <code>VBI_PROXY_CHN_TOKEN</code> </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggbfd77fe6f5a861be3b969296dbf3d5e6835427be7576f6d4382b1f33f4ceb0d3"></a><!-- doxytag: member="VBI_PROXY_EV_NONE" ref="ggbfd77fe6f5a861be3b969296dbf3d5e6835427be7576f6d4382b1f33f4ceb0d3" args="" -->VBI_PROXY_EV_NONE</em>&nbsp;</td><td>
Empty event mask </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="g28e1cf279bbebd767bb0306d58f23c12"></a><!-- doxytag: member="proxy&#45;client.h::VBI_PROXY_SUSPEND" ref="g28e1cf279bbebd767bb0306d58f23c12" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#g28e1cf279bbebd767bb0306d58f23c12">VBI_PROXY_SUSPEND</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Modes for channel suspend requests. 
<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="gg28e1cf279bbebd767bb0306d58f23c12a16b05f1dad8d4d55c048e254bffd026"></a><!-- doxytag: member="VBI_PROXY_SUSPEND_START" ref="gg28e1cf279bbebd767bb0306d58f23c12a16b05f1dad8d4d55c048e254bffd026" args="" -->VBI_PROXY_SUSPEND_START</em>&nbsp;</td><td>
Request proxy daemon to stop acquisition (e.g. required by some device drivers to allow a norm change.) Depending on the driver this may result in the proxy closing the device file handle or just stopping the VBI data stream. Note this command is only allowed when the client is in control of the channel. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg28e1cf279bbebd767bb0306d58f23c120d9f01abd95b7fbc3c2e43f0fa14b1ae"></a><!-- doxytag: member="VBI_PROXY_SUSPEND_STOP" ref="gg28e1cf279bbebd767bb0306d58f23c120d9f01abd95b7fbc3c2e43f0fa14b1ae" args="" -->VBI_PROXY_SUSPEND_STOP</em>&nbsp;</td><td>
Restart data acquisition after a previous suspension. </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="g9ca63563efa7a5d9a8bb6c7adf340a35"></a><!-- doxytag: member="proxy&#45;msg.h::VBI_CHN_PRIO" ref="g9ca63563efa7a5d9a8bb6c7adf340a35" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#g9ca63563efa7a5d9a8bb6c7adf340a35">VBI_CHN_PRIO</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Priority levels for channel switching (equivalent to enum v4l2_priority). 
<p>
These priorities are used to cooperativly resolve conflicts between channel requests of multiple capture applications. While a capture application with a higher priority has opened a device, channel change requests of applications with lower priority will fail with error "EBUSY". <dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="gg9ca63563efa7a5d9a8bb6c7adf340a356962df92254babcc38cedc34b2cedff0"></a><!-- doxytag: member="VBI_CHN_PRIO_BACKGROUND" ref="gg9ca63563efa7a5d9a8bb6c7adf340a356962df92254babcc38cedc34b2cedff0" args="" -->VBI_CHN_PRIO_BACKGROUND</em>&nbsp;</td><td>
Priority level to be used for non-interactive, background data harvesting, i.e. applications which permanently run in the background (e.g. teletext cache, EPG data acquisition) </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg9ca63563efa7a5d9a8bb6c7adf340a35668674cf7d12cf074a872eac6dc6c72e"></a><!-- doxytag: member="VBI_CHN_PRIO_INTERACTIVE" ref="gg9ca63563efa7a5d9a8bb6c7adf340a35668674cf7d12cf074a872eac6dc6c72e" args="" -->VBI_CHN_PRIO_INTERACTIVE</em>&nbsp;</td><td>
Interactive (default): should be used when channels are changed on request of the user (e.g. TV viewer, Radio, teletext reader) </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg9ca63563efa7a5d9a8bb6c7adf340a350ebe0fbef345199f0285781a11e569f7"></a><!-- doxytag: member="VBI_CHN_PRIO_DEFAULT" ref="gg9ca63563efa7a5d9a8bb6c7adf340a350ebe0fbef345199f0285781a11e569f7" args="" -->VBI_CHN_PRIO_DEFAULT</em>&nbsp;</td><td>
Default priority for client which have not (yet) set a priority. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg9ca63563efa7a5d9a8bb6c7adf340a355b9343488d5c95932fda1b08b4dda059"></a><!-- doxytag: member="VBI_CHN_PRIO_RECORD" ref="gg9ca63563efa7a5d9a8bb6c7adf340a355b9343488d5c95932fda1b08b4dda059" args="" -->VBI_CHN_PRIO_RECORD</em>&nbsp;</td><td>
Scheduled recording (e.g. PVR): usually only one application should run at this level (although this is not enforced by the proxy daemon, must be checked by the user or applications) </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="g6fb45c3d8d84da5474293868a0bb19f6"></a><!-- doxytag: member="proxy&#45;msg.h::VBI_CHN_SUBPRIO" ref="g6fb45c3d8d84da5474293868a0bb19f6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#g6fb45c3d8d84da5474293868a0bb19f6">VBI_CHN_SUBPRIO</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Sub-priorities for channel scheduling at "background" priority. 
<p>
This enum describes recommended sub-priority levels for channel profiles. They're intended for channel switching through a VBI proxy at background priority level. The daemon uses this priority to decide which request to grant first if there are multiple outstanding requests. To the daemon these are just numbers (highest wins) but for successful cooperation clients need to use agree on values for similar tasks. Hence the following values are recommended: <dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="gg6fb45c3d8d84da5474293868a0bb19f66307bc4f8947e2ac90cc58077ed1067e"></a><!-- doxytag: member="VBI_CHN_SUBPRIO_MINIMAL" ref="gg6fb45c3d8d84da5474293868a0bb19f66307bc4f8947e2ac90cc58077ed1067e" args="" -->VBI_CHN_SUBPRIO_MINIMAL</em>&nbsp;</td><td>
Minimal priority level. Client will get channel control only after all other clients. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg6fb45c3d8d84da5474293868a0bb19f6347f5d1cd95d0c29d911ee37876d93d0"></a><!-- doxytag: member="VBI_CHN_SUBPRIO_CHECK" ref="gg6fb45c3d8d84da5474293868a0bb19f6347f5d1cd95d0c29d911ee37876d93d0" args="" -->VBI_CHN_SUBPRIO_CHECK</em>&nbsp;</td><td>
After phases "initial" or "check" are completed, clients can use this level to continuously check for change marks. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg6fb45c3d8d84da5474293868a0bb19f6454cab0d20e7c49b2c6cc40731020318"></a><!-- doxytag: member="VBI_CHN_SUBPRIO_UPDATE" ref="gg6fb45c3d8d84da5474293868a0bb19f6454cab0d20e7c49b2c6cc40731020318" args="" -->VBI_CHN_SUBPRIO_UPDATE</em>&nbsp;</td><td>
A change in the data transmission has been detected or a long time has passed since the initial reading, so data needs to be read newly. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg6fb45c3d8d84da5474293868a0bb19f698d4a0b5bc9ca9ba9fb7b2fccea4dbc5"></a><!-- doxytag: member="VBI_CHN_SUBPRIO_INITIAL" ref="gg6fb45c3d8d84da5474293868a0bb19f698d4a0b5bc9ca9ba9fb7b2fccea4dbc5" args="" -->VBI_CHN_SUBPRIO_INITIAL</em>&nbsp;</td><td>
Initial reading of data after program start (and long pause since last start); once all data is read the client should lower it's priority. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg6fb45c3d8d84da5474293868a0bb19f6214e0812e830d59685cf4f2f97c9733e"></a><!-- doxytag: member="VBI_CHN_SUBPRIO_VPS_PDC" ref="gg6fb45c3d8d84da5474293868a0bb19f6214e0812e830d59685cf4f2f97c9733e" args="" -->VBI_CHN_SUBPRIO_VPS_PDC</em>&nbsp;</td><td>
Scanning for VPS/PDC labels to wait for the start of a recording. </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="ge91928475c4bcdd0dac2ee99b9cd00cc"></a><!-- doxytag: member="proxy&#45;msg.h::VBI_PROXY_DAEMON_FLAGS" ref="ge91928475c4bcdd0dac2ee99b9cd00cc" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#ge91928475c4bcdd0dac2ee99b9cd00cc">VBI_PROXY_DAEMON_FLAGS</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
General flags sent by the proxy daemon to clients during connect. 
<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="gge91928475c4bcdd0dac2ee99b9cd00cc358fb7caa13dd304b1e473f8554a3dee"></a><!-- doxytag: member="VBI_PROXY_DAEMON_NO_TIMEOUTS" ref="gge91928475c4bcdd0dac2ee99b9cd00cc358fb7caa13dd304b1e473f8554a3dee" args="" -->VBI_PROXY_DAEMON_NO_TIMEOUTS</em>&nbsp;</td><td>
Don't drop connection upon timeouts in socket I/O or message response; Intended for debugging, i.e. when remote party runs in a debugger </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="g581f5300956a18bbb02a44781dc4a426"></a><!-- doxytag: member="proxy&#45;msg.h::VBI_PROXY_CLIENT_FLAGS" ref="g581f5300956a18bbb02a44781dc4a426" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#g581f5300956a18bbb02a44781dc4a426">VBI_PROXY_CLIENT_FLAGS</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
General flags sent by clients to the proxy daemon during connect. 
<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="gg581f5300956a18bbb02a44781dc4a426857579ec05cb945ce259968572df7ffb"></a><!-- doxytag: member="VBI_PROXY_CLIENT_NO_TIMEOUTS" ref="gg581f5300956a18bbb02a44781dc4a426857579ec05cb945ce259968572df7ffb" args="" -->VBI_PROXY_CLIENT_NO_TIMEOUTS</em>&nbsp;</td><td>
Don't drop connection upon timeouts in socket I/O or message response (e.g. when waiting for connect confirm) Intended for debugging, i.e. when remote party runs in a debugger </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gg581f5300956a18bbb02a44781dc4a426af044fb11fdaba2fdd32610e0af2e0aa"></a><!-- doxytag: member="VBI_PROXY_CLIENT_NO_STATUS_IND" ref="gg581f5300956a18bbb02a44781dc4a426af044fb11fdaba2fdd32610e0af2e0aa" args="" -->VBI_PROXY_CLIENT_NO_STATUS_IND</em>&nbsp;</td><td>
Suppress sending of channel change and similar indications, i.e. limit messages to slicer data forward and synchronous messages (i.e. RPC reply). Used to make sure that the proxy client socket only becomes readable when data is available for applications which are not proxy-aware. </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="ge4aeb134137c683f751a9f2a8c71dbac"></a><!-- doxytag: member="proxy&#45;msg.h::VBI_PROXY_CHN_FLAGS" ref="ge4aeb134137c683f751a9f2a8c71dbac" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#ge4aeb134137c683f751a9f2a8c71dbac">VBI_PROXY_CHN_FLAGS</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Channel notification flags. 
<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="gge4aeb134137c683f751a9f2a8c71dbac7cc3ddc1ac2cf3a2f70c4a7b6b479ebb"></a><!-- doxytag: member="VBI_PROXY_CHN_RELEASE" ref="gge4aeb134137c683f751a9f2a8c71dbac7cc3ddc1ac2cf3a2f70c4a7b6b479ebb" args="" -->VBI_PROXY_CHN_RELEASE</em>&nbsp;</td><td>
Revoke a previous channel request and return the channel switch token to the daemon. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gge4aeb134137c683f751a9f2a8c71dbac1f9975b7c0dff51d8f3eeba591082b79"></a><!-- doxytag: member="VBI_PROXY_CHN_TOKEN" ref="gge4aeb134137c683f751a9f2a8c71dbac1f9975b7c0dff51d8f3eeba591082b79" args="" -->VBI_PROXY_CHN_TOKEN</em>&nbsp;</td><td>
Return the channel token to the daemon without releasing the channel; This should always be done when the channel switch has been completed to allow faster scheduling in the daemon (i.e. the daemon can grant the token to a different client without having to reclaim it first.) </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gge4aeb134137c683f751a9f2a8c71dbac5fe94ed6e9ff0a4edf0f44ba8991fd39"></a><!-- doxytag: member="VBI_PROXY_CHN_FLUSH" ref="gge4aeb134137c683f751a9f2a8c71dbac5fe94ed6e9ff0a4edf0f44ba8991fd39" args="" -->VBI_PROXY_CHN_FLUSH</em>&nbsp;</td><td>
Indicate that the channel was changed and VBI buffer queue must be flushed; Should be called as fast as possible after the channel and/or norm was changed. Note this affects other clients' capturing too, so use with care. Other clients will be informed about this change by a channel change indication. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gge4aeb134137c683f751a9f2a8c71dbac7d790dcd715ab5bb49716906f0336ec2"></a><!-- doxytag: member="VBI_PROXY_CHN_NORM" ref="gge4aeb134137c683f751a9f2a8c71dbac7d790dcd715ab5bb49716906f0336ec2" args="" -->VBI_PROXY_CHN_NORM</em>&nbsp;</td><td>
Indicate a norm change. The new norm should be supplied in the scanning parameter in cae the daemon is not able to determine it from the device directly. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="gge4aeb134137c683f751a9f2a8c71dbac26b75480c6d3223e2a463f68e9586baa"></a><!-- doxytag: member="VBI_PROXY_CHN_FAIL" ref="gge4aeb134137c683f751a9f2a8c71dbac26b75480c6d3223e2a463f68e9586baa" args="" -->VBI_PROXY_CHN_FAIL</em>&nbsp;</td><td>
Indicate that the client failed to switch the channel because the device was busy. Used to notify the channel scheduler that the current time slice cannot be used by the client. If the client isn't able to schedule periodic re-attempts it should also return the token. </td></tr>
</table>
</dl>

</div>
</div><p>
<a class="anchor" name="gfc94b45e79b4b6e95727eefc4719f886"></a><!-- doxytag: member="proxy&#45;msg.h::VBI_DRIVER_API_REV" ref="gfc94b45e79b4b6e95727eefc4719f886" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__Proxy.html#gfc94b45e79b4b6e95727eefc4719f886">VBI_DRIVER_API_REV</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Identification of the VBI device driver type. 
<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="ggfc94b45e79b4b6e95727eefc4719f886f0bcffa97d087fe46399db74d4551209"></a><!-- doxytag: member="VBI_API_UNKNOWN" ref="ggfc94b45e79b4b6e95727eefc4719f886f0bcffa97d087fe46399db74d4551209" args="" -->VBI_API_UNKNOWN</em>&nbsp;</td><td>
Unknown device API - only used in error cases. Normally the proxy will always be aware of the driver API as it's determined by the type of capture context creation function used when the device is opened. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfc94b45e79b4b6e95727eefc4719f886dfb540192720d6bfcf3235437ea7322d"></a><!-- doxytag: member="VBI_API_V4L1" ref="ggfc94b45e79b4b6e95727eefc4719f886dfb540192720d6bfcf3235437ea7322d" args="" -->VBI_API_V4L1</em>&nbsp;</td><td>
Video4Linux version 1 (i.e. Linux kernels 2.4 or older or old device drivers which have not been ported yet) </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfc94b45e79b4b6e95727eefc4719f886442bf707b98497bd723948b10ec29b30"></a><!-- doxytag: member="VBI_API_V4L2" ref="ggfc94b45e79b4b6e95727eefc4719f886442bf707b98497bd723948b10ec29b30" args="" -->VBI_API_V4L2</em>&nbsp;</td><td>
Video4Linux version 2 (i.e. Linux kernels 2.6 and later) </td></tr>
<tr><td valign="top"><em><a class="anchor" name="ggfc94b45e79b4b6e95727eefc4719f8862fefcd42220b87db61461ac2e1c3eefa"></a><!-- doxytag: member="VBI_API_BKTR" ref="ggfc94b45e79b4b6e95727eefc4719f8862fefcd42220b87db61461ac2e1c3eefa" args="" -->VBI_API_BKTR</em>&nbsp;</td><td>
BSD Brooktree capture driver. </td></tr>
</table>
</dl>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gf151aaa16e1e75028ebc14f5806764b1"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_create" ref="gf151aaa16e1e75028ebc14f5806764b1" args="(const char *dev_name, const char *p_client_name, VBI_PROXY_CLIENT_FLAGS client_flags, char **pp_errorstr, int trace_level)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a>* vbi_proxy_client_create           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>p_dev_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>p_client_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#g581f5300956a18bbb02a44781dc4a426">VBI_PROXY_CLIENT_FLAGS</a>&nbsp;</td>
          <td class="paramname"> <em>client_flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>pp_errorstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>trace_level</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_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. Note: should be the same path as used by the proxy daemon, else the client may not be able to connect. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_client_name</em>&nbsp;</td><td>Name of the client application, typically identical to argv[0] (without the path though) Can be used by the proxy daemon to fine-tune scheduling or to present the user with a list of currently connected applications. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>client_flags</em>&nbsp;</td><td>Can contain one or more members of VBI_PROXY_CLIENT_FLAGS </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>
    <tr><td valign="top"></td><td valign="top"><em>trace_level</em>&nbsp;</td><td>Enable debug output to stderr if non-zero. Larger values produce more output.</td></tr>
  </table>
</dl>
This function initializes a proxy daemon client context with the given parameters. (Note this function does not yet connect the daemon.)<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Initialized proxy client 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="gee5e06c064de7a4beace254ba8fbfe24"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_destroy" ref="gee5e06c064de7a4beace254ba8fbfe24" args="(vbi_proxy_client *vpc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vbi_proxy_client_destroy           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context</td></tr>
  </table>
</dl>
This function closes the connection to the proxy daemon and frees all resources. The given context must no longer be used after this function was called. If the context was used via the capture device interface, the vbi_capture context must be destroyed first.<p>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g72f0ac4a7555b0b7b800b91da55a5f89"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_get_capture_if" ref="g72f0ac4a7555b0b7b800b91da55a5f89" args="(vbi_proxy_client *vpc)" -->
<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_proxy_client_get_capture_if           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Returns capture interface for an initialized proxy client. 
<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>vpc</em>&nbsp;</td><td>Pointer to initialized and active proxy client context</td></tr>
  </table>
</dl>
This function is for convenience only: it returns the same pointer as the previous call to <a class="el" href="group__Device.html#gdd95797407676b4d2d31a2cbf6682b4d">vbi_capture_proxy_new()</a>, so that the client need not store it. This pointer is required for function calls through the capture device API (e.g. reading raw or sliced data)<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Pointer to a vbi_capture structure, should be treated as void * by caller, i.e. acessed neither for read nor write. Returns <code>NULL</code> upon error (i.e. if the client is not connected to the daemon)</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g8a18d110b84474c80c1e20a58dafc87b"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_set_callback" ref="g8a18d110b84474c80c1e20a58dafc87b" args="(vbi_proxy_client *vpc, VBI_PROXY_CLIENT_CALLBACK *p_callback, void *p_data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Proxy.html#g6167d8b953d67d12588d8498683febb0">VBI_PROXY_CLIENT_CALLBACK</a>* vbi_proxy_client_set_callback           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#g6167d8b953d67d12588d8498683febb0">VBI_PROXY_CLIENT_CALLBACK</a> *&nbsp;</td>
          <td class="paramname"> <em>p_callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>p_data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Installs callback function for asynchronous events. 
<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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_callback</em>&nbsp;</td><td>Pointer to callback function </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_data</em>&nbsp;</td><td>Void pointer which will be passed through to the callback function unmodified.</td></tr>
  </table>
</dl>
This function installs a callback function which will be invoked upon asynchronous events (e.g. channel changes by other clients.) Since the proxy client has no "life" on it's own (i.e. it's not using an internal thread or process) callbacks will only occur from inside other proxy client function calls. The client's file description will become readable when an asynchronous message has arrived from the daemon. Typically the application then will call read to obtain sliced data and the callback will be invoked from inside the read function. Usually in this case the read call will return zero, i.e. indicate an timeout since no actual sliced data has arrived.<p>
Note for channel requests the callback to grant channel control may be invoked before the request function returns. Note you can call any interface function from inside the callback, including the destroy operator.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Returns pointer to the previous callback or <code>NULL</code> if none.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="gc9e40a9fc8899b4d19658498d977714d"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_get_driver_api" ref="gc9e40a9fc8899b4d19658498d977714d" args="(vbi_proxy_client *vpc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__Proxy.html#gfc94b45e79b4b6e95727eefc4719f886">VBI_DRIVER_API_REV</a> vbi_proxy_client_get_driver_api           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Returns the driver type behind the actual capture device. 
<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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context</td></tr>
  </table>
</dl>
This function can be used to query which driver is behind the device which is currently opened by the VBI proxy daemon. Applications which use libzvbi's capture API only need not care about this. The information is only relevant to applications which need to change channels or norms.<p>
The function will fail if the client is currently not connected to the daemon, i.e. VPI capture has to be started first.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Driver type or -1 on error.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g6df1340cb05b5bd3892f68ccdd649431"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_channel_request" ref="g6df1340cb05b5bd3892f68ccdd649431" args="(vbi_proxy_client *vpc, VBI_CHN_PRIO chn_prio, vbi_channel_profile *chn_profile)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_proxy_client_channel_request           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#g9ca63563efa7a5d9a8bb6c7adf340a35">VBI_CHN_PRIO</a>&nbsp;</td>
          <td class="paramname"> <em>chn_prio</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structvbi__channel__profile.html">vbi_channel_profile</a> *&nbsp;</td>
          <td class="paramname"> <em>p_chn_profile</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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>chn_prio</em>&nbsp;</td><td>Channel change priority level. If there are other clients with higher priority the client will be refused any channel changes. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_chn_profile</em>&nbsp;</td><td>Channel profile for scheduling at background priority level.</td></tr>
  </table>
</dl>
This function is used to request permission to switch channels or norm. Since the VBI device can be shared with other proxy clients, clients should wait for permission, so that the proxy daemon can fairly schedule channel requests.<p>
Scheduling differs at the 3 priority levels. For an explanation of priorities see enum VBI_CHN_PRIO. At background level channel changes are coordinated by introduction of a virtual token: only the one client which holds the token is allowed to switch channels. The daemon will wait for the token to be returned before it's granted to another client. This way conflicting channel changes are avoided.<p>
At the upper level the latest request always wins. To avoid interference the application still might wait until it gets indicated that the token has been returned to the daemon.<p>
The token may be granted right away or at a later time, e.g. when it has to be reclaimed from another client first, or if there are other clients with higher priority. If a callback has been registered, it will be invoked when the token arrives; otherwise <a class="el" href="group__Proxy.html#ga411ff2caabf63c07365b1a1696132e9" title="Query if the client is currently allowed to switch channels.">vbi_proxy_client_has_channel_control()</a> can be used to poll for it.<p>
Note: to set the priority level to "background" only without requesting a channel, set the is_valid member in the profile to <code>FALSE</code>.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if change is allowed, 0 if not allowed, -1 on error, examine <code>errno</code> for details.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="ge413ccff125269262a6a4512df66af70"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_channel_notify" ref="ge413ccff125269262a6a4512df66af70" args="(vbi_proxy_client *vpc, VBI_PROXY_CHN_FLAGS notify_flags, unsigned int scanning)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_proxy_client_channel_notify           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#ge4aeb134137c683f751a9f2a8c71dbac">VBI_PROXY_CHN_FLAGS</a>&nbsp;</td>
          <td class="paramname"> <em>notify_flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>scanning</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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>notify_flags</em>&nbsp;</td><td>Combination of event notification bits </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>scanning</em>&nbsp;</td><td>New norm, if norm event bit is set</td></tr>
  </table>
</dl>
Send channel control request to proxy daemon. See description of the flags for details.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 upon success, -1 on error, examine <code>errno</code> for details.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g11ec95f6b94e2dd93c0a46cb4a08a98c"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_channel_suspend" ref="g11ec95f6b94e2dd93c0a46cb4a08a98c" args="(vbi_proxy_client *vpc, VBI_PROXY_SUSPEND cmd)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_proxy_client_channel_suspend           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#g28e1cf279bbebd767bb0306d58f23c12">VBI_PROXY_SUSPEND</a>&nbsp;</td>
          <td class="paramname"> <em>cmd</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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cmd</em>&nbsp;</td><td>Control command</td></tr>
  </table>
</dl>
Request to temporarily suspend capturing<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 upon success, -1 on error, examine <code>errno</code> for details.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g1d7c1a8a506ae8eec540f62e2551708a"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_device_ioctl" ref="g1d7c1a8a506ae8eec540f62e2551708a" args="(vbi_proxy_client *vpc, int request, void *p_arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_proxy_client_device_ioctl           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>request</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>p_arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Wrapper for ioctl requests on the VBI device. 
<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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>request</em>&nbsp;</td><td>Ioctl request code to be passed to driver </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_arg</em>&nbsp;</td><td>Ioctl argument buffer to be passed to driver. For ioctls which return data, the buffer will by modified by the call (i.e. same as if the ioctl had ben called directly) Note the required buffer size depends on the request code.</td></tr>
  </table>
</dl>
This function allows to manipulate parameters of the underlying VBI device. Not all ioctls are allowed here. It's mainly intended to be used for channel enumeration and channel/norm changes. The request codes and parameters are the same as for the actual device. The caller has to query the driver API first and use the respective ioctl codes, same as if the device would be used directly.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Same as for the ioctl, i.e. -1 on error and errno set appropriately. The funtion also will fail with errno <code>EBUSY</code> if the client doesn't have permission to control the channel.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="g30512e9c958d378e7ced6441673b9bd0"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_get_channel_desc" ref="g30512e9c958d378e7ced6441673b9bd0" args="(vbi_proxy_client *vpc, unsigned int *p_scanning, vbi_bool *p_granted)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vbi_proxy_client_get_channel_desc           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&nbsp;</td>
          <td class="paramname"> <em>p_scanning</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vbi_bool *&nbsp;</td>
          <td class="paramname"> <em>p_granted</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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_scanning</em>&nbsp;</td><td>Returns new scanning after channel change </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p_granted</em>&nbsp;</td><td>Returns<code>TRUE</code> if client is currently allowed to switch channels</td></tr>
  </table>
</dl>
Retrieve info sent by the proxy daemon in a channel change indication.<p>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 upon success, -1 on error.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></dl>

</div>
</div><p>
<a class="anchor" name="ga411ff2caabf63c07365b1a1696132e9"></a><!-- doxytag: member="proxy&#45;client.h::vbi_proxy_client_has_channel_control" ref="ga411ff2caabf63c07365b1a1696132e9" args="(vbi_proxy_client *vpc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">vbi_bool vbi_proxy_client_has_channel_control           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__Proxy.html#gab2f04f908db9ebbf164b449627a14d5">vbi_proxy_client</a> *&nbsp;</td>
          <td class="paramname"> <em>vpc</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Query if the client is currently allowed to switch channels. 
<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>vpc</em>&nbsp;</td><td>Pointer to initialized proxy client context</td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Returns <code>TRUE</code> if client is currently allowed to switch channels.</dd></dl>
<dl class="since" compact><dt><b>Since:</b></dt><dd>0.2.9 </dd></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>