/** Copyright 2015 Rockchip Electronics Co. LTD** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/#define MODULE_TAG "mpp_log"#include <stdio.h>#include <stdarg.h>#include <string.h>#include "mpp_env.h"#include "mpp_debug.h"#include "mpp_common.h"#include "os_log.h"#define MPP_LOG_MAX_LEN 256#ifdef __cplusplusextern "C" {#endifRK_U32 mpp_debug = 0;// TODO: add log timing information and switch flagstatic const char *msg_log_warning = "log message is long\n";static const char *msg_log_nothing = "\n";static int mpp_log_level = MPP_LOG_INFO;static void __mpp_log(os_log_callback func, const char *tag, const char *fmt,const char *fname, va_list args){char msg[MPP_LOG_MAX_LEN + 1];char *tmp = msg;const char *buf = fmt;size_t len_fmt = strnlen(fmt, MPP_LOG_MAX_LEN);size_t len_name = (fname) ? (strnlen(fname, MPP_LOG_MAX_LEN)) : (0);size_t buf_left = MPP_LOG_MAX_LEN;size_t len_all = len_fmt + len_name;if (NULL == tag)tag = MODULE_TAG;if (len_name) {buf = msg;buf_left -= snprintf(msg, buf_left, "%s ", fname);tmp += len_name + 1;}if (len_all == 0) {buf = msg_log_nothing;} else if (len_all >= MPP_LOG_MAX_LEN) {buf_left -= snprintf(tmp, buf_left, "%s", msg_log_warning);buf = msg;} else {snprintf(tmp, buf_left, "%s", fmt);if (fmt[len_fmt - 1] != '\n') {tmp[len_fmt] = '\n';tmp[len_fmt + 1] = '0円';}buf = msg;}func(tag, buf, args);}void _mpp_log(const char *tag, const char *fmt, const char *fname, ...){va_list args;mpp_logw("warning: use new logx function\n");va_start(args, fname);__mpp_log(os_log_info, tag, fmt, fname, args);va_end(args);}void _mpp_err(const char *tag, const char *fmt, const char *fname, ...){va_list args;mpp_logw("warning: use new logx function\n");va_start(args, fname);__mpp_log(os_log_error, tag, fmt, fname, args);va_end(args);}void _mpp_log_l(int level, const char *tag, const char *fmt, const char *fname, ...){static os_log_callback log_func[] = {NULL, /* MPP_LOG_DEFAULT */os_log_fatal, /* MPP_LOG_FATAL */os_log_error, /* MPP_LOG_ERROR */os_log_warn, /* MPP_LOG_WARN */os_log_info, /* MPP_LOG_INFO */os_log_debug, /* MPP_LOG_DEBUG */os_log_trace, /* MPP_LOG_VERBOSE */os_log_info, /* MPP_LOG_DEFAULT */};va_list args;int log_level;if (level <= MPP_LOG_UNKNOWN || level >= MPP_LOG_SILENT)return;log_level = mpp_log_level;if (log_level >= MPP_LOG_SILENT)return;if (level > log_level)return;va_start(args, fname);__mpp_log(log_func[level], tag, fmt, fname, args);va_end(args);}void mpp_set_log_level(int level){if (level <= MPP_LOG_UNKNOWN || level > MPP_LOG_SILENT) {mpp_logw("log level should in range [%d : %d] invalid intput %d\n",MPP_LOG_FATAL, MPP_LOG_SILENT, level);level = MPP_LOG_INFO;}mpp_log_level = level;}int mpp_get_log_level(void){int level;mpp_env_get_u32("mpp_log_level", (RK_U32 *)&level, mpp_log_level);if (level <= MPP_LOG_UNKNOWN || level > MPP_LOG_SILENT)level = MPP_LOG_INFO;mpp_log_level = level;return level;}#ifdef __cplusplus}#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。