1 /* 2 * Copyright (C) 2021 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 #ifndef A2DP_AAC_PARAM_CTRL_H 17 #define A2DP_AAC_PARAM_CTRL_H 18 19 #include <cstdint> 20 21 #include "a2dp_aac_param_ctrl.h" 22 #include "a2dp_codec_config.h" 23 #include "a2dp_codec_constant.h" 24 #include "a2dp_codec_wrapper.h" 25 26 namespace OHOS { 27 namespace bluetooth { 28 class A2dpCodecConfigAacBase : public A2dpCodecConfig { 29 public: 30 bool SetCodecConfig(const uint8_t *peerCodeInfo, uint8_t *resultCodecInfo) override; 31 bool SetPeerCodecCapabilities(const uint8_t *peerCapabilities) override; 32 33 protected: A2dpCodecConfigAacBase(A2dpCodecIndex codecIndex,A2dpCodecPriority codecPriority,bool isSource)34 A2dpCodecConfigAacBase(A2dpCodecIndex codecIndex, A2dpCodecPriority codecPriority, bool isSource) 35 : A2dpCodecConfig(codecIndex, codecPriority), isSource_(isSource) 36 {} 37 ~A2dpCodecConfigAacBase() override = default; 38 void SetSampleRateUser(uint32_t sampFreq, A2dpAACCapability &resultCap); 39 void SetSampleRateSelectableCapa(uint32_t sampFreq); 40 void SetSampleRateCommonCapa(uint32_t sampFreq); 41 bool SetSampleRateAudioConfig(uint32_t sampFreq, A2dpAACCapability &resultCap); 42 bool SetSampleRateDefaultConfig(uint32_t sampFreq, A2dpAACCapability &resultCap); 43 bool SetSampleRateBestMatch(uint32_t sampFreq, A2dpAACCapability &resultCap); 44 bool SetSampleRate( 45 const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability, A2dpAACCapability &resultCap); 46 void SetBitsPerSampleUser(const A2dpAACCapability &localCapability); 47 void SetBitsPerSampleSelectableCapa(const A2dpAACCapability &localCapability); 48 void SetBitsPerSampleCommonCapa(const A2dpAACCapability &localCapability); 49 bool SetBitsPerSampleAudioConfig(const A2dpAACCapability &localCapability, A2dpAACCapability &resultCap); 50 bool SetBitsPerSampleBestMatch(const A2dpAACCapability &localCapability, A2dpAACCapability &resultCap); 51 bool SetBitsPerSampleDefaultConfig(uint8_t bitPerSample, A2dpAACCapability &resultCap); 52 bool SetBitsPerSample(const A2dpAACCapability &localCapability, A2dpAACCapability &resultCap); 53 void SetChannelModeUser(uint8_t chMode, A2dpAACCapability &resultCap); 54 void SetChannelModeSelectableCapa(uint8_t chMode); 55 void SetChannelModeCommonCapa(uint8_t chMode); 56 bool SetChannelModeAudioConfig(uint8_t chMode, A2dpAACCapability &resultCap); 57 bool SetChannelModeBestMatch(uint8_t chMode, A2dpAACCapability &resultCap); 58 bool SetChannelModeDefaultConfig(uint8_t chMode, A2dpAACCapability &resultCap); 59 bool SetChannelMode( 60 const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability, A2dpAACCapability &resultCap); 61 bool SetBlockLength( 62 const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability, A2dpAACCapability &resultCap); 63 bool SetSubBands( 64 const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability, A2dpAACCapability &resultCap); 65 bool SetAllocationMethod( 66 const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability, A2dpAACCapability &resultCap); 67 bool SetBitPool( 68 const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability, A2dpAACCapability &resultCap); 69 bool SetCodecSpecific(void); 70 bool ResetCodecConfig(void); 71 72 void SetSampleFrameCapa(const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability); 73 void SetBitsPerSampleCapa(const A2dpAACCapability &localCapability); 74 void SetChannelModeCapa(const A2dpAACCapability &localCapability, A2dpAACCapability peerCapability); 75 bool ResetCodecCapability(void); 76 bool isSource_; // True if local is Source 77 }; 78 79 class A2dpCodecConfigAacSource : public A2dpCodecConfigAacBase { 80 public: 81 explicit A2dpCodecConfigAacSource(A2dpCodecPriority codecPriority); 82 ~A2dpCodecConfigAacSource() override = default; 83 bool Initialize(); 84 uint64_t EncoderIntervalMs() const; 85 int GetEffectiveMtu() const; 86 }; 87 88 class A2dpCodecConfigAacSink : public A2dpCodecConfigAacBase { 89 public: 90 explicit A2dpCodecConfigAacSink(A2dpCodecPriority codecPriority); 91 ~A2dpCodecConfigAacSink() override = default; 92 93 bool Init(); 94 uint64_t EncoderIntervalMs() const; 95 int GetEffectiveMtu() const; 96 }; 97 98 uint8_t ParseInfoAac(A2dpAACCapability *aacCap, const uint8_t *codecInfo); 99 bool IsAacConfigChanged(const uint8_t *lastCodecInfo, const uint8_t *newCodecInfo); 100 uint8_t BuildAacInfo(const A2dpAACCapability *aacCap, uint8_t *codecInfo); 101 int GetVariableBitRateSupportAac(const uint8_t *codecInfo); 102 int GetBitrateAac(const uint8_t *codecInfo); 103 int GetSampleRateAac(const uint8_t *codecInfo); 104 int ComputeMaxBitRateAac(const uint8_t *codecInfo, uint16_t mtu); 105 int GetTrackChannelModeAac(const uint8_t *codecInfo); 106 int GetTrackChannelCountAac(const uint8_t *codecInfo); 107 int GetObjectTypeCodeAac(const uint8_t *codecInfo); 108 } // namespace bluetooth 109 } // namespace OHOS 110 #endif // !A2DP_AAC_PARAM_CTRL_H