Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 6d445a7e34cab500c4a729b1f6c7a5fd > files > 140

lib64gstreamer-plugins-base0.10-devel-0.10.17-3mdv2008.1.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>gstringbuffer</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="GStreamer Base Plugins 0.10 Library Reference Manual">
<link rel="up" href="gstreamer-audio.html" title="Audio Library">
<link rel="prev" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">
<link rel="next" href="gstreamer-cdda.html" title="CDDA Library">
<meta name="generator" content="GTK-Doc V1.8 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
<link rel="part" href="gstreamer-plugins-base.html" title="Part&#160;I.&#160;GStreamer Base Plugins Libraries">
<link rel="chapter" href="gstreamer-audio.html" title="Audio Library">
<link rel="chapter" href="gstreamer-cdda.html" title="CDDA Library">
<link rel="chapter" href="gstreamer-ffft.html" title="FFT Library">
<link rel="chapter" href="gstreamer-floatcast.html" title="FloatCast Library">
<link rel="chapter" href="gstreamer-interfaces.html" title="Interfaces Library">
<link rel="chapter" href="gstreamer-netbuffer.html" title="Network Buffer Library">
<link rel="chapter" href="gstreamer-riff.html" title="Riff Media Library">
<link rel="chapter" href="gstreamer-rtp.html" title="RTP Library">
<link rel="chapter" href="gstreamer-rtsp.html" title="RTSP Library">
<link rel="chapter" href="gstreamer-sdp.html" title="SDP Library">
<link rel="chapter" href="gstreamer-tag.html" title="Tag Support Library">
<link rel="chapter" href="gstreamer-base-utils.html" title="Base Utils Library">
<link rel="chapter" href="gstreamer-video.html" title="Video Library">
<link rel="part" href="gstreamer-libs-hierarchy.html" title="Part&#160;II.&#160;Object Hierarchy">
<link rel="index" href="api-index.html" title="Index">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
<td><a accesskey="p" href="gst-plugins-base-libs-gstmultichannel.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GStreamer Base Plugins 0.10 Library Reference Manual</th>
<td><a accesskey="n" href="gstreamer-cdda.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr>
<tr><td colspan="5" class="shortcuts"><nobr><a href="#id2571963" class="shortcut">Top</a>
                  &#160;|&#160;
                  <a href="#id2572879" class="shortcut">Description</a>
                  &#160;|&#160;
                  <a href="#id2572847" class="shortcut">Object Hierarchy</a></nobr></td></tr>
</table>
<div class="refentry" lang="en">
<a name="gst-plugins-base-libs-gstringbuffer"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2>
<a name="id2571963"></a><span class="refentrytitle">gstringbuffer</span>
</h2>
<p>gstringbuffer &#8212; Base class for audio ringbuffer implementations</p>
</td>
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<a name="GstRingBuffer"></a><pre class="synopsis">

#include &lt;gst/audio/gstringbuffer.h&gt;


                    <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer-struct">GstRingBuffer</a>;
                    <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferClass">GstRingBufferClass</a>;
                    <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">GstRingBufferSpec</a>;
void                (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback">*GstRingBufferCallback</a>)            (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *rbuf,
                                                         guint8 *data,
                                                         guint len,
                                                         gpointer user_data);
enum                <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState">GstRingBufferSegState</a>;
enum                <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferState">GstRingBufferState</a>;
enum                <a href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormat">GstBufferFormat</a>;
enum                <a href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType">GstBufferFormatType</a>;
#define             <a href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-BROADCAST:CAPS">GST_RING_BUFFER_BROADCAST</a>           (buf)
#define             <a href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-GET-COND:CAPS">GST_RING_BUFFER_GET_COND</a>            (buf)
#define             <a href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-SIGNAL:CAPS">GST_RING_BUFFER_SIGNAL</a>              (buf)
#define             <a href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-WAIT:CAPS">GST_RING_BUFFER_WAIT</a>                (buf)
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback">gst_ring_buffer_set_callback</a>        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback">GstRingBufferCallback</a> cb,
                                                         gpointer user_data);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-acquire">gst_ring_buffer_acquire</a>             (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">GstRingBufferSpec</a> *spec);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release">gst_ring_buffer_release</a>             (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-acquired">gst_ring_buffer_is_acquired</a>         (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-start">gst_ring_buffer_start</a>               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-pause">gst_ring_buffer_pause</a>               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-stop">gst_ring_buffer_stop</a>                (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
guint               <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay">gst_ring_buffer_delay</a>               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
guint64             <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-samples-done">gst_ring_buffer_samples_done</a>        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-sample">gst_ring_buffer_set_sample</a>          (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 sample);
guint               <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit">gst_ring_buffer_commit</a>              (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 sample,
                                                         guchar *data,
                                                         guint len);
