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
16da853ecaSopenharmony_ci#include <avcodec_sysevent.h>
17da853ecaSopenharmony_ci#include <unistd.h>
18da853ecaSopenharmony_ci#include <unordered_map>
19da853ecaSopenharmony_ci#include "securec.h"
20da853ecaSopenharmony_ci#include "avcodec_log.h"
21da853ecaSopenharmony_ci#include "avcodec_errors.h"
22da853ecaSopenharmony_ci
23da853ecaSopenharmony_cinamespace {
24da853ecaSopenharmony_ciconstexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN_FRAMEWORK, "AVCodecDFX"};
25da853ecaSopenharmony_ciconstexpr char HISYSEVENT_DOMAIN_AVCODEC[] = "AV_CODEC";
26da853ecaSopenharmony_ci
27da853ecaSopenharmony_ciconst std::unordered_map<OHOS::MediaAVCodec::FaultType, std::string> FAULT_TYPE_TO_STRING = {
28da853ecaSopenharmony_ci    {OHOS::MediaAVCodec::FaultType::FAULT_TYPE_FREEZE,          "Freeze"},
29da853ecaSopenharmony_ci    {OHOS::MediaAVCodec::FaultType::FAULT_TYPE_CRASH,           "Crash"},
30da853ecaSopenharmony_ci    {OHOS::MediaAVCodec::FaultType::FAULT_TYPE_INNER_ERROR,     "Inner error"},
31da853ecaSopenharmony_ci};
32da853ecaSopenharmony_ci} // namespace
33da853ecaSopenharmony_ci
34da853ecaSopenharmony_cinamespace OHOS {
35da853ecaSopenharmony_cinamespace MediaAVCodec {
36da853ecaSopenharmony_civoid FaultEventWrite(FaultType faultType, const std::string& msg, const std::string& module)
37da853ecaSopenharmony_ci{
38da853ecaSopenharmony_ci    CHECK_AND_RETURN_LOG(faultType >= FaultType::FAULT_TYPE_FREEZE && faultType < FaultType::FAULT_TYPE_END,
39da853ecaSopenharmony_ci        "Invalid fault type: %{public}d", faultType);
40da853ecaSopenharmony_ci    HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "FAULT",
41da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
42da853ecaSopenharmony_ci                    "MODULE", module,
43da853ecaSopenharmony_ci                    "FAULTTYPE", FAULT_TYPE_TO_STRING.at(faultType),
44da853ecaSopenharmony_ci                    "MSG", msg);
45da853ecaSopenharmony_ci}
46da853ecaSopenharmony_ci
47da853ecaSopenharmony_civoid ServiceStartEventWrite(uint32_t useTime, const std::string& module)
48da853ecaSopenharmony_ci{
49da853ecaSopenharmony_ci    uint64_t useMemory = 5000;
50da853ecaSopenharmony_ci    HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "SERVICE_START_INFO",
51da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "MODULE", module.c_str(), "TIME", useTime,
52da853ecaSopenharmony_ci                    "MEMORY", useMemory);
53da853ecaSopenharmony_ci}
54da853ecaSopenharmony_ci
55da853ecaSopenharmony_civoid CodecStartEventWrite(CodecDfxInfo& codecDfxInfo)
56da853ecaSopenharmony_ci{
57da853ecaSopenharmony_ci    HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "CODEC_START_INFO",
58da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
59da853ecaSopenharmony_ci                    "CLIENT_PID",           codecDfxInfo.clientPid,
60da853ecaSopenharmony_ci                    "CLIENT_UID",           codecDfxInfo.clientUid,
61da853ecaSopenharmony_ci                    "CODEC_INSTANCE_ID",    codecDfxInfo.codecInstanceId,
62da853ecaSopenharmony_ci                    "CODEC_NAME",           codecDfxInfo.codecName,
63da853ecaSopenharmony_ci                    "CODEC_IS_VENDOR",      codecDfxInfo.codecIsVendor,
64da853ecaSopenharmony_ci                    "CODEC_MODE",           codecDfxInfo.codecMode,
65da853ecaSopenharmony_ci                    "ENCODER_BITRATE",      codecDfxInfo.encoderBitRate,
66da853ecaSopenharmony_ci                    "VIDEO_WIDTH",          codecDfxInfo.videoWidth,
67da853ecaSopenharmony_ci                    "VIDEO_HEIGHT",         codecDfxInfo.videoHeight,
68da853ecaSopenharmony_ci                    "VIDEO_FRAMERATE",      codecDfxInfo.videoFrameRate,
69da853ecaSopenharmony_ci                    "VIDEO_PIXEL_FORMAT",   codecDfxInfo.videoPixelFormat,
70da853ecaSopenharmony_ci                    "AUDIO_CHANNEL_COUNT",  codecDfxInfo.audioChannelCount,
71da853ecaSopenharmony_ci                    "AUDIO_SAMPLE_RATE",    codecDfxInfo.audioSampleRate);
72da853ecaSopenharmony_ci}
73da853ecaSopenharmony_ci
74da853ecaSopenharmony_civoid CodecStopEventWrite(pid_t clientPid, uid_t clientUid, int32_t codecInstanceId)
75da853ecaSopenharmony_ci{
76da853ecaSopenharmony_ci    HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "CODEC_STOP_INFO",
77da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
78da853ecaSopenharmony_ci                    "CLIENT_PID", clientPid, "CLIENT_UID", clientUid, "CODEC_INSTANCE_ID", codecInstanceId);
79da853ecaSopenharmony_ci}
80da853ecaSopenharmony_ci
81da853ecaSopenharmony_civoid DemuxerInitEventWrite(uint32_t downloadSize, std::string sourceType)
82da853ecaSopenharmony_ci{
83da853ecaSopenharmony_ci    HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "DEMUXER_INIT_INFO",
84da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
85da853ecaSopenharmony_ci                    "DOWNLOAD_SIZE", downloadSize, "SOURCE_TYPE", sourceType);
86da853ecaSopenharmony_ci}
87da853ecaSopenharmony_ci
88da853ecaSopenharmony_civoid FaultDemuxerEventWrite(DemuxerFaultInfo& demuxerFaultInfo)
89da853ecaSopenharmony_ci{
90da853ecaSopenharmony_ci    HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "DEMUXER_FAILURE",
91da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
92da853ecaSopenharmony_ci                    "APP_NAME",         demuxerFaultInfo.appName,
93da853ecaSopenharmony_ci                    "INSTANCE_ID",      demuxerFaultInfo.instanceId,
94da853ecaSopenharmony_ci                    "CALLER_TYPE",      demuxerFaultInfo.callerType,
95da853ecaSopenharmony_ci                    "SOURCE_TYPE",      demuxerFaultInfo.sourceType,
96da853ecaSopenharmony_ci                    "CONTAINER_FORMAT", demuxerFaultInfo.containerFormat,
97da853ecaSopenharmony_ci                    "STREAM_TYPE",      demuxerFaultInfo.streamType,
98da853ecaSopenharmony_ci                    "ERROR_MESG",       demuxerFaultInfo.errMsg);
99da853ecaSopenharmony_ci}
100da853ecaSopenharmony_ci
101da853ecaSopenharmony_civoid FaultAudioCodecEventWrite(AudioCodecFaultInfo& audioCodecFaultInfo)
102da853ecaSopenharmony_ci{
103da853ecaSopenharmony_ci    HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "AUDIO_CODEC_FAILURE",
104da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
105da853ecaSopenharmony_ci                    "APP_NAME",    audioCodecFaultInfo.appName,
106da853ecaSopenharmony_ci                    "INSTANCE_ID", audioCodecFaultInfo.instanceId,
107da853ecaSopenharmony_ci                    "CALLER_TYPE", audioCodecFaultInfo.callerType,
108da853ecaSopenharmony_ci                    "AUDIO_CODEC", audioCodecFaultInfo.audioCodec,
109da853ecaSopenharmony_ci                    "ERROR_MESG",  audioCodecFaultInfo.errMsg);
110da853ecaSopenharmony_ci}
111da853ecaSopenharmony_ci
112da853ecaSopenharmony_civoid FaultVideoCodecEventWrite(VideoCodecFaultInfo& videoCodecFaultInfo)
113da853ecaSopenharmony_ci{
114da853ecaSopenharmony_ci    HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "VIDEO_CODEC_FAILURE",
115da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
116da853ecaSopenharmony_ci                    "APP_NAME",    videoCodecFaultInfo.appName,
117da853ecaSopenharmony_ci                    "INSTANCE_ID", videoCodecFaultInfo.instanceId,
118da853ecaSopenharmony_ci                    "CALLER_TYPE", videoCodecFaultInfo.callerType,
119da853ecaSopenharmony_ci                    "VIDEO_CODEC", videoCodecFaultInfo.videoCodec,
120da853ecaSopenharmony_ci                    "ERROR_MESG",  videoCodecFaultInfo.errMsg);
121da853ecaSopenharmony_ci}
122da853ecaSopenharmony_ci
123da853ecaSopenharmony_civoid FaultMuxerEventWrite(MuxerFaultInfo& muxerFaultInfo)
124da853ecaSopenharmony_ci{
125da853ecaSopenharmony_ci    HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "MUXER_FAILURE",
126da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
127da853ecaSopenharmony_ci                    "APP_NAME",         muxerFaultInfo.appName,
128da853ecaSopenharmony_ci                    "INSTANCE_ID",      muxerFaultInfo.instanceId,
129da853ecaSopenharmony_ci                    "CALLER_TYPE",      muxerFaultInfo.callerType,
130da853ecaSopenharmony_ci                    "VIDEO_CODEC",      muxerFaultInfo.videoCodec,
131da853ecaSopenharmony_ci                    "AUDIO_CODEC",      muxerFaultInfo.audioCodec,
132da853ecaSopenharmony_ci                    "CONTAINER_FORMAT", muxerFaultInfo.containerFormat,
133da853ecaSopenharmony_ci                    "ERROR_MESG",       muxerFaultInfo.errMsg);
134da853ecaSopenharmony_ci}
135da853ecaSopenharmony_ci
136da853ecaSopenharmony_civoid FaultRecordAudioEventWrite(AudioSourceFaultInfo& audioSourceFaultInfo)
137da853ecaSopenharmony_ci{
138da853ecaSopenharmony_ci    HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "RECORD_AUDIO_FAILURE",
139da853ecaSopenharmony_ci                    OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
140da853ecaSopenharmony_ci                    "APP_NAME",          audioSourceFaultInfo.appName,
141da853ecaSopenharmony_ci                    "INSTANCE_ID",       audioSourceFaultInfo.instanceId,
142da853ecaSopenharmony_ci                    "AUDIO_SOURCE_TYPE", audioSourceFaultInfo.audioSourceType,
143da853ecaSopenharmony_ci                    "ERROR_MESG",        audioSourceFaultInfo.errMsg);
144da853ecaSopenharmony_ci}
145da853ecaSopenharmony_ci} // namespace MediaAVCodec
146da853ecaSopenharmony_ci} // namespace OHOS
147