comparison utils.c @ 394:e2cb8a4ee0c5 libavcodec

proper memory handling functions
author glantau
date Sat, 18 May 2002 22:59:50 +0000
parents 47c878305986
children b0aed401a756
comparison
equal deleted inserted replaced
393:bf164fce2c14 394:e2cb8a4ee0c5
14 * 14 *
15 * You should have received a copy of the GNU General Public License 15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software 16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */ 18 */
19 #include <stdio.h> 19 #include "avcodec.h"
20 #include <string.h>
21 #include <errno.h>
22 #include "common.h"
23 #include "dsputil.h" 20 #include "dsputil.h"
24 #include "avcodec.h"
25 #include "mpegvideo.h" 21 #include "mpegvideo.h"
26 #ifdef HAVE_MALLOC_H 22 #ifdef HAVE_MALLOC_H
27 #include <malloc.h> 23 #include <malloc.h>
28 #else
29 #include <stdlib.h>
30 #endif 24 #endif
31 25
32 /* memory alloc */ 26 /* memory alloc */
33 void *av_mallocz(int size) 27 void *av_malloc(int size)
34 { 28 {
35 void *ptr; 29 void *ptr;
36 #if defined ( ARCH_X86 ) && defined ( HAVE_MEMALIGN ) 30 #if defined ( ARCH_X86 ) && defined ( HAVE_MEMALIGN )
37 ptr = memalign(64,size); 31 ptr = memalign(64,size);
38 /* Why 64? 32 /* Why 64?
51 return NULL; 45 return NULL;
52 memset(ptr, 0, size); 46 memset(ptr, 0, size);
53 return ptr; 47 return ptr;
54 } 48 }
55 49
50 void *av_mallocz(int size)
51 {
52 void *ptr;
53 ptr = av_malloc(size);
54 if (!ptr)
55 return NULL;
56 memset(ptr, 0, size);
57 return ptr;
58 }
59
60 /* NOTE: ptr = NULL is explicetly allowed */
61 void av_free(void *ptr)
62 {
63 /* XXX: this test should not be needed on most libcs */
64 if (ptr)
65 free(ptr);
66 }
67
56 /* encoder management */ 68 /* encoder management */
57 AVCodec *first_avcodec; 69 AVCodec *first_avcodec;
58 70
59 void register_avcodec(AVCodec *format) 71 void register_avcodec(AVCodec *format)
60 { 72 {
78 } else { 90 } else {
79 avctx->priv_data = NULL; 91 avctx->priv_data = NULL;
80 } 92 }
81 ret = avctx->codec->init(avctx); 93 ret = avctx->codec->init(avctx);
82 if (ret < 0) { 94 if (ret < 0) {
83 if (avctx->priv_data) 95 av_freep(&avctx->priv_data);
84 free(avctx->priv_data);
85 avctx->priv_data = NULL;
86 return ret; 96 return ret;
87 } 97 }
88 return 0; 98 return 0;
89 } 99 }
90 100
142 152
143 int avcodec_close(AVCodecContext *avctx) 153 int avcodec_close(AVCodecContext *avctx)
144 { 154 {
145 if (avctx->codec->close) 155 if (avctx->codec->close)
146 avctx->codec->close(avctx); 156 avctx->codec->close(avctx);
147 free(avctx->priv_data); 157 av_freep(&avctx->priv_data);
148 avctx->priv_data = NULL;
149 avctx->codec = NULL; 158 avctx->codec = NULL;
150 return 0; 159 return 0;
151 } 160 }
152 161
153 AVCodec *avcodec_find_encoder(enum CodecID id) 162 AVCodec *avcodec_find_encoder(enum CodecID id)