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