1ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/****************************************************************************** 2ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 3ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Copyright (C) 2014 The Android Open Source Project 4ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Copyright 2003 - 2004 Open Interface North America, Inc. All rights reserved. 5ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 6ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 7ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * you may not use this file except in compliance with the License. 8ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * You may obtain a copy of the License at: 9ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 10ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * http://www.apache.org/licenses/LICENSE-2.0 11ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 12ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Unless required by applicable law or agreed to in writing, software 13ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS, 14ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * See the License for the specific language governing permissions and 16ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * limitations under the License. 17ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 18ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta ******************************************************************************/ 19ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef _OI_CODEC_SBC_PRIVATE_H 20ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define _OI_CODEC_SBC_PRIVATE_H 21ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 22ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/********************************************************************************** 23ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta $Revision: #1 $ 24ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta***********************************************************************************/ 25ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 26ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 27ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@file 28ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaFunction prototypes and macro definitions used internally by the codec. 29ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 30ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@ingroup codec_internal 31ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/ 32ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 33ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 34ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@addtogroup codec_internal 35ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@{ 36ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/ 37ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 38ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef USE_RESTRICT_KEYWORD 39ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define RESTRICT restrict 40ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else 41ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define RESTRICT 42ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 43ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 44ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef CODEC_DEBUG 45ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include <stdio.h> 46ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define ERROR(x) do { printf x; printf("\n"); } while (0) 47ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else 48ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define ERROR(x) 49ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 50ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 51ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef TRACE_EXECUTION 52ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TRACE(x) do { printf x; printf("\n"); } while (0) 53ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else 54ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TRACE(x) 55ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 56ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 57ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef PRIVATE 58ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define PRIVATE 59ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 60ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 61ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef INLINE 62ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define INLINE 63ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 64ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 65ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include "oi_assert.h" 66ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include "oi_codec_sbc.h" 67ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 68ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef OI_SBC_SYNCWORD 69ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_SBC_SYNCWORD 0x9c 70ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 71ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 72ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef DIVIDE 73ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DIVIDE(a, b) ((a) / (b)) 74ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 75ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 76ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef union { 77ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 uint8[SBC_MAX_BANDS]; 78ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 uint32[SBC_MAX_BANDS / 4]; 79ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} BITNEED_UNION1; 80ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 81ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef union { 82ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 uint8[2 * SBC_MAX_BANDS]; 83ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 uint32[2 * SBC_MAX_BANDS / 4]; 84ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} BITNEED_UNION2; 85ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 86ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptastatic const OI_UINT16 freq_values[] = { 16000, 32000, 44100, 48000 }; 87ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptastatic const OI_UINT8 block_values[] = { 4, 8, 12, 16 }; 88ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptastatic const OI_UINT8 channel_values[] = { 1, 2, 2, 2 }; 89ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptastatic const OI_UINT8 band_values[] = { 4, 8 }; 90ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 91ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 92ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TEST_MODE_SENTINEL "OINA" 93ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TEST_MODE_SENTINEL_LENGTH 4 94ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 95ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** Used internally. */ 96ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef struct { 97ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta union { 98ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta const OI_UINT8 *r; 99ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 *w; 100ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta } ptr; 101ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 value; 102ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT bitPtr; 103ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} OI_BITSTREAM; 104ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 105ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 106ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define VALID_INT16(x) (((x) >= OI_INT16_MIN) && ((x) <= OI_INT16_MAX)) 107ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define VALID_INT32(x) (((x) >= OI_INT32_MIN) && ((x) <= OI_INT32_MAX)) 108ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 109ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_IN 0 110ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_OUT 16-DCTII_8_SHIFT_IN 111ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 112ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_0 (DCTII_8_SHIFT_OUT) 113ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_1 (DCTII_8_SHIFT_OUT) 114ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_2 (DCTII_8_SHIFT_OUT) 115ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_3 (DCTII_8_SHIFT_OUT) 116ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_4 (DCTII_8_SHIFT_OUT) 117ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_5 (DCTII_8_SHIFT_OUT) 118ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_6 (DCTII_8_SHIFT_OUT-1) 119ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_7 (DCTII_8_SHIFT_OUT-2) 120ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 121ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCT_SHIFT 15 122ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 123ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_4_SHIFT_IN 2 124ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_4_SHIFT_OUT 15 125ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 126ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_8_SHIFT_IN 3 127ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_8_SHIFT_OUT 14 128ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 129ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_UINT computeBitneed(OI_CODEC_SBC_COMMON_CONTEXT *common, 130ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 *bitneeds, 131ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT ch, 132ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT *preferredBitpool); 133ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 134ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptavoid oneChannelBitAllocation(OI_CODEC_SBC_COMMON_CONTEXT *common, 135ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta BITNEED_UNION1 *bitneeds, 136ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT ch, 137ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT bitcount); 138ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 139ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 140ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_INT adjustToFitBitpool(const OI_UINT bitpool, 141ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 *bitneeds, 142ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta const OI_UINT subbands, 143ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT bitcount, 144ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT *excess); 145ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 146ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE OI_INT allocAdjustedBits(OI_UINT8 *dest, 147ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT bits, 148ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT excess); 149ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 150ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE OI_INT allocExcessBits(OI_UINT8 *dest, 151ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT excess); 152ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 153ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_UINT32 internal_CalculateBitrate(OI_CODEC_SBC_FRAME_INFO *frame); 154ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 155ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_UINT16 internal_CalculateFramelen(OI_CODEC_SBC_FRAME_INFO *frame); 156ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 157ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptavoid monoBitAllocation(OI_CODEC_SBC_COMMON_CONTEXT *common); 158ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 159ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef void (*BIT_ALLOC)(OI_CODEC_SBC_COMMON_CONTEXT *common); 160ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 161ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_STATUS internal_DecodeRaw(OI_CODEC_SBC_DECODER_CONTEXT *context, 162ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 bitpool, 163ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta const OI_BYTE **frameData, 164ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 *frameBytes, 165ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT16 *pcmData, 166ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 *pcmBytes); 167ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 168ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE OI_STATUS internal_DecoderReset(OI_CODEC_SBC_DECODER_CONTEXT *context, 169ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 *decoderData, 170ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 decoderDataBytes, 171ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_BYTE maxChannels, 172ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_BYTE pcmStride, 173ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_BOOL enhanced); 174ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 175ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE OI_UINT16 OI_SBC_CalculateFrameAndHeaderlen(OI_CODEC_SBC_FRAME_INFO *frame, OI_UINT *headerLen_); 176ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 177ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_UINT32 OI_SBC_MaxBitpool(OI_CODEC_SBC_FRAME_INFO *frame); 178ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 179ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_ComputeBitAllocation(OI_CODEC_SBC_COMMON_CONTEXT *frame); 180ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_UINT8 OI_SBC_CalculateChecksum(OI_CODEC_SBC_FRAME_INFO *frame, OI_BYTE const *data); 181ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 182ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/* Transform functions */ 183ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void shift_buffer(SBC_BUFFER_T *dest, SBC_BUFFER_T *src, OI_UINT wordCount); 184ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void cosineModulateSynth4(SBC_BUFFER_T * RESTRICT out, OI_INT32 const * RESTRICT in); 185ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void SynthWindow40_int32_int32_symmetry_with_sum(OI_INT16 *pcm, SBC_BUFFER_T buffer[80], OI_UINT strideShift); 186ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 187ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE void dct3_4(OI_INT32 * RESTRICT out, OI_INT32 const * RESTRICT in); 188ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void analyze4_generated(SBC_BUFFER_T analysisBuffer[RESTRICT 40], 189ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT16 *pcm, 190ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT strideShift, 191ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT32 subband[4]); 192ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 193ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE void dct3_8(OI_INT32 * RESTRICT out, OI_INT32 const * RESTRICT in); 194ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 195ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void analyze8_generated(SBC_BUFFER_T analysisBuffer[RESTRICT 80], 196ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT16 *pcm, 197ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT strideShift, 198ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT32 subband[8]); 199ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 200ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef SBC_ENHANCED 201ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void analyze8_enhanced_generated(SBC_BUFFER_T analysisBuffer[RESTRICT 112], 202ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT16 *pcm, 203ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT strideShift, 204ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT32 subband[8]); 205ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 206ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 207ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/* Decoder functions */ 208ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 209ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE void OI_SBC_ReadHeader(OI_CODEC_SBC_COMMON_CONTEXT *common, const OI_BYTE *data); 210ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_ReadScalefactors(OI_CODEC_SBC_COMMON_CONTEXT *common, const OI_BYTE *b, OI_BITSTREAM *bs); 211ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_ReadSamples(OI_CODEC_SBC_DECODER_CONTEXT *common, OI_BITSTREAM *ob); 212ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_ReadSamplesJoint(OI_CODEC_SBC_DECODER_CONTEXT *common, OI_BITSTREAM *global_bs); 213ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_SynthFrame(OI_CODEC_SBC_DECODER_CONTEXT *context, OI_INT16 *pcm, OI_UINT start_block, OI_UINT nrof_blocks); 214ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaINLINE OI_INT32 OI_SBC_Dequant(OI_UINT32 raw, OI_UINT scale_factor, OI_UINT bits); 215ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_BOOL OI_SBC_ExamineCommandPacket(OI_CODEC_SBC_DECODER_CONTEXT *context, const OI_BYTE *data, OI_UINT32 len); 216ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_GenerateTestSignal(OI_INT16 pcmData[][2], OI_UINT32 sampleCount); 217ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 218ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void OI_SBC_ExpandFrameFields(OI_CODEC_SBC_FRAME_INFO *frame); 219ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE OI_STATUS OI_CODEC_SBC_Alloc(OI_CODEC_SBC_COMMON_CONTEXT *common, 220ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 *codecDataAligned, 221ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT32 codecDataBytes, 222ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 maxChannels, 223ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_UINT8 pcmStride); 224ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 225ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@} 226ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/ 227ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 228ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif /* _OI_CODEC_SBC_PRIVATE_H */ 229ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 230