1df25739fSMilanka Ringwald /****************************************************************************** 2df25739fSMilanka Ringwald * 3df25739fSMilanka Ringwald * Copyright (C) 1999-2012 Broadcom Corporation 4df25739fSMilanka Ringwald * 5df25739fSMilanka Ringwald * Licensed under the Apache License, Version 2.0 (the "License"); 6df25739fSMilanka Ringwald * you may not use this file except in compliance with the License. 7df25739fSMilanka Ringwald * You may obtain a copy of the License at: 8df25739fSMilanka Ringwald * 9df25739fSMilanka Ringwald * http://www.apache.org/licenses/LICENSE-2.0 10df25739fSMilanka Ringwald * 11df25739fSMilanka Ringwald * Unless required by applicable law or agreed to in writing, software 12df25739fSMilanka Ringwald * distributed under the License is distributed on an "AS IS" BASIS, 13df25739fSMilanka Ringwald * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14df25739fSMilanka Ringwald * See the License for the specific language governing permissions and 15df25739fSMilanka Ringwald * limitations under the License. 16df25739fSMilanka Ringwald * 17df25739fSMilanka Ringwald ******************************************************************************/ 18df25739fSMilanka Ringwald 19df25739fSMilanka Ringwald /****************************************************************************** 20df25739fSMilanka Ringwald * 21df25739fSMilanka Ringwald * This file contains constants and structures used by Encoder. 22df25739fSMilanka Ringwald * 23df25739fSMilanka Ringwald ******************************************************************************/ 24df25739fSMilanka Ringwald 25df25739fSMilanka Ringwald #ifndef SBC_ENCODER_H 26df25739fSMilanka Ringwald #define SBC_ENCODER_H 27df25739fSMilanka Ringwald 28df25739fSMilanka Ringwald #define ENCODER_VERSION "0025" 29df25739fSMilanka Ringwald 30df25739fSMilanka Ringwald #ifdef BUILDCFG 31df25739fSMilanka Ringwald #include "bt_target.h" 32df25739fSMilanka Ringwald #endif 33df25739fSMilanka Ringwald 34df25739fSMilanka Ringwald /*DEFINES*/ 35df25739fSMilanka Ringwald #ifndef FALSE 36df25739fSMilanka Ringwald #define FALSE 0 37df25739fSMilanka Ringwald #endif 38df25739fSMilanka Ringwald 39df25739fSMilanka Ringwald #ifndef TRUE 40df25739fSMilanka Ringwald #define TRUE (!FALSE) 41df25739fSMilanka Ringwald #endif 42df25739fSMilanka Ringwald 43df25739fSMilanka Ringwald #define SBC_MAX_NUM_OF_SUBBANDS 8 44df25739fSMilanka Ringwald #define SBC_MAX_NUM_OF_CHANNELS 2 45df25739fSMilanka Ringwald #define SBC_MAX_NUM_OF_BLOCKS 16 46df25739fSMilanka Ringwald 47df25739fSMilanka Ringwald #define SBC_LOUDNESS 0 48df25739fSMilanka Ringwald #define SBC_SNR 1 49df25739fSMilanka Ringwald 50df25739fSMilanka Ringwald #define SUB_BANDS_8 8 51df25739fSMilanka Ringwald #define SUB_BANDS_4 4 52df25739fSMilanka Ringwald 53df25739fSMilanka Ringwald #define SBC_sf16000 0 54df25739fSMilanka Ringwald #define SBC_sf32000 1 55df25739fSMilanka Ringwald #define SBC_sf44100 2 56df25739fSMilanka Ringwald #define SBC_sf48000 3 57df25739fSMilanka Ringwald 58df25739fSMilanka Ringwald #define SBC_MONO 0 59df25739fSMilanka Ringwald #define SBC_DUAL 1 60df25739fSMilanka Ringwald #define SBC_STEREO 2 61df25739fSMilanka Ringwald #define SBC_JOINT_STEREO 3 62df25739fSMilanka Ringwald 63df25739fSMilanka Ringwald #define SBC_BLOCK_0 4 64df25739fSMilanka Ringwald #define SBC_BLOCK_1 8 65df25739fSMilanka Ringwald #define SBC_BLOCK_2 12 66df25739fSMilanka Ringwald #define SBC_BLOCK_3 16 67df25739fSMilanka Ringwald 68df25739fSMilanka Ringwald #define SBC_NULL 0 69df25739fSMilanka Ringwald 70df25739fSMilanka Ringwald #ifndef SBC_MAX_NUM_FRAME 71df25739fSMilanka Ringwald #define SBC_MAX_NUM_FRAME 1 72df25739fSMilanka Ringwald #endif 73df25739fSMilanka Ringwald 74df25739fSMilanka Ringwald #ifndef SBC_DSP_OPT 75df25739fSMilanka Ringwald #define SBC_DSP_OPT FALSE 76df25739fSMilanka Ringwald #endif 77df25739fSMilanka Ringwald 78df25739fSMilanka Ringwald /* Set SBC_USE_ARM_PRAGMA to TRUE to use "#pragma arm section zidata" */ 79df25739fSMilanka Ringwald #ifndef SBC_USE_ARM_PRAGMA 80df25739fSMilanka Ringwald #define SBC_USE_ARM_PRAGMA FALSE 81df25739fSMilanka Ringwald #endif 82df25739fSMilanka Ringwald 83df25739fSMilanka Ringwald /* Set SBC_ARM_ASM_OPT to TRUE in case the target is an ARM */ 84df25739fSMilanka Ringwald /* this will replace all the 32 and 64 bit mult by in line assembly code */ 85df25739fSMilanka Ringwald #ifndef SBC_ARM_ASM_OPT 86df25739fSMilanka Ringwald #define SBC_ARM_ASM_OPT FALSE 87df25739fSMilanka Ringwald #endif 88df25739fSMilanka Ringwald 89df25739fSMilanka Ringwald /* green hill compiler option -> Used to distinguish the syntax for inline assembly code*/ 90df25739fSMilanka Ringwald #ifndef SBC_GHS_COMPILER 91df25739fSMilanka Ringwald #define SBC_GHS_COMPILER FALSE 92df25739fSMilanka Ringwald #endif 93df25739fSMilanka Ringwald 94df25739fSMilanka Ringwald /* ARM compiler option -> Used to distinguish the syntax for inline assembly code */ 95df25739fSMilanka Ringwald #ifndef SBC_ARM_COMPILER 96df25739fSMilanka Ringwald #define SBC_ARM_COMPILER TRUE 97df25739fSMilanka Ringwald #endif 98df25739fSMilanka Ringwald 99df25739fSMilanka Ringwald /* Set SBC_IPAQ_OPT to TRUE in case the target is an ARM */ 100df25739fSMilanka Ringwald /* 32 and 64 bit mult will be performed using SINT64 ( usualy __int64 ) cast that usualy give optimal performance if supported */ 101df25739fSMilanka Ringwald #ifndef SBC_IPAQ_OPT 102df25739fSMilanka Ringwald #define SBC_IPAQ_OPT TRUE 103df25739fSMilanka Ringwald #endif 104df25739fSMilanka Ringwald 105df25739fSMilanka Ringwald /* Debug only: set SBC_IS_64_MULT_IN_WINDOW_ACCU to TRUE to use 64 bit multiplication in the windowing */ 106df25739fSMilanka Ringwald /* -> not recomended, more MIPS for the same restitution. */ 107df25739fSMilanka Ringwald #ifndef SBC_IS_64_MULT_IN_WINDOW_ACCU 108df25739fSMilanka Ringwald #define SBC_IS_64_MULT_IN_WINDOW_ACCU FALSE 109df25739fSMilanka Ringwald #endif /*SBC_IS_64_MULT_IN_WINDOW_ACCU */ 110df25739fSMilanka Ringwald 111df25739fSMilanka Ringwald /* Set SBC_IS_64_MULT_IN_IDCT to TRUE to use 64 bits multiplication in the DCT of Matrixing */ 112df25739fSMilanka Ringwald /* -> more MIPS required for a better audio quality. comparasion with the SIG utilities shows a division by 10 of the RMS */ 113df25739fSMilanka Ringwald /* CAUTION: It only apply in the if SBC_FAST_DCT is set to TRUE */ 114df25739fSMilanka Ringwald #ifndef SBC_IS_64_MULT_IN_IDCT 115df25739fSMilanka Ringwald #define SBC_IS_64_MULT_IN_IDCT FALSE 116df25739fSMilanka Ringwald #endif /*SBC_IS_64_MULT_IN_IDCT */ 117df25739fSMilanka Ringwald 118df25739fSMilanka Ringwald /* set SBC_IS_64_MULT_IN_QUANTIZER to TRUE to use 64 bits multiplication in the quantizer */ 119df25739fSMilanka Ringwald /* setting this flag to FALSE add whistling noise at 5.5 and 11 KHz usualy not perceptible by human's hears. */ 120df25739fSMilanka Ringwald #ifndef SBC_IS_64_MULT_IN_QUANTIZER 121df25739fSMilanka Ringwald #define SBC_IS_64_MULT_IN_QUANTIZER TRUE 122df25739fSMilanka Ringwald #endif /*SBC_IS_64_MULT_IN_IDCT */ 123df25739fSMilanka Ringwald 124df25739fSMilanka Ringwald /* Debug only: set this flag to FALSE to disable fast DCT algorithm */ 125df25739fSMilanka Ringwald #ifndef SBC_FAST_DCT 126df25739fSMilanka Ringwald #define SBC_FAST_DCT TRUE 127df25739fSMilanka Ringwald #endif /*SBC_FAST_DCT */ 128df25739fSMilanka Ringwald 129df25739fSMilanka Ringwald /* In case we do not use joint stereo mode the flag save some RAM and ROM in case it is set to FALSE */ 130df25739fSMilanka Ringwald #ifndef SBC_JOINT_STE_INCLUDED 131df25739fSMilanka Ringwald #define SBC_JOINT_STE_INCLUDED TRUE 132df25739fSMilanka Ringwald #endif 133df25739fSMilanka Ringwald 134df25739fSMilanka Ringwald /* TRUE -> application should provide PCM buffer, FALSE PCM buffer reside in SBC_ENC_PARAMS */ 135df25739fSMilanka Ringwald #ifndef SBC_NO_PCM_CPY_OPTION 136df25739fSMilanka Ringwald #define SBC_NO_PCM_CPY_OPTION FALSE 137df25739fSMilanka Ringwald #endif 138df25739fSMilanka Ringwald 139df25739fSMilanka Ringwald #define MINIMUM_ENC_VX_BUFFER_SIZE (8*10*2) 140df25739fSMilanka Ringwald #ifndef ENC_VX_BUFFER_SIZE 141df25739fSMilanka Ringwald #define ENC_VX_BUFFER_SIZE (MINIMUM_ENC_VX_BUFFER_SIZE + 64) 142df25739fSMilanka Ringwald /*#define ENC_VX_BUFFER_SIZE MINIMUM_ENC_VX_BUFFER_SIZE + 1024*/ 143df25739fSMilanka Ringwald #endif 144df25739fSMilanka Ringwald 145df25739fSMilanka Ringwald #ifndef SBC_FOR_EMBEDDED_LINUX 146df25739fSMilanka Ringwald #define SBC_FOR_EMBEDDED_LINUX FALSE 147df25739fSMilanka Ringwald #endif 148df25739fSMilanka Ringwald 149df25739fSMilanka Ringwald /*constants used for index calculation*/ 150df25739fSMilanka Ringwald #define SBC_BLK (SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS) 151df25739fSMilanka Ringwald 152df25739fSMilanka Ringwald #include "sbc_types.h" 153df25739fSMilanka Ringwald 154df25739fSMilanka Ringwald typedef struct SBC_ENC_PARAMS_TAG 155df25739fSMilanka Ringwald { 156df25739fSMilanka Ringwald SINT16 s16SamplingFreq; /* 16k, 32k, 44.1k or 48k*/ 157df25739fSMilanka Ringwald SINT16 s16ChannelMode; /* mono, dual, streo or joint streo*/ 158df25739fSMilanka Ringwald SINT16 s16NumOfSubBands; /* 4 or 8 */ 159df25739fSMilanka Ringwald SINT16 s16NumOfChannels; 160435e3c4eSMilanka Ringwald SINT16 s16NumOfBlocks; /* SBC: 4, 8, 12 or 16; mSBC: 15*/ 161df25739fSMilanka Ringwald SINT16 s16AllocationMethod; /* loudness or SNR*/ 162df25739fSMilanka Ringwald SINT16 s16BitPool; /* 16*numOfSb for mono & dual; 163df25739fSMilanka Ringwald 32*numOfSb for stereo & joint stereo */ 164*4f0d422dSMilanka Ringwald /* BK4BTSTACK_CHANGE START */ 165*4f0d422dSMilanka Ringwald // UINT16 u16BitRate; 166*4f0d422dSMilanka Ringwald /* BK4BTSTACK_CHANGE END */ 167df25739fSMilanka Ringwald UINT8 u8NumPacketToEncode; /* number of sbc frame to encode. Default is 1 */ 168df25739fSMilanka Ringwald #if (SBC_JOINT_STE_INCLUDED == TRUE) 169df25739fSMilanka Ringwald SINT16 as16Join[SBC_MAX_NUM_OF_SUBBANDS]; /*1 if JS, 0 otherwise*/ 170df25739fSMilanka Ringwald #endif 171df25739fSMilanka Ringwald 172df25739fSMilanka Ringwald SINT16 s16MaxBitNeed; 173df25739fSMilanka Ringwald SINT16 as16ScaleFactor[SBC_MAX_NUM_OF_CHANNELS*SBC_MAX_NUM_OF_SUBBANDS]; 174df25739fSMilanka Ringwald 175df25739fSMilanka Ringwald SINT16 *ps16NextPcmBuffer; 176df25739fSMilanka Ringwald #if (SBC_NO_PCM_CPY_OPTION == TRUE) 177df25739fSMilanka Ringwald SINT16 *ps16PcmBuffer; 178df25739fSMilanka Ringwald #else 179df25739fSMilanka Ringwald SINT16 as16PcmBuffer[SBC_MAX_NUM_FRAME*SBC_MAX_NUM_OF_BLOCKS * SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS]; 180df25739fSMilanka Ringwald #endif 181df25739fSMilanka Ringwald 182df25739fSMilanka Ringwald SINT16 s16ScartchMemForBitAlloc[16]; 183df25739fSMilanka Ringwald 184df25739fSMilanka Ringwald SINT32 s32SbBuffer[SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS * SBC_MAX_NUM_OF_BLOCKS]; 185df25739fSMilanka Ringwald 186df25739fSMilanka Ringwald SINT16 as16Bits[SBC_MAX_NUM_OF_CHANNELS*SBC_MAX_NUM_OF_SUBBANDS]; 187df25739fSMilanka Ringwald 188df25739fSMilanka Ringwald UINT8 *pu8Packet; 189df25739fSMilanka Ringwald UINT8 *pu8NextPacket; 190df25739fSMilanka Ringwald UINT16 FrameHeader; 191df25739fSMilanka Ringwald UINT16 u16PacketLength; 192435e3c4eSMilanka Ringwald /* BK4BTSTACK_CHANGE START */ 193435e3c4eSMilanka Ringwald UINT8 mSBCEnabled; 194435e3c4eSMilanka Ringwald /* BK4BTSTACK_CHANGE END */ 195df25739fSMilanka Ringwald }SBC_ENC_PARAMS; 196df25739fSMilanka Ringwald 197df25739fSMilanka Ringwald #ifdef __cplusplus 198df25739fSMilanka Ringwald extern "C" 199df25739fSMilanka Ringwald { 200df25739fSMilanka Ringwald #endif 201df25739fSMilanka Ringwald SBC_API extern void SBC_Encoder(SBC_ENC_PARAMS *strEncParams); 202df25739fSMilanka Ringwald SBC_API extern void SBC_Encoder_Init(SBC_ENC_PARAMS *strEncParams); 203df25739fSMilanka Ringwald #ifdef __cplusplus 204df25739fSMilanka Ringwald } 205df25739fSMilanka Ringwald #endif 206df25739fSMilanka Ringwald #endif 207