annotate mem.c @ 1795:920e6381e1fe libavcodec

2 byte shorter userdata for mpeg4 in the past it was startcode,string,00,7F,startcode now it is startcode,string,stratcode both are mpeg4 compliant, as according to the standard the userdata lasts until the next 00 00 01 (startcode prefix) but some very primitive decoders which simply skip until the first 00 byte and then expect the next valid startcode might fail with the old variant, just a theory though (didnt test if quicktime can decode it now)
author michael
date Sun, 08 Feb 2004 22:52:35 +0000
parents 1e39f273ecd6
children d07784fbdad1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
1 /*
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
2 * default memory allocator for libavcodec
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard.
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
4 *
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
9 *
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
13 * Lesser General Public License for more details.
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
14 *
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
18 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1031
diff changeset
19
1e39f273ecd6 per file doxy
michaelni
parents: 1031
diff changeset
20 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1031
diff changeset
21 * @file mem.c
1e39f273ecd6 per file doxy
michaelni
parents: 1031
diff changeset
22 * default memory allocator for libavcodec.
1e39f273ecd6 per file doxy
michaelni
parents: 1031
diff changeset
23 */
1e39f273ecd6 per file doxy
michaelni
parents: 1031
diff changeset
24
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
25 #include "avcodec.h"
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
26
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
27 /* here we can use OS dependant allocation functions */
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
28 #undef malloc
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
29 #undef free
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
30 #undef realloc
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
31
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
32 #ifdef HAVE_MALLOC_H
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
33 #include <malloc.h>
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
34 #endif
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
35
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
36 /* you can redefine av_malloc and av_free in your project to use your
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
37 memory allocator. You do not need to suppress this file because the
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
38 linker will do it automatically */
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
39
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
40 /**
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
41 * Memory allocation of size byte with alignment suitable for all
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
42 * memory accesses (including vectors if available on the
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
43 * CPU). av_malloc(0) must return a non NULL pointer.
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
44 */
862
058194d7ade6 * fixing some minor const warnings
kabi
parents: 677
diff changeset
45 void *av_malloc(unsigned int size)
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
46 {
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
47 void *ptr;
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 862
diff changeset
48
677
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
49 #if defined (HAVE_MEMALIGN)
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
50 ptr = memalign(16,size);
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
51 /* Why 64?
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
52 Indeed, we should align it:
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
53 on 4 for 386
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
54 on 16 for 486
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
55 on 32 for 586, PPro - k6-III
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
56 on 64 for K7 (maybe for P3 too).
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
57 Because L1 and L2 caches are aligned on those values.
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
58 But I don't want to code such logic here!
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
59 */
677
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
60 /* Why 16?
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
61 because some cpus need alignment, for example SSE2 on P4, & most RISC cpus
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
62 it will just trigger an exception and the unaligned load will be done in the
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
63 exception handler or it will just segfault (SSE2 on P4)
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
64 Why not larger? because i didnt see a difference in benchmarks ...
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
65 */
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
66 /* benchmarks with p3
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
67 memalign(64)+1 3071,3051,3032
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
68 memalign(64)+2 3051,3032,3041
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
69 memalign(64)+4 2911,2896,2915
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
70 memalign(64)+8 2545,2554,2550
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
71 memalign(64)+16 2543,2572,2563
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
72 memalign(64)+32 2546,2545,2571
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
73 memalign(64)+64 2570,2533,2558
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
74
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
75 btw, malloc seems to do 8 byte alignment by default here
0ed44dd02bbf fixing memalign
michaelni
parents: 490
diff changeset
76 */
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
77 #else
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
78 ptr = malloc(size);
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
79 #endif
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
80 return ptr;
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
81 }
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
82
1026
d6ba0641cc36 cleanup
michaelni
parents: 1013
diff changeset
83 /**
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
84 * av_realloc semantics (same as glibc): if ptr is NULL and size > 0,
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
85 * identical to malloc(size). If size is zero, it is identical to
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
86 * free(ptr) and NULL is returned.
1026
d6ba0641cc36 cleanup
michaelni
parents: 1013
diff changeset
87 */
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
88 void *av_realloc(void *ptr, unsigned int size)
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
89 {
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1026
diff changeset
90 return realloc(ptr, size);
1026
d6ba0641cc36 cleanup
michaelni
parents: 1013
diff changeset
91 }
d6ba0641cc36 cleanup
michaelni
parents: 1013
diff changeset
92
490
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
93 /* NOTE: ptr = NULL is explicetly allowed */
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
94 void av_free(void *ptr)
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
95 {
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
96 /* XXX: this test should not be needed on most libcs */
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
97 if (ptr)
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
98 free(ptr);
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
99 }
e28763300864 put memory functions in a separate file so that the user can redefinite them without modifying the library
bellard
parents:
diff changeset
100