History

Move av_fast_{m,re}alloc from lavc to lavu.

Anton Khirnov committed 13 years ago

Commit cce3e0a1 parent aa241227 files · +71 −48Browse files

Unified · Split

7 files
  1. doc/APIchanges +3 −0
  2. libavcodec/avcodec.h +4 −21
  3. libavcodec/utils.c +6 −26
  4. libavcodec/version.h +3 −0
  5. libavutil/mem.c +33 −0
  6. libavutil/mem.h +21 −0
  7. libavutil/version.h +1 −1
doc/APIchanges+3−0
@@ -13,6 +13,9 @@ libavutil: 2012-10-22 · 12 unmodified lines
13 13
14API changes, most recent first:14API changes, most recent first:
15 15
162013-11-xx - xxxxxxx - lavu 52.18.0 - mem.h
17 Move av_fast_malloc() and av_fast_realloc() for libavcodec to libavutil.
18
162013-10-xx - xxxxxxx - lavc 55.27.0 - avcodec.h192013-10-xx - xxxxxxx - lavc 55.27.0 - avcodec.h
17 Deprecate AVCodecContext.error_rate, it is replaced by the 'error_rate'20 Deprecate AVCodecContext.error_rate, it is replaced by the 'error_rate'
18 private option of the mpegvideo encoder family.21 private option of the mpegvideo encoder family.
libavcodec/avcodec.h+4−21
@@ -36,6 +36,10 @@ · 35 unmodified lines
36#include "libavutil/dict.h"36#include "libavutil/dict.h"
37#include "libavutil/frame.h"37#include "libavutil/frame.h"
38#include "libavutil/log.h"38#include "libavutil/log.h"
39#if FF_API_FAST_MALLOC
40// to provide fast_*alloc
41#include "libavutil/mem.h"
42#endif
39#include "libavutil/pixfmt.h"43#include "libavutil/pixfmt.h"
40#include "libavutil/rational.h"44#include "libavutil/rational.h"
41 45
@@ -4197,27 +4201,6 @@ AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f); · 4155 unmodified lines
4197 4201
4198/* memory */4202/* memory */
4199 4203
4200/**
4201 * Reallocate the given block if it is not large enough, otherwise do nothing.
4202 *
4203 * @see av_realloc
4204 */
4205void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
4206
4207/**
4208 * Allocate a buffer, reusing the given one if large enough.
4209 *
4210 * Contrary to av_fast_realloc the current buffer contents might not be
4211 * preserved and on error the old buffer is freed, thus no special
4212 * handling to avoid memleaks is necessary.
4213 *
4214 * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
4215 * @param size size of the buffer *ptr points to
4216 * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
4217 * *size 0 if an error occurred.
4218 */
4219void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
4220
4221/**4204/**
4222 * Allocate a buffer with padding, reusing the given one if large enough.4205 * Allocate a buffer with padding, reusing the given one if large enough.
4223 *4206 *
libavcodec/utils.c+6−26
@@ -55,37 +55,17 @@ static int (*lockmgr_cb)(void **mutex, enum AVLockOp op); · 54 unmodified lines
55static void *codec_mutex;55static void *codec_mutex;
56static void *avformat_mutex;56static void *avformat_mutex;
57 57
58void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)58#if FF_API_FAST_MALLOC && CONFIG_SHARED && HAVE_SYMVER
59FF_SYMVER(void*, av_fast_realloc, (void *ptr, unsigned int *size, size_t min_size), "LIBAVCODEC_55")
59{60{
60 if (min_size < *size)61 return av_fast_realloc(ptr, size, min_size);
61 return ptr;
62
63 min_size = FFMAX(17 * min_size / 16 + 32, min_size);
64
65 ptr = av_realloc(ptr, min_size);
66 /* we could set this to the unmodified min_size but this is safer
67 * if the user lost the ptr and uses NULL now
68 */
69 if (!ptr)
70 min_size = 0;
71
72 *size = min_size;
73
74 return ptr;
75}62}
76 63
77void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)64FF_SYMVER(void, av_fast_malloc, (void *ptr, unsigned int *size, size_t min_size), "LIBAVCODEC_55")
78{65{
79 void **p = ptr;66 av_fast_malloc(ptr, size, min_size);
80 if (min_size < *size)
81 return;
82 min_size = FFMAX(17 * min_size / 16 + 32, min_size);
83 av_free(*p);
84 *p = av_malloc(min_size);
85 if (!*p)
86 min_size = 0;
87 *size = min_size;
88}67}
68#endif
89 69
90void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)70void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
91{71{
libavcodec/version.h+3−0
@@ -112,5 +112,8 @@ · 111 unmodified lines
112#ifndef FF_API_MAX_BFRAMES112#ifndef FF_API_MAX_BFRAMES
113#define FF_API_MAX_BFRAMES (LIBAVCODEC_VERSION_MAJOR < 56)113#define FF_API_MAX_BFRAMES (LIBAVCODEC_VERSION_MAJOR < 56)
114#endif114#endif
115#ifndef FF_API_FAST_MALLOC
116#define FF_API_FAST_MALLOC (LIBAVCODEC_VERSION_MAJOR < 56)
117#endif
115 118
116#endif /* AVCODEC_VERSION_H */119#endif /* AVCODEC_VERSION_H */
libavutil/mem.c+33−0
@@ -35,6 +35,7 @@ · 34 unmodified lines
35#endif35#endif
36 36
37#include "avutil.h"37#include "avutil.h"
38#include "common.h"
38#include "intreadwrite.h"39#include "intreadwrite.h"
39#include "mem.h"40#include "mem.h"
40 41
@@ -344,3 +345,35 @@ void av_memcpy_backptr(uint8_t *dst, int back, int cnt) · 303 unmodified lines
344 *dst = *src;345 *dst = *src;
345 }346 }
346}347}
348
349void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
350{
351 if (min_size < *size)
352 return ptr;
353
354 min_size = FFMAX(17 * min_size / 16 + 32, min_size);
355
356 ptr = av_realloc(ptr, min_size);
357 /* we could set this to the unmodified min_size but this is safer
358 * if the user lost the ptr and uses NULL now
359 */
360 if (!ptr)
361 min_size = 0;
362
363 *size = min_size;
364
365 return ptr;
366}
367
368void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
369{
370 void **p = ptr;
371 if (min_size < *size)
372 return;
373 min_size = FFMAX(17 * min_size / 16 + 32, min_size);
374 av_free(*p);
375 *p = av_malloc(min_size);
376 if (!*p)
377 min_size = 0;
378 *size = min_size;
379}
libavutil/mem.h+21−0
@@ -237,6 +237,27 @@ void av_freep(void *ptr); · 236 unmodified lines
237 */237 */
238void av_memcpy_backptr(uint8_t *dst, int back, int cnt);238void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
239 239
240/**
241 * Reallocate the given block if it is not large enough, otherwise do nothing.
242 *
243 * @see av_realloc
244 */
245void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
246
247/**
248 * Allocate a buffer, reusing the given one if large enough.
249 *
250 * Contrary to av_fast_realloc the current buffer contents might not be
251 * preserved and on error the old buffer is freed, thus no special
252 * handling to avoid memleaks is necessary.
253 *
254 * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
255 * @param size size of the buffer *ptr points to
256 * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
257 * *size 0 if an error occurred.
258 */
259void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
260
240/**261/**
241 * @}262 * @}
242 */263 */
libavutil/version.h+1−1
@@ -37,7 +37,7 @@ · 36 unmodified lines
37 */37 */
38 38
39#define LIBAVUTIL_VERSION_MAJOR 5239#define LIBAVUTIL_VERSION_MAJOR 52
40#define LIBAVUTIL_VERSION_MINOR 1740#define LIBAVUTIL_VERSION_MINOR 18
41#define LIBAVUTIL_VERSION_MICRO 041#define LIBAVUTIL_VERSION_MICRO 0
42 42
43#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \43#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t