1 /****************************************************************************** 2 * 3 * Copyright (C) 2004-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 /****************************************************************************** 20 * 21 * This is the interface to utility functions for dealing with SBC data 22 * frames and codec capabilities. 23 * 24 ******************************************************************************/ 25 #ifndef BTA_AV_SBC_H 26 #define BTA_AV_SBC_H 27 28 /***************************************************************************** 29 ** constants 30 *****************************************************************************/ 31 32 /* SBC packet header size */ 33 #define BTA_AV_SBC_HDR_SIZE A2D_SBC_MPL_HDR_LEN 34 35 /******************************************************************************* 36 ** 37 ** Function bta_av_sbc_init_up_sample 38 ** 39 ** Description initialize the up sample 40 ** 41 ** src_sps: samples per second (source audio data) 42 ** dst_sps: samples per second (converted audio data) 43 ** bits: number of bits per pcm sample 44 ** n_channels: number of channels (i.e. mono(1), stereo(2)...) 45 ** 46 ** Returns none 47 ** 48 *******************************************************************************/ 49 extern void bta_av_sbc_init_up_sample (UINT32 src_sps, UINT32 dst_sps, 50 UINT16 bits, UINT16 n_channels); 51 52 /******************************************************************************* 53 ** 54 ** Function bta_av_sbc_up_sample 55 ** 56 ** Description Given the source (p_src) audio data and 57 ** source speed (src_sps, samples per second), 58 ** This function converts it to audio data in the desired format 59 ** 60 ** p_src: the data buffer that holds the source audio data 61 ** p_dst: the data buffer to hold the converted audio data 62 ** src_samples: The number of source samples (number of bytes) 63 ** dst_samples: The size of p_dst (number of bytes) 64 ** 65 ** Note: An AE reported an issue with this function. 66 ** When called with bta_av_sbc_up_sample(src, uint8_array_dst..) 67 ** the byte before uint8_array_dst may get overwritten. 68 ** Using uint16_array_dst avoids the problem. 69 ** This issue is related to endian-ness and is hard to resolve 70 ** in a generic manner. 71 ** **************** Please use uint16 array as dst. 72 ** 73 ** Returns The number of bytes used in p_dst 74 ** The number of bytes used in p_src (in *p_ret) 75 ** 76 *******************************************************************************/ 77 extern int bta_av_sbc_up_sample (void *p_src, void *p_dst, 78 UINT32 src_samples, UINT32 dst_samples, 79 UINT32 *p_ret); 80 81 /******************************************************************************* 82 ** 83 ** Function bta_av_sbc_up_sample_16s (16bits-stereo) 84 ** 85 ** Description Given the source (p_src) audio data and 86 ** source speed (src_sps, samples per second), 87 ** This function converts it to audio data in the desired format 88 ** 89 ** p_src: the data buffer that holds the source audio data 90 ** p_dst: the data buffer to hold the converted audio data 91 ** src_samples: The number of source samples (in uint of 4 bytes) 92 ** dst_samples: The size of p_dst (in uint of 4 bytes) 93 ** 94 ** Returns The number of bytes used in p_dst 95 ** The number of bytes used in p_src (in *p_ret) 96 ** 97 *******************************************************************************/ 98 extern int bta_av_sbc_up_sample_16s (void *p_src, void *p_dst, 99 UINT32 src_samples, UINT32 dst_samples, 100 UINT32 *p_ret); 101 102 /******************************************************************************* 103 ** 104 ** Function bta_av_sbc_up_sample_16m (16bits-mono) 105 ** 106 ** Description Given the source (p_src) audio data and 107 ** source speed (src_sps, samples per second), 108 ** This function converts it to audio data in the desired format 109 ** 110 ** p_src: the data buffer that holds the source audio data 111 ** p_dst: the data buffer to hold the converted audio data 112 ** src_samples: The number of source samples (in uint of 2 bytes) 113 ** dst_samples: The size of p_dst (in uint of 2 bytes) 114 ** 115 ** Returns The number of bytes used in p_dst 116 ** The number of bytes used in p_src (in *p_ret) 117 ** 118 *******************************************************************************/ 119 extern int bta_av_sbc_up_sample_16m (void *p_src, void *p_dst, 120 UINT32 src_samples, UINT32 dst_samples, 121 UINT32 *p_ret); 122 123 /******************************************************************************* 124 ** 125 ** Function bta_av_sbc_up_sample_8s (8bits-stereo) 126 ** 127 ** Description Given the source (p_src) audio data and 128 ** source speed (src_sps, samples per second), 129 ** This function converts it to audio data in the desired format 130 ** 131 ** p_src: the data buffer that holds the source audio data 132 ** p_dst: the data buffer to hold the converted audio data 133 ** src_samples: The number of source samples (in uint of 2 bytes) 134 ** dst_samples: The size of p_dst (in uint of 2 bytes) 135 ** 136 ** Returns The number of bytes used in p_dst 137 ** The number of bytes used in p_src (in *p_ret) 138 ** 139 *******************************************************************************/ 140 extern int bta_av_sbc_up_sample_8s (void *p_src, void *p_dst, 141 UINT32 src_samples, UINT32 dst_samples, 142 UINT32 *p_ret); 143 144 /******************************************************************************* 145 ** 146 ** Function bta_av_sbc_up_sample_8m (8bits-mono) 147 ** 148 ** Description Given the source (p_src) audio data and 149 ** source speed (src_sps, samples per second), 150 ** This function converts it to audio data in the desired format 151 ** 152 ** p_src: the data buffer that holds the source audio data 153 ** p_dst: the data buffer to hold the converted audio data 154 ** src_samples: The number of source samples (number of bytes) 155 ** dst_samples: The size of p_dst (number of bytes) 156 ** 157 ** Returns The number of bytes used in p_dst 158 ** The number of bytes used in p_src (in *p_ret) 159 ** 160 *******************************************************************************/ 161 extern int bta_av_sbc_up_sample_8m (void *p_src, void *p_dst, 162 UINT32 src_samples, UINT32 dst_samples, 163 UINT32 *p_ret); 164 165 /******************************************************************************* 166 ** 167 ** Function bta_av_sbc_cfg_for_cap 168 ** 169 ** Description Determine the preferred SBC codec configuration for the 170 ** given codec capabilities. The function is passed the 171 ** preferred codec configuration and the peer codec 172 ** capabilities for the stream. The function attempts to 173 ** match the preferred capabilities with the configuration 174 ** as best it can. The resulting codec configuration is 175 ** returned in the same memory used for the capabilities. 176 ** 177 ** Returns 0 if ok, nonzero if error. 178 ** Codec configuration in p_cap. 179 ** 180 *******************************************************************************/ 181 extern UINT8 bta_av_sbc_cfg_for_cap(UINT8 *p_peer, tA2D_SBC_CIE *p_cap, tA2D_SBC_CIE *p_pref); 182 183 /******************************************************************************* 184 ** 185 ** Function bta_av_sbc_cfg_in_cap 186 ** 187 ** Description This function checks whether an SBC codec configuration 188 ** is allowable for the given codec capabilities. 189 ** 190 ** Returns 0 if ok, nonzero if error. 191 ** 192 *******************************************************************************/ 193 extern UINT8 bta_av_sbc_cfg_in_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap); 194 195 /******************************************************************************* 196 ** 197 ** Function bta_av_sbc_cfg_matches_cap 198 ** 199 ** Description This function checks whether an SBC codec configuration 200 ** matched with capabilities. Here we check subset. 201 ** 202 ** Returns 0 if ok, nonzero if error. 203 ** 204 *******************************************************************************/ 205 extern UINT8 bta_av_sbc_cfg_matches_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap); 206 207 /******************************************************************************* 208 ** 209 ** Function bta_av_sbc_bld_hdr 210 ** 211 ** Description This function builds the packet header for MPF1. 212 ** 213 ** Returns void 214 ** 215 *******************************************************************************/ 216 extern void bta_av_sbc_bld_hdr(BT_HDR *p_buf, UINT16 fr_per_pkt); 217 218 #endif /* BTA_AV_SBC_H */ 219 220