guint               <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full">gst_ring_buffer_commit_full</a>         (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 *sample,
                                                         guchar *data,
                                                         gint in_samples,
                                                         gint out_samples,
                                                         gint *accum);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-prepare-read">gst_ring_buffer_prepare_read</a>        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gint *segment,
                                                         guint8 **readptr,
                                                         gint *len);
guint               <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-read">gst_ring_buffer_read</a>                (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 sample,
                                                         guchar *data,
                                                         guint len);
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear">gst_ring_buffer_clear</a>               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gint segment);
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear-all">gst_ring_buffer_clear_all</a>           (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-advance">gst_ring_buffer_advance</a>             (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint advance);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-close-device">gst_ring_buffer_close_device</a>        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-open-device">gst_ring_buffer_open_device</a>         (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-device-is-open">gst_ring_buffer_device_is_open</a>      (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-may-start">gst_ring_buffer_may_start</a>           (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gboolean allowed);
gboolean            <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-parse-caps">gst_ring_buffer_parse_caps</a>          (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">GstRingBufferSpec</a> *spec,
                                                         GstCaps *caps);
void                <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-flushing">gst_ring_buffer_set_flushing</a>        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gboolean flushing);


</pre>
</div>
<div class="refsect1" lang="en">
<a name="id2572847"></a><h2>Object Hierarchy</h2>
<pre class="synopsis">

  GObject
   +----GstObject
         +----GstRingBuffer
</pre>
</div>
<div class="refsect1" lang="en">
<a name="id2572879"></a><h2>Description</h2>
<p>
</p>
<div class="refsect2" lang="en">
<a name="id2572891"></a><p>
This object is the base class for audio ringbuffers used by the base
audio source and sink classes.
</p>
<p>
The ringbuffer abstracts a circular buffer of data. One reader and
one writer can operate on the data from different threads in a lockfree
manner. The base class is sufficiently flexible to be used as an
abstraction for DMA based ringbuffers as well as a pure software
implementations.
</p>
</div>
<p>
</p>
<p>
Last reviewed on 2006-02-02 (0.10.4)</p>
<p>

