Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 56ebf73a8cc21535297a85df4640d63b > files > 128

libccrtp0.7-0.7.2-1mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>RTPQueue class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.10 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindex" href="examples.html">Examples</a> &nbsp; </center>
<hr><h1>RTPQueue  Class Reference</h1>A thread serviced packet queue handler for building different kinds of RTP protocol systems. RTP protocol queue handler. 
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="rtp_8h-source.html">cc++/rtp.h</a>&gt;</code>
<p>
<p>Inheritance diagram for RTPQueue::
<p><center><img src="class_r_t_p_queue.gif" usemap="#RTPQueue_map" border="0"></center>
<map name="RTPQueue_map">
<area href="class_thread.html" alt="Thread" shape="rect" coords="0,56,133,80">
<area href="class_membership_control.html" alt="MembershipControl" shape="rect" coords="143,56,276,80">
<area href="class_members.html" alt="Members" shape="rect" coords="143,0,276,24">
<area href="class_queue_r_t_c_p_manager.html" alt="QueueRTCPManager" shape="rect" coords="0,168,133,192">
<area href="class_r_t_p_duplex.html" alt="RTPDuplex" shape="rect" coords="143,168,276,192">
</map>
<a href="class_r_t_p_queue-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a0">Start</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Make Start public.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a1">getLocalInfo</a> () const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the application description.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a2">isWaiting</a> (const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Determine if packets are waiting in the reception queue.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a3">isCookedWaiting</a> (void) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Determine if cooked packets are waiting in the reception queue.</em> <a href="#a3">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a4">isSending</a> (void) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Determine if outgoing packets are waiting to send.</em> <a href="#a4">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a5">putPacket</a> (uint32 stamp, <a class="el" href="rtp_8h.html#a75">rtp_payload_t</a> payload, const unsigned char *data=NULL, size_t len=0, bool mark=false)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This is used to create a data packet in the send queue.</em> <a href="#a5">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>const <a class="el" href="class_r_t_p_data.html">RTPData</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a6">getCookedPacket</a> (const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Attempt to get a cooked packet.</em> <a href="#a6">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a7">getFirstTimestamp</a> (const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get timestamp of first packet waiting in the queue.</em> <a href="#a7">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint16&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a8">getFirstSequence</a> (const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the sequence id of the first packet waiting.</em> <a href="#a8">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>const <a class="el" href="class_r_t_p_data.html">RTPData</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a9">getPacket</a> (uint32 stamp, const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Retreive data from a specific timestamped packet if such a packet is currently available in the receive buffer.</em> <a href="#a9">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a10">getPacket</a> (uint32 stamp, unsigned char *data, size_t max, const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Retreive data from a specific timestamped packet if such a packet is currently available in the receive buffer.</em> <a href="#a10">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="rtp_8h.html#a75">rtp_payload_t</a>&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a11">getPayloadType</a> (uint32 timestamp, const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the payload type of a specific packet by timestamp.</em> <a href="#a11">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a12">getCurrentTimestamp</a> (<a class="el" href="rtp_8h.html#a75">rtp_payload_t</a> pt) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the timestamp for a packet whose payload sampling instant corresponds to the current system time.</em> <a href="#a12">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a13">getTimestampIncrement</a> (size_t packet_size) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>If your application uses a fixed sampling rate and a fixed payload format, given the size of the next packet to be sent, this method provides the timestamp increment for the next packet.</em> <a href="#a13">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a14">setSessionBandwidth</a> (uint32 bw)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Specify the bandwidth of the current session.</em> <a href="#a14">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a15">getRate</a> (<a class="el" href="rtp_8h.html#a75">rtp_payload_t</a> pt=RTP_PAYLOAD_EMPTY) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the transmission rate for a payload type.</em> <a href="#a15">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="rtp_8h.html#a75">rtp_payload_t</a>&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a16">getPayloadType</a> (const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the payload type of the first available packet.</em> <a href="#a16">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a17">getSource</a> (uint32 ssrc) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the representation of a session participant by its Synchronization SouRCe identifier.</em> <a href="#a17">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a18">setTypeOfService</a> (<a class="el" href="rtp_8h.html#a78">type_of_service_t</a> tos)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Specify the kind of service the application expects to use.</em> <a href="#a18">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a19">setPartial</a> (uint32 timestamp, unsigned char *data, size_t offset, size_t max)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Set partial data for an already queued packet.</em> <a href="#a19">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a20">getPartial</a> (uint32 timestamp, unsigned char *data, size_t offset, size_t max)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get partial data from a packet.</em> <a href="#a20">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a21">isActive</a> (void) const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get active connection state flag.</em> <a href="#a21">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a22">setTimeout</a> (<a class="el" href="rtp_8h.html#a1">microtimeout_t</a> t)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Set the default scheduling timeout to use when no data packets are waiting to be sent.</em> <a href="#a22">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a23">setExpired</a> (<a class="el" href="rtp_8h.html#a1">microtimeout_t</a> t)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Set the "expired" timer for expiring packets pending in the send queue which have gone unsent and are already "too late" to be sent now.</em> <a href="#a23">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a24">setGlobalKitchenDuration</a> (<a class="el" href="rtp_8h.html#a1">microtimeout_t</a> t)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Specify how much time the incoming packets will be buffered for each and every source.</em> <a href="#a24">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a25">setGlobalKitchenSize</a> (uint32 s)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="rtp_8h.html#a1">microtimeout_t</a>&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a26">getGlobalKitchenDuration</a> () const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the current global kitchen size.</em> <a href="#a26">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a27">setEndToEndDelay</a> (<a class="el" href="rtp_8h.html#a1">microtimeout_t</a> t)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This method sets the maximun end to end delay allowed.</em> <a href="#a27">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a28">setSegmentSize</a> (size_t size)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Set maximum packet segment size before fragmenting sends.</em> <a href="#a28">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a29">isComplete</a> ()</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Is last packet processed "complete" or are sequences missing?</em> <a href="#a29">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a30">isMarked</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Is last packet processed "marked" (used to signal end on multi-sequence sends).</em> <a href="#a30">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a31">setTimeclock</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Set the packet timeclock for synchronizing timestamps.</em> <a href="#a31">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>timeout_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a32">getTimeclock</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the packet timeclock for synchronizing timestamps.</em> <a href="#a32">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a33">RTPSendCount</a> () const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the total number of packets sent so far.</em> <a href="#a33">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#a34">RTPOctetCount</a> () const</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Get the total number of octets (payload only) sent so far.</em> <a href="#a34">More...</a><em></em></font><br><br></td></tr>
<tr><td colspan=2><br><h2>Protected Methods</h2></td></tr>
<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b0">RTPQueue</a> (int pri, uint32 size=7)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Constructor.</em> <a href="#b0">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b1">RTPQueue</a> (uint32 ssrc, int pri, uint32 size=7)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Using this constructor you can start a session with the given ssrc, instead of the usual randomly generated one.</em> <a href="#b1">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b2">~RTPQueue</a> ()</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>The queue destructor flushes the queue and stops all services.</em> <a href="#b2">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b3">RTCPService</a> (<a class="el" href="rtp_8h.html#a1">microtimeout_t</a> &amp;wait)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>A plugin point for a scheduler of RTCP packets.</em> <a href="#b3">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b4">Bye</a> (const char *const reason)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>A plugin point for posting of BYE messages.</em> <a href="#b4">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b5">timerTick</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>A plugin point for timer tick driven events.</em> <a href="#b5">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="rtp_8h.html#a1">microtimeout_t</a>&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b6">getTimeout</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This computes the timeout period for scheduling transmission of the next packet at the "head" of the send buffer.</em> <a href="#b6">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b7">isPendingData</a> (<a class="el" href="rtp_8h.html#a1">microtimeout_t</a> timeout)=0</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This function is used to check for and schedule against arriving packets based on the derived connection type.</em> <a href="#b7">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b8">Purge</a> (<a class="el" href="rtp_8h.html#a80">rtp_purge_t</a> flag)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This function is used to purge the queue(s).</em> <a href="#b8">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b9">sendPacket</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This function is used by the service thread to process the next outgoing packet pending in the sending queue.</em> <a href="#b9">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b10">writeData</a> (const unsigned char *const packet, size_t len)=0</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This function performs the physical I/O for writing a packet to the destination.</em> <a href="#b10">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b11">recvPacket</a> (void)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This function is used by the service thread to process the next incoming packet and place it in the receive list.</em> <a href="#b11">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual size_t&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b12">readData</a> (unsigned char *buffer, size_t len)=0</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This function performs the physical I/O for reading a packet from the source.</em> <a href="#b12">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b13">gotPacket</a> (<a class="el" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *packet)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>A virtual function to support parsing of arriving packets to determine if they should be kept in the queue and to dispatch events.</em> <a href="#b13">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b14">expireSend</a> (<a class="el" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> *packet)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>A hook to filter packets being sent that have been expired.</em> <a href="#b14">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b15">expireRecv</a> (<a class="el" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *packet)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>A hook to filter packets in the receive queue that are being expired.</em> <a href="#b15">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b16">getWaiting</a> (uint32 timestamp, const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;src=<a class="el" href="class_membership_control.html#q0">dummysource</a>)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This is used to fetch a packet in the receive queue and to expire packets older than the current timestamp.</em> <a href="#b16">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b17">endQueue</a> ()</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>This method ends the queue and service threads.</em> <a href="#b17">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#b18">Final</a> ()</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>The queue removes itself when the service thread is detached.</em> <a href="#b18">More...</a><em></em></font><br><br></td></tr>
<tr><td colspan=2><br><h2>Protected Attributes</h2></td></tr>
<tr><td nowrap align=right valign=top>volatile bool&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#n0">active</a></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="class_r_t_p_source.html">RTPSource</a> *&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#n1">localsrc</a></td></tr>
<tr><td nowrap align=right valign=top>timeval&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#n2">initial_time</a></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#n3">current_rate</a></td></tr>
<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#n4">initial_timestamp</a></td></tr>
<tr><td colspan=2><br><h2>Friends</h2></td></tr>
<tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="class_r_t_p_queue.html#l0">IncomingRTPPkt</a></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
A thread serviced packet queue handler for building different kinds of RTP protocol systems. RTP protocol queue handler.
<p>
The queue manages both incoming and outgoing RTP packets, as well as synchronization and transmission/reception timers. By making the queue handler a seperate base class it becomes possible to define RTP classes for RTP profiles and sessions of different types.
<p>
Outgoing packets are sent via the <a class="el" href="class_r_t_p_queue.html#a5">RTPQueue::putPacket</a> method.
<p>
Incoming packets can be retrieved via:  <ul>
<li>the <a class="el" href="class_r_t_p_queue.html#a9">RTPQueue::getPacket</a> methods, that provide "raw" access to  the packets in the queue.  <li>the <a class="el" href="class_r_t_p_queue.html#a6">RTPQueue::getCookedPacket</a> method, that provides "cooked" access.  </ul>
<dl compact><dt><b>
Author: </b><dd>
David Sugar &lt;<a href="mailto:dyfet@ostel.com">dyfet@ostel.com</a>&gt; </dl>
<p>
<hr><h2>Constructor &amp; Destructor Documentation</h2>
<a name="b0" doxytag="RTPQueue::RTPQueue"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> RTPQueue::RTPQueue </td>
          <td class="md">(&nbsp;</td>
          <td class="md">int</td>
          <td class="mdname">&nbsp; <em>pri</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>size</em> = 7</td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Constructor.
<p>
This will generate a random application SSRC identifier.<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>pri
</em>&nbsp;</td><td>
service thread base priority relative to its parent </td></tr>
<tr><td valign=top><em>size
</em>&nbsp;</td><td>
an estimation of the number of participants in the  session </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="b1" doxytag="RTPQueue::RTPQueue"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> RTPQueue::RTPQueue </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>ssrc</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">int</td>
          <td class="mdname">&nbsp; <em>pri</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>size</em> = 7</td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Using this constructor you can start a session with the given ssrc, instead of the usual randomly generated one.
<p>
This is necessary when you need to initiate several sessions having the same SSRC identifier, for instance, to implement layered encoding, in which case each layer is managed through a different session but all sessions share the same SSRC identifier.
<p>
<dl compact><dt><b>
Warning: </b><dd>
This doesn't seem to be a good solution</dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>ssrc
</em>&nbsp;</td><td>
Synchronization SouRCe identifier for this session </td></tr>
<tr><td valign=top><em>pri
</em>&nbsp;</td><td>
service thread base priority relative to it's parent </td></tr>
<tr><td valign=top><em>size
</em>&nbsp;</td><td>
an estimation of the number of participants in the  session </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="b2" doxytag="RTPQueue::~RTPQueue"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual RTPQueue::~RTPQueue </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
The queue destructor flushes the queue and stops all services.
<p>
    </td>
  </tr>
</table>
<hr><h2>Member Function Documentation</h2>
<a name="b4" doxytag="RTPQueue::Bye"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual void RTPQueue::Bye </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const char *const</td>
          <td class="mdname1">&nbsp; <em>reason</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
A plugin point for posting of BYE messages.
<p>

<p>
Reimplemented in <a class="el" href="class_queue_r_t_c_p_manager.html#b4">QueueRTCPManager</a>.    </td>
  </tr>
</table>
<a name="b18" doxytag="RTPQueue::Final"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::Final </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
The queue removes itself when the service thread is detached.
<p>
    </td>
  </tr>
</table>
<a name="b8" doxytag="RTPQueue::Purge"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::Purge </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a80">rtp_purge_t</a></td>
          <td class="mdname1">&nbsp; <em>flag</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This function is used to purge the queue(s).
<p>
Depending on the flag value, it purges the packets waiting to be sent, waiting to be picked up from the reception queue, or both.     </td>
  </tr>
</table>
<a name="b3" doxytag="RTPQueue::RTCPService"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual void RTPQueue::RTCPService </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a1">microtimeout_t</a> &amp;</td>
          <td class="mdname1">&nbsp; <em>wait</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
A plugin point for a scheduler of RTCP packets.
<p>
The default implementation in RTPQueue is to do nothing.<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>wait
</em>&nbsp;</td><td>
queue scheduling timeout </td></tr>
</table>
</dl>
<p>
Reimplemented in <a class="el" href="class_queue_r_t_c_p_manager.html#b3">QueueRTCPManager</a>.    </td>
  </tr>
</table>
<a name="a34" doxytag="RTPQueue::RTPOctetCount"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::RTPOctetCount </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const<code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the total number of octets (payload only) sent so far.
<p>
<dl compact><dt><b>
Returns: </b><dd>
total number of octets sent as payload in RTP packets. </dl>    </td>
  </tr>
</table>
<a name="a33" doxytag="RTPQueue::RTPSendCount"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::RTPSendCount </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const<code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the total number of packets sent so far.
<p>
<dl compact><dt><b>
Returns: </b><dd>
total number of packets sent </dl>    </td>
  </tr>
</table>
<a name="a0" doxytag="RTPQueue::Start"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::Start </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Make Start public.
<p>
    </td>
  </tr>
</table>
<a name="b17" doxytag="RTPQueue::endQueue"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::endQueue </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This method ends the queue and service threads.
<p>
    </td>
  </tr>
</table>
<a name="b15" doxytag="RTPQueue::expireRecv"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual void RTPQueue::expireRecv </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *</td>
          <td class="mdname1">&nbsp; <em>packet</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
A hook to filter packets in the receive queue that are being expired.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>packet
</em>&nbsp;</td><td>
expired from the recv queue. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="b14" doxytag="RTPQueue::expireSend"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual void RTPQueue::expireSend </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> *</td>
          <td class="mdname1">&nbsp; <em>packet</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
A hook to filter packets being sent that have been expired.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>packet
</em>&nbsp;</td><td>
expired from the send queue. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a6" doxytag="RTPQueue::getCookedPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> const <a class="el" href="class_r_t_p_data.html">RTPData</a>&amp; RTPQueue::getCookedPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname1">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Attempt to get a cooked packet.
<p>
If available, thid method will retrieve the first cooked packet. A packet is said to be cooked if: <ol>
<li>There is no disorder or lost between the last retrieved  packet an the current packet.  <li>There is disorder or lost, but the queue has reached its  maximun size.  </ol>
Therefore, cooking means recomposing a corrupted stream -waiting for the disordered packet, regenerating it (if FEC is enabled) or asking for retransmission- whenever it is possible.
<p>
If the queue has not yet reached its maximun size (that can be set with RTPQueue::setKitchenSize), ccRTP will try to cook the packets before allowing the application to pick them up. Note that if there are more packets than the maximun, they will not be thrown away.
<p>
In order to accomplish this task, at the beginning no packet will be released until the queue reaches the kitchen size (this will provide a buffer to ccRTP where to cook the packets). Then, provided that there is no disorder, ccRTP will release every packet when asked (note that usual applications will try to retrieve packets, broadly speaking, at the same rate they are received, so the kitchen will remain the same (maximun) size if there is no lost).
<p>
If the newest packet (the one with the minor timestamp) in the queue is disordered, ccRTP will not release it until the kitchen reaches at least it maximun size. When the maximun size is reached, if disorder could not be fixed, ccRTP will then release the packet. Thus, unrepairable disorder implies the queue will stop providing packets for a while and then provide a disordered packet.
<p>
If a lost packet arrives after newer packets have been retrieved, it will be silently discarded.
<p>
Summary:
<p>
If the next packet is ordered, it will be released wheter or not the kitchen is full.
<p>
If the next packet is disordered, it will be released only when the kitchen has at least its maximun size.<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector. </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
the block of data contained in the first "cooked" packet. </dl><dl compact><dt><b>
See also: </b><dd>
RTPQueue::setKitchenSize , <a class="el" href="class_r_t_p_queue.html#a3">RTPQueue::isCookedWaiting</a> </dl>    </td>
  </tr>
</table>
<a name="a12" doxytag="RTPQueue::getCurrentTimestamp"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::getCurrentTimestamp </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a75">rtp_payload_t</a></td>
          <td class="mdname1">&nbsp; <em>pt</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the timestamp for a packet whose payload sampling instant corresponds to the current system time.
<p>
The timestamp applications should provide for each packet represents the sampling instant of its payload and should not be a reading of the system clock. Nevertheless, the internal operation of the RTP stack relies on the accuracy of the provided timestamp, since several computations assume that there is a certain degree of correspondence between the timestamp and the system clock.
<p>
It is recommended that applications use this method in order to <em>periodically adjust the RTP timestamp</em>.
<p>
In particular, it is advisable getting the timestamp corresponding to the first sampling instant or any instant after a period of inactivity through a call to this method.
<p>
Applications should use the nominal sampling or any other value provided by the coder in order to compute the next timestamps with minimum computational requirement.
<p>
For instance, an application using an RTP profile that specifies a fixed sampling rate of 8 Khz with eight bits per sample, continuously transmitting audio blocks 80 octets long, would transmit 100 packets every second. Every packet would carry a timestamp 80 units greater than the previous one. So, the first timestamp would be obtained from this method, whereas the following ones would be computed adding 80 every time. Also the timestamp should be increased for every block whether it is put in the queue or dropped.
<p>
The aforementioned increment can be obtained from the <a class="el" href="class_r_t_p_queue.html#a13">RTPQueue::getTimestampIncrement</a>() method rather than computing it by hand in the application.
<p>
<dl compact><dt><b>
Note: </b><dd>
Frame based applications must follow a specific timestamping method, probably specified in a profile.</dl><dl compact><dt><b>
Note: </b><dd>
You should take into account that by default ccRTP assumes that the application begins sampling at the queue creation time. Moreover, the first sampling instant is assigned a "user visible" timestamp of 0, although the RTP stack will then add internally a ramdom offset unknown to the application. That is to say, the application may count samples from 0 in order to get the timestamp for the next packet, provided that the first sampling instant is the same as the queue creation time. Nevertheless, this simpler way of starting will not be as accurate as it would be if the application got at least the first timestamp through getCurrentTimestamp. <em>We provide this option since ccRTP interface is evolving, but we admit that it is ugly, we could remove this option or even replace uint32 timestamps with a restrictively regulated object; suggestions are gladly welcomed</em></dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>pt
</em>&nbsp;</td><td>
payload type of the packets sent. Determines the timestamp increasing rate. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a8" doxytag="RTPQueue::getFirstSequence"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint16 RTPQueue::getFirstSequence </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname1">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the sequence id of the first packet waiting.
<p>
<dl compact><dt><b>
Returns: </b><dd>
sequence id of first packet. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a7" doxytag="RTPQueue::getFirstTimestamp"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::getFirstTimestamp </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname1">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get timestamp of first packet waiting in the queue.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector. </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
timestamp of first arrival packet. </dl>    </td>
  </tr>
</table>
<a name="a26" doxytag="RTPQueue::getGlobalKitchenDuration"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="rtp_8h.html#a1">microtimeout_t</a> RTPQueue::getGlobalKitchenDuration </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const<code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the current global kitchen size.
<p>
Note that the kitchen size can be modified individually for every source, so it is not guaranteed that this is the current kitchen for all sources.
<p>
<dl compact><dt><b>
Returns: </b><dd>
global kitchen size, in microseconds </dl>    </td>
  </tr>
</table>
<a name="a1" doxytag="RTPQueue::getLocalInfo"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> const <a class="el" href="class_r_t_p_source.html">RTPSource</a>&amp; RTPQueue::getLocalInfo </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const<code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the application description.
<p>
<dl compact><dt><b>
Returns: </b><dd>
The <a class="el" href="class_r_t_p_source.html">RTPSource</a> object describing the local application </dl>    </td>
  </tr>
</table>
<a name="a10" doxytag="RTPQueue::getPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> size_t RTPQueue::getPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>stamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">unsigned char *</td>
          <td class="mdname">&nbsp; <em>data</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>max</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Retreive data from a specific timestamped packet if such a packet is currently available in the receive buffer.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timestamp
</em>&nbsp;</td><td>
of packet desired. </td></tr>
<tr><td valign=top><em>data
</em>&nbsp;</td><td>
buffer to copy into. </td></tr>
<tr><td valign=top><em>maximum
</em>&nbsp;</td><td>
data size. </td></tr>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
number of packet data bytes retrieved. </dl><dl compact><dt><b>
Return values: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>0
</em>&nbsp;</td><td>
if there is no such packet. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a9" doxytag="RTPQueue::getPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> const <a class="el" href="class_r_t_p_data.html">RTPData</a>&amp; RTPQueue::getPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>stamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Retreive data from a specific timestamped packet if such a packet is currently available in the receive buffer.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector. </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
data retrieved from the reception buffer. </dl>    </td>
  </tr>
</table>
<a name="a20" doxytag="RTPQueue::getPartial"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> size_t RTPQueue::getPartial </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">unsigned char *</td>
          <td class="mdname">&nbsp; <em>data</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>offset</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>max</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get partial data from a packet.
<p>
This is often used to support oddball hardware that has unusual or non-standard codec buffering intervals.
<p>
<dl compact><dt><b>
Returns: </b><dd>
number of packet data bytes retrieved. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timestamp
</em>&nbsp;</td><td>
of packet desired. </td></tr>
<tr><td valign=top><em>data
</em>&nbsp;</td><td>
buffer to copy into. </td></tr>
<tr><td valign=top><em>offset
</em>&nbsp;</td><td>
to copy from. </td></tr>
<tr><td valign=top><em>maximum
</em>&nbsp;</td><td>
data size. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a16" doxytag="RTPQueue::getPayloadType"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="rtp_8h.html#a75">rtp_payload_t</a> RTPQueue::getPayloadType </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname1">&nbsp; <em>src</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the payload type of the first available packet.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
payload type of the first available packet </dl>    </td>
  </tr>
</table>
<a name="a11" doxytag="RTPQueue::getPayloadType"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="rtp_8h.html#a75">rtp_payload_t</a> RTPQueue::getPayloadType </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the payload type of a specific packet by timestamp.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timestamp
</em>&nbsp;</td><td>
to find. </td></tr>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
payload of specified packet if found. </dl>    </td>
  </tr>
</table>
<a name="a15" doxytag="RTPQueue::getRate"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::getRate </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a75">rtp_payload_t</a></td>
          <td class="mdname1">&nbsp; <em>pt</em> = RTP_PAYLOAD_EMPTY          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the transmission rate for a payload type.
<p>
Note that for some payload types, the transmission rate corresponds to the timestamp rate, but this is not true for all payload types.
<p>
<dl compact><dt><b>
Returns: </b><dd>
transmission rate corresponding to the specified payload type. If no payload type is specified, returns the timestamp rate corresponding to the first available packet. </dl><dl compact><dt><b>
<a class="el" href="todo.html#_todo000005">Todo: </a></b><dd>
 complete implementation </dl>     </td>
  </tr>
</table>
<a name="a17" doxytag="RTPQueue::getSource"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> const <a class="el" href="class_r_t_p_source.html">RTPSource</a>&amp; RTPQueue::getSource </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname1">&nbsp; <em>ssrc</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const<code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the representation of a session participant by its Synchronization SouRCe identifier.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>ssrc
</em>&nbsp;</td><td>
an SSRC identifier</td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
a description of the source identified by ssrc </dl>
<p>
Reimplemented from <a class="el" href="class_membership_control.html#a0">MembershipControl</a>.    </td>
  </tr>
</table>
<a name="a32" doxytag="RTPQueue::getTimeclock"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> timeout_t RTPQueue::getTimeclock </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get the packet timeclock for synchronizing timestamps.
<p>
<dl compact><dt><b>
Returns: </b><dd>
runtime in milliseconds since last set. </dl>    </td>
  </tr>
</table>
<a name="b6" doxytag="RTPQueue::getTimeout"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="rtp_8h.html#a1">microtimeout_t</a> RTPQueue::getTimeout </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This computes the timeout period for scheduling transmission of the next packet at the "head" of the send buffer.
<p>
If no packets are waiting, a default timeout is used. This actually forms the "isPending()" timeout of the rtp receiver in the service thread.
<p>
<dl compact><dt><b>
Returns: </b><dd>
timeout until next packet is scheduled to send. </dl>    </td>
  </tr>
</table>
<a name="a13" doxytag="RTPQueue::getTimestampIncrement"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::getTimestampIncrement </td>
          <td class="md">(&nbsp;</td>
          <td class="md">size_t</td>
          <td class="mdname1">&nbsp; <em>packet_size</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
If your application uses a fixed sampling rate and a fixed payload format, given the size of the next packet to be sent, this method provides the timestamp increment for the next packet.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>packet_size
</em>&nbsp;</td><td>
the size of the next packet to be sent </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
the timestamp increment for the next packet </dl>    </td>
  </tr>
</table>
<a name="b16" doxytag="RTPQueue::getWaiting"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a>* RTPQueue::getWaiting </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This is used to fetch a packet in the receive queue and to expire packets older than the current timestamp.
<p>
<dl compact><dt><b>
Returns: </b><dd>
packet buffer object for current timestamp if found. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timestamp
</em>&nbsp;</td><td>
timestamp requested. </td></tr>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector </td></tr>
</table>
</dl><dl compact><dt><b>
Note: </b><dd>
if found, the packet is removed from the reception queue </dl>    </td>
  </tr>
</table>
<a name="b13" doxytag="RTPQueue::gotPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual bool RTPQueue::gotPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *</td>
          <td class="mdname1">&nbsp; <em>packet</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
A virtual function to support parsing of arriving packets to determine if they should be kept in the queue and to dispatch events.
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if packet is kept. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>packet
</em>&nbsp;</td><td>
returned. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a21" doxytag="RTPQueue::isActive"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> bool RTPQueue::isActive </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const<code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get active connection state flag.
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if connection "active". </dl>    </td>
  </tr>
</table>
<a name="a29" doxytag="RTPQueue::isComplete"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> bool RTPQueue::isComplete </td>
          <td class="md">(&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Is last packet processed "complete" or are sequences missing?
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if complete.</dl><dl compact><dt><b>
<a class="el" href="todo.html#_todo000007">Todo: </a></b><dd>
 maybe, with the new <a class="el" href="class_r_t_p_data.html">RTPData</a>, this is unnecessary. Could be useful for an application that is trying to figure out whether to start processing data or wait for misordered packets. </dl>     </td>
  </tr>
</table>
<a name="a3" doxytag="RTPQueue::isCookedWaiting"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> bool RTPQueue::isCookedWaiting </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Determine if cooked packets are waiting in the reception queue.
<p>
Note that <a class="el" href="class_r_t_p_queue.html#a3">isCookedWaiting</a>() == true implies <a class="el" href="class_r_t_p_queue.html#a2">isWaiting</a>() == true.
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if there are cooked packets waiting. </dl><dl compact><dt><b>
<a class="el" href="todo.html#_todo000004">Todo: </a></b><dd>
 implement it </dl>     </td>
  </tr>
</table>
<a name="a30" doxytag="RTPQueue::isMarked"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> bool RTPQueue::isMarked </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Is last packet processed "marked" (used to signal end on multi-sequence sends).
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if marked.</dl><dl compact><dt><b>
<a class="el" href="todo.html#_todo000008">Todo: </a></b><dd>
 maybe, with the new <a class="el" href="class_r_t_p_data.html">RTPData</a>, this is unnecessary. </dl>     </td>
  </tr>
</table>
<a name="b7" doxytag="RTPQueue::isPendingData"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual bool RTPQueue::isPendingData </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a1">microtimeout_t</a></td>
          <td class="mdname1">&nbsp; <em>timeout</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected, pure virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This function is used to check for and schedule against arriving packets based on the derived connection type.
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if packet waiting for processing. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>number
</em>&nbsp;</td><td>
of microseconds to wait. </td></tr>
</table>
</dl>
<p>
Reimplemented in <a class="el" href="class_r_t_p_duplex.html#b0">RTPDuplex</a>.    </td>
  </tr>
</table>
<a name="a4" doxytag="RTPQueue::isSending"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> bool RTPQueue::isSending </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Determine if outgoing packets are waiting to send.
<p>
<dl compact><dt><b>
Returns: </b><dd>
true if there are packets waiting to be send. </dl>    </td>
  </tr>
</table>
<a name="a2" doxytag="RTPQueue::isWaiting"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> bool RTPQueue::isWaiting </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const <a class="el" href="class_r_t_p_source.html">RTPSource</a> &amp;</td>
          <td class="mdname1">&nbsp; <em>src</em> = <a class="el" href="class_membership_control.html#q0">dummysource</a>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"> const</td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Determine if packets are waiting in the reception queue.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>src
</em>&nbsp;</td><td>
optional source selector. </td></tr>
</table>
</dl><dl compact><dt><b>
Returns: </b><dd>
true if packets are waiting. </dl>    </td>
  </tr>
</table>
<a name="a5" doxytag="RTPQueue::putPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::putPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>stamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md"><a class="el" href="rtp_8h.html#a75">rtp_payload_t</a></td>
          <td class="mdname">&nbsp; <em>payload</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">const unsigned char *</td>
          <td class="mdname">&nbsp; <em>data</em> = NULL, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>len</em> = 0, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">bool</td>
          <td class="mdname">&nbsp; <em>mark</em> = false</td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This is used to create a data packet in the send queue.
<p>
Sometimes a "NULL" or empty packet will be used instead, and these are known as "silent" packets. "Silent" packets are used simply to "push" the scheduler along more accurately by giving the appearence that a next packet is waiting to be sent and to provide a valid timestamp for that packet.<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>stamp
</em>&nbsp;</td><td>
timestamp for expected send time of packet. </td></tr>
<tr><td valign=top><em>payload
</em>&nbsp;</td><td>
format of this packet. </td></tr>
<tr><td valign=top><em>data
</em>&nbsp;</td><td>
value or NULL if special "silent" packet. </td></tr>
<tr><td valign=top><em>length
</em>&nbsp;</td><td>
may be 0 to indicate a default by payload type. </td></tr>
<tr><td valign=top><em>mark
</em>&nbsp;</td><td>
mark field in the RTP header </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="b12" doxytag="RTPQueue::readData"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual size_t RTPQueue::readData </td>
          <td class="md">(&nbsp;</td>
          <td class="md">unsigned char *</td>
          <td class="mdname">&nbsp; <em>buffer</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>len</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [protected, pure virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This function performs the physical I/O for reading a packet from the source.
<p>
It is a virtual that is overriden in the derived class.
<p>
<dl compact><dt><b>
Returns: </b><dd>
number of bytes read. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>packet
</em>&nbsp;</td><td>
read buffer. </td></tr>
<tr><td valign=top><em>length
</em>&nbsp;</td><td>
of data to read. </td></tr>
</table>
</dl>
<p>
Reimplemented in <a class="el" href="class_r_t_p_duplex.html#b2">RTPDuplex</a>.    </td>
  </tr>
</table>
<a name="b11" doxytag="RTPQueue::recvPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> size_t RTPQueue::recvPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This function is used by the service thread to process the next incoming packet and place it in the receive list.
<p>
<dl compact><dt><b>
Returns: </b><dd>
number of payload bytes received. &lt;0 if error. </dl>    </td>
  </tr>
</table>
<a name="b9" doxytag="RTPQueue::sendPacket"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> size_t RTPQueue::sendPacket </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [protected]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This function is used by the service thread to process the next outgoing packet pending in the sending queue.
<p>
<dl compact><dt><b>
Returns: </b><dd>
number of bytes sent. 0 if silent, &lt;0 if error. </dl>    </td>
  </tr>
</table>
<a name="a27" doxytag="RTPQueue::setEndToEndDelay"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setEndToEndDelay </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a1">microtimeout_t</a></td>
          <td class="mdname1">&nbsp; <em>t</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This method sets the maximun end to end delay allowed.
<p>
If the processing delay plus the trip time for a packet is greater than the end to end delay, the packet is discarded, and the application cannot get it.
<p>
This is a way of setting an upper bound to the end to end delay, computed as the elapsed time between the packet timestamping at the sender side, and the picking of the packet at the receiver side.<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>t
</em>&nbsp;</td><td>
maximum end to end delay allowed. A value of 0 implies there is no limit and is the default </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a23" doxytag="RTPQueue::setExpired"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setExpired </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a1">microtimeout_t</a></td>
          <td class="mdname1">&nbsp; <em>t</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Set the "expired" timer for expiring packets pending in the send queue which have gone unsent and are already "too late" to be sent now.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timeout
</em>&nbsp;</td><td>
to expire unsent packets in milliseconds. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a24" doxytag="RTPQueue::setGlobalKitchenDuration"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setGlobalKitchenDuration </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a1">microtimeout_t</a></td>
          <td class="mdname1">&nbsp; <em>t</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Specify how much time the incoming packets will be buffered for each and every source.
<p>
Note that the size is specified in temporal units, thus the internal queue will usually hold as many packets as necessary to fill the specified amount of time. The default size is 0 us.
<p>
If using only the "high level" method for retrieving packets, <a class="el" href="class_r_t_p_queue.html#a6">RTPQueue::getCookedPacket</a>(), before providing disordered packets to the application, ccRTP will try to cook them. The bigger the specified time, the higher the probability of reordering and recomposing the stream in case of corruption is.<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>t
</em>&nbsp;</td><td>
amount of time the reception buffer fills. 0 means there is no buffer/kitchen and <a class="el" href="class_r_t_p_queue.html#a6">RTPQueue::getCookedPacket</a> behaves as <a class="el" href="class_r_t_p_queue.html#a9">RTPQueue::getPacket</a> does.</td></tr>
</table>
</dl><dl compact><dt><b>
See also: </b><dd>
<a class="el" href="class_r_t_p_source.html#a4">RTPSource::setKitchenSize</a>() , <a class="el" href="class_r_t_p_queue.html#a6">RTPQueue::getCookedPacket</a>() , <a class="el" href="class_r_t_p_queue.html#a3">RTPQueue::isCookedWaiting</a>() </dl>    </td>
  </tr>
</table>
<a name="a25" doxytag="RTPQueue::setGlobalKitchenSize"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setGlobalKitchenSize </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname1">&nbsp; <em>s</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<a name="a19" doxytag="RTPQueue::setPartial"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> size_t RTPQueue::setPartial </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname">&nbsp; <em>timestamp</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">unsigned char *</td>
          <td class="mdname">&nbsp; <em>data</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>offset</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>max</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Set partial data for an already queued packet.
<p>
This is often used for multichannel data.
<p>
<dl compact><dt><b>
Returns: </b><dd>
number of packet data bytes set. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timestamp
</em>&nbsp;</td><td>
of packet desired. </td></tr>
<tr><td valign=top><em>data
</em>&nbsp;</td><td>
buffer to copy from. </td></tr>
<tr><td valign=top><em>offset
</em>&nbsp;</td><td>
to copy from. </td></tr>
<tr><td valign=top><em>maximum
</em>&nbsp;</td><td>
data size. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a28" doxytag="RTPQueue::setSegmentSize"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setSegmentSize </td>
          <td class="md">(&nbsp;</td>
          <td class="md">size_t</td>
          <td class="mdname1">&nbsp; <em>size</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Set maximum packet segment size before fragmenting sends.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>maximum
</em>&nbsp;</td><td>
packet size. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a14" doxytag="RTPQueue::setSessionBandwidth"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setSessionBandwidth </td>
          <td class="md">(&nbsp;</td>
          <td class="md">uint32</td>
          <td class="mdname1">&nbsp; <em>bw</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Specify the bandwidth of the current session.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>bw
</em>&nbsp;</td><td>
bandwidth of the current session, in bits/s.</td></tr>
</table>
</dl><dl compact><dt><b>
See also: </b><dd>
<a class="el" href="class_queue_r_t_c_p_manager.html#a0">QueueRTCPManager::setControlBandwidth</a> </dl>    </td>
  </tr>
</table>
<a name="a31" doxytag="RTPQueue::setTimeclock"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setTimeclock </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Set the packet timeclock for synchronizing timestamps.
<p>
    </td>
  </tr>
</table>
<a name="a22" doxytag="RTPQueue::setTimeout"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setTimeout </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a1">microtimeout_t</a></td>
          <td class="mdname1">&nbsp; <em>t</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Set the default scheduling timeout to use when no data packets are waiting to be sent.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>timeout
</em>&nbsp;</td><td>
in milliseconds. </td></tr>
</table>
</dl>    </td>
  </tr>
</table>
<a name="a18" doxytag="RTPQueue::setTypeOfService"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void RTPQueue::setTypeOfService </td>
          <td class="md">(&nbsp;</td>
          <td class="md"><a class="el" href="rtp_8h.html#a78">type_of_service_t</a></td>
          <td class="mdname1">&nbsp; <em>tos</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Specify the kind of service the application expects to use.
<p>
<dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>tos
</em>&nbsp;</td><td>
type of service the application expects to use</td></tr>
</table>
</dl><dl compact><dt><b>
Note: </b><dd>
If enhanced service is specified but packet loss is high (the requested service does not appear to actually be delivered) ccRTP defaults to best-effort suitable behaviour: guarantee fair competition with TCP.</dl><dl compact><dt><b>
<a class="el" href="todo.html#_todo000006">Todo: </a></b><dd>
 Implement fair competition with tcp </dl>     </td>
  </tr>
</table>
<a name="b5" doxytag="RTPQueue::timerTick"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual void RTPQueue::timerTick </td>
          <td class="md">(&nbsp;</td>
          <td class="md">void</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"><code> [inline, protected, virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
A plugin point for timer tick driven events.
<p>
    </td>
  </tr>
</table>
<a name="b10" doxytag="RTPQueue::writeData"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> virtual size_t RTPQueue::writeData </td>
          <td class="md">(&nbsp;</td>
          <td class="md">const unsigned char *const</td>
          <td class="mdname">&nbsp; <em>buffer</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md">size_t</td>
          <td class="mdname">&nbsp; <em>len</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [protected, pure virtual]</code></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
This function performs the physical I/O for writing a packet to the destination.
<p>
It is a virtual that is overriden in the derived class.
<p>
<dl compact><dt><b>
Returns: </b><dd>
number of bytes sent. </dl><dl compact><dt><b>
Parameters: </b><dd>
<table border=0 cellspacing=2 cellpadding=0>
<tr><td valign=top><em>packet
</em>&nbsp;</td><td>
to write. </td></tr>
<tr><td valign=top><em>length
</em>&nbsp;</td><td>
of data to write. </td></tr>
</table>
</dl>
<p>
Reimplemented in <a class="el" href="class_r_t_p_duplex.html#b1">RTPDuplex</a>.    </td>
  </tr>
</table>
<hr><h2>Friends And Related Function Documentation</h2>
<a name="l0" doxytag="RTPQueue::IncomingRTPPkt"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> friend class IncomingRTPPkt<code> [friend]</code>
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<hr><h2>Member Data Documentation</h2>
<a name="n0" doxytag="RTPQueue::active"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> volatile bool RTPQueue::active<code> [protected]</code>
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<a name="n3" doxytag="RTPQueue::current_rate"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::current_rate<code> [protected]</code>
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<a name="n2" doxytag="RTPQueue::initial_time"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct timeval RTPQueue::initial_time<code> [protected]</code>
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<a name="n4" doxytag="RTPQueue::initial_timestamp"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> uint32 RTPQueue::initial_timestamp<code> [protected]</code>
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<a name="n1" doxytag="RTPQueue::localsrc"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="class_r_t_p_source.html">RTPSource</a>* RTPQueue::localsrc<code> [protected]</code>
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
    </td>
  </tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="rtp_8h-source.html">rtp.h</a></ul>
<hr><address><small>Generated at Sat Jan 5 09:08:55 2002 for ccRTP by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.10 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>