annotate mem.c @ 728:1fa3820b1a84 libavutil

ARM asm for AV_RN*() ARMv6 and later support unaligned loads and stores for single word/halfword but not double/multiple. GCC is ignorant of this and will always use bytewise accesses for unaligned data. Casting to an int32_t pointer is dangerous since a load/store double or multiple instruction might be used (this happens with some code in FFmpeg). Implementing the AV_[RW]* macros with inline asm using only supported instructions gives fast and safe unaligned accesses. ARM RVCT does the right thing with generic code. This gives an overall speedup of up to 10%.
author mru
date Sat, 18 Apr 2009 00:00:28 +0000
parents 998344532d61
children 14e19b1c0cd5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
1 /*
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
2 * default memory allocator for libavutil
613
ed203c477511 cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 603
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
4 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
5 * This file is part of FFmpeg.
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
6 *
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
11 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
15 * Lesser General Public License for more details.
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
16 *
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
20 */
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
21
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
22 /**
642
70bdd5501662 Use full internal pathname in doxygen @file directives.
diego
parents: 633
diff changeset
23 * @file libavutil/mem.c
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
24 * default memory allocator for libavutil
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
25 */
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
26
618
e0bf946f7d23 Directly #include a bunch of indirectly #included headers.
diego
parents: 613
diff changeset
27 #include "config.h"
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
28
618
e0bf946f7d23 Directly #include a bunch of indirectly #included headers.
diego
parents: 613
diff changeset
29 #include <limits.h>
597
b4abc96d1610 Use posix_memalign() if available.
ramiro
parents: 509
diff changeset
30 #include <stdlib.h>
618
e0bf946f7d23 Directly #include a bunch of indirectly #included headers.
diego
parents: 613
diff changeset
31 #include <string.h>
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
32 #if HAVE_MALLOC_H
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
33 #include <malloc.h>
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
34 #endif
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
35
628
51e8796fe8fc C files should #include the header files of the same name.
diego
parents: 621
diff changeset
36 #include "mem.h"
51e8796fe8fc C files should #include the header files of the same name.
diego
parents: 621
diff changeset
37
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
38 /* here we can use OS-dependent allocation functions */
629
097c9438d7f4 10l: Add #undefs for system free/malloc/realloc, which must be used here.
diego
parents: 628
diff changeset
39 #undef free
097c9438d7f4 10l: Add #undefs for system free/malloc/realloc, which must be used here.
diego
parents: 628
diff changeset
40 #undef malloc
097c9438d7f4 10l: Add #undefs for system free/malloc/realloc, which must be used here.
diego
parents: 628
diff changeset
41 #undef realloc
097c9438d7f4 10l: Add #undefs for system free/malloc/realloc, which must be used here.
diego
parents: 628
diff changeset
42
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
43 /* You can redefine av_malloc and av_free in your project to use your
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
44 memory allocator. You do not need to suppress this file because the
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
45 linker will do it automatically. */
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
46
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
47 void *av_malloc(unsigned int size)
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
48 {
597
b4abc96d1610 Use posix_memalign() if available.
ramiro
parents: 509
diff changeset
49 void *ptr = NULL;
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
50 #if CONFIG_MEMALIGN_HACK
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
51 long diff;
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
52 #endif
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
53
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
54 /* let's disallow possible ambiguous cases */
96
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
55 if(size > (INT_MAX-16) )
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
56 return NULL;
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
57
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
58 #if CONFIG_MEMALIGN_HACK
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
59 ptr = malloc(size+16);
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
60 if(!ptr)
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
61 return ptr;
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
62 diff= ((-(long)ptr - 1)&15) + 1;
451
c2e1ba46b27c Avoid void*-arithmetic.
benoit
parents: 281
diff changeset
63 ptr = (char*)ptr + diff;
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
64 ((char*)ptr)[-1]= diff;
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
65 #elif HAVE_POSIX_MEMALIGN
667
998344532d61 Check return value of posix_memalign and explicitly set pointer to NULL if it
diego
parents: 642
diff changeset
66 if (posix_memalign(&ptr,16,size))
998344532d61 Check return value of posix_memalign and explicitly set pointer to NULL if it
diego
parents: 642
diff changeset
67 ptr = NULL;
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
68 #elif HAVE_MEMALIGN
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
69 ptr = memalign(16,size);
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
70 /* Why 64?
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
71 Indeed, we should align it:
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
72 on 4 for 386
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
73 on 16 for 486
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
74 on 32 for 586, PPro - K6-III
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
75 on 64 for K7 (maybe for P3 too).
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
76 Because L1 and L2 caches are aligned on those values.
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
77 But I don't want to code such logic here!
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
78 */
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
79 /* Why 16?
466
f4fd038fcb58 misc spelling fixes
diego
parents: 451
diff changeset
80 Because some CPUs need alignment, for example SSE2 on P4, & most RISC CPUs
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
81 it will just trigger an exception and the unaligned load will be done in the
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
82 exception handler or it will just segfault (SSE2 on P4).
467
4472cc562ee9 typo fixes
diego
parents: 466
diff changeset
83 Why not larger? Because I did not see a difference in benchmarks ...
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
84 */
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
85 /* benchmarks with P3
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
86 memalign(64)+1 3071,3051,3032
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
87 memalign(64)+2 3051,3032,3041
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
88 memalign(64)+4 2911,2896,2915
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
89 memalign(64)+8 2545,2554,2550
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
90 memalign(64)+16 2543,2572,2563
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
91 memalign(64)+32 2546,2545,2571
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
92 memalign(64)+64 2570,2533,2558
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
93
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 629
diff changeset
94 BTW, malloc seems to do 8-byte alignment by default here.
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
95 */
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
96 #else
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
97 ptr = malloc(size);
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
98 #endif
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
99 return ptr;
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
100 }
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
101
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
102 void *av_realloc(void *ptr, unsigned int size)
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
103 {
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
104 #if CONFIG_MEMALIGN_HACK
96
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
105 int diff;
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
106 #endif
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
107
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
108 /* let's disallow possible ambiguous cases */
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
109 if(size > (INT_MAX-16) )
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
110 return NULL;
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
111
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
112 #if CONFIG_MEMALIGN_HACK
96
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
113 //FIXME this isn't aligned correctly, though it probably isn't needed
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
114 if(!ptr) return av_malloc(size);
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
115 diff= ((char*)ptr)[-1];
451
c2e1ba46b27c Avoid void*-arithmetic.
benoit
parents: 281
diff changeset
116 return (char*)realloc((char*)ptr - diff, size + diff) + diff;
96
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
117 #else
7d343463873b revert aligned realloc() changesm this should be identical to r5784
michael
parents: 95
diff changeset
118 return realloc(ptr, size);
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
119 #endif
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
120 }
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
121
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
122 void av_free(void *ptr)
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
123 {
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
124 /* XXX: this test should not be needed on most libcs */
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
125 if (ptr)
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 597
diff changeset
126 #if CONFIG_MEMALIGN_HACK
451
c2e1ba46b27c Avoid void*-arithmetic.
benoit
parents: 281
diff changeset
127 free((char*)ptr - ((char*)ptr)[-1]);
82
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
128 #else
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
129 free(ptr);
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
130 #endif
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
131 }
8fb151c4d4c7 Move av_malloc(), av_realloc(), and av_free() from libavcodec to libavutil
lucabe
parents:
diff changeset
132
113
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
133 void av_freep(void *arg)
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
134 {
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
135 void **ptr= (void**)arg;
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
136 av_free(*ptr);
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
137 *ptr = NULL;
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
138 }
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
139
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
140 void *av_mallocz(unsigned int size)
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
141 {
488
cb7f0f00760e Merge declaration and initialization.
michael
parents: 467
diff changeset
142 void *ptr = av_malloc(size);
113
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
143 if (ptr)
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
144 memset(ptr, 0, size);
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
145 return ptr;
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
146 }
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
147
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
148 char *av_strdup(const char *s)
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
149 {
508
9409d2db661c make av_strdup(NULL) return NULL
michael
parents: 489
diff changeset
150 char *ptr= NULL;
9409d2db661c make av_strdup(NULL) return NULL
michael
parents: 489
diff changeset
151 if(s){
509
michael
parents: 508
diff changeset
152 int len = strlen(s) + 1;
michael
parents: 508
diff changeset
153 ptr = av_malloc(len);
michael
parents: 508
diff changeset
154 if (ptr)
michael
parents: 508
diff changeset
155 memcpy(ptr, s, len);
508
9409d2db661c make av_strdup(NULL) return NULL
michael
parents: 489
diff changeset
156 }
113
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
157 return ptr;
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
158 }
8fc54918226e move memory functions from avcodec to avutil
lu_zero
parents: 96
diff changeset
159