</p>
</div>
<div class="refsect1" lang="en">
<a name="id2572917"></a><h2>Details</h2>
<div class="refsect2" lang="en">
<a name="id2572927"></a><h3>
<a name="GstRingBuffer-struct"></a>GstRingBuffer</h3>
<a class="indexterm" name="id2572940"></a><pre class="programlisting">typedef struct {
  GCond                 *cond;
  gboolean               open;
  gboolean               acquired;
  GstBuffer             *data;
  GstRingBufferSpec      spec;
  GstRingBufferSegState *segstate;
  gint                   samples_per_seg;
  guint8                *empty_seg;

  gint                   state;
  gint                   segdone;
  gint                   segbase;
  gint                   waiting;
} GstRingBuffer;
</pre>
<p>
The ringbuffer base class structure.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term">GCond&#160;*<em class="structfield"><code>cond</code></em>;</span></td>
<td> used to signal start/stop/pause/resume actions
</td>
</tr>
<tr>
<td><span class="term">gboolean&#160;<em class="structfield"><code>open</code></em>;</span></td>
<td> boolean indicating that the ringbuffer is open
</td>
</tr>
<tr>
<td><span class="term">gboolean&#160;<em class="structfield"><code>acquired</code></em>;</span></td>
<td> boolean indicating that the ringbuffer is acquired
</td>
</tr>
<tr>
<td><span class="term">GstBuffer&#160;*<em class="structfield"><code>data</code></em>;</span></td>
<td> data in the ringbuffer
</td>
</tr>
<tr>
<td><span class="term"><a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">GstRingBufferSpec</a>&#160;<em class="structfield"><code>spec</code></em>;</span></td>
<td> format and layout of the ringbuffer data
</td>
</tr>
<tr>
<td><span class="term"><a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState">GstRingBufferSegState</a>&#160;*<em class="structfield"><code>segstate</code></em>;</span></td>
<td> status of each segment in the ringbuffer (unused)
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>samples_per_seg</code></em>;</span></td>
<td> number of samples in one segment
</td>
</tr>
<tr>
<td><span class="term">guint8&#160;*<em class="structfield"><code>empty_seg</code></em>;</span></td>
<td> pointer to memory holding one segment of silence samples
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>state</code></em>;</span></td>
<td> state of the buffer
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>segdone</code></em>;</span></td>
<td> readpointer in the ringbuffer
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>segbase</code></em>;</span></td>
<td> segment corresponding to segment 0 (unused)
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>waiting</code></em>;</span></td>
<td> is a reader or writer waiting for a free segment
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2573222"></a><h3>
<a name="GstRingBufferClass"></a>GstRingBufferClass</h3>
<a class="indexterm" name="id2573235"></a><pre class="programlisting">typedef struct {
  GstObjectClass parent_class;

  gboolean     (*open_device)  (GstRingBuffer *buf);
  gboolean     (*acquire)      (GstRingBuffer *buf, GstRingBufferSpec *spec);
  gboolean     (*release)      (GstRingBuffer *buf);
  gboolean     (*close_device) (GstRingBuffer *buf);

  gboolean     (*start)        (GstRingBuffer *buf);
  gboolean     (*pause)        (GstRingBuffer *buf);
  gboolean     (*resume)       (GstRingBuffer *buf);
  gboolean     (*stop)         (GstRingBuffer *buf);

  guint        (*delay)        (GstRingBuffer *buf);
} GstRingBufferClass;
</pre>
<p>
The vmethods that subclasses can override to implement the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term">GstObjectClass&#160;<em class="structfield"><code>parent_class</code></em>;</span></td>
<td>
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>open_device</code></em>&#160;()</span></td>
<td>  open the device, don't set any params or allocate anything
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>acquire</code></em>&#160;()</span></td>
<td> allocate the resources for the ringbuffer using the given spec
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>release</code></em>&#160;()</span></td>
<td> free resources of the ringbuffer
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>close_device</code></em>&#160;()</span></td>
<td> close the device
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>start</code></em>&#160;()</span></td>
<td> start processing of samples
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>pause</code></em>&#160;()</span></td>
<td> pause processing of samples
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>resume</code></em>&#160;()</span></td>
<td> resume processing of samples after pause
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>stop</code></em>&#160;()</span></td>
<td> stop processing of samples
</td>
</tr>
<tr>
<td><span class="term"><em class="structfield"><code>delay</code></em>&#160;()</span></td>
<td> get number of samples queued in device
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2573417"></a><h3>
<a name="GstRingBufferSpec"></a>GstRingBufferSpec</h3>
<a class="indexterm" name="id2573429"></a><pre class="programlisting">typedef struct {
  /* in */
  GstCaps  *caps;               /* the caps of the buffer */

  /* in/out */
  GstBufferFormatType   type;
  GstBufferFormat format;
  gboolean  sign;
  gboolean  bigend;
  gint      width;
  gint      depth;
  gint      rate;
  gint      channels;
  
  guint64  latency_time;        /* the required/actual latency time */
  guint64  buffer_time;         /* the required/actual time of the buffer */
  gint     segsize;             /* size of one buffer segment in bytes */
  gint     segtotal;            /* total number of segments */

  /* out */
  gint     bytes_per_sample;    /* number of bytes of one sample */
  guint8   silence_sample[32];  /* bytes representing silence */
} GstRingBufferSpec;
</pre>
<p>
The structure containing the format specification of the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term">GstCaps&#160;*<em class="structfield"><code>caps</code></em>;</span></td>
<td> The caps that generated the Spec.
</td>
</tr>
<tr>
<td><span class="term"><a href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType">GstBufferFormatType</a>&#160;<em class="structfield"><code>type</code></em>;</span></td>
<td> the sample type
</td>
</tr>
<tr>
<td><span class="term"><a href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormat">GstBufferFormat</a>&#160;<em class="structfield"><code>format</code></em>;</span></td>
<td> the sample format
</td>
</tr>
<tr>
<td><span class="term">gboolean&#160;<em class="structfield"><code>sign</code></em>;</span></td>
<td> the sample sign
</td>
</tr>
<tr>
<td><span class="term">gboolean&#160;<em class="structfield"><code>bigend</code></em>;</span></td>
<td> the endianness of the samples
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>width</code></em>;</span></td>
<td> the width of the samples
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>depth</code></em>;</span></td>
<td> th depth of the samples
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>rate</code></em>;</span></td>
<td> the samplerate
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>channels</code></em>;</span></td>
<td> the number of channels
</td>
</tr>
<tr>
<td><span class="term">guint64&#160;<em class="structfield"><code>latency_time</code></em>;</span></td>
<td> the latency in microseconds
</td>
</tr>
<tr>
<td><span class="term">guint64&#160;<em class="structfield"><code>buffer_time</code></em>;</span></td>
<td> the total buffer size in microseconds
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>segsize</code></em>;</span></td>
<td> the size of one segment in bytes
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>segtotal</code></em>;</span></td>
<td> the total number of segments
</td>
</tr>
<tr>
<td><span class="term">gint&#160;<em class="structfield"><code>bytes_per_sample</code></em>;</span></td>
<td> number of bytes in one sample
</td>
</tr>
<tr>
<td><span class="term">guint8&#160;<em class="structfield"><code>silence_sample</code></em>[32];</span></td>
<td> bytes representing one sample of silence
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2573775"></a><h3>
<a name="GstRingBufferCallback"></a>GstRingBufferCallback ()</h3>
<a class="indexterm" name="id2573788"></a><pre class="programlisting">void                (*GstRingBufferCallback)            (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *rbuf,
                                                         guint8 *data,
                                                         guint len,
                                                         gpointer user_data);</pre>
