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