📄 swfdec-swfdecbuffer.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"><title>SwfdecBuffer</title><meta name="generator" content="DocBook XSL Stylesheets V1.71.0"><link rel="start" href="index.html" title="Swfdec Reference Manual"><link rel="up" href="ch01.html" title="Public API"><link rel="prev" href="SwfdecAudio.html" title="SwfdecAudio"><link rel="next" href="SwfdecLoader.html" title="SwfdecLoader"><meta name="generator" content="GTK-Doc V1.8 (XML mode)"><link rel="stylesheet" href="style.css" type="text/css"><link rel="chapter" href="ch01.html" title="Public API"></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="SwfdecAudio.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.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">Swfdec Reference Manual</th><td><a accesskey="n" href="SwfdecLoader.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="#id2575817" class="shortcut">Top</a>  |  <a href="#id2590980" class="shortcut">Description</a></nobr></td></tr></table><div class="refentry" lang="en"><a name="swfdec-SwfdecBuffer"></a><div class="titlepage"></div><div class="refnamediv"><table width="100%"><tr><td valign="top"><h2><a name="id2575817"></a><span class="refentrytitle">SwfdecBuffer</span></h2><p>SwfdecBuffer — memory region handling</p></td><td valign="top" align="right"></td></tr></table></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis"> <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>; <a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a>;<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new">swfdec_buffer_new</a> (void);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-and-alloc">swfdec_buffer_new_and_alloc</a> (unsigned int size);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-and-alloc0">swfdec_buffer_new_and_alloc0</a> (unsigned int size);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-subbuffer">swfdec_buffer_new_subbuffer</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a> *buffer, unsigned int offset, unsigned int length);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-from-file">swfdec_buffer_new_from_file</a> (const char *filename, GError **error);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-ref">swfdec_buffer_ref</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a> *buffer);void <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-unref">swfdec_buffer_unref</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a> *buffer);<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-new">swfdec_buffer_queue_new</a> (void);void <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-clear">swfdec_buffer_queue_clear</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue);void <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-free">swfdec_buffer_queue_free</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue);int <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-get-depth">swfdec_buffer_queue_get_depth</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue);int <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-get-offset">swfdec_buffer_queue_get_offset</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue);void <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-push">swfdec_buffer_queue_push</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue, <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a> *buffer);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-pull">swfdec_buffer_queue_pull</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue, unsigned int length);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-pull-buffer">swfdec_buffer_queue_pull_buffer</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue);<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-queue-peek">swfdec_buffer_queue_peek</a> (<a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue">SwfdecBufferQueue</a> *queue, unsigned int length);</pre></div><div class="refsect1" lang="en"><a name="id2590980"></a><h2>Description</h2><p>To allow for easy sharing of memory regions, <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> was created. Every buffer refers to a memory region and its size and takes care of freeing that region when the buffer is no longer needed. They are reference countedto make it easy to refer to the same region from variousindependant parts of your code. Buffers also support some advanced functionalities like extracting parts of the buffer using <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-subbuffer"><code class="function">swfdec_buffer_new_subbuffer()</code></a> or using mmapped files with <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-from-file"><code class="function">swfdec_buffer_new_from_file()</code></a> without the need for a different API.</p><p>A <a href="swfdec-SwfdecBuffer.html#SwfdecBufferQueue"><span class="type">SwfdecBufferQueue</span></a> is a queue of continuous buffers that allows readingits data in chunks of pre-defined sizes. It is used to transform a data stream that was provided by buffers of random sizes to buffers of the rightsize.</p><p></p></div><div class="refsect1" lang="en"><a name="id2591044"></a><h2>Details</h2><div class="refsect2" lang="en"><a name="id2591055"></a><h3><a name="SwfdecBuffer"></a>SwfdecBuffer</h3><a class="indexterm" name="id2591068"></a><pre class="programlisting">typedef struct { unsigned char *data; unsigned int length; int ref_count; SwfdecBuffer *parent; void (*free) (SwfdecBuffer *, void *); void *priv;} SwfdecBuffer;</pre><p></p></div><hr><div class="refsect2" lang="en"><a name="id2591086"></a><h3><a name="SwfdecBufferQueue"></a>SwfdecBufferQueue</h3><a class="indexterm" name="id2591098"></a><pre class="programlisting">typedef struct { GList *buffers; unsigned int depth; unsigned int offset;} SwfdecBufferQueue;</pre><p></p></div><hr><div class="refsect2" lang="en"><a name="id2591116"></a><h3><a name="swfdec-buffer-new"></a>swfdec_buffer_new ()</h3><a class="indexterm" name="id2591128"></a><pre class="programlisting"><a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* swfdec_buffer_new (void);</pre><p>Creates a new <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> to be filled by the user. Use like this:</p><div class="informalexample"><pre class="programlisting">SwfdecBuffer *buffer = swfdec_buffer_new ();buffer->data = mydata;buffer->length = mydata_length;buffer->free = mydata_freefunc;</pre></div><p></p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> a new <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> referencing nothing.</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><a name="id2591190"></a><h3><a name="swfdec-buffer-new-and-alloc"></a>swfdec_buffer_new_and_alloc ()</h3><a class="indexterm" name="id2591202"></a><pre class="programlisting"><a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* swfdec_buffer_new_and_alloc (unsigned int size);</pre><p>Creates a new buffer and allocates new memory of <em class="parameter"><code>size</code></em> bytes to be used with the 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>size</code></em> :</span></td><td> amount of bytes to allocate</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> a new <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> with buffer->data pointing to new data</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><a name="id2591700"></a><h3><a name="swfdec-buffer-new-and-alloc0"></a>swfdec_buffer_new_and_alloc0 ()</h3><a class="indexterm" name="id2591712"></a><pre class="programlisting"><a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* swfdec_buffer_new_and_alloc0 (unsigned int size);</pre><p>Createsa new buffer just like <a href="swfdec-SwfdecBuffer.html#swfdec-buffer-new-and-alloc"><code class="function">swfdec_buffer_new_and_alloc()</code></a>, but ensures that the returned data gets initialized to be 0.</p><p></p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><em class="parameter"><code>size</code></em> :</span></td><td> amount of bytes to allocate</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> a new <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> with buffer->data pointing to new data</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><a name="id2591791"></a><h3><a name="swfdec-buffer-new-subbuffer"></a>swfdec_buffer_new_subbuffer ()</h3><a class="indexterm" name="id2591803"></a><pre class="programlisting"><a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* swfdec_buffer_new_subbuffer (<a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a> *buffer, unsigned int offset, unsigned int length);</pre><p>Creates a <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> for managing a partial section of the memory pointedto by <em class="parameter"><code>buffer</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>buffer</code></em> :</span></td><td> <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> managing the region of memory</td></tr><tr><td><span class="term"><em class="parameter"><code>offset</code></em> :</span></td><td> starting offset into data</td></tr><tr><td><span class="term"><em class="parameter"><code>length</code></em> :</span></td><td> amount of bytes to manage</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> a new <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> managing the indicated region.</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><a name="id2554224"></a><h3><a name="swfdec-buffer-new-from-file"></a>swfdec_buffer_new_from_file ()</h3><a class="indexterm" name="id2554236"></a><pre class="programlisting"><a href="swfdec-SwfdecBuffer.html#SwfdecBuffer">SwfdecBuffer</a>* swfdec_buffer_new_from_file (const char *filename, GError **error);</pre><p>Tries to create a buffer for the given <em class="parameter"><code>filename</code></em> using a <span class="type">GMappedFile</span>. Ifthe creation fails, <code class="literal">NULL</code> is returned and <em class="parameter"><code>error</code></em> is set. The error can beany of the errors that are valid from <code class="function">g_mapped_file_new()</code>.</p><p></p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><em class="parameter"><code>filename</code></em> :</span></td><td> file to read</td></tr><tr><td><span class="term"><em class="parameter"><code>error</code></em> :</span></td><td> return location for a <span class="type">GError</span> or <code class="literal">NULL</code></td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> a new <a href="swfdec-SwfdecBuffer.html#SwfdecBuffer"><span class="type">SwfdecBuffer</span></a> or <code class="literal">NULL</code> on failure</td></tr></tbody></table></div></div><hr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -