[FFmpeg-devel] [PATCH] lavu/fifo: add av_fifo_alloc_array function
James Almer
jamrial at gmail.com
Sat May 10 19:17:33 CEST 2014
On 10/05/14 3:15 AM, Lukasz Marek wrote:
> TODO: minor bump and doc/APIchanges update
>
> Allows to alloc fifo buffer by passing
> number of elements and size of element.
>
> Signed-off-by: Lukasz Marek <lukasz.m.luki2 at gmail.com>
> ---
> libavutil/fifo.c | 27 +++++++++++++++++++++------
> libavutil/fifo.h | 8 ++++++++
> 2 files changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/libavutil/fifo.c b/libavutil/fifo.c
> index e35237c..5c82d09 100644
> --- a/libavutil/fifo.c
> +++ b/libavutil/fifo.c
> @@ -24,19 +24,34 @@
> #include "common.h"
> #include "fifo.h"
>
> -AVFifoBuffer *av_fifo_alloc(unsigned int size)
> +static AVFifoBuffer *av_fifo_alloc_common(void *buffer, size_t size)
If it's static it shouldn't have the av_ prefix.
Rename it to alloc_common() or similar before pushing.
> {
> - AVFifoBuffer *f = av_mallocz(sizeof(AVFifoBuffer));
> - if (!f)
> + AVFifoBuffer *f;
> + if (!buffer)
> + return NULL;
> + f = av_mallocz(sizeof(AVFifoBuffer));
> + if (!f) {
> + av_free(buffer);
> return NULL;
> - f->buffer = av_malloc(size);
> + }
> + f->buffer = buffer;
> f->end = f->buffer + size;
> av_fifo_reset(f);
> - if (!f->buffer)
> - av_freep(&f);
> return f;
> }
>
> +AVFifoBuffer *av_fifo_alloc(unsigned int size)
> +{
> + void *buffer = av_malloc(size);
> + return av_fifo_alloc_common(buffer, size);
> +}
> +
> +AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size)
> +{
> + void *buffer = av_malloc_array(nmemb, size);
> + return av_fifo_alloc_common(buffer, nmemb * size);
> +}
> +
> void av_fifo_free(AVFifoBuffer *f)
> {
> if (f) {
> diff --git a/libavutil/fifo.h b/libavutil/fifo.h
> index 66fb48a..f3bdcbc 100644
> --- a/libavutil/fifo.h
> +++ b/libavutil/fifo.h
> @@ -42,6 +42,14 @@ typedef struct AVFifoBuffer {
> AVFifoBuffer *av_fifo_alloc(unsigned int size);
>
> /**
> + * Initialize an AVFifoBuffer.
> + * @param nmemb number of elements
> + * @param size size of the single element
> + * @return AVFifoBuffer or NULL in case of memory allocation failure
> + */
> +AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size);
> +
> +/**
> * Free an AVFifoBuffer.
> * @param f AVFifoBuffer to free
> */
>
More information about the ffmpeg-devel
mailing list