aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-01-15 00:40:35 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-01-23 04:45:05 +0100
commitb4f5da26517c101caa3a200c1cdf6553c3641f5f (patch)
tree5772246c6af061a8ead1ee58b5f000119b16cca3
parentecd39520b83ecc2f10a884b6c2a5594247806601 (diff)
downloadffmpeg-b4f5da26517c101caa3a200c1cdf6553c3641f5f.tar.gz
avutil/buffer: factor buffer_replace() out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavutil/buffer.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/libavutil/buffer.c b/libavutil/buffer.c
index c881d1a24b..ca102fd574 100644
--- a/libavutil/buffer.c
+++ b/libavutil/buffer.c
@@ -103,14 +103,17 @@ AVBufferRef *av_buffer_ref(AVBufferRef *buf)
return ret;
}
-void av_buffer_unref(AVBufferRef **buf)
+static void buffer_replace(AVBufferRef **dst, AVBufferRef **src)
{
AVBuffer *b;
- if (!buf || !*buf)
- return;
- b = (*buf)->buffer;
- av_freep(buf);
+ b = (*dst)->buffer;
+
+ if (src) {
+ **dst = **src;
+ av_freep(src);
+ } else
+ av_freep(dst);
if (!avpriv_atomic_int_add_and_fetch(&b->refcount, -1)) {
b->free(b->opaque, b->data);
@@ -118,6 +121,14 @@ void av_buffer_unref(AVBufferRef **buf)
}
}
+void av_buffer_unref(AVBufferRef **buf)
+{
+ if (!buf || !*buf)
+ return;
+
+ buffer_replace(buf, NULL);
+}
+
int av_buffer_is_writable(const AVBufferRef *buf)
{
if (buf->buffer->flags & AV_BUFFER_FLAG_READONLY)