mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 17:46:50 +08:00
[osal]: fix import failed on window and linux
[mpp_buffer]: add mpp_buffer function git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@884 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -27,7 +27,7 @@
|
|||||||
#define MPP_BUF_DBG_CLR_ON_EXIT (0x00000008)
|
#define MPP_BUF_DBG_CLR_ON_EXIT (0x00000008)
|
||||||
|
|
||||||
#define mpp_buf_dbg(flag, fmt, ...) _mpp_dbg(mpp_buffer_debug, flag, fmt, ## __VA_ARGS__)
|
#define mpp_buf_dbg(flag, fmt, ...) _mpp_dbg(mpp_buffer_debug, flag, fmt, ## __VA_ARGS__)
|
||||||
#define mpp_buf_dbg_f(flag, fmt, ...) _mpp_dbg(mpp_buffer_debug, flag, fmt, ## __VA_ARGS__)
|
#define mpp_buf_dbg_f(flag, fmt, ...) _mpp_dbg_f(mpp_buffer_debug, flag, fmt, ## __VA_ARGS__)
|
||||||
|
|
||||||
#define MPP_BUF_FUNCTION_ENTER() mpp_buf_dbg_f(MPP_BUF_DBG_FUNCTION, "enter\n")
|
#define MPP_BUF_FUNCTION_ENTER() mpp_buf_dbg_f(MPP_BUF_DBG_FUNCTION, "enter\n")
|
||||||
#define MPP_BUF_FUNCTION_LEAVE() mpp_buf_dbg_f(MPP_BUF_DBG_FUNCTION, "leave\n")
|
#define MPP_BUF_FUNCTION_LEAVE() mpp_buf_dbg_f(MPP_BUF_DBG_FUNCTION, "leave\n")
|
||||||
|
@@ -208,38 +208,47 @@ static void dump_buffer_info(MppBufferImpl *buffer)
|
|||||||
|
|
||||||
MPP_RET mpp_buffer_create(const char *tag, const char *caller, RK_U32 group_id, MppBufferInfo *info)
|
MPP_RET mpp_buffer_create(const char *tag, const char *caller, RK_U32 group_id, MppBufferInfo *info)
|
||||||
{
|
{
|
||||||
|
MPP_RET ret = MPP_OK;
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
|
BufferOp func = NULL;
|
||||||
|
MppBufferImpl *p = NULL;
|
||||||
MppBufferGroupImpl *group = SEARCH_GROUP_NORMAL(group_id);
|
MppBufferGroupImpl *group = SEARCH_GROUP_NORMAL(group_id);
|
||||||
if (NULL == group) {
|
if (NULL == group) {
|
||||||
mpp_err_f("can not create buffer without group\n");
|
mpp_err_f("can not create buffer without group\n");
|
||||||
return MPP_NOK;
|
ret = MPP_NOK;
|
||||||
|
goto RET;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group->limit_count && group->count >= group->limit_count) {
|
if (group->limit_count && group->count >= group->limit_count) {
|
||||||
mpp_err_f("reach group count limit %d\n", group->limit_count);
|
mpp_err_f("reach group count limit %d\n", group->limit_count);
|
||||||
return MPP_NOK;
|
ret = MPP_NOK;
|
||||||
|
goto RET;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group->limit_size && info->size > group->limit_size) {
|
if (group->limit_size && info->size > group->limit_size) {
|
||||||
mpp_err_f("required size %d reach group size limit %d\n", info->size, group->limit_size);
|
mpp_err_f("required size %d reach group size limit %d\n", info->size, group->limit_size);
|
||||||
return MPP_NOK;
|
ret = MPP_NOK;
|
||||||
|
goto RET;
|
||||||
}
|
}
|
||||||
|
|
||||||
MppBufferImpl *p = mpp_calloc(MppBufferImpl, 1);
|
p = mpp_calloc(MppBufferImpl, 1);
|
||||||
if (NULL == p) {
|
if (NULL == p) {
|
||||||
mpp_err_f("failed to allocate context\n");
|
mpp_err_f("failed to allocate context\n");
|
||||||
return MPP_ERR_MALLOC;
|
ret = MPP_ERR_MALLOC;
|
||||||
|
goto RET;
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferOp func = (group->mode == MPP_BUFFER_INTERNAL) ?
|
func = (group->mode == MPP_BUFFER_INTERNAL) ?
|
||||||
(group->alloc_api->alloc) :
|
(group->alloc_api->alloc) : (group->alloc_api->import);
|
||||||
(group->alloc_api->import);
|
ret = func(group->allocator, info);
|
||||||
MPP_RET ret = func(group->allocator, info);
|
|
||||||
if (MPP_OK != ret) {
|
if (MPP_OK != ret) {
|
||||||
mpp_err_f("failed to create buffer with size %d\n", info->size);
|
mpp_err_f("failed to create buffer with size %d\n", info->size);
|
||||||
mpp_free(p);
|
mpp_free(p);
|
||||||
return MPP_ERR_MALLOC;
|
ret = MPP_ERR_MALLOC;
|
||||||
|
goto RET;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->info = *info;
|
p->info = *info;
|
||||||
@@ -256,34 +265,45 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller, RK_U32 group_id,
|
|||||||
group->usage += info->size;
|
group->usage += info->size;
|
||||||
group->count++;
|
group->count++;
|
||||||
group->count_unused++;
|
group->count_unused++;
|
||||||
return MPP_OK;
|
RET:
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
MPP_RET mpp_buffer_destroy(MppBufferImpl *buffer)
|
MPP_RET mpp_buffer_destroy(MppBufferImpl *buffer)
|
||||||
{
|
{
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
deinit_buffer_no_lock(buffer);
|
MPP_RET ret = deinit_buffer_no_lock(buffer);
|
||||||
|
|
||||||
return MPP_OK;
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
MPP_RET mpp_buffer_ref_inc(MppBufferImpl *buffer)
|
MPP_RET mpp_buffer_ref_inc(MppBufferImpl *buffer)
|
||||||
{
|
{
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
return inc_buffer_ref_no_lock(buffer);
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
|
MPP_RET ret = inc_buffer_ref_no_lock(buffer);
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer)
|
MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer)
|
||||||
{
|
{
|
||||||
|
MPP_RET ret = MPP_OK;
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
if (buffer->ref_count <= 0) {
|
if (buffer->ref_count <= 0) {
|
||||||
mpp_err_f("found non-positive ref_count %d caller %s\n", buffer->ref_count, buffer->caller);
|
mpp_err_f("found non-positive ref_count %d caller %s\n",
|
||||||
return MPP_NOK;
|
buffer->ref_count, buffer->caller);
|
||||||
}
|
ret = MPP_NOK;
|
||||||
|
} else {
|
||||||
buffer->ref_count--;
|
buffer->ref_count--;
|
||||||
if (0 == buffer->ref_count) {
|
if (0 == buffer->ref_count) {
|
||||||
buffer->used = 0;
|
buffer->used = 0;
|
||||||
@@ -307,8 +327,10 @@ MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return MPP_OK;
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
||||||
@@ -316,6 +338,7 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
|||||||
MppBufferImpl *buffer = NULL;
|
MppBufferImpl *buffer = NULL;
|
||||||
|
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
if (!list_empty(&p->list_unused)) {
|
if (!list_empty(&p->list_unused)) {
|
||||||
MppBufferImpl *pos, *n;
|
MppBufferImpl *pos, *n;
|
||||||
@@ -334,6 +357,7 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,6 +374,7 @@ MPP_RET mpp_buffer_group_init(MppBufferGroupImpl **group, const char *tag, const
|
|||||||
mpp_assert(caller);
|
mpp_assert(caller);
|
||||||
|
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
INIT_LIST_HEAD(&p->list_group);
|
INIT_LIST_HEAD(&p->list_group);
|
||||||
INIT_LIST_HEAD(&p->list_used);
|
INIT_LIST_HEAD(&p->list_used);
|
||||||
@@ -387,6 +412,7 @@ MPP_RET mpp_buffer_group_init(MppBufferGroupImpl **group, const char *tag, const
|
|||||||
|
|
||||||
*group = p;
|
*group = p;
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,6 +444,7 @@ MPP_RET mpp_buffer_group_deinit(MppBufferGroupImpl *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
// remove unused list
|
// remove unused list
|
||||||
if (!list_empty(&p->list_unused)) {
|
if (!list_empty(&p->list_unused)) {
|
||||||
@@ -446,6 +473,7 @@ MPP_RET mpp_buffer_group_deinit(MppBufferGroupImpl *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,6 +485,7 @@ MPP_RET mpp_buffer_group_reset(MppBufferGroupImpl *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
if (!list_empty(&p->list_used)) {
|
if (!list_empty(&p->list_used)) {
|
||||||
MppBufferImpl *pos, *n;
|
MppBufferImpl *pos, *n;
|
||||||
@@ -475,6 +504,7 @@ MPP_RET mpp_buffer_group_reset(MppBufferGroupImpl *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,8 +516,11 @@ MPP_RET mpp_buffer_group_set_listener(MppBufferGroupImpl *p, void *listener)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AutoMutex auto_lock(&service.mLock);
|
AutoMutex auto_lock(&service.mLock);
|
||||||
|
MPP_BUF_FUNCTION_ENTER();
|
||||||
|
|
||||||
p->listener = listener;
|
p->listener = listener;
|
||||||
|
|
||||||
|
MPP_BUF_FUNCTION_LEAVE();
|
||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -74,6 +74,28 @@ MPP_RET os_allocator_normal_free(void *ctx, MppBufferInfo *info)
|
|||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPP_RET os_allocator_normal_import(void *ctx, MppBufferInfo *info)
|
||||||
|
{
|
||||||
|
(void) ctx;
|
||||||
|
mpp_assert(info->ptr);
|
||||||
|
mpp_assert(info->size);
|
||||||
|
info->hnd = NULL;
|
||||||
|
info->fd = -1;
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
MPP_RET os_allocator_normal_release(void *ctx, MppBufferInfo *info)
|
||||||
|
{
|
||||||
|
(void) ctx;
|
||||||
|
mpp_assert(info->ptr);
|
||||||
|
mpp_assert(info->size);
|
||||||
|
info->ptr = NULL;
|
||||||
|
info->size = 0;
|
||||||
|
info->hnd = NULL;
|
||||||
|
info->fd = -1;
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
MPP_RET os_allocator_normal_close(void *ctx)
|
MPP_RET os_allocator_normal_close(void *ctx)
|
||||||
{
|
{
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
@@ -88,8 +110,8 @@ static os_allocator allocator_normal = {
|
|||||||
os_allocator_normal_open,
|
os_allocator_normal_open,
|
||||||
os_allocator_normal_alloc,
|
os_allocator_normal_alloc,
|
||||||
os_allocator_normal_free,
|
os_allocator_normal_free,
|
||||||
NULL,
|
os_allocator_normal_import,
|
||||||
NULL,
|
os_allocator_normal_release,
|
||||||
os_allocator_normal_close,
|
os_allocator_normal_close,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -70,6 +70,28 @@ MPP_RET os_allocator_free(void *ctx, MppBufferInfo *info)
|
|||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPP_RET os_allocator_import(void *ctx, MppBufferInfo *info)
|
||||||
|
{
|
||||||
|
(void) ctx;
|
||||||
|
mpp_assert(info->ptr);
|
||||||
|
mpp_assert(info->size);
|
||||||
|
info->hnd = NULL;
|
||||||
|
info->fd = -1;
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
MPP_RET os_allocator_release(void *ctx, MppBufferInfo *info)
|
||||||
|
{
|
||||||
|
(void) ctx;
|
||||||
|
mpp_assert(info->ptr);
|
||||||
|
mpp_assert(info->size);
|
||||||
|
info->ptr = NULL;
|
||||||
|
info->size = 0;
|
||||||
|
info->hnd = NULL;
|
||||||
|
info->fd = -1;
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
MPP_RET os_allocator_close(void *ctx)
|
MPP_RET os_allocator_close(void *ctx)
|
||||||
{
|
{
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
@@ -84,8 +106,8 @@ static os_allocator allocator_window = {
|
|||||||
os_allocator_open,
|
os_allocator_open,
|
||||||
os_allocator_alloc,
|
os_allocator_alloc,
|
||||||
os_allocator_free,
|
os_allocator_free,
|
||||||
NULL,
|
os_allocator_import,
|
||||||
NULL,
|
os_allocator_release,
|
||||||
os_allocator_close,
|
os_allocator_close,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user