mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 17:46:50 +08:00
[mpp_mem]: add mpp_realloc function
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@98 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -22,6 +22,13 @@ int os_malloc(void **memptr, size_t alignment, size_t size)
|
|||||||
return posix_memalign(memptr, alignment, size);
|
return posix_memalign(memptr, alignment, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int os_realloc(void *src, void **dst, size_t alignment, size_t size)
|
||||||
|
{
|
||||||
|
(void)alignment;
|
||||||
|
*dst = realloc(src, size);
|
||||||
|
return (*dst) ? (0) : (-1);
|
||||||
|
}
|
||||||
|
|
||||||
void os_free(void *ptr)
|
void os_free(void *ptr)
|
||||||
{
|
{
|
||||||
free(ptr);
|
free(ptr);
|
||||||
|
@@ -27,6 +27,9 @@
|
|||||||
#define mpp_malloc(type, count) \
|
#define mpp_malloc(type, count) \
|
||||||
(type*)mpp_osal_malloc(MODULE_TAG, sizeof(type) * (count))
|
(type*)mpp_osal_malloc(MODULE_TAG, sizeof(type) * (count))
|
||||||
|
|
||||||
|
#define mpp_realloc(ptr, type, count) \
|
||||||
|
(type*)mpp_osal_realloc(MODULE_TAG, ptr, sizeof(type) * (count))
|
||||||
|
|
||||||
#define mpp_free(ptr) mpp_osal_free(ptr)
|
#define mpp_free(ptr) mpp_osal_free(ptr)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -35,6 +38,7 @@ extern "C" {
|
|||||||
|
|
||||||
void mpp_show_mem_status();
|
void mpp_show_mem_status();
|
||||||
void *mpp_osal_malloc(char *tag, size_t size);
|
void *mpp_osal_malloc(char *tag, size_t size);
|
||||||
|
void *mpp_osal_realloc(char *tag, void *ptr, size_t size);
|
||||||
void mpp_osal_free(void *ptr);
|
void mpp_osal_free(void *ptr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -53,7 +53,7 @@ void _mpp_log(const char *tag, const char *fmt, ...)
|
|||||||
} else if (len == MPP_LOG_MAX_LEN) {
|
} else if (len == MPP_LOG_MAX_LEN) {
|
||||||
buf = msg_log_warning;
|
buf = msg_log_warning;
|
||||||
} else if (fmt[len - 1] != '\n') {
|
} else if (fmt[len - 1] != '\n') {
|
||||||
char msg[MPP_LOG_MAX_LEN];
|
char msg[MPP_LOG_MAX_LEN+1];
|
||||||
snprintf(msg, sizeof(msg), "%s", fmt);
|
snprintf(msg, sizeof(msg), "%s", fmt);
|
||||||
msg[len] = '\n';
|
msg[len] = '\n';
|
||||||
msg[len + 1] = '\0';
|
msg[len + 1] = '\0';
|
||||||
@@ -79,7 +79,7 @@ void _mpp_err(const char *tag, const char *fmt, ...)
|
|||||||
} else if (len == MPP_LOG_MAX_LEN) {
|
} else if (len == MPP_LOG_MAX_LEN) {
|
||||||
buf = msg_log_warning;
|
buf = msg_log_warning;
|
||||||
} else if (fmt[len - 1] != '\n') {
|
} else if (fmt[len - 1] != '\n') {
|
||||||
char msg[MPP_LOG_MAX_LEN];
|
char msg[MPP_LOG_MAX_LEN+1];
|
||||||
snprintf(msg, sizeof(msg), "%s", fmt);
|
snprintf(msg, sizeof(msg), "%s", fmt);
|
||||||
msg[len] = '\n';
|
msg[len] = '\n';
|
||||||
msg[len + 1] = '\0';
|
msg[len + 1] = '\0';
|
||||||
|
@@ -89,6 +89,44 @@ void *mpp_osal_malloc(char *tag, size_t size)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *mpp_osal_realloc(char *tag, void *ptr, size_t size)
|
||||||
|
{
|
||||||
|
void *ret;
|
||||||
|
|
||||||
|
if (NULL == ptr)
|
||||||
|
return mpp_osal_malloc(tag, size);
|
||||||
|
|
||||||
|
if (0 == size)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
get_osal_mem_flag();
|
||||||
|
|
||||||
|
if (osal_mem_flag & OSAL_MEM_LIST_EN) {
|
||||||
|
struct mem_node *pos, *n;
|
||||||
|
ret = NULL;
|
||||||
|
list_for_each_entry_safe(pos, n, &mem_list, struct mem_node, list) {
|
||||||
|
if (ptr == pos->ptr) {
|
||||||
|
if (MPP_OK == os_realloc(ptr, &pos->ptr, RK_OSAL_MEM_ALIGN, size)) {
|
||||||
|
pos->size = size;
|
||||||
|
strncpy(pos->tag, tag, sizeof(pos->tag));
|
||||||
|
ret = pos->ptr;
|
||||||
|
} else {
|
||||||
|
list_del_init(&pos->list);
|
||||||
|
free(pos);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = realloc(ptr, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == ret)
|
||||||
|
mpp_err("mpp_realloc ptr 0x%p to size %d failed\n", ptr, size);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void mpp_osal_free(void *ptr)
|
void mpp_osal_free(void *ptr)
|
||||||
{
|
{
|
||||||
if (NULL == ptr)
|
if (NULL == ptr)
|
||||||
|
@@ -22,6 +22,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int os_malloc(void **memptr, size_t alignment, size_t size);
|
int os_malloc(void **memptr, size_t alignment, size_t size);
|
||||||
|
int os_realloc(void *src, void **dst, size_t alignment, size_t size);
|
||||||
void os_free(void *ptr);
|
void os_free(void *ptr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MODULE_TAG "mpp_malloc_test"
|
#define MODULE_TAG "mpp_mem_test"
|
||||||
|
|
||||||
#include "mpp_log.h"
|
#include "mpp_log.h"
|
||||||
#include "mpp_env.h"
|
#include "mpp_env.h"
|
||||||
@@ -29,11 +29,20 @@ int main()
|
|||||||
mpp_set_env_u32("osal_mem_list", 1);
|
mpp_set_env_u32("osal_mem_list", 1);
|
||||||
tmp = mpp_malloc(int, 100);
|
tmp = mpp_malloc(int, 100);
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
mpp_log("malloc success\n");
|
mpp_log("malloc success ptr 0x%p\n", tmp);
|
||||||
mpp_free(tmp);
|
|
||||||
} else {
|
} else {
|
||||||
mpp_log("malloc failed\n");
|
mpp_log("malloc failed\n");
|
||||||
}
|
}
|
||||||
|
if (tmp) {
|
||||||
|
tmp = mpp_realloc(tmp, int, 200);
|
||||||
|
if (tmp) {
|
||||||
|
mpp_log("realloc success ptr 0x%p\n", tmp);
|
||||||
|
} else {
|
||||||
|
mpp_log("realloc failed\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mpp_free(tmp);
|
||||||
|
mpp_log("mpp_mem_test done\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,12 @@ int os_malloc(void **memptr, size_t alignment, size_t size)
|
|||||||
return (*memptr) ? (0) : (-1);
|
return (*memptr) ? (0) : (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int os_realloc(void *src, void **dst, size_t alignment, size_t size)
|
||||||
|
{
|
||||||
|
*dst = _aligned_realloc(src, size, alignment);
|
||||||
|
return (*dst) ? (0) : (-1);
|
||||||
|
}
|
||||||
|
|
||||||
void os_free(void *ptr)
|
void os_free(void *ptr)
|
||||||
{
|
{
|
||||||
_aligned_free(ptr);
|
_aligned_free(ptr);
|
||||||
|
Reference in New Issue
Block a user