From 1fe9a769fcf4bddbbedeae5320b89e43394a72d5 Mon Sep 17 00:00:00 2001 From: ChenHengming Date: Wed, 5 Aug 2015 08:46:46 +0000 Subject: [PATCH] [rk_env]: add default value to env_get function git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@35 6e48237b-75ef-9749-8fc9-41990f28c85a --- osal/android/os_env.c | 45 ++++++++++++++++++++------------------ osal/inc/rk_env.h | 8 +++---- osal/inc/rk_malloc.h | 3 ++- osal/linux/os_env.c | 33 ++++++++++++++++++++-------- osal/os_env.h | 8 +++---- osal/rk_env.cpp | 16 +++++++------- osal/rk_log.cpp | 1 - osal/rk_malloc.cpp | 18 +++++++++++---- osal/test/rk_env_test.c | 4 ++-- osal/test/rk_malloc_test.c | 2 +- osal/window/os_env.c | 32 +++++++++++++++++++-------- 11 files changed, 106 insertions(+), 64 deletions(-) diff --git a/osal/android/os_env.c b/osal/android/os_env.c index 0ab1e55e..5a59b408 100644 --- a/osal/android/os_env.c +++ b/osal/android/os_env.c @@ -25,49 +25,52 @@ * So the library should compiled on latest ndk */ -RK_S32 os_get_env_u32(const char *name, RK_U32 *val) +RK_S32 os_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value) { - RK_S32 ret = -1; - char value[PROP_VALUE_MAX+1]; - int len = __system_property_get(name, value); - *val = 0; + char prop[PROP_VALUE_MAX+1]; + int len = __system_property_get(name, prop); if (len > 0) { char *endptr; - int base = (value[0] == '0' && value[1] == 'x')?(16):(10); + int base = (prop[0] == '0' && prop[1] == 'x')?(16):(10); errno = 0; - *val = strtoul(value, &endptr, base); - if (errno || (value == endptr)) { + *value = strtoul(prop, &endptr, base); + if (errno || (prop == endptr)) { errno = 0; - } else { - ret = 0; + *value = default_value; } + } else { + *value = default_value; } - return ret; + return 0; } -RK_S32 os_get_env_str(const char *name, char **val) +RK_S32 os_get_env_str(const char *name, char **value, char *default_value) { // use unsigned char to avoid warnning static unsigned char env_str[2][PROP_VALUE_MAX+1]; static RK_U32 env_idx = 0; - char *value = (char *)env_str[env_idx]; - int len = __system_property_get(name, value); - *val = (len)?(value):(NULL); - env_idx = (len)?(!env_idx):(env_idx); - return (len)?(0):(-1); + char *prop = (char *)env_str[env_idx]; + int len = __system_property_get(name, prop); + if (len > 0) { + *value = prop; + env_idx = !env_idx; + } else { + *value = default_value; + } + return 0; } -RK_S32 os_set_env_u32(const char *name, RK_U32 val) +RK_S32 os_set_env_u32(const char *name, RK_U32 value) { char buf[PROP_VALUE_MAX+1+2]; - snprintf(buf, sizeof(buf), "0x%x", val); + snprintf(buf, sizeof(buf), "0x%x", value); int len = __system_property_set(name, buf); return (len)?(0):(-1); } -RK_S32 os_set_env_str(const char *name, char *val) +RK_S32 os_set_env_str(const char *name, char *value) { - int len = __system_property_set(name, val); + int len = __system_property_set(name, value); return (len)?(0):(-1); } diff --git a/osal/inc/rk_env.h b/osal/inc/rk_env.h index 3c015022..543c32f1 100644 --- a/osal/inc/rk_env.h +++ b/osal/inc/rk_env.h @@ -23,11 +23,11 @@ extern "C" { #endif -RK_S32 rk_get_env_u32(const char *name, RK_U32 *val); -RK_S32 rk_get_env_str(const char *name, char **val); +RK_S32 rk_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value); +RK_S32 rk_get_env_str(const char *name, char **value, char *default_value); -RK_S32 rk_set_env_u32(const char *name, RK_U32 val); -RK_S32 rk_set_env_str(const char *name, char *val); +RK_S32 rk_set_env_u32(const char *name, RK_U32 value); +RK_S32 rk_set_env_str(const char *name, char *value); #ifdef __cplusplus } diff --git a/osal/inc/rk_malloc.h b/osal/inc/rk_malloc.h index b94dd7fc..6c44f08e 100644 --- a/osal/inc/rk_malloc.h +++ b/osal/inc/rk_malloc.h @@ -26,7 +26,8 @@ extern "C" { #endif -void rk_mpp_set_memalign(size_t size); +void rk_mpp_set_mem_align(size_t size); +void rk_mpp_show_mem_status(); void *rk_mpp_malloc(size_t size); void rk_mpp_free(void *ptr); diff --git a/osal/linux/os_env.c b/osal/linux/os_env.c index 8528950c..b052f761 100644 --- a/osal/linux/os_env.c +++ b/osal/linux/os_env.c @@ -16,33 +16,48 @@ #include #include +#include #include "os_env.h" #define ENV_BUF_SIZE_LINUX 1024 -RK_S32 os_get_env_u32(const char *name, RK_U32 *val) +RK_S32 os_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value) { char *ptr = getenv(name); - *val = (RK_U32)atoi(ptr); + if (NULL == ptr) { + *value = default_value; + } else { + char *endptr; + int base = (ptr[0] == '0' && ptr[1] == 'x')?(16):(10); + errno = 0; + *value = strtoul(ptr, &endptr, base); + if (errno || (ptr == endptr)) { + errno = 0; + *value = default_value; + } + } return 0; } -RK_S32 os_get_env_str(const char *name, char **val) +RK_S32 os_get_env_str(const char *name, char **value, char *default_value) { - *val = getenv(name); - return (*val)?(0):(-1); + *value = getenv(name); + if (NULL == *value) { + *value = default_value; + } + return 0; } -RK_S32 os_set_env_u32(const char *name, RK_U32 val) +RK_S32 os_set_env_u32(const char *name, RK_U32 value) { char buf[ENV_BUF_SIZE_LINUX]; - snprintf(buf, sizeof(buf), "%u", val); + snprintf(buf, sizeof(buf), "%u", value); return setenv(name, buf, 1); } -RK_S32 os_set_env_str(const char *name, char *val) +RK_S32 os_set_env_str(const char *name, char *value) { - return setenv(name, val, 1); + return setenv(name, value, 1); } diff --git a/osal/os_env.h b/osal/os_env.h index ebd6cfa1..50e5f6fe 100644 --- a/osal/os_env.h +++ b/osal/os_env.h @@ -23,11 +23,11 @@ extern "C" { #endif -RK_S32 os_get_env_u32(const char *name, RK_U32 *val); -RK_S32 os_get_env_str(const char *name, char **val); +RK_S32 os_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value); +RK_S32 os_get_env_str(const char *name, char **value, char *default_value); -RK_S32 os_set_env_u32(const char *name, RK_U32 val); -RK_S32 os_set_env_str(const char *name, char *val); +RK_S32 os_set_env_u32(const char *name, RK_U32 value); +RK_S32 os_set_env_str(const char *name, char *value); #ifdef __cplusplus } diff --git a/osal/rk_env.cpp b/osal/rk_env.cpp index 44da54df..1b2f1251 100644 --- a/osal/rk_env.cpp +++ b/osal/rk_env.cpp @@ -17,24 +17,24 @@ #include "rk_env.h" #include "os_env.h" -RK_S32 rk_get_env_u32(const char *name, RK_U32 *val) +RK_S32 rk_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value) { - return os_get_env_u32(name, val); + return os_get_env_u32(name, value, default_value); } -RK_S32 rk_get_env_str(const char *name, char **val) +RK_S32 rk_get_env_str(const char *name, char **value, char *default_value) { - return os_get_env_str(name, val); + return os_get_env_str(name, value, default_value); } -RK_S32 rk_set_env_u32(const char *name, RK_U32 val) +RK_S32 rk_set_env_u32(const char *name, RK_U32 value) { - return os_set_env_u32(name, val); + return os_set_env_u32(name, value); } -RK_S32 rk_set_env_str(const char *name, char *val) +RK_S32 rk_set_env_str(const char *name, char *value) { - return os_set_env_str(name, val); + return os_set_env_str(name, value); } diff --git a/osal/rk_log.cpp b/osal/rk_log.cpp index 806b33b3..1fe2965a 100644 --- a/osal/rk_log.cpp +++ b/osal/rk_log.cpp @@ -56,7 +56,6 @@ RK_U32 rk_get_log_flag() return mpp_log_flag; } - #ifdef __cplusplus } #endif diff --git a/osal/rk_malloc.cpp b/osal/rk_malloc.cpp index be20adaa..a10afa40 100644 --- a/osal/rk_malloc.cpp +++ b/osal/rk_malloc.cpp @@ -17,18 +17,28 @@ #define LOG_TAG "rk_malloc" #include "rk_type.h" #include "rk_log.h" +#include "rk_env.h" #include "rk_malloc.h" #include "os_malloc.h" // default memory align size is set to 64 -static size_t rk_mpp_memalign = 64; +static size_t rk_mpp_mem_align = 64; +static RK_S32 mem_protect_flag = -1; -void rk_mpp_set_memalign(size_t size) +static inline RK_S32 mpp_get_mem_proctect_flag() +{ + if (mem_protect_flag < 0) { + rk_get_env_u32("mpp_protect", (RK_U32 *)&mem_protect_flag, 0); + } + return mem_protect_flag; +} + +void rk_mpp_set_mem_align(size_t size) { /* determine align size is power of 2 */ if (size && !(size & (size - 1))) - rk_mpp_memalign = size; + rk_mpp_mem_align = size; else rk_log("set memalign to %d failed\n", size); } @@ -36,7 +46,7 @@ void rk_mpp_set_memalign(size_t size) void *rk_mpp_malloc(size_t size) { void *ptr; - if (0 == os_malloc(&ptr, rk_mpp_memalign, size)) + if (0 == os_malloc(&ptr, rk_mpp_mem_align, size)) return ptr; else return NULL; diff --git a/osal/test/rk_env_test.c b/osal/test/rk_env_test.c index 10735cb5..1b7b5107 100644 --- a/osal/test/rk_env_test.c +++ b/osal/test/rk_env_test.c @@ -36,8 +36,8 @@ int main() env_string_str = NULL; rk_log("clear local value to zero\n"); - rk_get_env_u32(env_debug, &env_debug_u32); - rk_get_env_str(env_string, &env_string_str); + rk_get_env_u32(env_debug, &env_debug_u32, 0); + rk_get_env_str(env_string, &env_string_str, NULL); rk_log("get env: %s is %u\n", env_debug, env_debug_u32); rk_log("get env: %s is %s\n", env_string, env_string_str); diff --git a/osal/test/rk_malloc_test.c b/osal/test/rk_malloc_test.c index c5a7a759..47f98c02 100644 --- a/osal/test/rk_malloc_test.c +++ b/osal/test/rk_malloc_test.c @@ -23,7 +23,7 @@ int main() void *tmp = NULL; rk_log("try memalign of 512\n"); - rk_mpp_set_memalign(512); + rk_mpp_set_mem_align(512); tmp = rk_malloc(int, 100); if (tmp) { diff --git a/osal/window/os_env.c b/osal/window/os_env.c index 9dd09ff1..1bc7048b 100644 --- a/osal/window/os_env.c +++ b/osal/window/os_env.c @@ -20,30 +20,44 @@ #define ENV_BUF_SIZE_WIN 1024 -RK_S32 os_get_env_u32(const char *name, RK_U32 *val) +RK_S32 os_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value) { char *ptr = getenv(name); - *val = (RK_U32)atoi(ptr); + if (NULL == ptr) { + *value = default_value; + } else { + char *endptr; + int base = (ptr[0] == '0' && ptr[1] == 'x')?(16):(10); + errno = 0; + *value = strtoul(ptr, &endptr, base); + if (errno || (ptr == endptr)) { + errno = 0; + *value = default_value; + } + } return 0; } -RK_S32 os_get_env_str(const char *name, char **val) +RK_S32 os_get_env_str(const char *name, char **value, char *default_value) { - *val = getenv(name); - return (*val)?(0):(-1); + *value = getenv(name); + if (NULL == *value) { + *value = default_value; + } + return 0; } -RK_S32 os_set_env_u32(const char *name, RK_U32 val) +RK_S32 os_set_env_u32(const char *name, RK_U32 value) { char buf[ENV_BUF_SIZE_WIN]; - _snprintf(buf, sizeof(buf), "%s=%lu", name, val); + _snprintf(buf, sizeof(buf), "%s=%lu", name, value); return _putenv(buf); } -RK_S32 os_set_env_str(const char *name, char *val) +RK_S32 os_set_env_str(const char *name, char *value) { char buf[ENV_BUF_SIZE_WIN]; - _snprintf(buf, sizeof(buf), "%s=%s", name, val); + _snprintf(buf, sizeof(buf), "%s=%s", name, value); return _putenv(buf); }