Mercurial > libavcodec.hg
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 |
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 | 19 |
20 /** | |
21 * @file mem.c | |
22 * default memory allocator for libavcodec. | |
23 */ | |
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 | 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 | 48 |
677 | 49 #if defined (HAVE_MEMALIGN) |
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 | 60 /* Why 16? |
61 because some cpus need alignment, for example SSE2 on P4, & most RISC cpus | |
62 it will just trigger an exception and the unaligned load will be done in the | |
63 exception handler or it will just segfault (SSE2 on P4) | |
64 Why not larger? because i didnt see a difference in benchmarks ... | |
65 */ | |
66 /* benchmarks with p3 | |
67 memalign(64)+1 3071,3051,3032 | |
68 memalign(64)+2 3051,3032,3041 | |
69 memalign(64)+4 2911,2896,2915 | |
70 memalign(64)+8 2545,2554,2550 | |
71 memalign(64)+16 2543,2572,2563 | |
72 memalign(64)+32 2546,2545,2571 | |
73 memalign(64)+64 2570,2533,2558 | |
74 | |
75 btw, malloc seems to do 8 byte alignment by default here | |
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 | 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 | 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 | 91 } |
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 |