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: Memory Management</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="#define-members">Defines</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Memory Management</div> </div>
<div class="ingroups"><a class="el" href="group__lavu.html">Common utility functions</a></div></div><!--header-->
<div class="contents">
<table class="memberdecls">
<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__mem.html#ga7a422611f83afb33d6e0da44184b548e">DECLARE_ALIGNED</a>(n, t, v)   t __attribute__ ((aligned (n))) v</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#ga6e5cdd0ac639d7dea5033df3b64cfe3c">DECLARE_ASM_CONST</a>(n, t, v)   static const t <a class="el" href="attributes_8h.html#aa402443f9068fb645e9a55f41fc99e09">av_used</a> __attribute__ ((aligned (n))) v</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a>   __attribute__((__malloc__))</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#gad7ff928d462d1a61b37baa70bf13e0e3">av_alloc_size</a>(...)   __attribute__((alloc_size(__VA_ARGS__)))</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#ga9722446c5e310ffedfaac9489864796d">av_malloc</a> (size_t size) <a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a> 1(1)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if available on the CPU). <a href="#ga9722446c5e310ffedfaac9489864796d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#gab62b093b46dce5fe4e3e1d58bdb255da">av_malloc_array</a> (size_t nmemb, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612">av_realloc</a> (void *ptr, size_t size) 1(2)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate or reallocate a block of memory. <a href="#ga675a8e3b2f7353329b79a3c55010d612"></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__mem.html#gae5ca394e7536fcd2689008b011a211ad">av_realloc_f</a> (void *ptr, size_t nelem, size_t elsize)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate or reallocate a block of memory. <a href="#gae5ca394e7536fcd2689008b011a211ad"></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__mem.html#ga162ac7cb3ff79ae050ccc25e57adfc46">av_reallocp</a> (void *ptr, size_t size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate or reallocate a block of memory. <a href="#ga162ac7cb3ff79ae050ccc25e57adfc46"></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__mem.html#gaadc230ece36ef112710b262a6601a16b">av_realloc_array</a> (void *ptr, size_t nmemb, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#gad8fde0c159ac905909339e082a049cde">av_reallocp_array</a> (void *ptr, size_t nmemb, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#ga0c9096f498624c525aa2315b8a20c411">av_free</a> (void *ptr)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Free a memory block which has been allocated with av_malloc(z)() or <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a>. <a href="#ga0c9096f498624c525aa2315b8a20c411"></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__mem.html#ga0a8cc057ae9723ce3b9203cb5365971a">av_mallocz</a> (size_t size) <a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a> 1(1)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if available on the CPU) and zero all the bytes of the block. <a href="#ga0a8cc057ae9723ce3b9203cb5365971a"></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__mem.html#gaaf38f6d994f5a85854ef47fd98fa6e9a">av_calloc</a> (size_t nmemb, size_t size) <a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a block of nmemb * size bytes with alignment suitable for all memory accesses (including vectors if available on the CPU) and zero all the bytes of the block. <a href="#gaaf38f6d994f5a85854ef47fd98fa6e9a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#gae0443f550815c80af42c5ae967351433">av_mallocz_array</a> (size_t nmemb, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#ga7c352f4cff02184f005323691375fea9">av_strdup</a> (const char *s) <a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Duplicate the string s. <a href="#ga7c352f4cff02184f005323691375fea9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#gaffde7a717e3a603ed11a998c18d68cad">av_strndup</a> (const char *s, size_t len) <a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Duplicate a substring of the string s. <a href="#gaffde7a717e3a603ed11a998c18d68cad"></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__mem.html#ga4ad5e6363f4a6b6eddfdb427e21166f2">av_memdup</a> (const void *p, size_t size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Duplicate the buffer p. <a href="#ga4ad5e6363f4a6b6eddfdb427e21166f2"></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__mem.html#ga0cc84043ea2167ad005c86e11d0bcdba">av_freep</a> (void *ptr)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Free a memory block which has been allocated with av_malloc(z)() or <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a> and set the pointer pointing to it to NULL. <a href="#ga0cc84043ea2167ad005c86e11d0bcdba"></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__mem.html#ga385b582522cedf5a88ce2cf158c396c9">av_dynarray_add</a> (void *tab_ptr, int *nb_ptr, void *elem)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Add an element to a dynamic array. <a href="#ga385b582522cedf5a88ce2cf158c396c9"></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__mem.html#ga8f67d2e3fe423b4ed333219e7f591ace">av_dynarray_add_nofree</a> (void *tab_ptr, int *nb_ptr, void *elem)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Add an element to a dynamic array. <a href="#ga8f67d2e3fe423b4ed333219e7f591ace"></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__mem.html#ga9f60ff848186092d6705276a52ea0bb9">av_dynarray2_add</a> (void **tab_ptr, int *nb_ptr, size_t elem_size, const uint8_t *elem_data)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Add an element of size elem_size to a dynamic array. <a href="#ga9f60ff848186092d6705276a52ea0bb9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__lavu__mem.html#ga368c719d3bdce4de169910a4158df66b">av_size_mult</a> (size_t a, size_t b, size_t *r)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Multiply two size_t values checking for overflow. <a href="#ga368c719d3bdce4de169910a4158df66b"></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__mem.html#ga2204fc859b4a3ca2d5bfd1bf4e8c4dfb">av_max_alloc</a> (size_t max)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the maximum size that may me allocated in one block. <a href="#ga2204fc859b4a3ca2d5bfd1bf4e8c4dfb"></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__mem.html#ga3ea4736dcceab4ba033b8abd2c2a180e">av_memcpy_backptr</a> (uint8_t *dst, int back, int cnt)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">deliberately overlapping memcpy implementation <a href="#ga3ea4736dcceab4ba033b8abd2c2a180e"></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__mem.html#ga869fd8884d8d29a7a4910d879926d94a">av_fast_realloc</a> (void *ptr, unsigned int *size, size_t min_size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Reallocate the given block if it is not large enough, otherwise do nothing. <a href="#ga869fd8884d8d29a7a4910d879926d94a"></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__mem.html#ga29d0252b981f157e713a68ffca52f003">av_fast_malloc</a> (void *ptr, unsigned int *size, size_t min_size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a buffer, reusing the given one if large enough. <a href="#ga29d0252b981f157e713a68ffca52f003"></a><br/></td></tr>
</table>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga7a422611f83afb33d6e0da44184b548e"></a><!-- doxytag: member="mem.h::DECLARE_ALIGNED" ref="ga7a422611f83afb33d6e0da44184b548e" args="(n, t, v)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define <a class="el" href="group__lavu__mem.html#ga7a422611f83afb33d6e0da44184b548e">DECLARE_ALIGNED</a></td>
<td>(</td>
<td class="paramtype"> </td>
<td class="paramname">n, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"> </td>
<td class="paramname">t, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"> </td>
<td class="paramname">v </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>   t __attribute__ ((aligned (n))) v</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="mem_8h_source.html#l00053">53</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga6e5cdd0ac639d7dea5033df3b64cfe3c"></a><!-- doxytag: member="mem.h::DECLARE_ASM_CONST" ref="ga6e5cdd0ac639d7dea5033df3b64cfe3c" args="(n, t, v)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define <a class="el" href="group__lavu__mem.html#ga6e5cdd0ac639d7dea5033df3b64cfe3c">DECLARE_ASM_CONST</a></td>
<td>(</td>
<td class="paramtype"> </td>
<td class="paramname">n, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"> </td>
<td class="paramname">t, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"> </td>
<td class="paramname">v </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td>   static const t <a class="el" href="attributes_8h.html#aa402443f9068fb645e9a55f41fc99e09">av_used</a> __attribute__ ((aligned (n))) v</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="mem_8h_source.html#l00054">54</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
</div>
</div>
<a class="anchor" id="gad48ff724186ef4e602ae7a2547e4287c"></a><!-- doxytag: member="mem.h::av_malloc_attrib" ref="gad48ff724186ef4e602ae7a2547e4287c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define <a class="el" href="group__lavu__mem.html#gad48ff724186ef4e602ae7a2547e4287c">av_malloc_attrib</a>   __attribute__((__malloc__))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="mem_8h_source.html#l00064">64</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
</div>
</div>
<a class="anchor" id="gad7ff928d462d1a61b37baa70bf13e0e3"></a><!-- doxytag: member="mem.h::av_alloc_size" ref="gad7ff928d462d1a61b37baa70bf13e0e3" args="(...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define <a class="el" href="group__lavu__mem.html#gad7ff928d462d1a61b37baa70bf13e0e3">av_alloc_size</a></td>
<td>(</td>
<td class="paramtype"> </td>
<td class="paramname"><em>...</em></td><td>)</td>
<td>   __attribute__((alloc_size(__VA_ARGS__)))</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="mem_8h_source.html#l00070">70</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga9722446c5e310ffedfaac9489864796d"></a><!-- doxytag: member="mem.h::av_malloc" ref="ga9722446c5e310ffedfaac9489864796d" args="(size_t size) av_malloc_attrib 1(1)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#ga9722446c5e310ffedfaac9489864796d">av_malloc</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if available on the CPU). </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">size</td><td>Size in bytes for the memory block to be allocated. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to the allocated block, NULL if the block cannot be allocated. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga0a8cc057ae9723ce3b9203cb5365971a" title="Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...">av_mallocz()</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="avio_reading_8c-example.html#a13">avio_reading.c</a>, and <a class="el" href="decoding_encoding_8c-example.html#a33">decoding_encoding.c</a>.</dd>
</dl>
<p>Referenced by <a class="el" href="decoding__encoding_8c_source.html#l00103">audio_encode_example()</a>, <a class="el" href="mem_8h_source.html#l00093">av_malloc_array()</a>, and <a class="el" href="avio__reading_8c_source.html#l00057">main()</a>.</p>
</div>
</div>
<a class="anchor" id="gab62b093b46dce5fe4e3e1d58bdb255da"></a><!-- doxytag: member="mem.h::av_malloc_array" ref="gab62b093b46dce5fe4e3e1d58bdb255da" args="(size_t nmemb, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">static void* <a class="el" href="group__lavu__mem.html#gab62b093b46dce5fe4e3e1d58bdb255da">av_malloc_array</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>nmemb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td><code> [inline, static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="transcoding_8c-example.html#a87">transcoding.c</a>.</dd>
</dl>
<p>Definition at line <a class="el" href="mem_8h_source.html#l00093">93</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
<p>Referenced by <a class="el" href="transcoding_8c_source.html#l00336">init_filters()</a>.</p>
</div>
</div>
<a class="anchor" id="ga675a8e3b2f7353329b79a3c55010d612"></a><!-- doxytag: member="mem.h::av_realloc" ref="ga675a8e3b2f7353329b79a3c55010d612" args="(void *ptr, size_t size) 1(2)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612">av_realloc</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </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>Allocate or reallocate a block of memory. </p>
<p>If ptr is NULL and size > 0, allocate a new block. If size is zero, free the memory block pointed to by ptr. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>Pointer to a memory block already allocated with <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a> or NULL. </td></tr>
<tr><td class="paramname">size</td><td>Size in bytes of the memory block to be allocated or reallocated. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to a newly-reallocated block or NULL if the block cannot be reallocated or the function is used to free the memory block. </dd></dl>
<dl class="warning"><dt><b>Warning:</b></dt><dd>Pointers originating from the <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> family of functions must not be passed to <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a>. The former can be implemented using memalign() (or other functions), and there is no guarantee that pointers from such functions can be passed to realloc() at all. The situation is undefined according to POSIX and may crash with some libc implementations. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga869fd8884d8d29a7a4910d879926d94a" title="Reallocate the given block if it is not large enough, otherwise do nothing.">av_fast_realloc()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="gae5ca394e7536fcd2689008b011a211ad"></a><!-- doxytag: member="mem.h::av_realloc_f" ref="gae5ca394e7536fcd2689008b011a211ad" args="(void *ptr, size_t nelem, size_t elsize)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#gae5ca394e7536fcd2689008b011a211ad">av_realloc_f</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>nelem</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>elsize</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocate or reallocate a block of memory. </p>
<p>This function does the same thing as av_realloc, except:</p>
<ul>
<li>It takes two arguments and checks the result of the multiplication for integer overflow.</li>
<li>It frees the input block in case of failure, thus avoiding the memory leak with the classic "buf = realloc(buf); if (!buf) return -1;". </li>
</ul>
</div>
</div>
<a class="anchor" id="ga162ac7cb3ff79ae050ccc25e57adfc46"></a><!-- doxytag: member="mem.h::av_reallocp" ref="ga162ac7cb3ff79ae050ccc25e57adfc46" args="(void *ptr, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__mem.html#ga162ac7cb3ff79ae050ccc25e57adfc46">av_reallocp</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </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>Allocate or reallocate a block of memory. </p>
<p>If *ptr is NULL and size > 0, allocate a new block. If size is zero, free the memory block pointed to by ptr. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>Pointer to a pointer to a memory block already allocated with <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a>, or pointer to a pointer to NULL. The pointer is updated on success, or freed on failure. </td></tr>
<tr><td class="paramname">size</td><td>Size in bytes for the memory block to be allocated or reallocated </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Zero on success, an AVERROR error code on failure. </dd></dl>
<dl class="warning"><dt><b>Warning:</b></dt><dd>Pointers originating from the <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> family of functions must not be passed to <a class="el" href="group__lavu__mem.html#ga162ac7cb3ff79ae050ccc25e57adfc46" title="Allocate or reallocate a block of memory.">av_reallocp()</a>. The former can be implemented using memalign() (or other functions), and there is no guarantee that pointers from such functions can be passed to realloc() at all. The situation is undefined according to POSIX and may crash with some libc implementations. </dd></dl>
</div>
</div>
<a class="anchor" id="gaadc230ece36ef112710b262a6601a16b"></a><!-- doxytag: member="mem.h::av_realloc_array" ref="gaadc230ece36ef112710b262a6601a16b" args="(void *ptr, size_t nmemb, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#gaadc230ece36ef112710b262a6601a16b">av_realloc_array</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>nmemb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="gad8fde0c159ac905909339e082a049cde"></a><!-- doxytag: member="mem.h::av_reallocp_array" ref="gad8fde0c159ac905909339e082a049cde" args="(void *ptr, size_t nmemb, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__mem.html#gad8fde0c159ac905909339e082a049cde">av_reallocp_array</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>nmemb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ga0c9096f498624c525aa2315b8a20c411"></a><!-- doxytag: member="mem.h::av_free" ref="ga0c9096f498624c525aa2315b8a20c411" args="(void *ptr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__mem.html#ga0c9096f498624c525aa2315b8a20c411">av_free</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Free a memory block which has been allocated with av_malloc(z)() or <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a>. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>Pointer to the memory block which should be freed. </td></tr>
</table>
</dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>ptr = NULL is explicitly allowed. </dd>
<dd>
It is recommended that you use <a class="el" href="group__lavu__mem.html#ga0cc84043ea2167ad005c86e11d0bcdba" title="Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...">av_freep()</a> instead. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga0cc84043ea2167ad005c86e11d0bcdba" title="Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...">av_freep()</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="decoding_encoding_8c-example.html#a43">decoding_encoding.c</a>, <a class="el" href="demuxing_decoding_8c-example.html#a98">demuxing_decoding.c</a>, and <a class="el" href="transcoding_8c-example.html#a127">transcoding.c</a>.</dd>
</dl>
<p>Referenced by <a class="el" href="decoding__encoding_8c_source.html#l00242">audio_decode_example()</a>, <a class="el" href="decoding__encoding_8c_source.html#l00103">audio_encode_example()</a>, <a class="el" href="demuxing__decoding_8c_source.html#l00226">main()</a>, <a class="el" href="decoding__encoding_8c_source.html#l00534">video_decode_example()</a>, and <a class="el" href="decoding__encoding_8c_source.html#l00347">video_encode_example()</a>.</p>
</div>
</div>
<a class="anchor" id="ga0a8cc057ae9723ce3b9203cb5365971a"></a><!-- doxytag: member="mem.h::av_mallocz" ref="ga0a8cc057ae9723ce3b9203cb5365971a" args="(size_t size) av_malloc_attrib 1(1)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#ga0a8cc057ae9723ce3b9203cb5365971a">av_mallocz</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>size</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if available on the CPU) and zero all the bytes of the block. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">size</td><td>Size in bytes for the memory block to be allocated. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to the allocated block, NULL if it cannot be allocated. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><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> </dd></dl>
<p>Referenced by <a class="el" href="mem_8h_source.html#l00228">av_mallocz_array()</a>.</p>
</div>
</div>
<a class="anchor" id="gaaf38f6d994f5a85854ef47fd98fa6e9a"></a><!-- doxytag: member="mem.h::av_calloc" ref="gaaf38f6d994f5a85854ef47fd98fa6e9a" args="(size_t nmemb, size_t size) av_malloc_attrib" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#gaaf38f6d994f5a85854ef47fd98fa6e9a">av_calloc</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>nmemb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </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>Allocate a block of nmemb * size bytes with alignment suitable for all memory accesses (including vectors if available on the CPU) and zero all the bytes of the block. </p>
<p>The allocation will fail if nmemb * size is greater than or equal to INT_MAX. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">nmemb</td><td></td></tr>
<tr><td class="paramname">size</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to the allocated block, NULL if it cannot be allocated. </dd></dl>
</div>
</div>
<a class="anchor" id="gae0443f550815c80af42c5ae967351433"></a><!-- doxytag: member="mem.h::av_mallocz_array" ref="gae0443f550815c80af42c5ae967351433" args="(size_t nmemb, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">static void* <a class="el" href="group__lavu__mem.html#gae0443f550815c80af42c5ae967351433">av_mallocz_array</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>nmemb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td><code> [inline, static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Definition at line <a class="el" href="mem_8h_source.html#l00228">228</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga7c352f4cff02184f005323691375fea9"></a><!-- doxytag: member="mem.h::av_strdup" ref="ga7c352f4cff02184f005323691375fea9" args="(const char *s) av_malloc_attrib" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* <a class="el" href="group__lavu__mem.html#ga7c352f4cff02184f005323691375fea9">av_strdup</a> </td>
<td>(</td>
<td class="paramtype">const char * </td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Duplicate the string s. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">s</td><td>string to be duplicated </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to a newly-allocated string containing a copy of s or NULL if the string cannot be allocated. </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="filtering_audio_8c-example.html#a48">filtering_audio.c</a>, <a class="el" href="filtering_video_8c-example.html#a46">filtering_video.c</a>, and <a class="el" href="transcoding_8c-example.html#a79">transcoding.c</a>.</dd>
</dl>
<p>Referenced by <a class="el" href="transcoding_8c_source.html#l00187">init_filter()</a>, and <a class="el" href="filtering__audio_8c_source.html#l00085">init_filters()</a>.</p>
</div>
</div>
<a class="anchor" id="gaffde7a717e3a603ed11a998c18d68cad"></a><!-- doxytag: member="mem.h::av_strndup" ref="gaffde7a717e3a603ed11a998c18d68cad" args="(const char *s, size_t len) av_malloc_attrib" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* <a class="el" href="group__lavu__mem.html#gaffde7a717e3a603ed11a998c18d68cad">av_strndup</a> </td>
<td>(</td>
<td class="paramtype">const char * </td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>len</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Duplicate a substring of the string s. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">s</td><td>string to be duplicated </td></tr>
<tr><td class="paramname">len</td><td>the maximum length of the resulting string (not counting the terminating byte). </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to a newly-allocated string containing a copy of s or NULL if the string cannot be allocated. </dd></dl>
</div>
</div>
<a class="anchor" id="ga4ad5e6363f4a6b6eddfdb427e21166f2"></a><!-- doxytag: member="mem.h::av_memdup" ref="ga4ad5e6363f4a6b6eddfdb427e21166f2" args="(const void *p, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#ga4ad5e6363f4a6b6eddfdb427e21166f2">av_memdup</a> </td>
<td>(</td>
<td class="paramtype">const void * </td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </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>Duplicate the buffer p. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">p</td><td>buffer to be duplicated </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to a newly allocated buffer containing a copy of p or NULL if the buffer cannot be allocated. </dd></dl>
</div>
</div>
<a class="anchor" id="ga0cc84043ea2167ad005c86e11d0bcdba"></a><!-- doxytag: member="mem.h::av_freep" ref="ga0cc84043ea2167ad005c86e11d0bcdba" args="(void *ptr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__mem.html#ga0cc84043ea2167ad005c86e11d0bcdba">av_freep</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Free a memory block which has been allocated with av_malloc(z)() or <a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc()</a> and set the pointer pointing to it to NULL. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>Pointer to the pointer to the memory block which should be freed. </td></tr>
</table>
</dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>passing a pointer to a NULL pointer is safe and leads to no action. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><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> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="avio_reading_8c-example.html#a20">avio_reading.c</a>, <a class="el" href="decoding_encoding_8c-example.html#a40">decoding_encoding.c</a>, <a class="el" href="filter_audio_8c-example.html#a59">filter_audio.c</a>, <a class="el" href="resampling_audio_8c-example.html#a23">resampling_audio.c</a>, <a class="el" href="scaling_video_8c-example.html#a13">scaling_video.c</a>, and <a class="el" href="transcode_aac_8c-example.html#a65">transcode_aac.c</a>.</dd>
</dl>
<p>Referenced by <a class="el" href="decoding__encoding_8c_source.html#l00103">audio_encode_example()</a>, <a class="el" href="transcode__aac_8c_source.html#l00354">init_converted_samples()</a>, <a class="el" href="avio__reading_8c_source.html#l00057">main()</a>, <a class="el" href="transcode__aac_8c_source.html#l00441">read_decode_convert_and_store()</a>, and <a class="el" href="decoding__encoding_8c_source.html#l00347">video_encode_example()</a>.</p>
</div>
</div>
<a class="anchor" id="ga385b582522cedf5a88ce2cf158c396c9"></a><!-- doxytag: member="mem.h::av_dynarray_add" ref="ga385b582522cedf5a88ce2cf158c396c9" args="(void *tab_ptr, int *nb_ptr, void *elem)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__mem.html#ga385b582522cedf5a88ce2cf158c396c9">av_dynarray_add</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>tab_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>nb_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>elem</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Add an element to a dynamic array. </p>
<p>The array to grow is supposed to be an array of pointers to structures, and the element to add must be a pointer to an already allocated structure.</p>
<p>The array is reallocated when its size reaches powers of 2. Therefore, the amortized cost of adding an element is constant.</p>
<p>In case of success, the pointer to the array is updated in order to point to the new grown array, and the number pointed to by nb_ptr is incremented. In case of failure, the array is freed, *tab_ptr is set to NULL and *nb_ptr is set to 0.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">tab_ptr</td><td>pointer to the array to grow </td></tr>
<tr><td class="paramname">nb_ptr</td><td>pointer to the number of elements in the array </td></tr>
<tr><td class="paramname">elem</td><td>element to add </td></tr>
</table>
</dd>
</dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga8f67d2e3fe423b4ed333219e7f591ace" title="Add an element to a dynamic array.">av_dynarray_add_nofree()</a>, <a class="el" href="group__lavu__mem.html#ga9f60ff848186092d6705276a52ea0bb9" title="Add an element of size elem_size to a dynamic array.">av_dynarray2_add()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga8f67d2e3fe423b4ed333219e7f591ace"></a><!-- doxytag: member="mem.h::av_dynarray_add_nofree" ref="ga8f67d2e3fe423b4ed333219e7f591ace" args="(void *tab_ptr, int *nb_ptr, void *elem)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="group__lavu__mem.html#ga8f67d2e3fe423b4ed333219e7f591ace">av_dynarray_add_nofree</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>tab_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>nb_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>elem</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Add an element to a dynamic array. </p>
<p>Function has the same functionality as <a class="el" href="group__lavu__mem.html#ga385b582522cedf5a88ce2cf158c396c9" title="Add an element to a dynamic array.">av_dynarray_add()</a>, but it doesn't free memory on fails. It returns error code instead and leave current buffer untouched.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">tab_ptr</td><td>pointer to the array to grow </td></tr>
<tr><td class="paramname">nb_ptr</td><td>pointer to the number of elements in the array </td></tr>
<tr><td class="paramname">elem</td><td>element to add </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>>=0 on success, negative otherwise. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga385b582522cedf5a88ce2cf158c396c9" title="Add an element to a dynamic array.">av_dynarray_add()</a>, <a class="el" href="group__lavu__mem.html#ga9f60ff848186092d6705276a52ea0bb9" title="Add an element of size elem_size to a dynamic array.">av_dynarray2_add()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga9f60ff848186092d6705276a52ea0bb9"></a><!-- doxytag: member="mem.h::av_dynarray2_add" ref="ga9f60ff848186092d6705276a52ea0bb9" args="(void **tab_ptr, int *nb_ptr, size_t elem_size, const uint8_t *elem_data)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#ga9f60ff848186092d6705276a52ea0bb9">av_dynarray2_add</a> </td>
<td>(</td>
<td class="paramtype">void ** </td>
<td class="paramname"><em>tab_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>nb_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>elem_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t * </td>
<td class="paramname"><em>elem_data</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Add an element of size elem_size to a dynamic array. </p>
<p>The array is reallocated when its number of elements reaches powers of 2. Therefore, the amortized cost of adding an element is constant.</p>
<p>In case of success, the pointer to the array is updated in order to point to the new grown array, and the number pointed to by nb_ptr is incremented. In case of failure, the array is freed, *tab_ptr is set to NULL and *nb_ptr is set to 0.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">tab_ptr</td><td>pointer to the array to grow </td></tr>
<tr><td class="paramname">nb_ptr</td><td>pointer to the number of elements in the array </td></tr>
<tr><td class="paramname">elem_size</td><td>size in bytes of the elements in the array </td></tr>
<tr><td class="paramname">elem_data</td><td>pointer to the data of the element to add. If NULL, the space of the new added element is not filled. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to the data of the element to copy in the new allocated space. If NULL, the new allocated space is left uninitialized." </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga385b582522cedf5a88ce2cf158c396c9" title="Add an element to a dynamic array.">av_dynarray_add()</a>, <a class="el" href="group__lavu__mem.html#ga8f67d2e3fe423b4ed333219e7f591ace" title="Add an element to a dynamic array.">av_dynarray_add_nofree()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga368c719d3bdce4de169910a4158df66b"></a><!-- doxytag: member="mem.h::av_size_mult" ref="ga368c719d3bdce4de169910a4158df66b" args="(size_t a, size_t b, size_t *r)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">static int <a class="el" href="group__lavu__mem.html#ga368c719d3bdce4de169910a4158df66b">av_size_mult</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t * </td>
<td class="paramname"><em>r</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td><code> [inline, static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Multiply two size_t values checking for overflow. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 if success, <a class="el" href="group__lavu__error.html#gae4bb6f165973d09584e0ec0f335f69ca">AVERROR(EINVAL)</a> if overflow. </dd></dl>
<p>Definition at line <a class="el" href="mem_8h_source.html#l00337">337</a> of file <a class="el" href="mem_8h_source.html">mem.h</a>.</p>
</div>
</div>
<a class="anchor" id="ga2204fc859b4a3ca2d5bfd1bf4e8c4dfb"></a><!-- doxytag: member="mem.h::av_max_alloc" ref="ga2204fc859b4a3ca2d5bfd1bf4e8c4dfb" args="(size_t max)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__mem.html#ga2204fc859b4a3ca2d5bfd1bf4e8c4dfb">av_max_alloc</a> </td>
<td>(</td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>max</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Set the maximum size that may me allocated in one block. </p>
</div>
</div>
<a class="anchor" id="ga3ea4736dcceab4ba033b8abd2c2a180e"></a><!-- doxytag: member="mem.h::av_memcpy_backptr" ref="ga3ea4736dcceab4ba033b8abd2c2a180e" args="(uint8_t *dst, int back, int cnt)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__mem.html#ga3ea4736dcceab4ba033b8abd2c2a180e">av_memcpy_backptr</a> </td>
<td>(</td>
<td class="paramtype">uint8_t * </td>
<td class="paramname"><em>dst</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>back</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>cnt</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>deliberately overlapping memcpy implementation </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">dst</td><td>destination buffer </td></tr>
<tr><td class="paramname">back</td><td>how many bytes back we start (the initial size of the overlapping window), must be > 0 </td></tr>
<tr><td class="paramname">cnt</td><td>number of bytes to copy, must be >= 0</td></tr>
</table>
</dd>
</dl>
<p>cnt > back is valid, this will copy the bytes we just copied, thus creating a repeating pattern with a period length of back. </p>
</div>
</div>
<a class="anchor" id="ga869fd8884d8d29a7a4910d879926d94a"></a><!-- doxytag: member="mem.h::av_fast_realloc" ref="ga869fd8884d8d29a7a4910d879926d94a" args="(void *ptr, unsigned int *size, size_t min_size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="group__lavu__mem.html#ga869fd8884d8d29a7a4910d879926d94a">av_fast_realloc</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int * </td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>min_size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Reallocate the given block if it is not large enough, otherwise do nothing. </p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__lavu__mem.html#ga675a8e3b2f7353329b79a3c55010d612" title="Allocate or reallocate a block of memory.">av_realloc</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga29d0252b981f157e713a68ffca52f003"></a><!-- doxytag: member="mem.h::av_fast_malloc" ref="ga29d0252b981f157e713a68ffca52f003" args="(void *ptr, unsigned int *size, size_t min_size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="group__lavu__mem.html#ga29d0252b981f157e713a68ffca52f003">av_fast_malloc</a> </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int * </td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>min_size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocate a buffer, reusing the given one if large enough. </p>
<p>Contrary to av_fast_realloc the current buffer contents might not be preserved and on error the old buffer is freed, thus no special handling to avoid memleaks is necessary.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>pointer to pointer to already allocated buffer, overwritten with pointer to new buffer </td></tr>
<tr><td class="paramname">size</td><td>size of the buffer *ptr points to </td></tr>
<tr><td class="paramname">min_size</td><td>minimum size of *ptr buffer after returning, *ptr will be NULL and *size 0 if an error occurred. </td></tr>
</table>
</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>