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 154typedef 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 194extern "C" 195{ 196#endif 197SBC_API extern void SBC_Encoder(SBC_ENC_PARAMS *strEncParams); 198SBC_API extern void SBC_Encoder_Init(SBC_ENC_PARAMS *strEncParams); 199#ifdef __cplusplus 200} 201#endif 202#endif 203