<p>
This function is set with <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback"><code class="function">gst_ring_buffer_set_callback()</code></a> and is
called to fill the memory at <em class="parameter"><code>data</code></em> with <em class="parameter"><code>len</code></em> bytes of samples.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>rbuf</code></em>&#160;:</span></td>
<td> a <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>data</code></em>&#160;:</span></td>
<td> target to fill
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>len</code></em>&#160;:</span></td>
<td> amount to fill
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>user_data</code></em>&#160;:</span></td>
<td> user data
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2573936"></a><h3>
<a name="GstRingBufferSegState"></a>enum GstRingBufferSegState</h3>
<a class="indexterm" name="id2573949"></a><pre class="programlisting">typedef enum {
  GST_SEGSTATE_INVALID,
  GST_SEGSTATE_EMPTY,
  GST_SEGSTATE_FILLED,
  GST_SEGSTATE_PARTIAL
} GstRingBufferSegState;
</pre>
<p>
The state of a segment in the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><a name="GST-SEGSTATE-INVALID:CAPS"></a><code class="literal">GST_SEGSTATE_INVALID</code></span></td>
<td> The content of the segment is invalid
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-SEGSTATE-EMPTY:CAPS"></a><code class="literal">GST_SEGSTATE_EMPTY</code></span></td>
<td> The segment is empty
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-SEGSTATE-FILLED:CAPS"></a><code class="literal">GST_SEGSTATE_FILLED</code></span></td>
<td> The segment contains valid data
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-SEGSTATE-PARTIAL:CAPS"></a><code class="literal">GST_SEGSTATE_PARTIAL</code></span></td>
<td> The segment partially contains valid data
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574064"></a><h3>
<a name="GstRingBufferState"></a>enum GstRingBufferState</h3>
<a class="indexterm" name="id2574077"></a><pre class="programlisting">typedef enum {
  GST_RING_BUFFER_STATE_STOPPED,
  GST_RING_BUFFER_STATE_PAUSED,
  GST_RING_BUFFER_STATE_STARTED
} GstRingBufferState;
</pre>
<p>
The state of the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><a name="GST-RING-BUFFER-STATE-STOPPED:CAPS"></a><code class="literal">GST_RING_BUFFER_STATE_STOPPED</code></span></td>
<td> The ringbuffer is stopped
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-RING-BUFFER-STATE-PAUSED:CAPS"></a><code class="literal">GST_RING_BUFFER_STATE_PAUSED</code></span></td>
<td> The ringbuffer is paused
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-RING-BUFFER-STATE-STARTED:CAPS"></a><code class="literal">GST_RING_BUFFER_STATE_STARTED</code></span></td>
<td> The ringbuffer is started
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574172"></a><h3>
<a name="GstBufferFormat"></a>enum GstBufferFormat</h3>
<a class="indexterm" name="id2574185"></a><pre class="programlisting">typedef enum
{
  GST_UNKNOWN,

  GST_S8,
  GST_U8,

  GST_S16_LE,
  GST_S16_BE,
  GST_U16_LE,
  GST_U16_BE,

  GST_S24_LE,
  GST_S24_BE,
  GST_U24_LE,
  GST_U24_BE,

  GST_S32_LE,
  GST_S32_BE,
  GST_U32_LE,
  GST_U32_BE,

  GST_S24_3LE,
  GST_S24_3BE,
  GST_U24_3LE,
  GST_U24_3BE,
  GST_S20_3LE,
  GST_S20_3BE,
  GST_U20_3LE,
  GST_U20_3BE,
  GST_S18_3LE,
  GST_S18_3BE,
  GST_U18_3LE,
  GST_U18_3BE,

  GST_FLOAT32_LE,
  GST_FLOAT32_BE,

  GST_FLOAT64_LE,
  GST_FLOAT64_BE,

  GST_MU_LAW,
  GST_A_LAW,
  GST_IMA_ADPCM,
  GST_MPEG,
  GST_GSM
} GstBufferFormat;
</pre>
<p>

