• 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_u32Def = (uint32_t)0;
27 const Plugin::ValueType g_d64Def = (int64_t)0;
28 const Plugin::ValueType g_u64Def = (uint64_t)0;
29 const Plugin::ValueType g_srcInputTypedef = Plugin::SrcInputType::UNKNOWN;
30 const Plugin::ValueType g_unknown = nullptr;
31 const Plugin::ValueType g_vecBufDef = std::vector<uint8_t>();
32 const Plugin::ValueType g_channelLayoutDef = Plugin::AudioChannelLayout::MONO;
33 const Plugin::ValueType g_auSampleFmtDef = Plugin::AudioSampleFormat::U8;
34 const Plugin::ValueType g_aacProfileDef = Plugin::AudioAacProfile::LC;
35 const Plugin::ValueType g_aacStFmtDef = Plugin::AudioAacStreamFormat::RAW;
36 const Plugin::ValueType g_vdPixelFmtDef = Plugin::VideoPixelFormat::UNKNOWN;
37 
38 // tuple is <tagName, default_val, typeName> default_val is used for type compare
39 const std::map<Plugin::Tag, std::tuple<const char*, const Plugin::ValueType&, const char*>> g_tagInfoMap = {
40     {Plugin::Tag::MIME, {"mime",                               g_emptyString,      "string"}},
41     {Plugin::Tag::TRACK_ID, {"track_id",                       g_u32Def,           "uin32_t"}},
42     {Plugin::Tag::REQUIRED_OUT_BUFFER_CNT, {"req_out_buf_cnt", g_u32Def,           "uin32_t"}},
43     {Plugin::Tag::BUFFER_ALLOCATOR, {"buf_allocator",          g_unknown,          "shared_ptr<Allocator>"}},
44     {Plugin::Tag::BUFFERING_SIZE, {"bufing_size",              g_u32Def,           "uin32_t"}},
45     {Plugin::Tag::WATERLINE_HIGH, {"waterline_h",              g_u32Def,           "uint32_t"}},
46     {Plugin::Tag::WATERLINE_LOW, {"waterline_l",               g_u32Def,           "uint32_t"}},
47     {Plugin::Tag::SRC_INPUT_TYPE, {"src_input_typ",            g_srcInputTypedef,  "SrcInputType"}},
48     {Plugin::Tag::MEDIA_TITLE, {"title",                       g_emptyString,      "string"}},
49     {Plugin::Tag::MEDIA_ARTIST, {"artist",                     g_emptyString,      "string"}},
50     {Plugin::Tag::MEDIA_LYRICIST, {"lyricist",                 g_emptyString,      "string"}},
51     {Plugin::Tag::MEDIA_ALBUM, {"album",                       g_emptyString,      "string"}},
52     {Plugin::Tag::MEDIA_ALBUM_ARTIST, {"album_artist",         g_emptyString,      "string"}},
53     {Plugin::Tag::MEDIA_DATE, {"date",                         g_emptyString,      "string"}},
54     {Plugin::Tag::MEDIA_COMMENT, {"comment",                   g_emptyString,      "string"}},
55     {Plugin::Tag::MEDIA_GENRE, {"genre",                       g_emptyString,      "string"}},
56     {Plugin::Tag::MEDIA_COPYRIGHT, {"copyright",               g_emptyString,      "string"}},
57     {Plugin::Tag::MEDIA_LANGUAGE, {"lang",                     g_emptyString,      "string"}},
58     {Plugin::Tag::MEDIA_DESCRIPTION, {"media_desc",            g_emptyString,      "string"}},
59     {Plugin::Tag::MEDIA_LYRICS, {"lyrics",                     g_emptyString,      "string"}},
60     {Plugin::Tag::MEDIA_DURATION, {"duration",                 g_d64Def,           "int64_t"}},
61     {Plugin::Tag::MEDIA_FILE_SIZE, {"file_size",               g_u64Def,           "uint64_t"}},
62     {Plugin::Tag::MEDIA_BITRATE, {"bit_rate",                  g_d64Def,           "int64_t"}},
63     {Plugin::Tag::MEDIA_FILE_EXTENSION, {"file_ext",           g_emptyString,      "string"}},
64     {Plugin::Tag::MEDIA_CODEC_CONFIG, {"codec_config",         g_vecBufDef,        "std::vector<uint8_t>"}},
65     {Plugin::Tag::MEDIA_POSITION, {"position",                 g_u64Def,           "uint64_t"}},
66     {Plugin::Tag::AUDIO_CHANNELS, {"channel",                  g_u32Def,           "uint32_t"}},
67     {Plugin::Tag::AUDIO_CHANNEL_LAYOUT, {"channel_layout",     g_channelLayoutDef, "AudioChannelLayout"}},
68     {Plugin::Tag::AUDIO_SAMPLE_RATE, {"sample_rate",           g_u32Def,           "uint32_t"}},
69     {Plugin::Tag::AUDIO_SAMPLE_FORMAT, {"sample_fmt",          g_auSampleFmtDef,   "AudioSampleFormat"}},
70     {Plugin::Tag::AUDIO_SAMPLE_PER_FRAME, {"sample_per_frame", g_u32Def,           "uin32_t"}},
71     {Plugin::Tag::AUDIO_MPEG_VERSION, {"ad_mpeg_ver",          g_u32Def,           "uint32_t"}},
72     {Plugin::Tag::AUDIO_MPEG_LAYER, {"ad_mpeg_layer",          g_u32Def,           "uint32_t"}},
73     {Plugin::Tag::AUDIO_AAC_PROFILE, {"aac_profile",           g_aacProfileDef,    "AudioAacProfile"}},
74     {Plugin::Tag::AUDIO_AAC_LEVEL, {"aac_level",               g_u32Def,           "uint32_t"}},
75     {Plugin::Tag::AUDIO_AAC_STREAM_FORMAT, {"aac_stm_fmt",     g_aacStFmtDef,      "AudioAacStreamFormat"}},
76     {Plugin::Tag::VIDEO_WIDTH, {"vd_w",                        g_u32Def,           "uin32_t"}},
77     {Plugin::Tag::VIDEO_HEIGHT, {"vd_h",                       g_u32Def,           "uin32_t"}},
78     {Plugin::Tag::VIDEO_PIXEL_FORMAT, {"pixel_fmt",            g_vdPixelFmtDef,    "VideoPixelFormat"}},
79     {Plugin::Tag::VIDEO_FRAME_RATE, {"frm_rate",               g_u32Def,           "uint32_t"}},
80     {Plugin::Tag::VIDEO_SURFACE, {"surface",                   g_unknown,          "Surface"}},
81     {Plugin::Tag::VIDEO_MAX_SURFACE_NUM, {"surface_num",       g_u32Def,           "uin32_t"}},
82 };
83 
84 const std::map<Plugin::AudioSampleFormat, const char*> g_auSampleFmtStrMap = {
85     {Plugin::AudioSampleFormat::S8, "S8"},
86     {Plugin::AudioSampleFormat::U8, "U8"},
87     {Plugin::AudioSampleFormat::S8P, "S8P"},
88     {Plugin::AudioSampleFormat::U8P, "U8P"},
89     {Plugin::AudioSampleFormat::S16, "S16"},
90     {Plugin::AudioSampleFormat::U16, "U16"},
91     {Plugin::AudioSampleFormat::S16P, "S16P"},
92     {Plugin::AudioSampleFormat::U16P, "U16P"},
93     {Plugin::AudioSampleFormat::S24, "S24"},
94     {Plugin::AudioSampleFormat::U24, "U24"},
95     {Plugin::AudioSampleFormat::S24P, "S24P"},
96     {Plugin::AudioSampleFormat::U24P, "U24P"},
97     {Plugin::AudioSampleFormat::S32, "S32"},
98     {Plugin::AudioSampleFormat::U32, "U32"},
99     {Plugin::AudioSampleFormat::S32P, "S32P"},
100     {Plugin::AudioSampleFormat::U32P, "U32P"},
101     {Plugin::AudioSampleFormat::S64, "S64"},
102     {Plugin::AudioSampleFormat::U64, "U64"},
103     {Plugin::AudioSampleFormat::S64P, "S64P"},
104     {Plugin::AudioSampleFormat::U64P, "U64P"},
105     {Plugin::AudioSampleFormat::F32, "F32"},
106     {Plugin::AudioSampleFormat::F32P, "F32P"},
107     {Plugin::AudioSampleFormat::F64, "F64"},
108     {Plugin::AudioSampleFormat::U24P, "F64P"},
109 };
110 
111 const std::map<Plugin::AudioChannelLayout, const char*> g_auChannelLayoutStrMap = {
112     {Plugin::AudioChannelLayout::MONO, "MONO"},
113     {Plugin::AudioChannelLayout::STEREO, "STEREO"},
114     {Plugin::AudioChannelLayout::CH_2POINT1, "CH_2POINT1"},
115     {Plugin::AudioChannelLayout::CH_2_1, "CH_2_1"},
116     {Plugin::AudioChannelLayout::SURROUND, "SURROUND"},
117     {Plugin::AudioChannelLayout::CH_3POINT1, "CH_3POINT1"},
118     {Plugin::AudioChannelLayout::CH_4POINT0, "CH_4POINT0"},
119     {Plugin::AudioChannelLayout::CH_4POINT1, "CH_4POINT1"},
120     {Plugin::AudioChannelLayout::CH_2_2, "CH_2_2"},
121     {Plugin::AudioChannelLayout::QUAD, "QUAD"},
122     {Plugin::AudioChannelLayout::CH_5POINT0, "CH_5POINT0"},
123     {Plugin::AudioChannelLayout::CH_5POINT1, "CH_5POINT1"},
124     {Plugin::AudioChannelLayout::CH_5POINT0_BACK, "CH_5POINT0_BACK"},
125     {Plugin::AudioChannelLayout::CH_5POINT1_BACK, "CH_5POINT1_BACK"},
126     {Plugin::AudioChannelLayout::CH_6POINT0, "CH_6POINT0"},
127     {Plugin::AudioChannelLayout::CH_6POINT0_FRONT, "CH_6POINT0_FRONT"},
128     {Plugin::AudioChannelLayout::HEXAGONAL, "HEXAGONAL"},
129     {Plugin::AudioChannelLayout::CH_6POINT1, "CH_6POINT1"},
130     {Plugin::AudioChannelLayout::CH_6POINT1_BACK, "CH_6POINT1_BACK"},
131     {Plugin::AudioChannelLayout::CH_6POINT1_FRONT, "CH_6POINT1_FRONT"},
132     {Plugin::AudioChannelLayout::CH_7POINT0, "CH_7POINT0"},
133     {Plugin::AudioChannelLayout::CH_7POINT0_FRONT, "CH_7POINT0_FRONT"},
134     {Plugin::AudioChannelLayout::CH_7POINT1, "CH_7POINT1"},
135     {Plugin::AudioChannelLayout::CH_7POINT1_WIDE, "CH_7POINT1_WIDE"},
136     {Plugin::AudioChannelLayout::CH_7POINT1_WIDE_BACK, "CH_7POINT1_WIDE_BACK"},
137     {Plugin::AudioChannelLayout::OCTAGONAL, "OCTAGONAL"},
138     {Plugin::AudioChannelLayout::HEXADECAGONAL, "HEXADECAGONAL"},
139     {Plugin::AudioChannelLayout::STEREO_DOWNMIX, "STEREO_DOWNMIX"},
140 };
141 
HasTagInfo(Plugin::Tag tag)142 inline bool HasTagInfo(Plugin::Tag tag)
143 {
144     return g_tagInfoMap.count(tag) != 0;
145 }
146 
GetTagStrName(Plugin::Tag tag)147 inline const char* GetTagStrName(Plugin::Tag tag)
148 {
149     if (!HasTagInfo(tag)) {
150         return nullptr;
151     }
152     return std::get<0>(g_tagInfoMap.at(tag));
153 }
154 
GetTagTypeStrName(Plugin::Tag tag)155 inline const char* GetTagTypeStrName(Plugin::Tag tag)
156 {
157     if (!HasTagInfo(tag)) {
158         return nullptr;
159     }
160     return std::get<2>(g_tagInfoMap.at(tag));
161 }
162 
GetTagDefValue(Plugin::Tag tag)163 inline const Plugin::ValueType* GetTagDefValue(Plugin::Tag tag)
164 {
165     if (!HasTagInfo(tag)) {
166         return nullptr;
167     }
168     return &std::get<1>(g_tagInfoMap.at(tag));
169 }
170 } // Pipeline
171 } // Media
172 } // OHOS
173 #endif // HISTREAMER_PIPELINE_PLUGIN_CAP_DESC_H
174