• 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 
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