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