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
20 namespace OHOS {
21 namespace MediaAVCodec {
22 const std::vector<int32_t> AUDIO_SAMPLE_RATE = {8000, 11025, 12000, 16000, 22050, 24000,
23 32000, 44100, 48000, 64000, 88200, 96000};
24 constexpr int MAX_AUDIO_CHANNEL_COUNT = 8;
25 constexpr int MAX_SUPPORT_AUDIO_INSTANCE = 16;
26
27 constexpr int MIN_BIT_RATE_MP3 = 32000;
28 constexpr int MAX_BIT_RATE_MP3 = 320000;
29 constexpr int MAX_CHANNEL_COUNT_MP3 = 2;
30
31 constexpr int MIN_BIT_RATE_AAC = 8000;
32 constexpr int MAX_BIT_RATE_AAC = 960000;
33 const std::vector<int32_t> AUDIO_VORBIS_SAMPLE_RATE = {8000, 11025, 12000, 16000, 22050, 24000,
34 32000, 44100, 48000, 64000, 88200, 96000};
35
36 constexpr int MAX_BIT_RATE_FLAC = 2100000;
37
38 constexpr int MIN_BIT_RATE_VORBIS = 32000;
39 constexpr int MAX_BIT_RATE_VORBIS = 500000;
40
41 constexpr int MIN_BIT_RATE_AAC_ENCODER = 8000;
42 constexpr int MAX_BIT_RATE_AAC_ENCODER = 448000;
43
GetMP3DecoderCapability()44 CapabilityData AudioCodeclistInfo::GetMP3DecoderCapability()
45 {
46 CapabilityData audioMp3Capability;
47 audioMp3Capability.codecName = AVCodecCodecName::AUDIO_DECODER_MP3_NAME;
48 audioMp3Capability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
49 audioMp3Capability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_MPEG;
50 audioMp3Capability.isVendor = false;
51 audioMp3Capability.bitrate = Range(MIN_BIT_RATE_MP3, MAX_BIT_RATE_MP3);
52 audioMp3Capability.channels = Range(1, MAX_CHANNEL_COUNT_MP3);
53 audioMp3Capability.sampleRate = AUDIO_SAMPLE_RATE;
54 audioMp3Capability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
55 return audioMp3Capability;
56 }
57
GetAacDecoderCapability()58 CapabilityData AudioCodeclistInfo::GetAacDecoderCapability()
59 {
60 CapabilityData audioAacCapability;
61 audioAacCapability.codecName = AVCodecCodecName::AUDIO_DECODER_AAC_NAME;
62 audioAacCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
63 audioAacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC;
64 audioAacCapability.isVendor = false;
65 audioAacCapability.bitrate = Range(MIN_BIT_RATE_AAC, MAX_BIT_RATE_AAC);
66 audioAacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
67 audioAacCapability.sampleRate = AUDIO_SAMPLE_RATE;
68 audioAacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
69 return audioAacCapability;
70 }
71
GetFlacDecoderCapability()72 CapabilityData AudioCodeclistInfo::GetFlacDecoderCapability()
73 {
74 CapabilityData audioFlacCapability;
75 audioFlacCapability.codecName = AVCodecCodecName::AUDIO_DECODER_FLAC_NAME;
76 audioFlacCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
77 audioFlacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC;
78 audioFlacCapability.isVendor = false;
79 audioFlacCapability.bitrate = Range(1, MAX_BIT_RATE_FLAC);
80 audioFlacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
81 audioFlacCapability.sampleRate = AUDIO_SAMPLE_RATE;
82 audioFlacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
83 return audioFlacCapability;
84 }
85
GetVorbisDecoderCapability()86 CapabilityData AudioCodeclistInfo::GetVorbisDecoderCapability()
87 {
88 CapabilityData audioVorbisCapability;
89 audioVorbisCapability.codecName = AVCodecCodecName::AUDIO_DECODER_VORBIS_NAME;
90 audioVorbisCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER;
91 audioVorbisCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_VORBIS;
92 audioVorbisCapability.isVendor = false;
93 audioVorbisCapability.bitrate = Range(MIN_BIT_RATE_VORBIS, MAX_BIT_RATE_VORBIS);
94 audioVorbisCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
95 audioVorbisCapability.sampleRate = AUDIO_VORBIS_SAMPLE_RATE;
96 audioVorbisCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
97 return audioVorbisCapability;
98 }
99
GetAacEncoderCapability()100 CapabilityData AudioCodeclistInfo::GetAacEncoderCapability()
101 {
102 CapabilityData audioAacCapability;
103 audioAacCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_AAC_NAME;
104 audioAacCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
105 audioAacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_AAC;
106 audioAacCapability.isVendor = false;
107 audioAacCapability.bitrate = Range(MIN_BIT_RATE_AAC_ENCODER, MAX_BIT_RATE_AAC_ENCODER);
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
GetFlacEncoderCapability()114 CapabilityData AudioCodeclistInfo::GetFlacEncoderCapability()
115 {
116 CapabilityData audioFlacCapability;
117 audioFlacCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_FLAC_NAME;
118 audioFlacCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER;
119 audioFlacCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_FLAC;
120 audioFlacCapability.isVendor = false;
121 audioFlacCapability.bitrate = Range(1, MAX_BIT_RATE_FLAC);
122 audioFlacCapability.channels = Range(1, MAX_AUDIO_CHANNEL_COUNT);
123 audioFlacCapability.sampleRate = AUDIO_SAMPLE_RATE;
124 audioFlacCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE;
125 return audioFlacCapability;
126 }
127
AudioCodeclistInfo()128 AudioCodeclistInfo::AudioCodeclistInfo()
129 {
130 audioCapabilities_ = {GetMP3DecoderCapability(), GetAacDecoderCapability(), GetFlacDecoderCapability(),
131 GetVorbisDecoderCapability(), GetAacEncoderCapability(), GetFlacEncoderCapability()};
132 }
133
~AudioCodeclistInfo()134 AudioCodeclistInfo::~AudioCodeclistInfo()
135 {
136 audioCapabilities_.clear();
137 }
138
GetInstance()139 AudioCodeclistInfo &AudioCodeclistInfo::GetInstance()
140 {
141 static AudioCodeclistInfo audioCodecList;
142 return audioCodecList;
143 }
144
GetAudioCapabilities() const145 std::vector<CapabilityData> AudioCodeclistInfo::GetAudioCapabilities() const noexcept
146 {
147 return audioCapabilities_;
148 }
149 } // namespace MediaAVCodec
150 } // namespace OHOS