1 /* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef AVCODEC_LOG_H 16 #define AVCODEC_LOG_H 17 18 #include <hilog/log.h> 19 #include <cinttypes> 20 21 namespace OHOS { 22 namespace MediaAVCodec { 23 #undef LOG_DOMAIN_FRAMEWORK 24 #define LOG_DOMAIN_FRAMEWORK 0xD002B30 25 #undef LOG_DOMAIN_AUDIO 26 #define LOG_DOMAIN_AUDIO 0xD002B31 27 #undef LOG_DOMAIN_HCODEC 28 #define LOG_DOMAIN_HCODEC 0xD002B32 29 #undef LOG_DOMAIN_TEST 30 #define LOG_DOMAIN_TEST 0xD002B36 31 #undef LOG_DOMAIN_DEMUXER 32 #define LOG_DOMAIN_DEMUXER 0xD002B3A 33 #undef LOG_DOMAIN_MUXER 34 #define LOG_DOMAIN_MUXER 0xD002B3B 35 36 #ifndef AVCODEC_LOG_USE_NO_DICT_LOG 37 #define AVCODEC_LOG(level, fmt, args...) \ 38 do { \ 39 (void)HILOG_IMPL(LABEL.type, level, LABEL.domain, LABEL.tag, "{%{public}s():%{public}d} " \ 40 fmt, __FUNCTION__, __LINE__, ##args); \ 41 } while (0) 42 43 #define AVCODEC_LOGF(fmt, ...) AVCODEC_LOG(LOG_FATAL, fmt, ##__VA_ARGS__) 44 #define AVCODEC_LOGE(fmt, ...) AVCODEC_LOG(LOG_ERROR, fmt, ##__VA_ARGS__) 45 #define AVCODEC_LOGW(fmt, ...) AVCODEC_LOG(LOG_WARN, fmt, ##__VA_ARGS__) 46 #define AVCODEC_LOGI(fmt, ...) AVCODEC_LOG(LOG_INFO, fmt, ##__VA_ARGS__) 47 #define AVCODEC_LOGD(fmt, ...) AVCODEC_LOG(LOG_DEBUG, fmt, ##__VA_ARGS__) 48 #else 49 #define AVCODEC_LOG(func, fmt, args...) \ 50 do { \ 51 (void)func(LABEL, "{%{public}s():%{public}d} " fmt, __FUNCTION__, __LINE__, ##args); \ 52 } while (0) 53 54 #define AVCODEC_LOGF(fmt, ...) AVCODEC_LOG(::OHOS::HiviewDFX::HiLog::Fatal, fmt, ##__VA_ARGS__) 55 #define AVCODEC_LOGE(fmt, ...) AVCODEC_LOG(::OHOS::HiviewDFX::HiLog::Error, fmt, ##__VA_ARGS__) 56 #define AVCODEC_LOGW(fmt, ...) AVCODEC_LOG(::OHOS::HiviewDFX::HiLog::Warn, fmt, ##__VA_ARGS__) 57 #define AVCODEC_LOGI(fmt, ...) AVCODEC_LOG(::OHOS::HiviewDFX::HiLog::Info, fmt, ##__VA_ARGS__) 58 #define AVCODEC_LOGD(fmt, ...) AVCODEC_LOG(::OHOS::HiviewDFX::HiLog::Debug, fmt, ##__VA_ARGS__) 59 #endif 60 61 #define AVCODEC_LOG_LIMIT(logger, frequency, fmt, ...) \ 62 do { \ 63 static uint32_t currentTimes = 0; \ 64 if (currentTimes++ % ((uint32_t)(frequency)) != 0) { \ 65 break; \ 66 } \ 67 logger("[R: %{public}u] " fmt, currentTimes, ##__VA_ARGS__); \ 68 } while (0) 69 70 #define AVCODEC_LOGE_LIMIT(frequency, fmt, ...) AVCODEC_LOG_LIMIT(AVCODEC_LOGE, frequency, fmt, ##__VA_ARGS__) 71 #define AVCODEC_LOGW_LIMIT(frequency, fmt, ...) AVCODEC_LOG_LIMIT(AVCODEC_LOGW, frequency, fmt, ##__VA_ARGS__) 72 #define AVCODEC_LOGI_LIMIT(frequency, fmt, ...) AVCODEC_LOG_LIMIT(AVCODEC_LOGI, frequency, fmt, ##__VA_ARGS__) 73 #define AVCODEC_LOGD_LIMIT(frequency, fmt, ...) AVCODEC_LOG_LIMIT(AVCODEC_LOGD, frequency, fmt, ##__VA_ARGS__) 74 75 #define CHECK_AND_RETURN_RET_LOG(cond, ret, fmt, ...) \ 76 do { \ 77 if (!(cond)) { \ 78 AVCODEC_LOGE(fmt, ##__VA_ARGS__); \ 79 return ret; \ 80 } \ 81 } while (0) 82 83 #define CHECK_AND_RETURN_RET_LOGW(cond, ret, fmt, ...) \ 84 do { \ 85 if (!(cond)) { \ 86 AVCODEC_LOGW(fmt, ##__VA_ARGS__); \ 87 return ret; \ 88 } \ 89 } while (0) 90 91 #define CHECK_AND_RETURN_RET_LOG_LIMIT(cond, ret, frequency, fmt, ...) \ 92 do { \ 93 if (!(cond)) { \ 94 AVCODEC_LOGE_LIMIT(frequency, fmt, ##__VA_ARGS__); \ 95 return ret; \ 96 } \ 97 } while (0) 98 99 #define EXPECT_AND_LOGW(cond, fmt, ...) \ 100 do { \ 101 if ((cond)) { \ 102 AVCODEC_LOGW(fmt, ##__VA_ARGS__); \ 103 } \ 104 } while (0) 105 106 #define EXPECT_AND_LOGI(cond, fmt, ...) \ 107 do { \ 108 if ((cond)) { \ 109 AVCODEC_LOGI(fmt, ##__VA_ARGS__); \ 110 } \ 111 } while (0) 112 113 #define EXPECT_AND_LOGD(cond, fmt, ...) \ 114 do { \ 115 if ((cond)) { \ 116 AVCODEC_LOGD(fmt, ##__VA_ARGS__); \ 117 } \ 118 } while (0) 119 120 #define EXPECT_AND_LOGE(cond, fmt, ...) \ 121 do { \ 122 if ((cond)) { \ 123 AVCODEC_LOGE(fmt, ##__VA_ARGS__); \ 124 } \ 125 } while (0) 126 127 #define CHECK_AND_RETURN_LOG(cond, fmt, ...) \ 128 do { \ 129 if (!(cond)) { \ 130 AVCODEC_LOGE(fmt, ##__VA_ARGS__); \ 131 return; \ 132 } \ 133 } while (0) 134 135 #define CHECK_AND_RETURN_LOG_LIMIT(cond, frequency, fmt, ...) \ 136 do { \ 137 if (!(cond)) { \ 138 AVCODEC_LOGE_LIMIT(frequency, fmt, ##__VA_ARGS__); \ 139 return; \ 140 } \ 141 } while (0) 142 143 #define CHECK_AND_BREAK_LOG(cond, fmt, ...) \ 144 if (1) { \ 145 if (!(cond)) { \ 146 AVCODEC_LOGW(fmt, ##__VA_ARGS__); \ 147 break; \ 148 } \ 149 } else void (0) 150 151 #define CHECK_AND_CONTINUE_LOG(cond, fmt, ...) \ 152 if (1) { \ 153 if (!(cond)) { \ 154 AVCODEC_LOGW(fmt, ##__VA_ARGS__); \ 155 continue; \ 156 } \ 157 } else void (0) 158 159 #define POINTER_MASK 0x00FFFFFF 160 #define FAKE_POINTER(addr) (POINTER_MASK & reinterpret_cast<uintptr_t>(addr)) 161 } // namespace MediaAVCodec 162 } // namespace OHOS 163 #endif // AVCODEC_LOG_H 164