1/****************************************************************************** 2 * 3 * Copyright (C) 2000-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 * nterface to low complexity subband codec (SBC) 22 * 23 ******************************************************************************/ 24#ifndef A2D_SBC_H 25#define A2D_SBC_H 26 27/***************************************************************************** 28** Constants 29*****************************************************************************/ 30/* the length of the SBC Media Payload header. */ 31#define A2D_SBC_MPL_HDR_LEN 1 32 33/* the LOSC of SBC media codec capabilitiy */ 34#define A2D_SBC_INFO_LEN 6 35 36/* for Codec Specific Information Element */ 37#define A2D_SBC_IE_SAMP_FREQ_MSK 0xF0 /* b7-b4 sampling frequency */ 38#define A2D_SBC_IE_SAMP_FREQ_16 0x80 /* b7:16 kHz */ 39#define A2D_SBC_IE_SAMP_FREQ_32 0x40 /* b6:32 kHz */ 40#define A2D_SBC_IE_SAMP_FREQ_44 0x20 /* b5:44.1kHz */ 41#define A2D_SBC_IE_SAMP_FREQ_48 0x10 /* b4:48 kHz */ 42 43#define A2D_SBC_IE_CH_MD_MSK 0x0F /* b3-b0 channel mode */ 44#define A2D_SBC_IE_CH_MD_MONO 0x08 /* b3: mono */ 45#define A2D_SBC_IE_CH_MD_DUAL 0x04 /* b2: dual */ 46#define A2D_SBC_IE_CH_MD_STEREO 0x02 /* b1: stereo */ 47#define A2D_SBC_IE_CH_MD_JOINT 0x01 /* b0: joint stereo */ 48 49#define A2D_SBC_IE_BLOCKS_MSK 0xF0 /* b7-b4 number of blocks */ 50#define A2D_SBC_IE_BLOCKS_4 0x80 /* 4 blocks */ 51#define A2D_SBC_IE_BLOCKS_8 0x40 /* 8 blocks */ 52#define A2D_SBC_IE_BLOCKS_12 0x20 /* 12blocks */ 53#define A2D_SBC_IE_BLOCKS_16 0x10 /* 16blocks */ 54 55#define A2D_SBC_IE_SUBBAND_MSK 0x0C /* b3-b2 number of subbands */ 56#define A2D_SBC_IE_SUBBAND_4 0x08 /* b3: 4 */ 57#define A2D_SBC_IE_SUBBAND_8 0x04 /* b2: 8 */ 58 59#define A2D_SBC_IE_ALLOC_MD_MSK 0x03 /* b1-b0 allocation mode */ 60#define A2D_SBC_IE_ALLOC_MD_S 0x02 /* b1: SNR */ 61#define A2D_SBC_IE_ALLOC_MD_L 0x01 /* b0: loundess */ 62 63#define A2D_SBC_IE_MIN_BITPOOL 2 64#define A2D_SBC_IE_MAX_BITPOOL 250 65 66/* for media payload header */ 67#define A2D_SBC_HDR_F_MSK 0x80 68#define A2D_SBC_HDR_S_MSK 0x40 69#define A2D_SBC_HDR_L_MSK 0x20 70#define A2D_SBC_HDR_NUM_MSK 0x0F 71 72/***************************************************************************** 73** Type Definitions 74*****************************************************************************/ 75 76/* data type for the SBC Codec Information Element*/ 77typedef struct 78{ 79 UINT8 samp_freq; /* Sampling frequency */ 80 UINT8 ch_mode; /* Channel mode */ 81 UINT8 block_len; /* Block length */ 82 UINT8 num_subbands; /* Number of subbands */ 83 UINT8 alloc_mthd; /* Allocation method */ 84 UINT8 max_bitpool; /* Maximum bitpool */ 85 UINT8 min_bitpool; /* Minimum bitpool */ 86} tA2D_SBC_CIE; 87 88 89/***************************************************************************** 90** External Function Declarations 91*****************************************************************************/ 92#ifdef __cplusplus 93extern "C" 94{ 95#endif 96/****************************************************************************** 97** 98** Function A2D_SbcChkFrInit 99** 100** Description check if need to init the descramble control block. 101** 102** Returns nothing. 103******************************************************************************/ 104extern void A2D_SbcChkFrInit(UINT8 *p_pkt); 105 106/****************************************************************************** 107** 108** Function A2D_SbcDescramble 109** 110** Description descramble the packet. 111** 112** Returns nothing. 113******************************************************************************/ 114extern void A2D_SbcDescramble(UINT8 *p_pkt, UINT16 len); 115 116/****************************************************************************** 117** 118** Function A2D_BldSbcInfo 119** 120** Description This function is called by an application to build 121** the SBC Media Codec Capabilities byte sequence 122** beginning from the LOSC octet. 123** Input Parameters: 124** media_type: Indicates Audio, or Multimedia. 125** 126** p_ie: The SBC Codec Information Element information. 127** 128** Output Parameters: 129** p_result: the resulting codec info byte sequence. 130** 131** Returns A2D_SUCCESS if function execution succeeded. 132** Error status code, otherwise. 133******************************************************************************/ 134extern tA2D_STATUS A2D_BldSbcInfo(UINT8 media_type, tA2D_SBC_CIE *p_ie, 135 UINT8 *p_result); 136 137/****************************************************************************** 138** 139** Function A2D_ParsSbcInfo 140** 141** Description This function is called by an application to parse 142** the SBC Media Codec Capabilities byte sequence 143** beginning from the LOSC octet. 144** Input Parameters: 145** p_info: the byte sequence to parse. 146** 147** for_caps: TRUE, if the byte sequence is for get capabilities response. 148** 149** Output Parameters: 150** p_ie: The SBC Codec Information Element information. 151** 152** Returns A2D_SUCCESS if function execution succeeded. 153** Error status code, otherwise. 154******************************************************************************/ 155extern tA2D_STATUS A2D_ParsSbcInfo(tA2D_SBC_CIE *p_ie, UINT8 *p_info, 156 BOOLEAN for_caps); 157 158/****************************************************************************** 159** 160** Function A2D_BldSbcMplHdr 161** 162** Description This function is called by an application to parse 163** the SBC Media Payload header. 164** Input Parameters: 165** frag: 1, if fragmented. 0, otherwise. 166** 167** start: 1, if the starting packet of a fragmented frame. 168** 169** last: 1, if the last packet of a fragmented frame. 170** 171** num: If frag is 1, this is the number of remaining fragments 172** (including this fragment) of this frame. 173** If frag is 0, this is the number of frames in this packet. 174** 175** Output Parameters: 176** p_dst: the resulting media payload header byte sequence. 177** 178** Returns void. 179******************************************************************************/ 180extern void A2D_BldSbcMplHdr(UINT8 *p_dst, BOOLEAN frag, BOOLEAN start, 181 BOOLEAN last, UINT8 num); 182 183/****************************************************************************** 184** 185** Function A2D_ParsSbcMplHdr 186** 187** Description This function is called by an application to parse 188** the SBC Media Payload header. 189** Input Parameters: 190** p_src: the byte sequence to parse.. 191** 192** Output Parameters: 193** frag: 1, if fragmented. 0, otherwise. 194** 195** start: 1, if the starting packet of a fragmented frame. 196** 197** last: 1, if the last packet of a fragmented frame. 198** 199** num: If frag is 1, this is the number of remaining fragments 200** (including this fragment) of this frame. 201** If frag is 0, this is the number of frames in this packet. 202** 203** Returns void. 204******************************************************************************/ 205extern void A2D_ParsSbcMplHdr(UINT8 *p_src, BOOLEAN *p_frag, 206 BOOLEAN *p_start, BOOLEAN *p_last, 207 UINT8 *p_num); 208#ifdef __cplusplus 209} 210#endif 211 212#endif /* A2D_SBC_H */ 213