[FFmpeg-devel] [PATCH 02/42] avcodec/refstruct: Add simple API for refcounted objects

James Almer jamrial at gmail.com
Sun Oct 8 00:03:55 EEST 2023


On 9/19/2023 4:56 PM, Andreas Rheinhardt wrote:
> +
> +/**
> + * Allocate a refcounted object of usable size `size` managed via
> + * the RefStruct API.
> + *
> + * By default (in the absence of flags to the contrary),
> + * the returned object is initially zeroed.
> + *
> + * @param size    Desired usable size of the returned object.
> + * @param flags   A bitwise combination of FF_REFSTRUCT_FLAG_* flags.
> + * @param opaque  A pointer that will be passed to the free_cb callback.
> + * @param free_cb A callback for freeing this object's content
> + *                when its reference count reaches zero;
> + *                it must not free the object itself.
> + * @return A pointer to an object of the desired size or NULL on failure.
> + */
> +void *ff_refstruct_alloc_ext_c(size_t size, unsigned flags, FFRefStructOpaque opaque,
> +                               void (*free_cb)(FFRefStructOpaque opaque, void *obj));
> +
> +/**
> + * A wrapper around ff_refstruct_alloc_ext_c() for the common case
> + * of a non-const qualified opaque.
> + *
> + * @see ff_refstruct_alloc_ext_c()
> + */
> +static inline
> +void *ff_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque,
> +                             void (*free_cb)(FFRefStructOpaque opaque, void *obj))
> +{
> +    return ff_refstruct_alloc_ext_c(size, flags, (FFRefStructOpaque){.nc = opaque},
> +                                    free_cb);
> +}
> +
> +/**
> + * Equivalent to ff_refstruct_alloc_ext(size, 0, NULL, NULL)

Why is this not inlined, then?

> + */
> +void *ff_refstruct_allocz(size_t size);


More information about the ffmpeg-devel mailing list