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