1 /*
2 * Copyright (C) 2023 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 #include "audio_codeclist_info.h"
17 #include "avcodec_mime_type.h"
18 #include "avcodec_codec_name.h"
19 #include "hdi_codec.h"
20
21 namespace OHOS {
22 namespace MediaAVCodec {
23 const std::vector<int32_t> AUDIO_SAMPLE_RATE = {8000, 11025, 12000, 16000, 22050, 24000,
24 32000, 44100, 48000, 64000, 88200, 96000};
25 constexpr int MAX_AUDIO_CHANNEL_COUNT = 8;
26 constexpr int MAX_SUPPORT_AUDIO_INSTANCE = 16;
27
28 constexpr int MIN_BIT_RATE_MP3 = 32000;
29 constexpr int MAX_BIT_RATE_MP3 = 320000;
30 constexpr int MAX_BIT_RATE_OPUS = 510000;
31 constexpr int MIN_BIT_RATE_MP3_ENCODE = 8000;
32 constexpr int MAX_CHANNEL_COUNT_MP3 = 2;
33 constexpr int MAX_CHANNEL_COUNT_APE = 2;
34
35 constexpr int MIN_BIT_RATE_AAC = 8000;
36 constexpr int MAX_BIT_RATE_AAC = 960000;
37 const std::vector<int32_t> AUDIO_VORBIS_SAMPLE_RATE = {8000, 11025, 12000, 16000, 22050, 24000,
38 32000, 44100, 48000, 64000, 88200, 96000};
39 const std::vector<int32_t> AUDIO_AMRNB_SAMPLE_RATE = {8000};
40
41 const std::vector<int32_t> AUDIO_AMRWB_SAMPLE_RATE = {16000};
42
43 const std::vector<int32_t> AUDIO_G711MU_SAMPLE_RATE = {8000};
44
45 const std::vector<int32_t> AUDIO_FLAC_SAMPLE_RATE = {8000, 11025, 12000, 16000, 22050, 24000, 32000,
46 44100, 48000, 64000, 88200, 96000, 192000};
47
48 const std::vector<int32_t> AUDIO_MP3_EN_SAMPLE_RATE = {8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000};
49
50 constexpr int MAX_BIT_RATE_FLAC = 2100000;
51 constexpr int MAX_BIT_RATE_APE = 2100000;
52 constexpr int MIN_BIT_RATE_VORBIS = 32000;
53 constexpr int MAX_BIT_RATE_VORBIS = 500000;
54
55 constexpr int MAX_BIT_RATE_AMRWB = 23850;
56 constexpr int MAX_BIT_RATE_AMRNB = 12200;
57
58 constexpr int MIN_BIT_RATE_AAC_ENCODER = 8000;
59 constexpr int MAX_BIT_RATE_AAC_ENCODER = 448000;
60
61 #ifdef AV_CODEC_AUDIO_VIVID_CAPACITY
62 const std::vector<int32_t> AUDIO_VIVID_SAMPLE_RATE = {32000, 44100, 48000, 96000, 192000};
63 constexpr int MIN_BIT_RATE_VIVID_DECODER = 16000;
64 constexpr int MAX_BIT_RATE_VIVID_DECODER = 3075000;
65 constexpr int MAX_CHANNEL_COUNT_VIVID = 16;
66 #endif
67 constexpr int MAX_BIT_RATE_G711MU_DECODER = 64000;
68 constexpr int MAX_BIT_RATE_G711MU_ENCODER = 64000;
69
GetMP3DecoderCapability()70 CapabilityData AudioCodeclistInfo::GetMP3DecoderCapability()
71 {
72 CapabilityData audioMp3Capability;
73 audioMp3Capability.codecName = AVCodecCodecName::AUDIO_DECODER_MP3_NAME;
74 audioMp3Capability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
75 audioMp3Capability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_MPEG;
76 audioMp3Capability.isVendor = false;
77 audioMp3Capability.bitrate = Range(MIN_BIT_RATE_MP3, MAX_BIT_RATE_MP3);
78 audioMp3Capability.channels = Range(1, MAX_CHANNEL_COUNT_MP3);
79 audioMp3Capability.sampleRate = AUDIO_SAMPLE_RATE;
80 audioMp3Capability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
81 return audioMp3Capability;
82 }
83
GetMP3EncoderCapability()84 CapabilityData AudioCodeclistInfo::GetMP3EncoderCapability()
85 {
86 CapabilityData audioMp3Capability;
87 audioMp3Capability.codecName = AVCodecCodecName::AUDIO_ENCODER_MP3_NAME;
88 audioMp3Capability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
89 audioMp3Capability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_MPEG;
90 audioMp3Capability.isVendor = false;
91 audioMp3Capability.bitrate = Range(MIN_BIT_RATE_MP3_ENCODE, MAX_BIT_RATE_MP3);
92 audioMp3Capability.channels = Range(1, MAX_CHANNEL_COUNT_MP3);
93 audioMp3Capability.sampleRate = AUDIO_MP3_EN_SAMPLE_RATE;
94 audioMp3Capability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
95 return audioMp3Capability;
96 }
97
GetAacDecoderCapability()98 CapabilityData AudioCodeclistInfo::GetAacDecoderCapability()
99 {
100 CapabilityData audioAacCapability;
101 audioAacCapability.codecName = AVCodecCodecName::AUDIO_DECODER_AAC_NAME;
102 audioAacCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
103 audioAacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC;
104 audioAacCapability.isVendor = false;
105 audioAacCapability.bitrate = Range(MIN_BIT_RATE_AAC, MAX_BIT_RATE_AAC);
106 audioAacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
107 audioAacCapability.sampleRate = AUDIO_SAMPLE_RATE;
108 audioAacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
109 return audioAacCapability;
110 }
111
GetOpusDecoderCapability()112 CapabilityData AudioCodeclistInfo::GetOpusDecoderCapability()
113 {
114 CapabilityData audioOpusCapability;
115 audioOpusCapability.codecName = AVCodecCodecName::AUDIO_DECODER_OPUS_NAME;
116 audioOpusCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
117 audioOpusCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_OPUS;
118 audioOpusCapability.isVendor = false;
119 audioOpusCapability.bitrate = Range(1, MAX_BIT_RATE_OPUS);
120 audioOpusCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
121 audioOpusCapability.sampleRate = AUDIO_SAMPLE_RATE;
122 audioOpusCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
123 return audioOpusCapability;
124 }
125
GetFlacDecoderCapability()126 CapabilityData AudioCodeclistInfo::GetFlacDecoderCapability()
127 {
128 CapabilityData audioFlacCapability;
129 audioFlacCapability.codecName = AVCodecCodecName::AUDIO_DECODER_FLAC_NAME;
130 audioFlacCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
131 audioFlacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC;
132 audioFlacCapability.isVendor = false;
133 audioFlacCapability.bitrate = Range(1, MAX_BIT_RATE_FLAC);
134 audioFlacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
135 audioFlacCapability.sampleRate = AUDIO_FLAC_SAMPLE_RATE;
136 audioFlacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
137 return audioFlacCapability;
138 }
139
GetVorbisDecoderCapability()140 CapabilityData AudioCodeclistInfo::GetVorbisDecoderCapability()
141 {
142 CapabilityData audioVorbisCapability;
143 audioVorbisCapability.codecName = AVCodecCodecName::AUDIO_DECODER_VORBIS_NAME;
144 audioVorbisCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
145 audioVorbisCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VORBIS;
146 audioVorbisCapability.isVendor = false;
147 audioVorbisCapability.bitrate = Range(MIN_BIT_RATE_VORBIS, MAX_BIT_RATE_VORBIS);
148 audioVorbisCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
149 audioVorbisCapability.sampleRate = AUDIO_VORBIS_SAMPLE_RATE;
150 audioVorbisCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
151 return audioVorbisCapability;
152 }
153
GetAmrnbDecoderCapability()154 CapabilityData AudioCodeclistInfo::GetAmrnbDecoderCapability()
155 {
156 CapabilityData audioAmrnbCapability;
157 audioAmrnbCapability.codecName = AVCodecCodecName::AUDIO_DECODER_AMRNB_NAME;
158 audioAmrnbCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
159 audioAmrnbCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRNB;
160 audioAmrnbCapability.isVendor = false;
161 audioAmrnbCapability.bitrate = Range(1, MAX_BIT_RATE_AMRNB);
162 audioAmrnbCapability.channels = Range(1, 1);
163 audioAmrnbCapability.sampleRate = AUDIO_AMRNB_SAMPLE_RATE;
164 audioAmrnbCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
165 return audioAmrnbCapability;
166 }
167
GetAmrwbDecoderCapability()168 CapabilityData AudioCodeclistInfo::GetAmrwbDecoderCapability()
169 {
170 CapabilityData audioAmrwbCapability;
171 audioAmrwbCapability.codecName = AVCodecCodecName::AUDIO_DECODER_AMRWB_NAME;
172 audioAmrwbCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
173 audioAmrwbCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRWB;
174 audioAmrwbCapability.isVendor = false;
175 audioAmrwbCapability.bitrate = Range(1, MAX_BIT_RATE_AMRWB);
176 audioAmrwbCapability.channels = Range(1, 1);
177 audioAmrwbCapability.sampleRate = AUDIO_AMRWB_SAMPLE_RATE;
178 audioAmrwbCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
179 return audioAmrwbCapability;
180 }
181
GetAPEDecoderCapability()182 CapabilityData AudioCodeclistInfo::GetAPEDecoderCapability()
183 {
184 CapabilityData audioApeCapability;
185 audioApeCapability.codecName = AVCodecCodecName::AUDIO_DECODER_APE_NAME;
186 audioApeCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
187 audioApeCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_APE;
188 audioApeCapability.isVendor = false;
189 audioApeCapability.bitrate = Range(0, MAX_BIT_RATE_APE);
190 audioApeCapability.channels = Range(1, MAX_CHANNEL_COUNT_APE);
191 audioApeCapability.sampleRate = AUDIO_SAMPLE_RATE;
192 audioApeCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
193 return audioApeCapability;
194 }
195
196 #ifdef AV_CODEC_AUDIO_VIVID_CAPACITY
GetVividDecoderCapability()197 CapabilityData AudioCodeclistInfo::GetVividDecoderCapability()
198 {
199 CapabilityData audioVividCapability;
200 audioVividCapability.codecName = AVCodecCodecName::AUDIO_DECODER_VIVID_NAME;
201 audioVividCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
202 audioVividCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VIVID;
203 audioVividCapability.isVendor = false;
204 audioVividCapability.bitrate = Range(MIN_BIT_RATE_VIVID_DECODER, MAX_BIT_RATE_VIVID_DECODER);
205 audioVividCapability.channels = Range(1, MAX_CHANNEL_COUNT_VIVID);
206 audioVividCapability.sampleRate = AUDIO_VIVID_SAMPLE_RATE;
207 audioVividCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
208 return audioVividCapability;
209 }
210
GetAmrnbEncoderCapability()211 CapabilityData AudioCodeclistInfo::GetAmrnbEncoderCapability()
212 {
213 CapabilityData audioAmrnbCapability;
214 audioAmrnbCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_AMRNB_NAME;
215 audioAmrnbCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
216 audioAmrnbCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRNB;
217 audioAmrnbCapability.isVendor = false;
218 audioAmrnbCapability.bitrate = Range(1, MAX_BIT_RATE_AMRNB);
219 audioAmrnbCapability.channels = Range(1, 1);
220 audioAmrnbCapability.sampleRate = AUDIO_AMRNB_SAMPLE_RATE;
221 audioAmrnbCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
222 return audioAmrnbCapability;
223 }
224
GetAmrwbEncoderCapability()225 CapabilityData AudioCodeclistInfo::GetAmrwbEncoderCapability()
226 {
227 CapabilityData audioAmrwbCapability;
228 audioAmrwbCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_AMRWB_NAME;
229 audioAmrwbCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
230 audioAmrwbCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AMRWB;
231 audioAmrwbCapability.isVendor = false;
232 audioAmrwbCapability.bitrate = Range(1, MAX_BIT_RATE_AMRWB);
233 audioAmrwbCapability.channels = Range(1, 1);
234 audioAmrwbCapability.sampleRate = AUDIO_AMRWB_SAMPLE_RATE;
235 audioAmrwbCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
236 return audioAmrwbCapability;
237 }
238
GetLbvcDecoderCapability()239 CapabilityData AudioCodeclistInfo::GetLbvcDecoderCapability()
240 {
241 CapabilityData audioLbvcCapability;
242
243 std::shared_ptr<Media::Plugins::Hdi::HdiCodec> hdiCodec_;
244 hdiCodec_ = std::make_shared<Media::Plugins::Hdi::HdiCodec>();
245 if (!hdiCodec_->IsSupportCodecType("OMX.audio.decoder.lbvc", &audioLbvcCapability)) {
246 audioLbvcCapability.codecName = "";
247 audioLbvcCapability.mimeType = "";
248 audioLbvcCapability.maxInstance = 0;
249 audioLbvcCapability.codecType = AVCODEC_TYPE_NONE;
250 audioLbvcCapability.isVendor = false;
251 audioLbvcCapability.bitrate = Range(0, 0);
252 audioLbvcCapability.channels = Range(0, 0);
253 audioLbvcCapability.sampleRate = {0};
254 return audioLbvcCapability;
255 }
256 audioLbvcCapability.codecName = AVCodecCodecName::AUDIO_DECODER_LBVC_NAME;
257 audioLbvcCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
258 audioLbvcCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_LBVC;
259 audioLbvcCapability.isVendor = true;
260 return audioLbvcCapability;
261 }
262
GetLbvcEncoderCapability()263 CapabilityData AudioCodeclistInfo::GetLbvcEncoderCapability()
264 {
265 CapabilityData audioLbvcCapability;
266
267 std::shared_ptr<Media::Plugins::Hdi::HdiCodec> hdiCodec_;
268 hdiCodec_ = std::make_shared<Media::Plugins::Hdi::HdiCodec>();
269 if (!hdiCodec_->IsSupportCodecType("OMX.audio.encoder.lbvc", &audioLbvcCapability)) {
270 audioLbvcCapability.codecName = "";
271 audioLbvcCapability.mimeType = "";
272 audioLbvcCapability.maxInstance = 0;
273 audioLbvcCapability.codecType = AVCODEC_TYPE_NONE;
274 audioLbvcCapability.isVendor = false;
275 audioLbvcCapability.bitrate = Range(0, 0);
276 audioLbvcCapability.channels = Range(0, 0);
277 audioLbvcCapability.sampleRate = {0};
278 return audioLbvcCapability;
279 }
280 audioLbvcCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_LBVC_NAME;
281 audioLbvcCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
282 audioLbvcCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_LBVC;
283 audioLbvcCapability.isVendor = true;
284 return audioLbvcCapability;
285 }
286 #endif
287
GetAacEncoderCapability()288 CapabilityData AudioCodeclistInfo::GetAacEncoderCapability()
289 {
290 CapabilityData audioAacCapability;
291 audioAacCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_AAC_NAME;
292 audioAacCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
293 audioAacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC;
294 audioAacCapability.isVendor = false;
295 audioAacCapability.bitrate = Range(MIN_BIT_RATE_AAC_ENCODER, MAX_BIT_RATE_AAC_ENCODER);
296 audioAacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
297 audioAacCapability.sampleRate = AUDIO_SAMPLE_RATE;
298 audioAacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
299 audioAacCapability.profiles = { AAC_PROFILE_LC };
300 return audioAacCapability;
301 }
302
GetOpusEncoderCapability()303 CapabilityData AudioCodeclistInfo::GetOpusEncoderCapability()
304 {
305 CapabilityData audioOpusCapability;
306 audioOpusCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_OPUS_NAME;
307 audioOpusCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
308 audioOpusCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_OPUS;
309 audioOpusCapability.isVendor = false;
310 audioOpusCapability.bitrate = Range(1, MAX_BIT_RATE_OPUS);
311 audioOpusCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
312 audioOpusCapability.sampleRate = AUDIO_SAMPLE_RATE;
313 audioOpusCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
314 return audioOpusCapability;
315 }
316
GetFlacEncoderCapability()317 CapabilityData AudioCodeclistInfo::GetFlacEncoderCapability()
318 {
319 CapabilityData audioFlacCapability;
320 audioFlacCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_FLAC_NAME;
321 audioFlacCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
322 audioFlacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC;
323 audioFlacCapability.isVendor = false;
324 audioFlacCapability.bitrate = Range(1, MAX_BIT_RATE_FLAC);
325 audioFlacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
326 audioFlacCapability.sampleRate = AUDIO_SAMPLE_RATE;
327 audioFlacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
328 return audioFlacCapability;
329 }
330
GetG711muDecoderCapability()331 CapabilityData AudioCodeclistInfo::GetG711muDecoderCapability()
332 {
333 CapabilityData audioG711muDecoderCapability;
334 audioG711muDecoderCapability.codecName = AVCodecCodecName::AUDIO_DECODER_G711MU_NAME;
335 audioG711muDecoderCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
336 audioG711muDecoderCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711MU;
337 audioG711muDecoderCapability.isVendor = false;
338 audioG711muDecoderCapability.bitrate = Range(1, MAX_BIT_RATE_G711MU_DECODER);
339 audioG711muDecoderCapability.channels = Range(1, 1);
340 audioG711muDecoderCapability.sampleRate = AUDIO_G711MU_SAMPLE_RATE;
341 audioG711muDecoderCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
342 return audioG711muDecoderCapability;
343 }
344
GetG711muEncoderCapability()345 CapabilityData AudioCodeclistInfo::GetG711muEncoderCapability()
346 {
347 CapabilityData audioG711muEncoderCapability;
348 audioG711muEncoderCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_G711MU_NAME;
349 audioG711muEncoderCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
350 audioG711muEncoderCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_G711MU;
351 audioG711muEncoderCapability.isVendor = false;
352 audioG711muEncoderCapability.bitrate = Range(1, MAX_BIT_RATE_G711MU_ENCODER);
353 audioG711muEncoderCapability.channels = Range(1, 1);
354 audioG711muEncoderCapability.sampleRate = AUDIO_G711MU_SAMPLE_RATE;
355 audioG711muEncoderCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
356 return audioG711muEncoderCapability;
357 }
358
AudioCodeclistInfo()359 AudioCodeclistInfo::AudioCodeclistInfo()
360 {
361 audioCapabilities_ = {GetMP3DecoderCapability(), GetAacDecoderCapability(), GetFlacDecoderCapability(),
362 GetOpusDecoderCapability(), GetVorbisDecoderCapability(), GetAmrnbDecoderCapability(),
363 GetAmrwbDecoderCapability(), GetG711muDecoderCapability(), GetAacEncoderCapability(),
364 GetFlacEncoderCapability(), GetOpusEncoderCapability(), GetG711muEncoderCapability(),
365 GetAPEDecoderCapability(), GetMP3EncoderCapability(),
366 #ifdef AV_CODEC_AUDIO_VIVID_CAPACITY
367 GetVividDecoderCapability(), GetAmrnbEncoderCapability(), GetAmrwbEncoderCapability(),
368 GetLbvcDecoderCapability(), GetLbvcEncoderCapability(),
369 #endif
370 };
371 }
372
~AudioCodeclistInfo()373 AudioCodeclistInfo::~AudioCodeclistInfo()
374 {
375 audioCapabilities_.clear();
376 }
377
GetInstance()378 AudioCodeclistInfo &AudioCodeclistInfo::GetInstance()
379 {
380 static AudioCodeclistInfo audioCodecList;
381 return audioCodecList;
382 }
383
384 std::vector<CapabilityData> AudioCodeclistInfo::GetAudioCapabilities() const noexcept
385 {
386 return audioCapabilities_;
387 }
388 } // namespace MediaAVCodec
389 } // namespace OHOS