</p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574208"></a><h3>
<a name="GstBufferFormatType"></a>enum GstBufferFormatType</h3>
<a class="indexterm" name="id2574221"></a><pre class="programlisting">typedef enum
{
  GST_BUFTYPE_LINEAR,
  GST_BUFTYPE_FLOAT,
  GST_BUFTYPE_MU_LAW,
  GST_BUFTYPE_A_LAW,
  GST_BUFTYPE_IMA_ADPCM,
  GST_BUFTYPE_MPEG,
  GST_BUFTYPE_GSM
} GstBufferFormatType;
</pre>
<p>
The format of the samples in the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-LINEAR:CAPS"></a><code class="literal">GST_BUFTYPE_LINEAR</code></span></td>
<td> samples in linear PCM
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-FLOAT:CAPS"></a><code class="literal">GST_BUFTYPE_FLOAT</code></span></td>
<td> samples in float 
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-MU-LAW:CAPS"></a><code class="literal">GST_BUFTYPE_MU_LAW</code></span></td>
<td> samples in mulaw
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-A-LAW:CAPS"></a><code class="literal">GST_BUFTYPE_A_LAW</code></span></td>
<td> samples in alaw
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-IMA-ADPCM:CAPS"></a><code class="literal">GST_BUFTYPE_IMA_ADPCM</code></span></td>
<td> samples in ima adpcm
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-MPEG:CAPS"></a><code class="literal">GST_BUFTYPE_MPEG</code></span></td>
<td> samples in mpeg audio format
</td>
</tr>
<tr>
<td><span class="term"><a name="GST-BUFTYPE-GSM:CAPS"></a><code class="literal">GST_BUFTYPE_GSM</code></span></td>
<td> samples in gsm format
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574405"></a><h3>
<a name="GST-RING-BUFFER-BROADCAST:CAPS"></a>GST_RING_BUFFER_BROADCAST()</h3>
<a class="indexterm" name="id2574419"></a><pre class="programlisting">#define GST_RING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_RING_BUFFER_GET_COND (buf)))
</pre>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td>


</td>
</tr></tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574453"></a><h3>
<a name="GST-RING-BUFFER-GET-COND:CAPS"></a>GST_RING_BUFFER_GET_COND()</h3>
<a class="indexterm" name="id2574466"></a><pre class="programlisting">#define GST_RING_BUFFER_GET_COND(buf) (((GstRingBuffer *)buf)-&gt;cond)
</pre>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td>


</td>
</tr></tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574501"></a><h3>
<a name="GST-RING-BUFFER-SIGNAL:CAPS"></a>GST_RING_BUFFER_SIGNAL()</h3>
<a class="indexterm" name="id2574514"></a><pre class="programlisting">#define GST_RING_BUFFER_SIGNAL(buf)   (g_cond_signal (GST_RING_BUFFER_GET_COND (buf)))
</pre>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td>


</td>
</tr></tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574548"></a><h3>
<a name="GST-RING-BUFFER-WAIT:CAPS"></a>GST_RING_BUFFER_WAIT()</h3>
<a class="indexterm" name="id2574562"></a><pre class="programlisting">#define GST_RING_BUFFER_WAIT(buf)     (g_cond_wait (GST_RING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf)))
</pre>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td>


</td>
</tr></tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574596"></a><h3>
<a name="gst-ring-buffer-set-callback"></a>gst_ring_buffer_set_callback ()</h3>
<a class="indexterm" name="id2574608"></a><pre class="programlisting">void                gst_ring_buffer_set_callback        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback">GstRingBufferCallback</a> cb,
                                                         gpointer user_data);</pre>
