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