| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-03-18 17:35:10 +00:00
										 |  |  |  * This file is part of Libav. | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-03-18 17:35:10 +00:00
										 |  |  |  * Libav is free software; you can redistribute it and/or | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  * modify it under the terms of the GNU Lesser General Public | 
					
						
							|  |  |  |  * License as published by the Free Software Foundation; either | 
					
						
							|  |  |  |  * version 2.1 of the License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-03-18 17:35:10 +00:00
										 |  |  |  * Libav is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
					
						
							|  |  |  |  * Lesser General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Lesser General Public | 
					
						
							| 
									
										
										
										
											2011-03-18 17:35:10 +00:00
										 |  |  |  * License along with Libav; if not, write to the Free Software | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-04-20 14:45:34 +00:00
										 |  |  |  * @file | 
					
						
							| 
									
										
										
										
											2009-01-28 00:16:05 +00:00
										 |  |  |  * memory handling functions | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-31 07:39:47 +00:00
										 |  |  | #ifndef AVUTIL_MEM_H
 | 
					
						
							|  |  |  | #define AVUTIL_MEM_H
 | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 17:39:19 +00:00
										 |  |  | #include "attributes.h"
 | 
					
						
							| 
									
										
										
										
											2010-06-26 18:14:31 +00:00
										 |  |  | #include "avutil.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-20 17:33:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 10:35:56 +00:00
										 |  |  | #if defined(__ICC) && _ICC < 1200 || defined(__SUNPRO_C)
 | 
					
						
							| 
									
										
										
										
											2010-01-21 12:59:22 +00:00
										 |  |  |     #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (n))) v
 | 
					
						
							| 
									
										
										
										
											2009-07-09 02:20:29 +00:00
										 |  |  |     #define DECLARE_ASM_CONST(n,t,v)    const t __attribute__ ((aligned (n))) v
 | 
					
						
							| 
									
										
										
										
											2010-01-22 03:25:25 +00:00
										 |  |  | #elif defined(__TI_COMPILER_VERSION__)
 | 
					
						
							|  |  |  |     #define DECLARE_ALIGNED(n,t,v)                      \
 | 
					
						
							|  |  |  |         AV_PRAGMA(DATA_ALIGN(v,n))                      \ | 
					
						
							|  |  |  |         t __attribute__((aligned(n))) v | 
					
						
							|  |  |  |     #define DECLARE_ASM_CONST(n,t,v)                    \
 | 
					
						
							|  |  |  |         AV_PRAGMA(DATA_ALIGN(v,n))                      \ | 
					
						
							|  |  |  |         static const t __attribute__((aligned(n))) v | 
					
						
							| 
									
										
										
										
											2009-07-09 02:20:29 +00:00
										 |  |  | #elif defined(__GNUC__)
 | 
					
						
							| 
									
										
										
										
											2010-01-21 12:59:22 +00:00
										 |  |  |     #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (n))) v
 | 
					
						
							| 
									
										
										
										
											2011-01-31 02:19:30 +00:00
										 |  |  |     #define DECLARE_ASM_CONST(n,t,v)    static const t av_used __attribute__ ((aligned (n))) v
 | 
					
						
							| 
									
										
										
										
											2009-07-09 02:20:29 +00:00
										 |  |  | #elif defined(_MSC_VER)
 | 
					
						
							|  |  |  |     #define DECLARE_ALIGNED(n,t,v)      __declspec(align(n)) t v
 | 
					
						
							|  |  |  |     #define DECLARE_ASM_CONST(n,t,v)    __declspec(align(n)) static const t v
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     #define DECLARE_ALIGNED(n,t,v)      t v
 | 
					
						
							|  |  |  |     #define DECLARE_ASM_CONST(n,t,v)    static const t v
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-20 17:33:35 +00:00
										 |  |  | #if AV_GCC_VERSION_AT_LEAST(3,1)
 | 
					
						
							| 
									
										
										
										
											2008-03-19 06:17:43 +00:00
										 |  |  |     #define av_malloc_attrib __attribute__((__malloc__))
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     #define av_malloc_attrib
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:30:44 +00:00
										 |  |  | #if AV_GCC_VERSION_AT_LEAST(4,3)
 | 
					
						
							| 
									
										
										
										
											2008-03-19 07:30:34 +00:00
										 |  |  |     #define av_alloc_size(n) __attribute__((alloc_size(n)))
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     #define av_alloc_size(n)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-04 04:00:12 +00:00
										 |  |  | #if LIBAVUTIL_VERSION_MAJOR < 51
 | 
					
						
							|  |  |  | #   define FF_INTERNAL_MEM_TYPE unsigned int
 | 
					
						
							| 
									
										
										
										
											2010-12-22 14:13:04 +00:00
										 |  |  | #   define FF_INTERNAL_MEM_TYPE_MAX_VALUE UINT_MAX
 | 
					
						
							| 
									
										
										
										
											2010-12-04 04:00:12 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #   define FF_INTERNAL_MEM_TYPE size_t
 | 
					
						
							| 
									
										
										
										
											2010-12-22 14:13:04 +00:00
										 |  |  | #   define FF_INTERNAL_MEM_TYPE_MAX_VALUE SIZE_MAX
 | 
					
						
							| 
									
										
										
										
											2010-12-04 04:00:12 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * Allocate a block of size bytes with alignment suitable for all | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * memory accesses (including vectors if available on the CPU). | 
					
						
							|  |  |  |  * @param size Size in bytes for the memory block to be allocated. | 
					
						
							| 
									
										
										
										
											2009-01-28 00:16:05 +00:00
										 |  |  |  * @return Pointer to the allocated block, NULL if the block cannot | 
					
						
							|  |  |  |  * be allocated. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @see av_mallocz() | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-12-04 04:00:12 +00:00
										 |  |  | void *av_malloc(FF_INTERNAL_MEM_TYPE size) av_malloc_attrib av_alloc_size(1); | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * Allocate or reallocate a block of memory. | 
					
						
							|  |  |  |  * If ptr is NULL and size > 0, allocate a new block. If | 
					
						
							|  |  |  |  * size is zero, free the memory block pointed to by ptr. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @param size Size in bytes for the memory block to be allocated or | 
					
						
							|  |  |  |  * reallocated. | 
					
						
							|  |  |  |  * @param ptr Pointer to a memory block already allocated with | 
					
						
							|  |  |  |  * av_malloc(z)() or av_realloc() or NULL. | 
					
						
							| 
									
										
										
										
											2009-01-28 00:16:05 +00:00
										 |  |  |  * @return Pointer to a newly reallocated block or NULL if the block | 
					
						
							|  |  |  |  * cannot be reallocated or the function is used to free the memory block. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @see av_fast_realloc() | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-12-04 04:00:12 +00:00
										 |  |  | void *av_realloc(void *ptr, FF_INTERNAL_MEM_TYPE size) av_alloc_size(2); | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * Free a memory block which has been allocated with av_malloc(z)() or | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * av_realloc(). | 
					
						
							|  |  |  |  * @param ptr Pointer to the memory block which should be freed. | 
					
						
							| 
									
										
										
										
											2007-11-01 11:51:51 +00:00
										 |  |  |  * @note ptr = NULL is explicitly allowed. | 
					
						
							|  |  |  |  * @note It is recommended that you use av_freep() instead. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @see av_freep() | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | void av_free(void *ptr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * Allocate a block of size bytes with alignment suitable for all | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * memory accesses (including vectors if available on the CPU) and | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * zero all the bytes of the block. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @param size Size in bytes for the memory block to be allocated. | 
					
						
							| 
									
										
										
										
											2009-01-28 00:16:05 +00:00
										 |  |  |  * @return Pointer to the allocated block, NULL if it cannot be allocated. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @see av_malloc() | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-12-04 04:00:12 +00:00
										 |  |  | void *av_mallocz(FF_INTERNAL_MEM_TYPE size) av_malloc_attrib av_alloc_size(1); | 
					
						
							| 
									
										
										
										
											2007-09-09 13:23:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * Duplicate the string s. | 
					
						
							| 
									
										
										
										
											2009-01-28 00:16:05 +00:00
										 |  |  |  * @param s string to be duplicated | 
					
						
							| 
									
										
										
										
											2007-09-09 13:23:34 +00:00
										 |  |  |  * @return Pointer to a newly allocated string containing a | 
					
						
							| 
									
										
										
										
											2009-06-06 09:35:15 +00:00
										 |  |  |  * copy of s or NULL if the string cannot be allocated. | 
					
						
							| 
									
										
										
										
											2007-09-09 13:23:34 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-03-19 06:17:43 +00:00
										 |  |  | char *av_strdup(const char *s) av_malloc_attrib; | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-06-30 15:38:06 +00:00
										 |  |  |  * Free a memory block which has been allocated with av_malloc(z)() or | 
					
						
							| 
									
										
										
										
											2009-01-28 00:16:05 +00:00
										 |  |  |  * av_realloc() and set the pointer pointing to it to NULL. | 
					
						
							| 
									
										
										
										
											2007-11-02 19:48:13 +00:00
										 |  |  |  * @param ptr Pointer to the pointer to the memory block which should | 
					
						
							|  |  |  |  * be freed. | 
					
						
							|  |  |  |  * @see av_free() | 
					
						
							| 
									
										
										
										
											2007-03-12 14:45:49 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | void av_freep(void *ptr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-31 07:39:47 +00:00
										 |  |  | #endif /* AVUTIL_MEM_H */
 |