diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-01-15 00:40:35 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-01-23 04:45:05 +0100 |
commit | b4f5da26517c101caa3a200c1cdf6553c3641f5f (patch) | |
tree | 5772246c6af061a8ead1ee58b5f000119b16cca3 | |
parent | ecd39520b83ecc2f10a884b6c2a5594247806601 (diff) | |
download | ffmpeg-b4f5da26517c101caa3a200c1cdf6553c3641f5f.tar.gz |
avutil/buffer: factor buffer_replace() out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavutil/buffer.c | 21 |
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) |