mirror of
				https://github.com/nyanmisaka/mpp.git
				synced 2025-10-31 04:26:39 +08:00 
			
		
		
		
	 c0866a76f9
			
		
	
	c0866a76f9
	
	
	
		
			
			git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@906 6e48237b-75ef-9749-8fc9-41990f28c85a
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * 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_log.h"
 | |
| #include "mpp_mem.h"
 | |
| #include "mpp_common.h"
 | |
| 
 | |
| #include "os_log.h"
 | |
| 
 | |
| #define MPP_LOG_MAX_LEN     256
 | |
| 
 | |
| typedef void (*mpp_log_callback)(const char*, const char*, va_list);
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| RK_U32 mpp_debug = 0;
 | |
| static RK_U32 mpp_log_flag = 0;
 | |
| 
 | |
| // TODO: add log timing information and switch flag
 | |
| static const char *msg_log_warning = "log message is long\n";
 | |
| static const char *msg_log_nothing = "\n";
 | |
| 
 | |
| void __mpp_log(mpp_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;
 | |
|     va_start(args, fname);
 | |
|     __mpp_log(os_log, tag, fmt, fname, args);
 | |
|     va_end(args);
 | |
| }
 | |
| 
 | |
| void _mpp_err(const char *tag, const char *fmt, const char *fname, ...)
 | |
| {
 | |
|     va_list args;
 | |
|     va_start(args, fname);
 | |
|     __mpp_log(os_err, tag, fmt, fname, args);
 | |
|     va_end(args);
 | |
| }
 | |
| 
 | |
| void mpp_log_set_flag(RK_U32 flag)
 | |
| {
 | |
|     mpp_log_flag = flag;
 | |
|     return ;
 | |
| }
 | |
| 
 | |
| RK_U32 mpp_log_get_flag()
 | |
| {
 | |
|     return mpp_log_flag;
 | |
| }
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 |