mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2025-11-03 01:33:50 +08:00
lavu/mem: add av_dynarray2_add()
Based on a patch by Clément Bœsch. See thread: From: Clément Bœsch <ubitux@gmail.com> Subject: [FFmpeg-devel] [PATCH 1/5] lavu: add av_dynarray_alloc_elem(). Date: Sun, 14 Apr 2013 03:07:54 +0200
This commit is contained in:
@@ -270,6 +270,39 @@ fail:
|
||||
*nb_ptr = 0;
|
||||
}
|
||||
|
||||
void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size,
|
||||
const uint8_t *elem_data)
|
||||
{
|
||||
int nb = *nb_ptr, nb_alloc;
|
||||
uint8_t *tab = *tab_ptr, *tab_elem_data;
|
||||
|
||||
if ((nb & (nb - 1)) == 0) {
|
||||
if (nb == 0) {
|
||||
nb_alloc = 1;
|
||||
} else {
|
||||
if (nb > INT_MAX / (2 * elem_size))
|
||||
goto fail;
|
||||
nb_alloc = nb * 2;
|
||||
}
|
||||
tab = av_realloc(tab, nb_alloc * elem_size);
|
||||
if (!tab)
|
||||
goto fail;
|
||||
*tab_ptr = tab;
|
||||
}
|
||||
*nb_ptr = nb + 1;
|
||||
tab_elem_data = tab + nb*elem_size;
|
||||
if (elem_data)
|
||||
memcpy(tab_elem_data, elem_data, elem_size);
|
||||
else if (CONFIG_MEMORY_POISONING)
|
||||
memset(tab_elem_data, FF_MEMORY_POISON, elem_size);
|
||||
return tab_elem_data;
|
||||
|
||||
fail:
|
||||
av_freep(tab_ptr);
|
||||
*nb_ptr = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void fill16(uint8_t *dst, int len)
|
||||
{
|
||||
uint32_t v = AV_RN16(dst - 2);
|
||||
|
||||
Reference in New Issue
Block a user