<p>
Sets the given callback function on the buffer. This function
will be called every time a segment has been written to a device.
</p>
<p>
MT safe.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to set the callback on
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>cb</code></em>&#160;:</span></td>
<td> the callback to set
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>user_data</code></em>&#160;:</span></td>
<td> user data passed to the callback
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574717"></a><h3>
<a name="gst-ring-buffer-acquire"></a>gst_ring_buffer_acquire ()</h3>
<a class="indexterm" name="id2574730"></a><pre class="programlisting">gboolean            gst_ring_buffer_acquire             (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">GstRingBufferSpec</a> *spec);</pre>
<p>
Allocate the resources for the ringbuffer. This function fills
in the data pointer of the ring buffer with a valid <span class="type">GstBuffer</span>
to which samples can be written.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to acquire
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>spec</code></em>&#160;:</span></td>
<td> the specs of the buffer
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be acquired, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574833"></a><h3>
<a name="gst-ring-buffer-release"></a>gst_ring_buffer_release ()</h3>
<a class="indexterm" name="id2574845"></a><pre class="programlisting">gboolean            gst_ring_buffer_release             (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Free the resources of the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to release
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be released, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2574916"></a><h3>
<a name="gst-ring-buffer-is-acquired"></a>gst_ring_buffer_is_acquired ()</h3>
<a class="indexterm" name="id2574930"></a><pre class="programlisting">gboolean            gst_ring_buffer_is_acquired         (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Check if the ringbuffer is acquired and ready to use.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to check
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the ringbuffer is acquired, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575000"></a><h3>
<a name="gst-ring-buffer-start"></a>gst_ring_buffer_start ()</h3>
<a class="indexterm" name="id2575013"></a><pre class="programlisting">gboolean            gst_ring_buffer_start               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Start processing samples from the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to start
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be started, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575084"></a><h3>
<a name="gst-ring-buffer-pause"></a>gst_ring_buffer_pause ()</h3>
<a class="indexterm" name="id2575096"></a><pre class="programlisting">gboolean            gst_ring_buffer_pause               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Pause processing samples from the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to pause
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be paused, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575167"></a><h3>
<a name="gst-ring-buffer-stop"></a>gst_ring_buffer_stop ()</h3>
<a class="indexterm" name="id2575180"></a><pre class="programlisting">gboolean            gst_ring_buffer_stop                (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Stop processing samples from the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to stop
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be stopped, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575250"></a><h3>
<a name="gst-ring-buffer-delay"></a>gst_ring_buffer_delay ()</h3>
<a class="indexterm" name="id2575263"></a><pre class="programlisting">guint               gst_ring_buffer_delay               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Get the number of samples queued in the audio device. This is
usually less than the segment size but can be bigger when the
implementation uses another internal buffer between the audio
device.
</p>
<p>
For playback ringbuffers this is the amount of samples transfered from the
ringbuffer to the device but still not played.
</p>
<p>
For capture ringbuffers this is the amount of samples in the device that are
not yet transfered to the ringbuffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to query
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> The number of samples queued in the audio device.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575347"></a><h3>
<a name="gst-ring-buffer-samples-done"></a>gst_ring_buffer_samples_done ()</h3>
<a class="indexterm" name="id2575360"></a><pre class="programlisting">guint64             gst_ring_buffer_samples_done        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Get the number of samples that were processed by the ringbuffer
since it was last started. This does not include the number of samples not
yet processed (see <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay"><code class="function">gst_ring_buffer_delay()</code></a>).</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to query
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> The number of samples processed by the ringbuffer.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575444"></a><h3>
<a name="gst-ring-buffer-set-sample"></a>gst_ring_buffer_set_sample ()</h3>
<a class="indexterm" name="id2575457"></a><pre class="programlisting">void                gst_ring_buffer_set_sample          (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 sample);</pre>
<p>
Make sure that the next sample written to the device is
accounted for as being the <em class="parameter"><code>sample</code></em> sample written to the
device. This value will be used in reporting the current
sample position of the ringbuffer.
</p>
<p>
This function will also clear the buffer with silence.
</p>
<p>
MT safe.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to use
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>sample</code></em>&#160;:</span></td>
<td> the sample number to set
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575554"></a><h3>
<a name="gst-ring-buffer-commit"></a>gst_ring_buffer_commit ()</h3>
<a class="indexterm" name="id2575567"></a><pre class="programlisting">guint               gst_ring_buffer_commit              (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 sample,
                                                         guchar *data,
                                                         guint len);</pre>
<p>
Same as <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full"><code class="function">gst_ring_buffer_commit_full()</code></a> but with a in_samples and out_samples
equal to <em class="parameter"><code>len</code></em>, ignoring accum.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to commit
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>sample</code></em>&#160;:</span></td>
<td> the sample position of the data
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>data</code></em>&#160;:</span></td>
<td> the data to commit
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>len</code></em>&#160;:</span></td>
<td> the number of samples in the data to commit
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> The number of samples written to the ringbuffer or -1 on
error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2575720"></a><h3>
<a name="gst-ring-buffer-commit-full"></a>gst_ring_buffer_commit_full ()</h3>
<a class="indexterm" name="id2575738"></a><pre class="programlisting">guint               gst_ring_buffer_commit_full         (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 *sample,
                                                         guchar *data,
                                                         gint in_samples,
                                                         gint out_samples,
                                                         gint *accum);</pre>
<p>
Commit <em class="parameter"><code>in_samples</code></em> samples pointed to by <em class="parameter"><code>data</code></em> to the ringbuffer <em class="parameter"><code>buf</code></em>. 
</p>
<p>
<em class="parameter"><code>in_samples</code></em> and <em class="parameter"><code>out_samples</code></em> define the rate conversion to perform on the the
samples in <em class="parameter"><code>data</code></em>. For negative rates, <em class="parameter"><code>out_samples</code></em> must be negative and
<em class="parameter"><code>in_samples</code></em> positive.
</p>
<p>
When <em class="parameter"><code>out_samples</code></em> is positive, the first sample will be written at position <em class="parameter"><code>sample</code></em>
in the ringbuffer. When <em class="parameter"><code>out_samples</code></em> is negative, the last sample will be written to
<em class="parameter"><code>sample</code></em> in reverse order.
</p>
<p>
<em class="parameter"><code>out_samples</code></em> does not need to be a multiple of the segment size of the ringbuffer
although it is recommended for optimal performance. 
</p>
<p>
<em class="parameter"><code>accum</code></em> will hold a temporary accumulator used in rate conversion and should be
set to 0 when this function is first called. In case the commit operation is
interrupted, one can resume the processing by passing the previously returned
<em class="parameter"><code>accum</code></em> value back to this function.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to commit
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>sample</code></em>&#160;:</span></td>
<td> the sample position of the data
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>data</code></em>&#160;:</span></td>
<td> the data to commit
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>in_samples</code></em>&#160;:</span></td>
<td> the number of samples in the data to commit
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>out_samples</code></em>&#160;:</span></td>
<td> the number of samples to write to the ringbuffer
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>accum</code></em>&#160;:</span></td>
<td> accumulator for rate conversion.
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> The number of samples written to the ringbuffer or -1 on error. The
number of samples written can be less than <em class="parameter"><code>out_samples</code></em> when <em class="parameter"><code>buf</code></em> was interrupted
with a flush or stop.

</td>
</tr>
</tbody>
</table></div>
<p class="since">Since  0.10.11.

MT safe.
</p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576049"></a><h3>
<a name="gst-ring-buffer-prepare-read"></a>gst_ring_buffer_prepare_read ()</h3>
<a class="indexterm" name="id2576062"></a><pre class="programlisting">gboolean            gst_ring_buffer_prepare_read        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gint *segment,
                                                         guint8 **readptr,
                                                         gint *len);</pre>
<p>
Returns a pointer to memory where the data from segment <em class="parameter"><code>segment</code></em>
can be found. This function is mostly used by subclasses.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to read from
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>segment</code></em>&#160;:</span></td>
<td> the segment to read
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>readptr</code></em>&#160;:</span></td>
<td> the pointer to the memory where samples can be read
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>len</code></em>&#160;:</span></td>
<td> the number of bytes to read
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> FALSE if the buffer is not started.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576205"></a><h3>
<a name="gst-ring-buffer-read"></a>gst_ring_buffer_read ()</h3>
<a class="indexterm" name="id2576218"></a><pre class="programlisting">guint               gst_ring_buffer_read                (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint64 sample,
                                                         guchar *data,
                                                         guint len);</pre>
<p>
Read <em class="parameter"><code>len</code></em> samples from the ringbuffer into the memory pointed 
to by <em class="parameter"><code>data</code></em>.
The first sample should be read from position <em class="parameter"><code>sample</code></em> in
the ringbuffer.
</p>
<p>
<em class="parameter"><code>len</code></em> should not be a multiple of the segment size of the ringbuffer
although it is recommended.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to read from
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>sample</code></em>&#160;:</span></td>
<td> the sample position of the data
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>data</code></em>&#160;:</span></td>
<td> where the data should be read
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>len</code></em>&#160;:</span></td>
<td> the number of samples in data to read
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> The number of samples read from the ringbuffer or -1 on
error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576384"></a><h3>
<a name="gst-ring-buffer-clear"></a>gst_ring_buffer_clear ()</h3>
<a class="indexterm" name="id2576397"></a><pre class="programlisting">void                gst_ring_buffer_clear               (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gint segment);</pre>
<p>
Clear the given segment of the buffer with silence samples.
This function is used by subclasses.
</p>
<p>
MT safe.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to clear
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>segment</code></em>&#160;:</span></td>
<td> the segment to clear
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576483"></a><h3>
<a name="gst-ring-buffer-clear-all"></a>gst_ring_buffer_clear_all ()</h3>
<a class="indexterm" name="id2576496"></a><pre class="programlisting">void                gst_ring_buffer_clear_all           (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Fill the ringbuffer with silence.
</p>
<p>
MT safe.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to clear
</td>
</tr></tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576558"></a><h3>
<a name="gst-ring-buffer-advance"></a>gst_ring_buffer_advance ()</h3>
<a class="indexterm" name="id2576571"></a><pre class="programlisting">void                gst_ring_buffer_advance             (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         guint advance);</pre>
<p>
Subclasses should call this function to notify the fact that 
<em class="parameter"><code>advance</code></em> segments are now processed by the device.
</p>
<p>
MT safe.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to advance
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>advance</code></em>&#160;:</span></td>
<td> the number of segments written
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576662"></a><h3>
<a name="gst-ring-buffer-close-device"></a>gst_ring_buffer_close_device ()</h3>
<a class="indexterm" name="id2576676"></a><pre class="programlisting">gboolean            gst_ring_buffer_close_device        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Close the audio device associated with the ring buffer. The ring buffer
should already have been released via <a href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release"><code class="function">gst_ring_buffer_release()</code></a>.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be closed, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576758"></a><h3>
<a name="gst-ring-buffer-open-device"></a>gst_ring_buffer_open_device ()</h3>
<a class="indexterm" name="id2576772"></a><pre class="programlisting">gboolean            gst_ring_buffer_open_device         (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Open the audio device associated with the ring buffer. Does not perform any
setup on the device. You must open the device before acquiring the ring
buffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device could be opened, FALSE on error.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576843"></a><h3>
<a name="gst-ring-buffer-device-is-open"></a>gst_ring_buffer_device_is_open ()</h3>
<a class="indexterm" name="id2576857"></a><pre class="programlisting">gboolean            gst_ring_buffer_device_is_open      (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf);</pre>
<p>
Checks the status of the device associated with the ring buffer.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the device was open, FALSE if it was closed.

MT safe.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2576928"></a><h3>
<a name="gst-ring-buffer-may-start"></a>gst_ring_buffer_may_start ()</h3>
<a class="indexterm" name="id2576945"></a><pre class="programlisting">void                gst_ring_buffer_may_start           (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gboolean allowed);</pre>
<p>
Tell the ringbuffer that it is allowed to start playback when
the ringbuffer is filled with samples.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>allowed</code></em>&#160;:</span></td>
<td> the new value
</td>
</tr>
</tbody>
</table></div>
<p class="since">Since  0.10.6

MT safe.
</p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2577032"></a><h3>
<a name="gst-ring-buffer-parse-caps"></a>gst_ring_buffer_parse_caps ()</h3>
<a class="indexterm" name="id2577045"></a><pre class="programlisting">gboolean            gst_ring_buffer_parse_caps          (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">GstRingBufferSpec</a> *spec,
                                                         GstCaps *caps);</pre>
<p>
Parse <em class="parameter"><code>caps</code></em> into <em class="parameter"><code>spec</code></em>.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>spec</code></em>&#160;:</span></td>
<td> a spec
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>caps</code></em>&#160;:</span></td>
<td> a <span class="type">GstCaps</span>
</td>
</tr>
<tr>
<td><span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
<td> TRUE if the caps could be parsed.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2577146"></a><h3>
<a name="gst-ring-buffer-set-flushing"></a>gst_ring_buffer_set_flushing ()</h3>
<a class="indexterm" name="id2577160"></a><pre class="programlisting">void                gst_ring_buffer_set_flushing        (<a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a> *buf,
                                                         gboolean flushing);</pre>
<p>
Set the ringbuffer to flushing mode or normal mode.
</p>
<p>
MT safe.</p>
<p>

</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><span class="term"><em class="parameter"><code>buf</code></em>&#160;:</span></td>
<td> the <a href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to flush
</td>
</tr>
<tr>
<td><span class="term"><em class="parameter"><code>flushing</code></em>&#160;:</span></td>
<td> the new mode
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
<div class="refsect1" lang="en">
<a name="id2577245"></a><h2>See Also</h2>
<a href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>, <a href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink"><span class="type">GstAudioSink</span></a>
</div>
</div>
</body>
</html>