• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 
16 #define HST_LOG_TAG "DemuxerLogCompressor"
17 
18 #include <unordered_map>
19 #include <sstream>
20 #include "meta/meta_key.h"
21 #include "meta/meta.h"
22 #include "common/log.h"
23 #include "meta/format.h"
24 #include "demuxer_log_compressor.h"
25 #include "ffmpeg_format_helper.h"
26 
27 namespace {
28 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, LOG_DOMAIN_DEMUXER, "DemuxerLogCompressor" };
29 }
30 
31 namespace OHOS {
32 namespace Media {
33 namespace Plugins {
34 namespace Ffmpeg {
35 static std::unordered_map<TagType, std::string> g_formatToIndex = {
36     {Tag::AUDIO_AAC_IS_ADTS,           "adts"},
37     {Tag::AUDIO_BITS_PER_CODED_SAMPLE, "bitsPerCodedSmp"},
38     {Tag::AUDIO_BITS_PER_RAW_SAMPLE,   "bitsPerRawSmp"},
39     {Tag::AUDIO_CHANNEL_COUNT,         "channelCnt"},
40     {Tag::AUDIO_CHANNEL_LAYOUT,        "channelLayout"},
41     {Tag::AUDIO_OUTPUT_CHANNELS,       "outChannelCnt"},
42     {Tag::AUDIO_OUTPUT_CHANNEL_LAYOUT, "outChannelLayout"},
43     {Tag::AUDIO_SAMPLE_FORMAT,         "smpFmt"},
44     {Tag::AUDIO_SAMPLE_PER_FRAME,      "smpFrm"},
45     {Tag::AUDIO_SAMPLE_RATE,           "smpRate"},
46     {Tag::MEDIA_ALBUM,                 "album"},
47     {Tag::MEDIA_ALBUM_ARTIST,          "albumArt"},
48     {Tag::MEDIA_ARTIST,                "art"},
49     {Tag::MEDIA_AUTHOR,                "auth"},
50     {Tag::MEDIA_BITRATE,               "bitRate"},
51     {Tag::MEDIA_CODEC_CONFIG,          "csd"},
52     {Tag::MEDIA_COMMENT,               "comment"},
53     {Tag::MEDIA_COMPOSER,              "composer"},
54     {Tag::MEDIA_CONTAINER_START_TIME,  "containStartTime"},
55     {Tag::MEDIA_COPYRIGHT,             "copyright"},
56     {Tag::MEDIA_COVER,                 "cover"},
57     {Tag::MEDIA_CREATION_TIME,         "createTime"},
58     {Tag::MEDIA_DATE,                  "date"},
59     {Tag::MEDIA_DESCRIPTION,           "desc"},
60     {Tag::MEDIA_DURATION,              "duration"},
61     {Tag::MEDIA_FILE_TYPE,             "fileType"},
62     {Tag::MEDIA_GENRE,                 "gnre"},
63     {Tag::MEDIA_HAS_AUDIO,             "hasAud"},
64     {Tag::MEDIA_HAS_SUBTITLE,          "hasSub"},
65     {Tag::MEDIA_HAS_TIMEDMETA,         "hasTimed"},
66     {Tag::MEDIA_HAS_VIDEO,             "hasVid"},
67     {Tag::MEDIA_LANGUAGE,              "lang"},
68     {Tag::MEDIA_LATITUDE,              "latitude"},
69     {Tag::MEDIA_LEVEL,                 "level"},
70     {Tag::MEDIA_LONGITUDE,             "longitude"},
71     {Tag::MEDIA_LYRICS,                "lyrics"},
72     {Tag::MEDIA_PROFILE,               "profile"},
73     {Tag::MEDIA_START_TIME,            "trackStartTime"},
74     {Tag::MEDIA_TITLE,                 "title"},
75     {Tag::MEDIA_TRACK_COUNT,           "trackCnt"},
76     {Tag::MEDIA_TYPE,                  "trackType"},
77     {Tag::MIME_TYPE,                   "mime"},
78     {Tag::TIMED_METADATA_KEY,          "metaKey"},
79     {Tag::TIMED_METADATA_SRC_TRACK,    "metaSrcTrack"},
80     {Tag::VIDEO_CHROMA_LOCATION,       "chromaLoc"},
81     {Tag::VIDEO_COLOR_MATRIX_COEFF,    "colorMatrix"},
82     {Tag::VIDEO_COLOR_PRIMARIES,       "colorPri"},
83     {Tag::VIDEO_COLOR_RANGE,           "colorRange"},
84     {Tag::VIDEO_COLOR_TRC,             "colorTrc"},
85     {Tag::VIDEO_DELAY,                 "delay"},
86     {Tag::VIDEO_FRAME_RATE,            "frmRate"},
87     {Tag::VIDEO_H265_LEVEL,            "265level"},
88     {Tag::VIDEO_H265_PROFILE,          "265profile"},
89     {Tag::VIDEO_HEIGHT,                "h"},
90     {Tag::VIDEO_IS_HDR_VIVID,          "hdrVivid"},
91     {Tag::VIDEO_ORIENTATION_TYPE,      "orient"},
92     {Tag::VIDEO_ROTATION,              "rotate"},
93     {Tag::VIDEO_SAR,                   "sar"},
94     {Tag::VIDEO_WIDTH,                 "w"},
95 };
96 
FormatTagSerialize(Format & format)97 std::string DemuxerLogCompressor::FormatTagSerialize(Format& format)
98 {
99     std::stringstream dumpStr;
100     auto meta = format.GetMeta();
101     for (auto iter = meta->begin(); iter != meta->end(); ++iter) {
102         if (g_formatToIndex.find(iter->first) == g_formatToIndex.end()) {
103             dumpStr << iter->first << "=" << AnyCast<std::string>(iter->second) << "|";
104             continue;
105         }
106         switch (format.GetValueType(iter->first)) {
107             case FORMAT_TYPE_INT32:
108                 dumpStr << g_formatToIndex[iter->first] << "=" << std::to_string(AnyCast<int32_t>(iter->second)) << "|";
109                 break;
110             case FORMAT_TYPE_INT64:
111                 dumpStr << g_formatToIndex[iter->first] << "=" << std::to_string(AnyCast<int64_t>(iter->second)) << "|";
112                 break;
113             case FORMAT_TYPE_FLOAT:
114                 dumpStr << g_formatToIndex[iter->first] << "=" << std::to_string(AnyCast<float>(iter->second)) << "|";
115                 break;
116             case FORMAT_TYPE_DOUBLE:
117                 dumpStr << g_formatToIndex[iter->first] << "=" << std::to_string(AnyCast<double>(iter->second)) << "|";
118                 break;
119             case FORMAT_TYPE_STRING:
120                 dumpStr << g_formatToIndex[iter->first] << "=" << AnyCast<std::string>(iter->second) << "|";
121                 break;
122             case FORMAT_TYPE_ADDR: {
123                 Any *value = const_cast<Any *>(&(iter->second));
124                 if (AnyCast<std::vector<uint8_t>>(value) != nullptr) {
125                     dumpStr << g_formatToIndex[iter->first] << ", size="
126                             << (AnyCast<std::vector<uint8_t>>(value))->size() << "|";
127                 }
128                 break;
129             }
130             default:
131                 MEDIA_LOG_E("Stringify failed, Key " PUBLIC_LOG_S, iter->first.c_str());
132         }
133     }
134     return dumpStr.str();
135 }
136 
StringifyMeta(Meta meta,int32_t trackIndex)137 void DemuxerLogCompressor::StringifyMeta(Meta meta, int32_t trackIndex)
138 {
139     OHOS::Media::Format format;
140     for (TagType key: g_supportSourceFormat) {
141         if (meta.Find(std::string(key)) != meta.end()) {
142             meta.SetData(std::string(key), "*");
143         }
144     }
145     if (meta.Find(std::string(Tag::MEDIA_CONTAINER_START_TIME)) != meta.end()) {
146         meta.SetData(std::string(Tag::MEDIA_CONTAINER_START_TIME), "*");
147     }
148     if (meta.Find(std::string(Tag::MEDIA_START_TIME)) != meta.end()) {
149         meta.SetData(std::string(Tag::MEDIA_START_TIME), "*");
150     }
151     if (meta.Find(std::string(Tag::MEDIA_LATITUDE)) != meta.end()) {
152         meta.SetData(std::string(Tag::MEDIA_LATITUDE), "*");
153     }
154     if (meta.Find(std::string(Tag::MEDIA_LONGITUDE)) != meta.end()) {
155         meta.SetData(std::string(Tag::MEDIA_LONGITUDE), "*");
156     }
157     if (meta.Find(std::string(Tag::TIMED_METADATA_KEY)) != meta.end()) {
158         meta.SetData(std::string(Tag::TIMED_METADATA_KEY), "*");
159     }
160     if (meta.Find(std::string(Tag::TIMED_METADATA_SRC_TRACK)) != meta.end()) {
161         meta.SetData(std::string(Tag::TIMED_METADATA_SRC_TRACK), "*");
162     }
163     format.SetMeta(std::make_shared<Meta>(meta));
164     if (trackIndex < 0) {
165         MEDIA_LOG_I("[source]: " PUBLIC_LOG_S, FormatTagSerialize(format).c_str());
166     } else {
167         MEDIA_LOG_I("[track " PUBLIC_LOG_D32 "]: " PUBLIC_LOG_S, trackIndex, FormatTagSerialize(format).c_str());
168     }
169 }
170 } // namespace Ffmpeg
171 } // namespace Plugins
172 } // namespace Media
173 } // namespace OHOS