#include <stdint.h>
#include <string.h>
+#include "avassert.h"
#include "buffer_internal.h"
#include "common.h"
#include "mem.h"
} else
av_freep(dst);
- if (atomic_fetch_add_explicit(&b->refcount, -1, memory_order_acq_rel) == 1) {
+ if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) {
b->free(b->opaque, b->data);
av_freep(&b);
}
pool = *ppool;
*ppool = NULL;
- if (atomic_fetch_add_explicit(&pool->refcount, -1, memory_order_acq_rel) == 1)
+ if (atomic_fetch_sub_explicit(&pool->refcount, 1, memory_order_acq_rel) == 1)
buffer_pool_free(pool);
}
pool->pool = buf;
ff_mutex_unlock(&pool->mutex);
- if (atomic_fetch_add_explicit(&pool->refcount, -1, memory_order_acq_rel) == 1)
+ if (atomic_fetch_sub_explicit(&pool->refcount, 1, memory_order_acq_rel) == 1)
buffer_pool_free(pool);
}
return ret;
}
+
+void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref)
+{
+ BufferPoolEntry *buf = ref->buffer->opaque;
+ av_assert0(buf);
+ return buf->opaque;
+}