Repository URL to install this package:
Version:
7:2.7.1-1ubuntu3 ▾
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>FFmpeg: AVBuffer</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">FFmpeg
 <span id="projectnumber">2.7.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Generated by Doxygen 1.7.6.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> |
<a href="#files">Files</a> |
<a href="#define-members">Defines</a> |
<a href="#typedef-members">Typedefs</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">AVBuffer</div> </div>
<div class="ingroups"><a class="el" href="group__lavu__data.html">Data Structures</a></div></div><!--header-->
<div class="contents">
<p>AVBuffer is an API for reference-counted data buffers.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structAVBufferRef.html">AVBufferRef</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">A reference to a data buffer. <a href="structAVBufferRef.html#details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="files"></a>
Files</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html">buffer.h</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>refcounted data buffer API </p>
<br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#gaa818f8f1011d69acc50c1f29cb85e576">AV_BUFFER_FLAG_READONLY</a>   (1 << 0)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Always treat the buffer as read-only, even when it has only one reference. <a href="#gaa818f8f1011d69acc50c1f29cb85e576"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="group__lavu__buffer.html#ga501d49df442180d584f255aa97b2549d">AVBuffer</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga501d49df442180d584f255aa97b2549d">AVBuffer</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">A reference counted buffer type. <a href="#ga501d49df442180d584f255aa97b2549d"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga5ae84ac902283dea1a660ede06c1cdac">av_buffer_alloc</a> (int size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate an AVBuffer of the given size using <a class="el" href="group__lavu__mem.html#ga9722446c5e310ffedfaac9489864796d" title="Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...">av_malloc()</a>. <a href="#ga5ae84ac902283dea1a660ede06c1cdac"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga27f37cc004f768b00442b6cb08091686">av_buffer_allocz</a> (int size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Same as <a class="el" href="group__lavu__buffer.html#ga5ae84ac902283dea1a660ede06c1cdac" title="Allocate an AVBuffer of the given size using av_malloc().">av_buffer_alloc()</a>, except the returned buffer will be initialized to zero. <a href="#ga27f37cc004f768b00442b6cb08091686"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga3e7f4c92db85ccba0b2a16dd0069842a">av_buffer_create</a> (uint8_t *data, int size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Create an AVBuffer from an existing array. <a href="#ga3e7f4c92db85ccba0b2a16dd0069842a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga37d620e8cfc9f2f3261c2b4c5d4adfe0">av_buffer_default_free</a> (void *opaque, uint8_t *data)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Default free callback, which calls <a class="el" href="group__lavu__mem.html#ga0c9096f498624c525aa2315b8a20c411" title="Free a memory block which has been allocated with av_malloc(z)() or av_realloc().">av_free()</a> on the buffer data. <a href="#ga37d620e8cfc9f2f3261c2b4c5d4adfe0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#gaa40ce7d3ede946a89d03323bbd7268c1">av_buffer_ref</a> (<a class="el" href="structAVBufferRef.html">AVBufferRef</a> *buf)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Create a new reference to an AVBuffer. <a href="#gaa40ce7d3ede946a89d03323bbd7268c1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga135e9e929b5033bb8f68322497b2effc">av_buffer_unref</a> (<a class="el" href="structAVBufferRef.html">AVBufferRef</a> **buf)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Free a given reference and automatically free the buffer if there are no more references to it. <a href="#ga135e9e929b5033bb8f68322497b2effc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga060be34ace567ae378fd0a786e847053">av_buffer_is_writable</a> (const <a class="el" href="structAVBufferRef.html">AVBufferRef</a> *buf)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#gac1c38f469fc9933885cfffafd8cbf0d6">av_buffer_get_opaque</a> (const <a class="el" href="structAVBufferRef.html">AVBufferRef</a> *buf)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga7b16c3976dc555f71d0843bbd023dfcd">av_buffer_get_ref_count</a> (const <a class="el" href="structAVBufferRef.html">AVBufferRef</a> *buf)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#ga9c2a1be1b7bb80eec8613fdb62a19074">av_buffer_make_writable</a> (<a class="el" href="structAVBufferRef.html">AVBufferRef</a> **buf)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Create a writable reference from a given buffer reference, avoiding data copy if possible. <a href="#ga9c2a1be1b7bb80eec8613fdb62a19074"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__buffer.html#gac7c228f9ed54e246dcd270503bed7291">av_buffer_realloc</a> (<a class="el" href="structAVBufferRef.html">AVBufferRef</a> **buf, int size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Reallocate a given buffer. <a href="#gac7c228f9ed54e246dcd270503bed7291"></a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>AVBuffer is an API for reference-counted data buffers. </p>
<p>There are two core objects in this API -- AVBuffer and <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a>. AVBuffer represents the data buffer itself; it is opaque and not meant to be accessed by the caller directly, but only through <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a>. However, the caller may e.g. compare two AVBuffer pointers to check whether two different references are describing the same data buffer. <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a> represents a single reference to an AVBuffer and it is the object that may be manipulated by the caller directly.</p>
<p>There are two functions provided for creating a new AVBuffer with a single reference -- <a class="el" href="group__lavu__buffer.html#ga5ae84ac902283dea1a660ede06c1cdac" title="Allocate an AVBuffer of the given size using av_malloc().">av_buffer_alloc()</a> to just allocate a new buffer, and <a class="el" href="group__lavu__buffer.html#ga3e7f4c92db85ccba0b2a16dd0069842a" title="Create an AVBuffer from an existing array.">av_buffer_create()</a> to wrap an existing array in an AVBuffer. From an existing reference, additional references may be created with <a class="el" href="group__lavu__buffer.html#gaa40ce7d3ede946a89d03323bbd7268c1" title="Create a new reference to an AVBuffer.">av_buffer_ref()</a>. Use <a class="el" href="group__lavu__buffer.html#ga135e9e929b5033bb8f68322497b2effc" title="Free a given reference and automatically free the buffer if there are no more references to it...">av_buffer_unref()</a> to free a reference (this will automatically free the data once all the references are freed).</p>
<p>The convention throughout this API and the rest of FFmpeg is such that the buffer is considered writable if there exists only one reference to it (and it has not been marked as read-only). The <a class="el" href="group__lavu__buffer.html#ga060be34ace567ae378fd0a786e847053">av_buffer_is_writable()</a> function is provided to check whether this is true and <a class="el" href="group__lavu__buffer.html#ga9c2a1be1b7bb80eec8613fdb62a19074" title="Create a writable reference from a given buffer reference, avoiding data copy if possible.">av_buffer_make_writable()</a> will automatically create a new writable buffer when necessary. Of course nothing prevents the calling code from violating this convention, however that is safe only when all the existing references are under its control.</p>
<dl class="note"><dt><b>Note:</b></dt><dd>Referencing and unreferencing the buffers is thread-safe and thus may be done from multiple threads simultaneously without any need for additional locking.</dd>
<dd>
Two different references to the same buffer can point to different parts of the buffer (i.e. their <a class="el" href="structAVBufferRef.html#acb8452e99cd75074b93800b532c6ea4b" title="The data buffer.">AVBufferRef.data</a> will not be equal). </dd></dl>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="gaa818f8f1011d69acc50c1f29cb85e576"></a><!-- doxytag: member="buffer.h::AV_BUFFER_FLAG_READONLY" ref="gaa818f8f1011d69acc50c1f29cb85e576" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define <a class="el" href="group__lavu__buffer.html#gaa818f8f1011d69acc50c1f29cb85e576">AV_BUFFER_FLAG_READONLY</a>   (1 << 0)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Always treat the buffer as read-only, even when it has only one reference. </p>
<p>Definition at line <a class="el" href="buffer_8h_source.html#l00113">113</a> of file <a class="el" href="buffer_8h_source.html">buffer.h</a>.</p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="ga501d49df442180d584f255aa97b2549d"></a><!-- doxytag: member="buffer.h::AVBuffer" ref="ga501d49df442180d584f255aa97b2549d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="group__lavu__buffer.html#ga501d49df442180d584f255aa97b2549d">AVBuffer</a> <a class="el" href="group__lavu__buffer.html#ga501d49df442180d584f255aa97b2549d">AVBuffer</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>A reference counted buffer type. </p>
<p>It is opaque and is meant to be used through references (<a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a>). </p>
<p>Definition at line <a class="el" href="buffer_8h_source.html#l00073">73</a> of file <a class="el" href="buffer_8h_source.html">buffer.h</a>.</p>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga5ae84ac902283dea1a660ede06c1cdac"></a><!-- doxytag: member="buffer.h::av_buffer_alloc" ref="ga5ae84ac902283dea1a660ede06c1cdac" args="(int size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structAVBufferRef.html">AVBufferRef</a>* <a class="el" href="group__lavu__buffer.html#ga5ae84ac902283dea1a660ede06c1cdac">av_buffer_alloc</a> </td>
<td>(</td>
<td class="paramtype">int </td>
<td class="paramname"><em>size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocate an AVBuffer of the given size using <a class="el" href="group__lavu__mem.html#ga9722446c5e310ffedfaac9489864796d" title="Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...">av_malloc()</a>. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>an <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a> of given size or NULL when out of memory </dd></dl>
</div>
</div>
<a class="anchor" id="ga27f37cc004f768b00442b6cb08091686"></a><!-- doxytag: member="buffer.h::av_buffer_allocz" ref="ga27f37cc004f768b00442b6cb08091686" args="(int size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structAVBufferRef.html">AVBufferRef</a>* <a class="el" href="group__lavu__buffer.html#ga27f37cc004f768b00442b6cb08091686">av_buffer_allocz</a> </td>
<td>(</td>
<td class="paramtype">int </td>
<td class="paramname"><em>size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Same as <a class="el" href="group__lavu__buffer.html#ga5ae84ac902283dea1a660ede06c1cdac" title="Allocate an AVBuffer of the given size using av_malloc().">av_buffer_alloc()</a>, except the returned buffer will be initialized to zero. </p>
</div>
</div>
<a class="anchor" id="ga3e7f4c92db85ccba0b2a16dd0069842a"></a><!-- doxytag: member="buffer.h::av_buffer_create" ref="ga3e7f4c92db85ccba0b2a16dd0069842a" args="(uint8_t *data, int size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structAVBufferRef.html">AVBufferRef</a>* <a class="el" href="group__lavu__buffer.html#ga3e7f4c92db85ccba0b2a16dd0069842a">av_buffer_create</a> </td>
<td>(</td>
<td class="paramtype">uint8_t * </td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void(*)(void *opaque, uint8_t *data) </td>
<td class="paramname"><em>free</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>opaque</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>flags</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Create an AVBuffer from an existing array. </p>
<p>If this function is successful, data is owned by the AVBuffer. The caller may only access data through the returned <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a> and references derived from it. If this function fails, data is left untouched. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>data array </td></tr>
<tr><td class="paramname">size</td><td>size of data in bytes </td></tr>
<tr><td class="paramname">free</td><td>a callback for freeing this buffer's data </td></tr>
<tr><td class="paramname">opaque</td><td>parameter to be got for processing or passed to free </td></tr>
<tr><td class="paramname">flags</td><td>a combination of AV_BUFFER_FLAG_*</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>an <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a> referring to data on success, NULL on failure. </dd></dl>
</div>
</div>
<a class="anchor" id="ga37d620e8cfc9f2f3261c2b4c5d4adfe0"></a><!-- doxytag: member="buffer.h::av_buffer_default_free" ref="ga37d620e8cfc9f2f3261c2b4c5d4adfe0" args="(void *opaque, uint8_t *data)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__buffer.html#ga37d620e8cfc9f2f3261c2b4c5d4adfe0">av_buffer_default_free</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>opaque</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t * </td>
<td class="paramname"><em>data</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Default free callback, which calls <a class="el" href="group__lavu__mem.html#ga0c9096f498624c525aa2315b8a20c411" title="Free a memory block which has been allocated with av_malloc(z)() or av_realloc().">av_free()</a> on the buffer data. </p>
<p>This function is meant to be passed to <a class="el" href="group__lavu__buffer.html#ga3e7f4c92db85ccba0b2a16dd0069842a" title="Create an AVBuffer from an existing array.">av_buffer_create()</a>, not called directly. </p>
</div>
</div>
<a class="anchor" id="gaa40ce7d3ede946a89d03323bbd7268c1"></a><!-- doxytag: member="buffer.h::av_buffer_ref" ref="gaa40ce7d3ede946a89d03323bbd7268c1" args="(AVBufferRef *buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structAVBufferRef.html">AVBufferRef</a>* <a class="el" href="group__lavu__buffer.html#gaa40ce7d3ede946a89d03323bbd7268c1">av_buffer_ref</a> </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Create a new reference to an AVBuffer. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>a new <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a> referring to the same AVBuffer as buf or NULL on failure. </dd></dl>
</div>
</div>
<a class="anchor" id="ga135e9e929b5033bb8f68322497b2effc"></a><!-- doxytag: member="buffer.h::av_buffer_unref" ref="ga135e9e929b5033bb8f68322497b2effc" args="(AVBufferRef **buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__buffer.html#ga135e9e929b5033bb8f68322497b2effc">av_buffer_unref</a> </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> ** </td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Free a given reference and automatically free the buffer if there are no more references to it. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">buf</td><td>the reference to be freed. The pointer is set to NULL on return. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga060be34ace567ae378fd0a786e847053"></a><!-- doxytag: member="buffer.h::av_buffer_is_writable" ref="ga060be34ace567ae378fd0a786e847053" args="(const AVBufferRef *buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__buffer.html#ga060be34ace567ae378fd0a786e847053">av_buffer_is_writable</a> </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the caller may write to the data referred to by buf (which is true if and only if buf is the only reference to the underlying AVBuffer). Return 0 otherwise. A positive answer is valid until <a class="el" href="group__lavu__buffer.html#gaa40ce7d3ede946a89d03323bbd7268c1" title="Create a new reference to an AVBuffer.">av_buffer_ref()</a> is called on buf. </dd></dl>
</div>
</div>
<a class="anchor" id="gac1c38f469fc9933885cfffafd8cbf0d6"></a><!-- doxytag: member="buffer.h::av_buffer_get_opaque" ref="gac1c38f469fc9933885cfffafd8cbf0d6" args="(const AVBufferRef *buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__buffer.html#gac1c38f469fc9933885cfffafd8cbf0d6">av_buffer_get_opaque</a> </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>the opaque parameter set by av_buffer_create. </dd></dl>
</div>
</div>
<a class="anchor" id="ga7b16c3976dc555f71d0843bbd023dfcd"></a><!-- doxytag: member="buffer.h::av_buffer_get_ref_count" ref="ga7b16c3976dc555f71d0843bbd023dfcd" args="(const AVBufferRef *buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__buffer.html#ga7b16c3976dc555f71d0843bbd023dfcd">av_buffer_get_ref_count</a> </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structAVBufferRef.html">AVBufferRef</a> * </td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ga9c2a1be1b7bb80eec8613fdb62a19074"></a><!-- doxytag: member="buffer.h::av_buffer_make_writable" ref="ga9c2a1be1b7bb80eec8613fdb62a19074" args="(AVBufferRef **buf)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__buffer.html#ga9c2a1be1b7bb80eec8613fdb62a19074">av_buffer_make_writable</a> </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> ** </td>
<td class="paramname"><em>buf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Create a writable reference from a given buffer reference, avoiding data copy if possible. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">buf</td><td>buffer reference to make writable. On success, buf is either left untouched, or it is unreferenced and a new writable <a class="el" href="structAVBufferRef.html" title="A reference to a data buffer.">AVBufferRef</a> is written in its place. On failure, buf is left untouched. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, a negative AVERROR on failure. </dd></dl>
</div>
</div>
<a class="anchor" id="gac7c228f9ed54e246dcd270503bed7291"></a><!-- doxytag: member="buffer.h::av_buffer_realloc" ref="gac7c228f9ed54e246dcd270503bed7291" args="(AVBufferRef **buf, int size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__buffer.html#gac7c228f9ed54e246dcd270503bed7291">av_buffer_realloc</a> </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structAVBufferRef.html">AVBufferRef</a> ** </td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Reallocate a given buffer. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">buf</td><td>a buffer reference to reallocate. On success, buf will be unreferenced and a new reference with the required size will be written in its place. On failure buf will be left untouched. *buf may be NULL, then a new buffer is allocated. </td></tr>
<tr><td class="paramname">size</td><td>required new buffer size. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, a negative AVERROR on failure.</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>the buffer is actually reallocated with <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a> only if it was initially allocated through av_buffer_realloc(NULL) and there is only one reference to it (i.e. the one passed to this function). In all other cases a new buffer is allocated and the data is copied. </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Defines</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>
</body>
</html>