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 430e5ac34fSMatthias Ringwald /* BK4BTSTACK_CHANGE START */ 440e5ac34fSMatthias Ringwald #define SBC_NO_PCM_CPY_OPTION TRUE 450e5ac34fSMatthias Ringwald /* BK4BTSTACK_CHANGE END */ 460e5ac34fSMatthias Ringwald 470e5ac34fSMatthias Ringwald 48df25739fSMilanka Ringwald #define SBC_MAX_NUM_OF_SUBBANDS 8 49df25739fSMilanka Ringwald #define SBC_MAX_NUM_OF_CHANNELS 2 50df25739fSMilanka Ringwald #define SBC_MAX_NUM_OF_BLOCKS 16 51df25739fSMilanka Ringwald 52df25739fSMilanka Ringwald #define SBC_LOUDNESS 0 53df25739fSMilanka Ringwald #define SBC_SNR 1 54df25739fSMilanka Ringwald 55df25739fSMilanka Ringwald #define SUB_BANDS_8 8 56df25739fSMilanka Ringwald #define SUB_BANDS_4 4 57df25739fSMilanka Ringwald 58df25739fSMilanka Ringwald #define SBC_sf16000 0 59df25739fSMilanka Ringwald #define SBC_sf32000 1 60df25739fSMilanka Ringwald #define SBC_sf44100 2 61df25739fSMilanka Ringwald #define SBC_sf48000 3 62df25739fSMilanka Ringwald 63df25739fSMilanka Ringwald #define SBC_MONO 0 64df25739fSMilanka Ringwald #define SBC_DUAL 1 65df25739fSMilanka Ringwald #define SBC_STEREO 2 66df25739fSMilanka Ringwald #define SBC_JOINT_STEREO 3 67df25739fSMilanka Ringwald 68df25739fSMilanka Ringwald #define SBC_BLOCK_0 4 69df25739fSMilanka Ringwald #define SBC_BLOCK_1 8 70df25739fSMilanka Ringwald #define SBC_BLOCK_2 12 71df25739fSMilanka Ringwald #define SBC_BLOCK_3 16 72df25739fSMilanka Ringwald 73df25739fSMilanka Ringwald #define SBC_NULL 0 74df25739fSMilanka Ringwald 75df25739fSMilanka Ringwald #ifndef SBC_MAX_NUM_FRAME 76df25739fSMilanka Ringwald #define SBC_MAX_NUM_FRAME 1 77df25739fSMilanka Ringwald #endif 78df25739fSMilanka Ringwald 79df25739fSMilanka Ringwald #ifndef SBC_DSP_OPT 80df25739fSMilanka Ringwald #define SBC_DSP_OPT FALSE 81df25739fSMilanka Ringwald #endif 82df25739fSMilanka Ringwald 83df25739fSMilanka Ringwald /* Set SBC_USE_ARM_PRAGMA to TRUE to use "#pragma arm section zidata" */ 84df25739fSMilanka Ringwald #ifndef SBC_USE_ARM_PRAGMA 85df25739fSMilanka Ringwald #define SBC_USE_ARM_PRAGMA FALSE 86df25739fSMilanka Ringwald #endif 87df25739fSMilanka Ringwald 88df25739fSMilanka Ringwald /* Set SBC_ARM_ASM_OPT to TRUE in case the target is an ARM */ 89df25739fSMilanka Ringwald /* this will replace all the 32 and 64 bit mult by in line assembly code */ 90df25739fSMilanka Ringwald #ifndef SBC_ARM_ASM_OPT 91df25739fSMilanka Ringwald #define SBC_ARM_ASM_OPT FALSE 92df25739fSMilanka Ringwald #endif 93df25739fSMilanka Ringwald 94df25739fSMilanka Ringwald /* green hill compiler option -> Used to distinguish the syntax for inline assembly code*/ 95df25739fSMilanka Ringwald #ifndef SBC_GHS_COMPILER 96df25739fSMilanka Ringwald #define SBC_GHS_COMPILER FALSE 97df25739fSMilanka Ringwald #endif 98df25739fSMilanka Ringwald 99df25739fSMilanka Ringwald /* ARM compiler option -> Used to distinguish the syntax for inline assembly code */ 100df25739fSMilanka Ringwald #ifndef SBC_ARM_COMPILER 101df25739fSMilanka Ringwald #define SBC_ARM_COMPILER TRUE 102df25739fSMilanka Ringwald #endif 103df25739fSMilanka Ringwald 104df25739fSMilanka Ringwald /* Set SBC_IPAQ_OPT to TRUE in case the target is an ARM */ 105df25739fSMilanka Ringwald /* 32 and 64 bit mult will be performed using SINT64 ( usualy __int64 ) cast that usualy give optimal performance if supported */ 106df25739fSMilanka Ringwald #ifndef SBC_IPAQ_OPT 107df25739fSMilanka Ringwald #define SBC_IPAQ_OPT TRUE 108df25739fSMilanka Ringwald #endif 109df25739fSMilanka Ringwald 110df25739fSMilanka Ringwald /* Debug only: set SBC_IS_64_MULT_IN_WINDOW_ACCU to TRUE to use 64 bit multiplication in the windowing */ 111df25739fSMilanka Ringwald /* -> not recomended, more MIPS for the same restitution. */ 112df25739fSMilanka Ringwald #ifndef SBC_IS_64_MULT_IN_WINDOW_ACCU 113df25739fSMilanka Ringwald #define SBC_IS_64_MULT_IN_WINDOW_ACCU FALSE 114df25739fSMilanka Ringwald #endif /*SBC_IS_64_MULT_IN_WINDOW_ACCU */ 115df25739fSMilanka Ringwald 116df25739fSMilanka Ringwald /* Set SBC_IS_64_MULT_IN_IDCT to TRUE to use 64 bits multiplication in the DCT of Matrixing */ 117df25739fSMilanka Ringwald /* -> more MIPS required for a better audio quality. comparasion with the SIG utilities shows a division by 10 of the RMS */ 118df25739fSMilanka Ringwald /* CAUTION: It only apply in the if SBC_FAST_DCT is set to TRUE */ 119df25739fSMilanka Ringwald #ifndef SBC_IS_64_MULT_IN_IDCT 120df25739fSMilanka Ringwald #define SBC_IS_64_MULT_IN_IDCT FALSE 121df25739fSMilanka Ringwald #endif /*SBC_IS_64_MULT_IN_IDCT */ 122df25739fSMilanka Ringwald 123df25739fSMilanka Ringwald /* set SBC_IS_64_MULT_IN_QUANTIZER to TRUE to use 64 bits multiplication in the quantizer */ 124df25739fSMilanka Ringwald /* setting this flag to FALSE add whistling noise at 5.5 and 11 KHz usualy not perceptible by human's hears. */ 125df25739fSMilanka Ringwald #ifndef SBC_IS_64_MULT_IN_QUANTIZER 126df25739fSMilanka Ringwald #define SBC_IS_64_MULT_IN_QUANTIZER TRUE 127df25739fSMilanka Ringwald #endif /*SBC_IS_64_MULT_IN_IDCT */ 128df25739fSMilanka Ringwald 129df25739fSMilanka Ringwald /* Debug only: set this flag to FALSE to disable fast DCT algorithm */ 130df25739fSMilanka Ringwald #ifndef SBC_FAST_DCT 131df25739fSMilanka Ringwald #define SBC_FAST_DCT TRUE 132df25739fSMilanka Ringwald #endif /*SBC_FAST_DCT */ 133df25739fSMilanka Ringwald 134df25739fSMilanka Ringwald /* In case we do not use joint stereo mode the flag save some RAM and ROM in case it is set to FALSE */ 135df25739fSMilanka Ringwald #ifndef SBC_JOINT_STE_INCLUDED 136df25739fSMilanka Ringwald #define SBC_JOINT_STE_INCLUDED TRUE 137df25739fSMilanka Ringwald #endif 138df25739fSMilanka Ringwald 139df25739fSMilanka Ringwald /* TRUE -> application should provide PCM buffer, FALSE PCM buffer reside in SBC_ENC_PARAMS */ 140df25739fSMilanka Ringwald #ifndef SBC_NO_PCM_CPY_OPTION 141df25739fSMilanka Ringwald #define SBC_NO_PCM_CPY_OPTION FALSE 142df25739fSMilanka Ringwald #endif 143df25739fSMilanka Ringwald 144df25739fSMilanka Ringwald #define MINIMUM_ENC_VX_BUFFER_SIZE (8*10*2) 145df25739fSMilanka Ringwald #ifndef ENC_VX_BUFFER_SIZE 146df25739fSMilanka Ringwald #define ENC_VX_BUFFER_SIZE (MINIMUM_ENC_VX_BUFFER_SIZE + 64) 147df25739fSMilanka Ringwald /*#define ENC_VX_BUFFER_SIZE MINIMUM_ENC_VX_BUFFER_SIZE + 1024*/ 148df25739fSMilanka Ringwald #endif 149df25739fSMilanka Ringwald 150df25739fSMilanka Ringwald #ifndef SBC_FOR_EMBEDDED_LINUX 151df25739fSMilanka Ringwald #define SBC_FOR_EMBEDDED_LINUX FALSE 152df25739fSMilanka Ringwald #endif 153df25739fSMilanka Ringwald 154df25739fSMilanka Ringwald /*constants used for index calculation*/ 155df25739fSMilanka Ringwald #define SBC_BLK (SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS) 156df25739fSMilanka Ringwald 157df25739fSMilanka Ringwald #include "sbc_types.h" 158df25739fSMilanka Ringwald 159df25739fSMilanka Ringwald typedef struct SBC_ENC_PARAMS_TAG 160df25739fSMilanka Ringwald { 161df25739fSMilanka Ringwald SINT16 s16SamplingFreq; /* 16k, 32k, 44.1k or 48k*/ 162df25739fSMilanka Ringwald SINT16 s16ChannelMode; /* mono, dual, streo or joint streo*/ 163df25739fSMilanka Ringwald SINT16 s16NumOfSubBands; /* 4 or 8 */ 164df25739fSMilanka Ringwald SINT16 s16NumOfChannels; 165435e3c4eSMilanka Ringwald SINT16 s16NumOfBlocks; /* SBC: 4, 8, 12 or 16; mSBC: 15*/ 166df25739fSMilanka Ringwald SINT16 s16AllocationMethod; /* loudness or SNR*/ 167df25739fSMilanka Ringwald SINT16 s16BitPool; /* 16*numOfSb for mono & dual; 168df25739fSMilanka Ringwald 32*numOfSb for stereo & joint stereo */ 1694f0d422dSMilanka Ringwald /* BK4BTSTACK_CHANGE START */ 1704f0d422dSMilanka Ringwald // UINT16 u16BitRate; 1714f0d422dSMilanka Ringwald /* BK4BTSTACK_CHANGE END */ 172df25739fSMilanka Ringwald UINT8 u8NumPacketToEncode; /* number of sbc frame to encode. Default is 1 */ 173df25739fSMilanka Ringwald #if (SBC_JOINT_STE_INCLUDED == TRUE) 174df25739fSMilanka Ringwald SINT16 as16Join[SBC_MAX_NUM_OF_SUBBANDS]; /*1 if JS, 0 otherwise*/ 175df25739fSMilanka Ringwald #endif 176df25739fSMilanka Ringwald 177df25739fSMilanka Ringwald SINT16 s16MaxBitNeed; 178df25739fSMilanka Ringwald SINT16 as16ScaleFactor[SBC_MAX_NUM_OF_CHANNELS*SBC_MAX_NUM_OF_SUBBANDS]; 179df25739fSMilanka Ringwald 180df25739fSMilanka Ringwald SINT16 *ps16NextPcmBuffer; 181df25739fSMilanka Ringwald #if (SBC_NO_PCM_CPY_OPTION == TRUE) 182df25739fSMilanka Ringwald SINT16 *ps16PcmBuffer; 183df25739fSMilanka Ringwald #else 184df25739fSMilanka Ringwald SINT16 as16PcmBuffer[SBC_MAX_NUM_FRAME*SBC_MAX_NUM_OF_BLOCKS * SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS]; 185df25739fSMilanka Ringwald #endif 186df25739fSMilanka Ringwald 187df25739fSMilanka Ringwald SINT16 s16ScartchMemForBitAlloc[16]; 188df25739fSMilanka Ringwald 189df25739fSMilanka Ringwald SINT32 s32SbBuffer[SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS * SBC_MAX_NUM_OF_BLOCKS]; 190df25739fSMilanka Ringwald 191df25739fSMilanka Ringwald SINT16 as16Bits[SBC_MAX_NUM_OF_CHANNELS*SBC_MAX_NUM_OF_SUBBANDS]; 192df25739fSMilanka Ringwald 193df25739fSMilanka Ringwald UINT8 *pu8Packet; 194df25739fSMilanka Ringwald UINT8 *pu8NextPacket; 195df25739fSMilanka Ringwald UINT16 FrameHeader; 196df25739fSMilanka Ringwald UINT16 u16PacketLength; 197435e3c4eSMilanka Ringwald /* BK4BTSTACK_CHANGE START */ 198435e3c4eSMilanka Ringwald UINT8 mSBCEnabled; 19931f59170SMatthias Ringwald // from sbc_analysis 20031f59170SMatthias Ringwald SINT32 s32DCTY[16];// = {0}; 20131f59170SMatthias Ringwald SINT32 s32X[ENC_VX_BUFFER_SIZE/2]; 20231f59170SMatthias Ringwald SINT16 *s16X;//=(SINT16*) s32X; /* s16X must be 32 bits aligned cf SHIFTUP_X8_2*/ 203*55743d68SMatthias Ringwald SINT16 ShiftCounter; 204c0ca5c25SMatthias Ringwald // from sbc_encoder 205c0ca5c25SMatthias Ringwald SINT16 EncMaxShiftCounter; 206435e3c4eSMilanka Ringwald /* BK4BTSTACK_CHANGE END */ 207df25739fSMilanka Ringwald }SBC_ENC_PARAMS; 208df25739fSMilanka Ringwald 209df25739fSMilanka Ringwald #ifdef __cplusplus 210df25739fSMilanka Ringwald extern "C" 211df25739fSMilanka Ringwald { 212df25739fSMilanka Ringwald #endif 213df25739fSMilanka Ringwald SBC_API extern void SBC_Encoder(SBC_ENC_PARAMS *strEncParams); 214df25739fSMilanka Ringwald SBC_API extern void SBC_Encoder_Init(SBC_ENC_PARAMS *strEncParams); 215df25739fSMilanka Ringwald #ifdef __cplusplus 216df25739fSMilanka Ringwald } 217df25739fSMilanka Ringwald #endif 218df25739fSMilanka Ringwald #endif 219