| @@ -13,6 +13,10 @@ libavutil: 2011-04-18 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2011-04-xx - xxxxxxx - lavu 51.2.0 - mem.h | |||||
| Add av_dynarray_add function for adding | |||||
| an element to a dynamic array. | |||||
| 2011-04-XX - bebe72f - lavu 51.1.0 - avutil.h | 2011-04-XX - bebe72f - lavu 51.1.0 - avutil.h | ||||
| Add AVPictureType enum and av_get_picture_type_char(), deprecate | Add AVPictureType enum and av_get_picture_type_char(), deprecate | ||||
| FF_*_TYPE defines and av_get_pict_type_char() defined in | FF_*_TYPE defines and av_get_pict_type_char() defined in | ||||
| @@ -21,27 +21,6 @@ | |||||
| #include "avformat.h" | #include "avformat.h" | ||||
| #include "internal.h" | #include "internal.h" | ||||
| /* add one element to a dynamic array */ | |||||
| void ff_dynarray_add(intptr_t **tab_ptr, int *nb_ptr, intptr_t elem) | |||||
| { | |||||
| /* see similar ffmpeg.c:grow_array() */ | |||||
| int nb, nb_alloc; | |||||
| intptr_t *tab; | |||||
| nb = *nb_ptr; | |||||
| tab = *tab_ptr; | |||||
| if ((nb & (nb - 1)) == 0) { | |||||
| if (nb == 0) | |||||
| nb_alloc = 1; | |||||
| else | |||||
| nb_alloc = nb * 2; | |||||
| tab = av_realloc(tab, nb_alloc * sizeof(intptr_t)); | |||||
| *tab_ptr = tab; | |||||
| } | |||||
| tab[nb++] = elem; | |||||
| *nb_ptr = nb; | |||||
| } | |||||
| #define ISLEAP(y) (((y) % 4 == 0) && (((y) % 100) != 0 || ((y) % 400) == 0)) | #define ISLEAP(y) (((y) % 4 == 0) && (((y) % 100) != 0 || ((y) % 400) == 0)) | ||||
| #define LEAPS_COUNT(y) ((y)/4 - (y)/100 + (y)/400) | #define LEAPS_COUNT(y) ((y)/4 - (y)/100 + (y)/400) | ||||
| @@ -31,20 +31,18 @@ typedef struct AVCodecTag { | |||||
| unsigned int tag; | unsigned int tag; | ||||
| } AVCodecTag; | } AVCodecTag; | ||||
| void ff_dynarray_add(intptr_t **tab_ptr, int *nb_ptr, intptr_t elem); | |||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||
| #define dynarray_add(tab, nb_ptr, elem)\ | #define dynarray_add(tab, nb_ptr, elem)\ | ||||
| do {\ | do {\ | ||||
| __typeof__(tab) _tab = (tab);\ | __typeof__(tab) _tab = (tab);\ | ||||
| __typeof__(elem) _elem = (elem);\ | __typeof__(elem) _elem = (elem);\ | ||||
| (void)sizeof(**_tab == _elem); /* check that types are compatible */\ | (void)sizeof(**_tab == _elem); /* check that types are compatible */\ | ||||
| ff_dynarray_add((intptr_t **)_tab, nb_ptr, (intptr_t)_elem);\ | |||||
| av_dynarray_add(_tab, nb_ptr, _elem);\ | |||||
| } while(0) | } while(0) | ||||
| #else | #else | ||||
| #define dynarray_add(tab, nb_ptr, elem)\ | #define dynarray_add(tab, nb_ptr, elem)\ | ||||
| do {\ | do {\ | ||||
| ff_dynarray_add((intptr_t **)(tab), nb_ptr, (intptr_t)(elem));\ | |||||
| av_dynarray_add((tab), nb_ptr, (elem));\ | |||||
| } while(0) | } while(0) | ||||
| #endif | #endif | ||||
| @@ -40,7 +40,7 @@ | |||||
| #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) | #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) | ||||
| #define LIBAVUTIL_VERSION_MAJOR 51 | #define LIBAVUTIL_VERSION_MAJOR 51 | ||||
| #define LIBAVUTIL_VERSION_MINOR 1 | |||||
| #define LIBAVUTIL_VERSION_MINOR 2 | |||||
| #define LIBAVUTIL_VERSION_MICRO 0 | #define LIBAVUTIL_VERSION_MICRO 0 | ||||
| #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
| @@ -171,3 +171,23 @@ char *av_strdup(const char *s) | |||||
| return ptr; | return ptr; | ||||
| } | } | ||||
| /* add one element to a dynamic array */ | |||||
| void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem) | |||||
| { | |||||
| /* see similar ffmpeg.c:grow_array() */ | |||||
| int nb, nb_alloc; | |||||
| intptr_t *tab; | |||||
| nb = *nb_ptr; | |||||
| tab = *(intptr_t**)tab_ptr; | |||||
| if ((nb & (nb - 1)) == 0) { | |||||
| if (nb == 0) | |||||
| nb_alloc = 1; | |||||
| else | |||||
| nb_alloc = nb * 2; | |||||
| tab = av_realloc(tab, nb_alloc * sizeof(intptr_t)); | |||||
| *(intptr_t**)tab_ptr = tab; | |||||
| } | |||||
| tab[nb++] = (intptr_t)elem; | |||||
| *nb_ptr = nb; | |||||
| } | |||||
| @@ -123,4 +123,13 @@ char *av_strdup(const char *s) av_malloc_attrib; | |||||
| */ | */ | ||||
| void av_freep(void *ptr); | void av_freep(void *ptr); | ||||
| /** | |||||
| * Add an element to a dynamic array. | |||||
| * | |||||
| * @param tab_ptr Pointer to the array. | |||||
| * @param nb_ptr Pointer to the number of elements in the array. | |||||
| * @param elem Element to be added. | |||||
| */ | |||||
| void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); | |||||
| #endif /* AVUTIL_MEM_H */ | #endif /* AVUTIL_MEM_H */ | ||||