1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2022 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __MPP_LOG_H__ 7*437bfbebSnyanmisaka #define __MPP_LOG_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include <stdarg.h> 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka #include "rk_type.h" 12*437bfbebSnyanmisaka #include "mpp_log_def.h" 13*437bfbebSnyanmisaka 14*437bfbebSnyanmisaka /* 15*437bfbebSnyanmisaka * _c function will add condition check 16*437bfbebSnyanmisaka * _f function will add function name to the log 17*437bfbebSnyanmisaka * _cf function will add both function name and condition check 18*437bfbebSnyanmisaka */ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka /* 21*437bfbebSnyanmisaka * mpp runtime log system usage: 22*437bfbebSnyanmisaka * mpp_logf is for fatal logging. For use when aborting 23*437bfbebSnyanmisaka * mpp_loge is for error logging. For use with unrecoverable failures. 24*437bfbebSnyanmisaka * mpp_logw is for warning logging. For use with recoverable failures. 25*437bfbebSnyanmisaka * mpp_logi is for informational logging. 26*437bfbebSnyanmisaka * mpp_logd is for debug logging. 27*437bfbebSnyanmisaka * mpp_logv is for verbose logging 28*437bfbebSnyanmisaka */ 29*437bfbebSnyanmisaka 30*437bfbebSnyanmisaka #define mpp_logf(fmt, ...) _mpp_log_l(MPP_LOG_FATAL, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) 31*437bfbebSnyanmisaka #define mpp_loge(fmt, ...) _mpp_log_l(MPP_LOG_ERROR, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) 32*437bfbebSnyanmisaka #define mpp_logw(fmt, ...) _mpp_log_l(MPP_LOG_WARN, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) 33*437bfbebSnyanmisaka #define mpp_logi(fmt, ...) _mpp_log_l(MPP_LOG_INFO, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) 34*437bfbebSnyanmisaka #define mpp_logd(fmt, ...) _mpp_log_l(MPP_LOG_DEBUG, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) 35*437bfbebSnyanmisaka #define mpp_logv(fmt, ...) _mpp_log_l(MPP_LOG_VERBOSE, MODULE_TAG, fmt, NULL, ## __VA_ARGS__) 36*437bfbebSnyanmisaka 37*437bfbebSnyanmisaka #define mpp_logf_f(fmt, ...) _mpp_log_l(MPP_LOG_FATAL, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) 38*437bfbebSnyanmisaka #define mpp_loge_f(fmt, ...) _mpp_log_l(MPP_LOG_ERROR, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) 39*437bfbebSnyanmisaka #define mpp_logw_f(fmt, ...) _mpp_log_l(MPP_LOG_WARN, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) 40*437bfbebSnyanmisaka #define mpp_logi_f(fmt, ...) _mpp_log_l(MPP_LOG_INFO, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) 41*437bfbebSnyanmisaka #define mpp_logd_f(fmt, ...) _mpp_log_l(MPP_LOG_DEBUG, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) 42*437bfbebSnyanmisaka #define mpp_logv_f(fmt, ...) _mpp_log_l(MPP_LOG_VERBOSE, MODULE_TAG, fmt, __FUNCTION__, ## __VA_ARGS__) 43*437bfbebSnyanmisaka 44*437bfbebSnyanmisaka #define mpp_logf_c(cond, fmt, ...) do { if (cond) mpp_logf(fmt, ## __VA_ARGS__); } while (0) 45*437bfbebSnyanmisaka #define mpp_loge_c(cond, fmt, ...) do { if (cond) mpp_loge(fmt, ## __VA_ARGS__); } while (0) 46*437bfbebSnyanmisaka #define mpp_logw_c(cond, fmt, ...) do { if (cond) mpp_logw(fmt, ## __VA_ARGS__); } while (0) 47*437bfbebSnyanmisaka #define mpp_logi_c(cond, fmt, ...) do { if (cond) mpp_logi(fmt, ## __VA_ARGS__); } while (0) 48*437bfbebSnyanmisaka #define mpp_logd_c(cond, fmt, ...) do { if (cond) mpp_logd(fmt, ## __VA_ARGS__); } while (0) 49*437bfbebSnyanmisaka #define mpp_logv_c(cond, fmt, ...) do { if (cond) mpp_logv(fmt, ## __VA_ARGS__); } while (0) 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka #define mpp_logf_cf(cond, fmt, ...) do { if (cond) mpp_logf_f(fmt, ## __VA_ARGS__); } while (0) 52*437bfbebSnyanmisaka #define mpp_loge_cf(cond, fmt, ...) do { if (cond) mpp_loge_f(fmt, ## __VA_ARGS__); } while (0) 53*437bfbebSnyanmisaka #define mpp_logw_cf(cond, fmt, ...) do { if (cond) mpp_logw_f(fmt, ## __VA_ARGS__); } while (0) 54*437bfbebSnyanmisaka #define mpp_logi_cf(cond, fmt, ...) do { if (cond) mpp_logi_f(fmt, ## __VA_ARGS__); } while (0) 55*437bfbebSnyanmisaka #define mpp_logd_cf(cond, fmt, ...) do { if (cond) mpp_logd_f(fmt, ## __VA_ARGS__); } while (0) 56*437bfbebSnyanmisaka #define mpp_logv_cf(cond, fmt, ...) do { if (cond) mpp_logv_f(fmt, ## __VA_ARGS__); } while (0) 57*437bfbebSnyanmisaka 58*437bfbebSnyanmisaka /* 59*437bfbebSnyanmisaka * mpp runtime log system usage: 60*437bfbebSnyanmisaka * mpp_err is for error status message, it will print for sure. 61*437bfbebSnyanmisaka * mpp_log is for important message like open/close/reset/flush, it will print too. 62*437bfbebSnyanmisaka */ 63*437bfbebSnyanmisaka 64*437bfbebSnyanmisaka #define mpp_log(fmt, ...) mpp_logi(fmt, ## __VA_ARGS__) 65*437bfbebSnyanmisaka #define mpp_err(fmt, ...) mpp_loge(fmt, ## __VA_ARGS__) 66*437bfbebSnyanmisaka 67*437bfbebSnyanmisaka #define mpp_log_f(fmt, ...) mpp_logi_f(fmt, ## __VA_ARGS__) 68*437bfbebSnyanmisaka #define mpp_err_f(fmt, ...) mpp_loge_f(fmt, ## __VA_ARGS__) 69*437bfbebSnyanmisaka 70*437bfbebSnyanmisaka #define mpp_log_c(cond, fmt, ...) do { if (cond) mpp_log(fmt, ## __VA_ARGS__); } while (0) 71*437bfbebSnyanmisaka #define mpp_log_cf(cond, fmt, ...) do { if (cond) mpp_log_f(fmt, ## __VA_ARGS__); } while (0) 72*437bfbebSnyanmisaka 73*437bfbebSnyanmisaka #ifdef __cplusplus 74*437bfbebSnyanmisaka extern "C" { 75*437bfbebSnyanmisaka #endif 76*437bfbebSnyanmisaka 77*437bfbebSnyanmisaka void _mpp_log_l(int level, const char *tag, const char *fmt, const char *func, ...); 78*437bfbebSnyanmisaka 79*437bfbebSnyanmisaka void mpp_set_log_level(int level); 80*437bfbebSnyanmisaka int mpp_get_log_level(void); 81*437bfbebSnyanmisaka 82*437bfbebSnyanmisaka typedef void (*MppLogCb)(void *ctx, int level, const char *tag, const char *fmt, const char *func, va_list args); 83*437bfbebSnyanmisaka int mpp_set_log_callback(void *ctx, MppLogCb cb); 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka /* deprecated function */ 86*437bfbebSnyanmisaka void _mpp_log(const char *tag, const char *fmt, const char *func, ...); 87*437bfbebSnyanmisaka void _mpp_err(const char *tag, const char *fmt, const char *func, ...); 88*437bfbebSnyanmisaka 89*437bfbebSnyanmisaka #ifdef __cplusplus 90*437bfbebSnyanmisaka } 91*437bfbebSnyanmisaka #endif 92*437bfbebSnyanmisaka 93*437bfbebSnyanmisaka #endif /*__MPP_LOG_H__*/ 94