• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2022 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 #ifndef HISTREAMER_PIPELINE_PLUGIN_CAP_DESC_H
17 #define HISTREAMER_PIPELINE_PLUGIN_CAP_DESC_H
18 #include <tuple>
19 #include "plugin/common/plugin_source_tags.h"
20 #include "plugin/common/plugin_video_tags.h"
21 
22 namespace OHOS {
23 namespace Media {
24 namespace Pipeline {
25 const Plugin::ValueType g_emptyString = std::string();
26 const Plugin::ValueType g_u8Def = (uint8_t)0;
27 const Plugin::ValueType g_u32Def = (uint32_t)0;
28 const Plugin::ValueType g_d32Def = (int32_t)0;
29 const Plugin::ValueType g_d64Def = (int64_t)0;
30 const Plugin::ValueType g_u64Def = (uint64_t)0;
31 const Plugin::ValueType g_doubleDef = (double)0.0;
32 const Plugin::ValueType g_seekableDef = Plugin::Seekable::INVALID;
33 const Plugin::ValueType g_srcInputTypedef = Plugin::SrcInputType::UNKNOWN;
34 const Plugin::ValueType g_unknown = nullptr;
35 const Plugin::ValueType g_vecBufDef = std::vector<uint8_t>();
36 const Plugin::ValueType g_mediaTypeDef = Plugin::MediaType::AUDIO;
37 const Plugin::ValueType g_channelLayoutDef = Plugin::AudioChannelLayout::MONO;
38 const Plugin::ValueType g_auSampleFmtDef = Plugin::AudioSampleFormat::U8;
39 const Plugin::ValueType g_aacProfileDef = Plugin::AudioAacProfile::LC;
40 const Plugin::ValueType g_aacStFmtDef = Plugin::AudioAacStreamFormat::RAW;
41 const Plugin::ValueType g_vdPixelFmtDef = Plugin::VideoPixelFormat::UNKNOWN;
42 const Plugin::ValueType g_vdBitStreamFmtDef = Plugin::VideoBitStreamFormat::UNKNOWN;
43 const Plugin::ValueType g_vdH264ProfileDef = Plugin::VideoH264Profile::BASELINE;
44 const Plugin::ValueType g_audioRenderInfoDef = Plugin::AudioRenderInfo {};
45 const Plugin::ValueType g_audioInterruptModeDef = Plugin::AudioInterruptMode::SHARE_MODE;
46 
47 // tuple is <tagName, default_val, typeName> default_val is used for type compare
48 const std::map<Plugin::Tag, std::tuple<const char*, const Plugin::ValueType&, const char*>> g_tagInfoMap = {
49     {Plugin::Tag::MIME, {"mime",                               g_emptyString,      "string"}},
50     {Plugin::Tag::TRACK_ID, {"track_id",                       g_u32Def,           "uint32_t"}},
51     {Plugin::Tag::REQUIRED_OUT_BUFFER_CNT, {"req_out_buf_cnt", g_u32Def,           "uint32_t"}},
52     {Plugin::Tag::BUFFER_ALLOCATOR, {"buf_allocator",          g_unknown,          "shared_ptr<Allocator>"}},
53     {Plugin::Tag::BUFFERING_SIZE, {"bufing_size",              g_u32Def,           "uint32_t"}},
54     {Plugin::Tag::WATERLINE_HIGH, {"waterline_h",              g_u32Def,           "uint32_t"}},
55     {Plugin::Tag::WATERLINE_LOW, {"waterline_l",               g_u32Def,           "uint32_t"}},
56     {Plugin::Tag::SRC_INPUT_TYPE, {"src_input_typ",            g_srcInputTypedef,  "SrcInputType"}},
57     {Plugin::Tag::MEDIA_TYPE, {"media_type",                   g_mediaTypeDef,      "MediaType"}},
58     {Plugin::Tag::MEDIA_TITLE, {"title",                       g_emptyString,      "string"}},
59     {Plugin::Tag::MEDIA_ARTIST, {"artist",                     g_emptyString,      "string"}},
60     {Plugin::Tag::MEDIA_LYRICIST, {"lyricist",                 g_emptyString,      "string"}},
61     {Plugin::Tag::MEDIA_ALBUM, {"album",                       g_emptyString,      "string"}},
62     {Plugin::Tag::MEDIA_ALBUM_ARTIST, {"album_artist",         g_emptyString,      "string"}},
63     {Plugin::Tag::MEDIA_DATE, {"date",                         g_emptyString,      "string"}},
64     {Plugin::Tag::MEDIA_COMMENT, {"comment",                   g_emptyString,      "string"}},
65     {Plugin::Tag::MEDIA_GENRE, {"genre",                       g_emptyString,      "string"}},
66     {Plugin::Tag::MEDIA_COPYRIGHT, {"copyright",               g_emptyString,      "string"}},
67     {Plugin::Tag::MEDIA_LANGUAGE, {"lang",                     g_emptyString,      "string"}},
68     {Plugin::Tag::MEDIA_DESCRIPTION, {"media_desc",            g_emptyString,      "string"}},
69     {Plugin::Tag::MEDIA_LYRICS, {"lyrics",                     g_emptyString,      "string"}},
70     {Plugin::Tag::MEDIA_DURATION, {"duration",                 g_d64Def,           "int64_t"}},
71     {Plugin::Tag::MEDIA_FILE_SIZE, {"file_size",               g_u64Def,           "uint64_t"}},
72     {Plugin::Tag::MEDIA_SEEKABLE, {"media_seekable",           g_seekableDef,      "Seekable"}},
73     {Plugin::Tag::MEDIA_BITRATE, {"bit_rate",                  g_d64Def,           "int64_t"}},
74     {Plugin::Tag::MEDIA_FILE_EXTENSION, {"file_ext",           g_emptyString,      "string"}},
75     {Plugin::Tag::MEDIA_CODEC_CONFIG, {"codec_config",         g_vecBufDef,        "std::vector<uint8_t>"}},
76     {Plugin::Tag::MEDIA_POSITION, {"position",                 g_u64Def,           "uint64_t"}},
77     {Plugin::Tag::AUDIO_CHANNELS, {"channels",                 g_u32Def,           "uint32_t"}},
78     {Plugin::Tag::AUDIO_CHANNEL_LAYOUT, {"channel_layout",     g_channelLayoutDef, "AudioChannelLayout"}},
79     {Plugin::Tag::AUDIO_SAMPLE_RATE, {"sample_rate",           g_u32Def,           "uint32_t"}},
80     {Plugin::Tag::AUDIO_SAMPLE_FORMAT, {"sample_fmt",          g_auSampleFmtDef,   "AudioSampleFormat"}},
81     {Plugin::Tag::AUDIO_SAMPLE_PER_FRAME, {"sample_per_frame", g_u32Def,           "uint32_t"}},
82     {Plugin::Tag::AUDIO_OUTPUT_CHANNELS, {"output_channels",   g_u32Def,           "uint32_t"}},
83     {Plugin::Tag::AUDIO_OUTPUT_CHANNEL_LAYOUT, {"output_channel_layout", g_channelLayoutDef, "AudioChannelLayout"}},
84     {Plugin::Tag::AUDIO_MPEG_VERSION, {"ad_mpeg_ver",          g_u32Def,           "uint32_t"}},
85     {Plugin::Tag::AUDIO_MPEG_LAYER, {"ad_mpeg_layer",          g_u32Def,           "uint32_t"}},
86     {Plugin::Tag::AUDIO_AAC_PROFILE, {"aac_profile",           g_aacProfileDef,    "AudioAacProfile"}},
87     {Plugin::Tag::AUDIO_AAC_LEVEL, {"aac_level",               g_u32Def,           "uint32_t"}},
88     {Plugin::Tag::AUDIO_AAC_STREAM_FORMAT, {"aac_stm_fmt",     g_aacStFmtDef,      "AudioAacStreamFormat"}},
89     {Plugin::Tag::VIDEO_WIDTH, {"vd_w",                        g_u32Def,           "uint32_t"}},
90     {Plugin::Tag::VIDEO_HEIGHT, {"vd_h",                       g_u32Def,           "uint32_t"}},
91     {Plugin::Tag::VIDEO_PIXEL_FORMAT, {"pixel_fmt",            g_vdPixelFmtDef,    "VideoPixelFormat"}},
92     {Plugin::Tag::VIDEO_FRAME_RATE, {"frm_rate",               g_u32Def,           "uint32_t"}},
93     {Plugin::Tag::VIDEO_SURFACE, {"surface",                   g_unknown,          "Surface"}},
94     {Plugin::Tag::VIDEO_MAX_SURFACE_NUM, {"surface_num",       g_u32Def,           "uint32_t"}},
95     {Plugin::Tag::VIDEO_CAPTURE_RATE, {"capture_rate",         g_doubleDef,        "double"}},
96     {Plugin::Tag::VIDEO_BIT_STREAM_FORMAT, {"vd_bit_stream_fmt", g_vdBitStreamFmtDef, "VideoBitStreamFormat"}},
97     {Plugin::Tag::BITS_PER_CODED_SAMPLE, {"bits_per_coded_sample", g_u32Def,       "uint32_t"}},
98     {Plugin::Tag::MEDIA_START_TIME, {"med_start_time",         g_d64Def,           "int64_t"}},
99     {Plugin::Tag::VIDEO_H264_PROFILE, {"h264_profile",         g_vdH264ProfileDef, "VideoH264Profile"}},
100     {Plugin::Tag::VIDEO_H264_LEVEL, {"vd_level",               g_u32Def,           "uint32_t"}},
101     {Plugin::Tag::APP_TOKEN_ID, {"apptoken_id",                g_u32Def,           "uint32_t"}},
102     {Plugin::Tag::APP_UID, {"app_uid",                         g_d32Def,           "int32_t"}},
103     {Plugin::Tag::APP_PID, {"app_pid",                         g_d32Def,           "int32_t"}},
104     {Plugin::Tag::AUDIO_RENDER_INFO, {"audio_render_info",     g_audioRenderInfoDef, "AudioRenderInfo"}},
105     {Plugin::Tag::AUDIO_INTERRUPT_MODE, {"audio_interrupt_mode", g_audioInterruptModeDef, "AudioInterruptMode"}},
106 };
107 
108 const std::map<Plugin::AudioSampleFormat, const char*> g_auSampleFmtStrMap = {
109     {Plugin::AudioSampleFormat::S8, "S8"},
110     {Plugin::AudioSampleFormat::U8, "U8"},
111     {Plugin::AudioSampleFormat::S8P, "S8P"},
112     {Plugin::AudioSampleFormat::U8P, "U8P"},
113     {Plugin::AudioSampleFormat::S16, "S16"},
114     {Plugin::AudioSampleFormat::U16, "U16"},
115     {Plugin::AudioSampleFormat::S16P, "S16P"},
116     {Plugin::AudioSampleFormat::U16P, "U16P"},
117     {Plugin::AudioSampleFormat::S24, "S24"},
118     {Plugin::AudioSampleFormat::U24, "U24"},
119     {Plugin::AudioSampleFormat::S24P, "S24P"},
120     {Plugin::AudioSampleFormat::U24P, "U24P"},
121     {Plugin::AudioSampleFormat::S32, "S32"},
122     {Plugin::AudioSampleFormat::U32, "U32"},
123     {Plugin::AudioSampleFormat::S32P, "S32P"},
124     {Plugin::AudioSampleFormat::U32P, "U32P"},
125     {Plugin::AudioSampleFormat::S64, "S64"},
126     {Plugin::AudioSampleFormat::U64, "U64"},
127     {Plugin::AudioSampleFormat::S64P, "S64P"},
128     {Plugin::AudioSampleFormat::U64P, "U64P"},
129     {Plugin::AudioSampleFormat::F32, "F32"},
130     {Plugin::AudioSampleFormat::F32P, "F32P"},
131     {Plugin::AudioSampleFormat::F64, "F64"},
132     {Plugin::AudioSampleFormat::F64P, "F64P"},
133 };
134 
135 const std::map<Plugin::AudioChannelLayout, const char*> g_auChannelLayoutStrMap = {
136     {Plugin::AudioChannelLayout::UNKNOWN, "UNKNOWN"},
137     {Plugin::AudioChannelLayout::MONO, "MONO"},
138     {Plugin::AudioChannelLayout::STEREO, "STEREO"},
139     {Plugin::AudioChannelLayout::CH_2POINT1, "CH_2POINT1"},
140     {Plugin::AudioChannelLayout::CH_2_1, "CH_2_1"},
141     {Plugin::AudioChannelLayout::SURROUND, "SURROUND"},
142     {Plugin::AudioChannelLayout::CH_3POINT1, "CH_3POINT1"},
143     {Plugin::AudioChannelLayout::CH_4POINT0, "CH_4POINT0"},
144     {Plugin::AudioChannelLayout::CH_4POINT1, "CH_4POINT1"},
145     {Plugin::AudioChannelLayout::CH_2_2, "CH_2_2"},
146     {Plugin::AudioChannelLayout::QUAD, "QUAD"},
147     {Plugin::AudioChannelLayout::CH_5POINT0, "CH_5POINT0"},
148     {Plugin::AudioChannelLayout::CH_5POINT1, "CH_5POINT1"},
149     {Plugin::AudioChannelLayout::CH_5POINT0_BACK, "CH_5POINT0_BACK"},
150     {Plugin::AudioChannelLayout::CH_5POINT1_BACK, "CH_5POINT1_BACK"},
151     {Plugin::AudioChannelLayout::CH_6POINT0, "CH_6POINT0"},
152     {Plugin::AudioChannelLayout::CH_6POINT0_FRONT, "CH_6POINT0_FRONT"},
153     {Plugin::AudioChannelLayout::HEXAGONAL, "HEXAGONAL"},
154     {Plugin::AudioChannelLayout::CH_6POINT1, "CH_6POINT1"},
155     {Plugin::AudioChannelLayout::CH_6POINT1_BACK, "CH_6POINT1_BACK"},
156     {Plugin::AudioChannelLayout::CH_6POINT1_FRONT, "CH_6POINT1_FRONT"},
157     {Plugin::AudioChannelLayout::CH_7POINT0, "CH_7POINT0"},
158     {Plugin::AudioChannelLayout::CH_7POINT0_FRONT, "CH_7POINT0_FRONT"},
159     {Plugin::AudioChannelLayout::CH_7POINT1, "CH_7POINT1"},
160     {Plugin::AudioChannelLayout::CH_7POINT1_WIDE, "CH_7POINT1_WIDE"},
161     {Plugin::AudioChannelLayout::CH_7POINT1_WIDE_BACK, "CH_7POINT1_WIDE_BACK"},
162 #ifdef AVS3DA_SUPPORT
163     {Plugin::AudioChannelLayout::CH_5POINT1POINT2, "CH_5POINT1POINT2"},
164     {Plugin::AudioChannelLayout::CH_5POINT1POINT4, "CH_5POINT1POINT4"},
165     {Plugin::AudioChannelLayout::CH_7POINT1POINT2, "CH_7POINT1POINT2"},
166     {Plugin::AudioChannelLayout::CH_7POINT1POINT4, "CH_7POINT1POINT4"},
167     {Plugin::AudioChannelLayout::CH_9POINT1POINT4, "CH_9POINT1POINT4"},
168     {Plugin::AudioChannelLayout::CH_9POINT1POINT6, "CH_9POINT1POINT6"},
169     {Plugin::AudioChannelLayout::CH_10POINT2, "CH_10POINT2"},
170     {Plugin::AudioChannelLayout::CH_22POINT2, "CH_22POINT2"},
171 #endif
172     {Plugin::AudioChannelLayout::OCTAGONAL, "OCTAGONAL"},
173     {Plugin::AudioChannelLayout::HEXADECAGONAL, "HEXADECAGONAL"},
174     {Plugin::AudioChannelLayout::STEREO_DOWNMIX, "STEREO_DOWNMIX"},
175 };
176 
177 const std::map<Plugin::VideoPixelFormat, const char*> g_videoPixelFormatStrMap = {
178     {Plugin::VideoPixelFormat::UNKNOWN, "UNKNOWN"},
179     {Plugin::VideoPixelFormat::YUV410P, "YUV410P"},
180     {Plugin::VideoPixelFormat::YUV411P, "YUV411P"},
181     {Plugin::VideoPixelFormat::YUV420P, "YUV420P"},
182     {Plugin::VideoPixelFormat::NV12, "NV12"},
183     {Plugin::VideoPixelFormat::NV21, "NV21"},
184     {Plugin::VideoPixelFormat::YUYV422, "YUYV422"},
185     {Plugin::VideoPixelFormat::YUV422P, "YUV422P"},
186     {Plugin::VideoPixelFormat::YUV444P, "YUV444P"},
187     {Plugin::VideoPixelFormat::RGBA, "RGBA"},
188     {Plugin::VideoPixelFormat::ARGB, "ARGB"},
189     {Plugin::VideoPixelFormat::ABGR, "ABGR"},
190     {Plugin::VideoPixelFormat::BGRA, "BGRA"},
191     {Plugin::VideoPixelFormat::RGB24, "RGB24"},
192     {Plugin::VideoPixelFormat::BGR24, "BGR24"},
193     {Plugin::VideoPixelFormat::PAL8, "PAL8"},
194     {Plugin::VideoPixelFormat::GRAY8, "GRAY8"},
195     {Plugin::VideoPixelFormat::MONOWHITE, "MONOWHITE"},
196     {Plugin::VideoPixelFormat::MONOBLACK, "MONOBLACK"},
197     {Plugin::VideoPixelFormat::YUVJ420P, "YUVJ420P"},
198     {Plugin::VideoPixelFormat::YUVJ422P, "YUVJ422P"},
199     {Plugin::VideoPixelFormat::YUVJ444P, "YUVJ444P"},
200 };
201 
202 const std::map<Plugin::VideoBitStreamFormat, const char*> g_vdBitStreamFormatStrMap = {
203     {Plugin::VideoBitStreamFormat::UNKNOWN, "UNKNOWN"},
204     {Plugin::VideoBitStreamFormat::AVC1, "AVC1"},
205     {Plugin::VideoBitStreamFormat::HEVC, "HEVC"},
206     {Plugin::VideoBitStreamFormat::ANNEXB, "ANNEXB"},
207 };
208 
209 const std::map<Plugin::AudioAacProfile, const char*> g_auAacProfileNameStrMap = {
210     {Plugin::AudioAacProfile::NONE, "NONE"},
211     {Plugin::AudioAacProfile::MAIN, "MAIN"},
212     {Plugin::AudioAacProfile::LC, "LC"},
213     {Plugin::AudioAacProfile::SSR, "SSR"},
214     {Plugin::AudioAacProfile::LTP, "LTP"},
215     {Plugin::AudioAacProfile::HE, "HE"},
216     {Plugin::AudioAacProfile::SCALABLE, "SCALABLE"},
217     {Plugin::AudioAacProfile::ERLC, "ERLC"},
218     {Plugin::AudioAacProfile::ER_SCALABLE, "ER_SCALABLE"},
219     {Plugin::AudioAacProfile::LD, "LD"},
220     {Plugin::AudioAacProfile::HE_PS, "HE_PS"},
221     {Plugin::AudioAacProfile::ELD, "ELD"},
222     {Plugin::AudioAacProfile::XHE, "XHE"},
223 };
224 
225 const std::map<Plugin::AudioAacStreamFormat, const char*> g_auAacStreamFormatNameStrMap = {
226     {Plugin::AudioAacStreamFormat::MP2ADTS, "MP2ADTS"},
227     {Plugin::AudioAacStreamFormat::MP4ADTS, "MP4ADTS"},
228     {Plugin::AudioAacStreamFormat::MP4LOAS, "MP4LOAS"},
229     {Plugin::AudioAacStreamFormat::MP4LATM, "MP4LATM"},
230     {Plugin::AudioAacStreamFormat::ADIF, "ADIF"},
231     {Plugin::AudioAacStreamFormat::MP4FF, "MP4FF"},
232     {Plugin::AudioAacStreamFormat::RAW, "RAW"},
233 };
234 
HasTagInfo(Plugin::Tag tag)235 inline bool HasTagInfo(Plugin::Tag tag)
236 {
237     return g_tagInfoMap.count(tag) != 0;
238 }
239 
GetTagStrName(Plugin::Tag tag)240 inline const char* GetTagStrName(Plugin::Tag tag)
241 {
242     if (!HasTagInfo(tag)) {
243         return "null";
244     }
245     return std::get<0>(g_tagInfoMap.at(tag));
246 }
247 
GetTagTypeStrName(Plugin::Tag tag)248 inline const char* GetTagTypeStrName(Plugin::Tag tag)
249 {
250     if (!HasTagInfo(tag)) {
251         return "null";
252     }
253     return std::get<2>(g_tagInfoMap.at(tag)); // secondary parameter 2
254 }
255 
GetTagDefValue(Plugin::Tag tag)256 inline const Plugin::ValueType* GetTagDefValue(Plugin::Tag tag)
257 {
258     if (!HasTagInfo(tag)) {
259         return nullptr;
260     }
261     return &std::get<1>(g_tagInfoMap.at(tag));
262 }
263 
HasAudSampleFmtInfo(Plugin::AudioSampleFormat fmt)264 inline bool HasAudSampleFmtInfo(Plugin::AudioSampleFormat fmt)
265 {
266     return g_auSampleFmtStrMap.count(fmt) != 0;
267 }
268 
GetAudSampleFmtNameStr(Plugin::AudioSampleFormat fmt)269 inline const char* GetAudSampleFmtNameStr(Plugin::AudioSampleFormat fmt)
270 {
271     if (!HasAudSampleFmtInfo(fmt)) {
272         return "null";
273     }
274     return g_auSampleFmtStrMap.at(fmt);
275 }
276 
HasAudChanLyInfo(Plugin::AudioChannelLayout layout)277 inline bool HasAudChanLyInfo(Plugin::AudioChannelLayout layout)
278 {
279     return g_auChannelLayoutStrMap.count(layout) != 0;
280 }
281 
GetAudChanLyNameStr(Plugin::AudioChannelLayout layout)282 inline const char* GetAudChanLyNameStr(Plugin::AudioChannelLayout layout)
283 {
284     if (!HasAudChanLyInfo(layout)) {
285         return "null";
286     }
287     return g_auChannelLayoutStrMap.at(layout);
288 }
289 
HasVideoPixelFormatNameStr(Plugin::VideoPixelFormat pixelFormat)290 inline bool HasVideoPixelFormatNameStr(Plugin::VideoPixelFormat pixelFormat)
291 {
292     return g_videoPixelFormatStrMap.count(pixelFormat) != 0;
293 }
294 
GetVideoPixelFormatNameStr(Plugin::VideoPixelFormat pixelFormat)295 inline const char* GetVideoPixelFormatNameStr(Plugin::VideoPixelFormat pixelFormat)
296 {
297     if (!HasVideoPixelFormatNameStr(pixelFormat)) {
298         return "null";
299     }
300     return g_videoPixelFormatStrMap.at(pixelFormat);
301 }
302 
HasAuAacProfileNameStr(Plugin::AudioAacProfile aacProfile)303 inline bool HasAuAacProfileNameStr(Plugin::AudioAacProfile aacProfile)
304 {
305     return g_auAacProfileNameStrMap.count(aacProfile) != 0;
306 }
307 
GetAuAacProfileNameStr(Plugin::AudioAacProfile aacProfile)308 inline const char* GetAuAacProfileNameStr(Plugin::AudioAacProfile aacProfile)
309 {
310     if (!HasAuAacProfileNameStr(aacProfile)) {
311         return "null";
312     }
313     return g_auAacProfileNameStrMap.at(aacProfile);
314 }
315 
HasAacStreamFormatNameStr(Plugin::AudioAacStreamFormat aacStreamFormat)316 inline bool HasAacStreamFormatNameStr(Plugin::AudioAacStreamFormat aacStreamFormat)
317 {
318     return g_auAacStreamFormatNameStrMap.count(aacStreamFormat) != 0;
319 }
320 
GetAuAacStreamFormatNameStr(Plugin::AudioAacStreamFormat aacStreamFormat)321 inline const char* GetAuAacStreamFormatNameStr(Plugin::AudioAacStreamFormat aacStreamFormat)
322 {
323     if (!HasAacStreamFormatNameStr(aacStreamFormat)) {
324         return "null";
325     }
326     return g_auAacStreamFormatNameStrMap.at(aacStreamFormat);
327 }
328 
Tag2String(const Plugin::Tag tag)329 inline const char* Tag2String(const Plugin::Tag tag)
330 {
331     auto mapIte = g_tagInfoMap.find(tag);
332     if (mapIte == g_tagInfoMap.end()) {
333         return "NULL";
334     }
335     return std::get<0>(mapIte->second);
336 }
337 } // Pipeline
338 } // Media
339 } // OHOS
340 #endif // HISTREAMER_PIPELINE_PLUGIN_CAP_DESC_H
341