mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[mpp_buffer]: Add caller to MppBuffer functions
Add caller parameter to all mpp_buffer functions. Change-Id: Ibebd2a31b302988fe1ed480de575189ce57e41a5 Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -213,13 +213,13 @@ typedef struct MppBufferInfo_t {
|
||||
* imported buffer is leak or not and trace its usage inside mpp process. So we attach this kind
|
||||
* of buffer to default misc buffer group for management.
|
||||
*/
|
||||
#define mpp_buffer_commit(group, info, ...) \
|
||||
#define mpp_buffer_commit(group, info) \
|
||||
mpp_buffer_import_with_tag(group, info, NULL, MODULE_TAG, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_import(buffer, info, ...) \
|
||||
#define mpp_buffer_import(buffer, info) \
|
||||
mpp_buffer_import_with_tag(NULL, info, buffer, MODULE_TAG, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_get(group, buffer, size, ...) \
|
||||
#define mpp_buffer_get(group, buffer, size) \
|
||||
mpp_buffer_get_with_tag(group, buffer, size, MODULE_TAG, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_put(buffer) \
|
||||
@@ -228,6 +228,24 @@ typedef struct MppBufferInfo_t {
|
||||
#define mpp_buffer_inc_ref(buffer) \
|
||||
mpp_buffer_inc_ref_with_caller(buffer, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_info_get(buffer, info) \
|
||||
mpp_buffer_info_get_with_caller(buffer, info, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_read(buffer, offset, data, size) \
|
||||
mpp_buffer_read_with_caller(buffer, offset, data, size, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_write(buffer, offset, data, size) \
|
||||
mpp_buffer_write_with_caller(buffer, offset, data, size, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_get_ptr(buffer) \
|
||||
mpp_buffer_get_ptr_with_caller(buffer, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_get_fd(buffer) \
|
||||
mpp_buffer_get_fd_with_caller(buffer, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_get_size(buffer) \
|
||||
mpp_buffer_get_size_with_caller(buffer, __FUNCTION__)
|
||||
|
||||
#define mpp_buffer_group_get_internal(group, type, ...) \
|
||||
mpp_buffer_group_get(group, type, MPP_BUFFER_INTERNAL, MODULE_TAG, __FUNCTION__)
|
||||
|
||||
@@ -254,12 +272,12 @@ MPP_RET mpp_buffer_get_with_tag(MppBufferGroup group, MppBuffer *buffer, size_t
|
||||
MPP_RET mpp_buffer_put_with_caller(MppBuffer buffer, const char *caller);
|
||||
MPP_RET mpp_buffer_inc_ref_with_caller(MppBuffer buffer, const char *caller);
|
||||
|
||||
MPP_RET mpp_buffer_info_get(MppBuffer buffer, MppBufferInfo *info);
|
||||
MPP_RET mpp_buffer_read(MppBuffer buffer, size_t offset, void *data, size_t size);
|
||||
MPP_RET mpp_buffer_write(MppBuffer buffer, size_t offset, void *data, size_t size);
|
||||
void *mpp_buffer_get_ptr(MppBuffer buffer);
|
||||
int mpp_buffer_get_fd(MppBuffer buffer);
|
||||
size_t mpp_buffer_get_size(MppBuffer buffer);
|
||||
MPP_RET mpp_buffer_info_get_with_caller(MppBuffer buffer, MppBufferInfo *info, const char *caller);
|
||||
MPP_RET mpp_buffer_read_with_caller(MppBuffer buffer, size_t offset, void *data, size_t size, const char *caller);
|
||||
MPP_RET mpp_buffer_write_with_caller(MppBuffer buffer, size_t offset, void *data, size_t size, const char *caller);
|
||||
void *mpp_buffer_get_ptr_with_caller(MppBuffer buffer, const char *caller);
|
||||
int mpp_buffer_get_fd_with_caller(MppBuffer buffer, const char *caller);
|
||||
size_t mpp_buffer_get_size_with_caller(MppBuffer buffer, const char *caller);
|
||||
|
||||
MPP_RET mpp_buffer_group_get(MppBufferGroup *group, MppBufferType type, MppBufferMode mode,
|
||||
const char *tag, const char *caller);
|
||||
|
@@ -114,7 +114,9 @@ extern RK_U32 mpp_buffer_debug;
|
||||
* if input buffer is NULL then buffer will be register to unused list
|
||||
* otherwise the buffer will be register to used list and set to paramter buffer
|
||||
*
|
||||
* mpp_buffer_destroy : destroy a buffer, it must be on unused status
|
||||
* mpp_buffer_mmap : The created mpp_buffer can not be accessed directly.
|
||||
* It required map to access. This is an optimization
|
||||
* for reducing virtual memory usage.
|
||||
*
|
||||
* mpp_buffer_get_unused : get unused buffer with size. it will first search
|
||||
* the unused list. if failed it will create on from
|
||||
@@ -134,6 +136,7 @@ extern RK_U32 mpp_buffer_debug;
|
||||
* mpp_buffer_destory - destroy the buffer
|
||||
*/
|
||||
MPP_RET mpp_buffer_create(const char *tag, const char *caller, MppBufferGroupImpl *group, MppBufferInfo *info, MppBufferImpl **buffer);
|
||||
MPP_RET mpp_buffer_mmap(MppBufferImpl *buffer, const char* caller);
|
||||
MPP_RET mpp_buffer_ref_inc(MppBufferImpl *buffer, const char* caller);
|
||||
MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer, const char* caller);
|
||||
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size);
|
||||
|
@@ -114,7 +114,7 @@ MPP_RET mpp_buffer_inc_ref_with_caller(MppBuffer buffer, const char *caller)
|
||||
return mpp_buffer_ref_inc((MppBufferImpl*)buffer, caller);
|
||||
}
|
||||
|
||||
MPP_RET mpp_buffer_read(MppBuffer buffer, size_t offset, void *data, size_t size)
|
||||
MPP_RET mpp_buffer_read_with_caller(MppBuffer buffer, size_t offset, void *data, size_t size, const char *caller)
|
||||
{
|
||||
if (NULL == buffer || NULL == data) {
|
||||
mpp_err_f("invalid input: buffer %p data %p\n", buffer, data);
|
||||
@@ -125,13 +125,18 @@ MPP_RET mpp_buffer_read(MppBuffer buffer, size_t offset, void *data, size_t size
|
||||
return MPP_OK;
|
||||
|
||||
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||
if (NULL == p->info.ptr)
|
||||
mpp_buffer_mmap(p, caller);
|
||||
|
||||
void *src = p->info.ptr;
|
||||
mpp_assert(src != NULL);
|
||||
memcpy(data, (char*)src + offset, size);
|
||||
if (src)
|
||||
memcpy(data, (char*)src + offset, size);
|
||||
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
MPP_RET mpp_buffer_write(MppBuffer buffer, size_t offset, void *data, size_t size)
|
||||
MPP_RET mpp_buffer_write_with_caller(MppBuffer buffer, size_t offset, void *data, size_t size, const char *caller)
|
||||
{
|
||||
if (NULL == buffer || NULL == data) {
|
||||
mpp_err_f("invalid input: buffer %p data %p\n", buffer, data);
|
||||
@@ -142,13 +147,18 @@ MPP_RET mpp_buffer_write(MppBuffer buffer, size_t offset, void *data, size_t siz
|
||||
return MPP_OK;
|
||||
|
||||
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||
if (NULL == p->info.ptr)
|
||||
mpp_buffer_mmap(p, caller);
|
||||
|
||||
void *dst = p->info.ptr;
|
||||
mpp_assert(dst != NULL);
|
||||
memcpy((char*)dst + offset, data, size);
|
||||
if (dst)
|
||||
memcpy((char*)dst + offset, data, size);
|
||||
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
void *mpp_buffer_get_ptr(MppBuffer buffer)
|
||||
void *mpp_buffer_get_ptr_with_caller(MppBuffer buffer, const char *caller)
|
||||
{
|
||||
if (NULL == buffer) {
|
||||
mpp_err_f("invalid NULL input\n");
|
||||
@@ -156,12 +166,17 @@ void *mpp_buffer_get_ptr(MppBuffer buffer)
|
||||
}
|
||||
|
||||
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||
void *ptr = p->info.ptr;
|
||||
mpp_assert(ptr != NULL);
|
||||
return ptr;
|
||||
if (NULL == p->info.ptr)
|
||||
mpp_buffer_mmap(p, caller);
|
||||
|
||||
mpp_assert(p->info.ptr != NULL);
|
||||
if (NULL == p->info.ptr)
|
||||
mpp_err("mpp_buffer_get_ptr buffer %p ret NULL caller\n", buffer, caller);
|
||||
|
||||
return p->info.ptr;
|
||||
}
|
||||
|
||||
int mpp_buffer_get_fd(MppBuffer buffer)
|
||||
int mpp_buffer_get_fd_with_caller(MppBuffer buffer, const char *caller)
|
||||
{
|
||||
if (NULL == buffer) {
|
||||
mpp_err_f("invalid NULL input\n");
|
||||
@@ -173,12 +188,14 @@ int mpp_buffer_get_fd(MppBuffer buffer)
|
||||
|
||||
#ifdef RKPLATFORM
|
||||
mpp_assert(fd >= 0);
|
||||
if (fd < 0)
|
||||
mpp_err("mpp_buffer_get_fd buffer %p fd %d caller %s\n", buffer, fd, caller);
|
||||
#endif
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
size_t mpp_buffer_get_size(MppBuffer buffer)
|
||||
size_t mpp_buffer_get_size_with_caller(MppBuffer buffer, const char *caller)
|
||||
{
|
||||
if (NULL == buffer) {
|
||||
mpp_err_f("invalid NULL input\n");
|
||||
@@ -186,17 +203,25 @@ size_t mpp_buffer_get_size(MppBuffer buffer)
|
||||
}
|
||||
|
||||
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||
if (p->info.size == 0)
|
||||
mpp_err("mpp_buffer_get_size buffer %p ret zero size caller %s\n", buffer, caller);
|
||||
|
||||
return p->info.size;
|
||||
}
|
||||
|
||||
MPP_RET mpp_buffer_info_get(MppBuffer buffer, MppBufferInfo *info)
|
||||
MPP_RET mpp_buffer_info_get_with_caller(MppBuffer buffer, MppBufferInfo *info, const char *caller)
|
||||
{
|
||||
if (NULL == buffer || NULL == info) {
|
||||
mpp_err_f("invalid input: buffer %p info %p\n", buffer, info);
|
||||
return MPP_ERR_UNKNOW;
|
||||
}
|
||||
|
||||
*info = ((MppBufferImpl*)buffer)->info;
|
||||
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||
if (NULL == p->info.ptr)
|
||||
mpp_buffer_mmap(p, caller);
|
||||
|
||||
*info = p->info;
|
||||
(void)caller;
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
|
@@ -38,6 +38,7 @@ typedef enum MppBufOps_e {
|
||||
GRP_OPS_BUTT = GRP_DESTROY,
|
||||
BUF_COMMIT,
|
||||
BUF_CREATE,
|
||||
BUF_MMAP,
|
||||
BUF_REF_INC,
|
||||
BUF_REF_DEC,
|
||||
BUF_DESTROY,
|
||||
@@ -113,6 +114,7 @@ static const char *ops2str[BUF_OPS_BUTT] = {
|
||||
"grp destroy",
|
||||
"buf commit ",
|
||||
"buf create ",
|
||||
"buf mmap ",
|
||||
"buf ref inc",
|
||||
"buf ref dec",
|
||||
"buf destroy",
|
||||
@@ -306,6 +308,28 @@ RET:
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET mpp_buffer_mmap(MppBufferImpl *buffer, const char* caller)
|
||||
{
|
||||
AutoMutex auto_lock(MppBufferService::get_lock());
|
||||
MPP_BUF_FUNCTION_ENTER();
|
||||
|
||||
MPP_RET ret = MPP_NOK;
|
||||
MppBufferGroupImpl *group = SEARCH_GROUP_BY_ID(buffer->group_id);
|
||||
|
||||
if (group && group->alloc_api && group->alloc_api->mmap) {
|
||||
ret = group->alloc_api->mmap(group->allocator, &buffer->info);
|
||||
|
||||
buffer_group_add_log(group, buffer, BUF_MMAP, caller);
|
||||
}
|
||||
|
||||
if (ret)
|
||||
mpp_err_f("buffer %p group %p fd %d map failed caller %s\n",
|
||||
buffer, group, buffer->info.fd, caller);
|
||||
|
||||
MPP_BUF_FUNCTION_LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET mpp_buffer_ref_inc(MppBufferImpl *buffer, const char* caller)
|
||||
{
|
||||
AutoMutex auto_lock(MppBufferService::get_lock());
|
||||
@@ -718,8 +742,6 @@ MppBufferGroupImpl *MppBufferService::get_group_by_id(RK_U32 id)
|
||||
}
|
||||
}
|
||||
|
||||
mpp_err_f("can not find group with id %d\n", id);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@@ -30,6 +30,7 @@ typedef struct MppAllocatorApi_t {
|
||||
MPP_RET (*free)(MppAllocator allocator, MppBufferInfo *data);
|
||||
MPP_RET (*import)(MppAllocator allocator, MppBufferInfo *data);
|
||||
MPP_RET (*release)(MppAllocator allocator, MppBufferInfo *data);
|
||||
MPP_RET (*mmap)(MppAllocator allocator, MppBufferInfo *data);
|
||||
} MppAllocatorApi;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -107,6 +107,7 @@ static MppAllocatorApi mpp_allocator_api = {
|
||||
mpp_allocator_free,
|
||||
mpp_allocator_import,
|
||||
mpp_allocator_release,
|
||||
NULL,
|
||||
};
|
||||
|
||||
MPP_RET mpp_allocator_get(MppAllocator *allocator, MppAllocatorApi **api, MppBufferType type)
|
||||
|
Reference in New Issue
Block a user