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