mirror of https://git.ffmpeg.org/ffmpeg.git
lavu/buffer: add a convenience function for replacing buffers
A common pattern e.g. in libavcodec is replacing/updating buffer references: unref old one, ref new one. This function allows simplifying such code and avoiding unnecessary refs+unrefs if the references are already equivalent.
This commit is contained in:
parent
5bbf58ab87
commit
68918d3b7f
|
@ -15,6 +15,9 @@ libavutil: 2017-10-21
|
|||
|
||||
API changes, most recent first:
|
||||
|
||||
2020-xx-xx - xxxxxxxxxx - lavu 56.60.100 - buffer.h
|
||||
Add a av_buffer_replace() convenience function.
|
||||
|
||||
2020-09-xx - xxxxxxxxxx - lavu 56.59.100 - timecode.h
|
||||
Add av_timecode_make_smpte_tc_string2.
|
||||
|
||||
|
|
|
@ -216,6 +216,32 @@ int av_buffer_realloc(AVBufferRef **pbuf, int size)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int av_buffer_replace(AVBufferRef **pdst, AVBufferRef *src)
|
||||
{
|
||||
AVBufferRef *dst = *pdst;
|
||||
AVBufferRef *tmp;
|
||||
|
||||
if (!src) {
|
||||
av_buffer_unref(pdst);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dst && dst->buffer == src->buffer) {
|
||||
/* make sure the data pointers match */
|
||||
dst->data = src->data;
|
||||
dst->size = src->size;
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp = av_buffer_ref(src);
|
||||
if (!tmp)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
av_buffer_unref(pdst);
|
||||
*pdst = tmp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
|
||||
AVBufferRef* (*alloc)(void *opaque, int size),
|
||||
void (*pool_free)(void *opaque))
|
||||
|
|
|
@ -197,6 +197,22 @@ int av_buffer_make_writable(AVBufferRef **buf);
|
|||
*/
|
||||
int av_buffer_realloc(AVBufferRef **buf, int size);
|
||||
|
||||
/**
|
||||
* Ensure dst refers to the same data as src.
|
||||
*
|
||||
* When *dst is already equivalent to src, do nothing. Otherwise unreference dst
|
||||
* and replace it with a new reference to src.
|
||||
*
|
||||
* @param dst Pointer to either a valid buffer reference or NULL. On success,
|
||||
* this will point to a buffer reference equivalent to src. On
|
||||
* failure, dst will be left untouched.
|
||||
* @param src A buffer reference to replace dst with. May be NULL, then this
|
||||
* function is equivalent to av_buffer_unref(dst).
|
||||
* @return 0 on success
|
||||
* AVERROR(ENOMEM) on memory allocation failure.
|
||||
*/
|
||||
int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
||||
#define LIBAVUTIL_VERSION_MINOR 59
|
||||
#define LIBAVUTIL_VERSION_MINOR 60
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
|
|
Loading…
Reference in New Issue