1ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/****************************************************************************** 2ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski * Copyright 2014 The Android Open Source Project 49ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Copyright 2003 - 2004 Open Interface North America, Inc. All rights 59ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * reserved. 6ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 7ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 8ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * you may not use this file except in compliance with the License. 9ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * You may obtain a copy of the License at: 10ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 11ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * http://www.apache.org/licenses/LICENSE-2.0 12ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 13ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Unless required by applicable law or agreed to in writing, software 14ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS, 15ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * See the License for the specific language governing permissions and 17ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * limitations under the License. 18ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 19ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta ******************************************************************************/ 20ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef _OI_CODEC_SBC_PRIVATE_H 21ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define _OI_CODEC_SBC_PRIVATE_H 22ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 23ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************* 24ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta $Revision: #1 $ 25ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 26ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 27ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 28ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@file 29ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaFunction prototypes and macro definitions used internally by the codec. 30ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 31ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@ingroup codec_internal 32ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/ 33ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 34ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 35ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@addtogroup codec_internal 36ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@{ 37ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/ 38ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 39ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef USE_RESTRICT_KEYWORD 40ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define RESTRICT restrict 41ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else 42ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define RESTRICT 43ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 44ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 45ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef CODEC_DEBUG 46ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include <stdio.h> 47911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define ERROR(x) \ 48911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson do { \ 49911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson printf x; \ 50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson printf("\n"); \ 51911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } while (0) 52ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else 53ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define ERROR(x) 54ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 55ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 56ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef TRACE_EXECUTION 57911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define TRACE(x) \ 58911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson do { \ 59911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson printf x; \ 60911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson printf("\n"); \ 61911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } while (0) 62ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else 63ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TRACE(x) 64ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 65ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 66ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef PRIVATE 67ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define PRIVATE 68ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 69ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 70ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef INLINE 71ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define INLINE 72ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 73ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 74ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include "oi_assert.h" 75ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include "oi_codec_sbc.h" 76ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 77ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef OI_SBC_SYNCWORD 78ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_SBC_SYNCWORD 0x9c 79ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 80ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 81ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifndef DIVIDE 82ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DIVIDE(a, b) ((a) / (b)) 83ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 84ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 85ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef union { 86911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t uint8[SBC_MAX_BANDS]; 87911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t uint32[SBC_MAX_BANDS / 4]; 88ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} BITNEED_UNION1; 89ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 90ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef union { 91911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t uint8[2 * SBC_MAX_BANDS]; 92911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t uint32[2 * SBC_MAX_BANDS / 4]; 93ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} BITNEED_UNION2; 94ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 95911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic const uint16_t freq_values[] = {16000, 32000, 44100, 48000}; 96911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic const uint8_t block_values[] = {4, 8, 12, 16}; 97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic const uint8_t channel_values[] = {1, 2, 2, 2}; 98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic const uint8_t band_values[] = {4, 8}; 99ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 100ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TEST_MODE_SENTINEL "OINA" 101ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define TEST_MODE_SENTINEL_LENGTH 4 102ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 103ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** Used internally. */ 104ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef struct { 105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson union { 106911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson const uint8_t* r; 107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* w; 108911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } ptr; 109911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t value; 110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT bitPtr; 111ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} OI_BITSTREAM; 112ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 113ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define VALID_INT16(x) (((x) >= OI_INT16_MIN) && ((x) <= OI_INT16_MAX)) 114ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define VALID_INT32(x) (((x) >= OI_INT32_MIN) && ((x) <= OI_INT32_MAX)) 115ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 116ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_IN 0 117911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DCTII_8_SHIFT_OUT (16 - DCTII_8_SHIFT_IN) 118ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 119ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_0 (DCTII_8_SHIFT_OUT) 120ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_1 (DCTII_8_SHIFT_OUT) 121ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_2 (DCTII_8_SHIFT_OUT) 122ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_3 (DCTII_8_SHIFT_OUT) 123ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_4 (DCTII_8_SHIFT_OUT) 124ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTII_8_SHIFT_5 (DCTII_8_SHIFT_OUT) 125911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DCTII_8_SHIFT_6 (DCTII_8_SHIFT_OUT - 1) 126911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DCTII_8_SHIFT_7 (DCTII_8_SHIFT_OUT - 2) 127ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 128ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCT_SHIFT 15 129ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 130ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_4_SHIFT_IN 2 131ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_4_SHIFT_OUT 15 132ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 133ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_8_SHIFT_IN 3 134ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define DCTIII_8_SHIFT_OUT 14 135ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 136911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonOI_UINT computeBitneed(OI_CODEC_SBC_COMMON_CONTEXT* common, uint8_t* bitneeds, 137911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT ch, OI_UINT* preferredBitpool); 138ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 139911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonvoid oneChannelBitAllocation(OI_CODEC_SBC_COMMON_CONTEXT* common, 140911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BITNEED_UNION1* bitneeds, OI_UINT ch, 141911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT bitcount); 142ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 143911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonOI_INT adjustToFitBitpool(const OI_UINT bitpool, uint32_t* bitneeds, 144911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson const OI_UINT subbands, OI_UINT bitcount, 145911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT* excess); 146ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 147911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE OI_INT allocAdjustedBits(uint8_t* dest, OI_INT bits, OI_INT excess); 148ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 149911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE OI_INT allocExcessBits(uint8_t* dest, OI_INT excess); 150ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 151911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE uint32_t internal_CalculateBitrate(OI_CODEC_SBC_FRAME_INFO* frame); 152ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 153911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE uint16_t internal_CalculateFramelen(OI_CODEC_SBC_FRAME_INFO* frame); 154ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 155911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonvoid monoBitAllocation(OI_CODEC_SBC_COMMON_CONTEXT* common); 156ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 157911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void (*BIT_ALLOC)(OI_CODEC_SBC_COMMON_CONTEXT* common); 158ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 159911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE OI_STATUS internal_DecodeRaw(OI_CODEC_SBC_DECODER_CONTEXT* context, 160911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t bitpool, const OI_BYTE** frameData, 161911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t* frameBytes, int16_t* pcmData, 162911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t* pcmBytes); 163ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 164911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE OI_STATUS internal_DecoderReset(OI_CODEC_SBC_DECODER_CONTEXT* context, 165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t* decoderData, 166a239d20e95238c37d02121abb49b14d433c5afc2Jakub Pawlowski uint32_t decoderDataBytes, 167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_BYTE maxChannels, OI_BYTE pcmStride, 168ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_BOOL enhanced); 169ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 170911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE uint16_t OI_SBC_CalculateFrameAndHeaderlen( 171911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_CODEC_SBC_FRAME_INFO* frame, OI_UINT* headerLen_); 172ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 173911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE uint32_t OI_SBC_MaxBitpool(OI_CODEC_SBC_FRAME_INFO* frame); 174ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 175911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_ComputeBitAllocation(OI_CODEC_SBC_COMMON_CONTEXT* frame); 176911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE uint8_t OI_SBC_CalculateChecksum(OI_CODEC_SBC_FRAME_INFO* frame, 177911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_BYTE const* data); 178ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 179ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/* Transform functions */ 180911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void shift_buffer(SBC_BUFFER_T* dest, SBC_BUFFER_T* src, 181911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT wordCount); 182911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void cosineModulateSynth4(SBC_BUFFER_T* RESTRICT out, 183911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson int32_t const* RESTRICT in); 184911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void SynthWindow40_int32_int32_symmetry_with_sum( 185911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson int16_t* pcm, SBC_BUFFER_T buffer[80], OI_UINT strideShift); 186911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 187911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE void dct3_4(int32_t* RESTRICT out, int32_t const* RESTRICT in); 188ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void analyze4_generated(SBC_BUFFER_T analysisBuffer[RESTRICT 40], 189911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson int16_t* pcm, OI_UINT strideShift, 190a239d20e95238c37d02121abb49b14d433c5afc2Jakub Pawlowski int32_t subband[4]); 191ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 192911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE void dct3_8(int32_t* RESTRICT out, int32_t const* RESTRICT in); 193ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 194ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaPRIVATE void analyze8_generated(SBC_BUFFER_T analysisBuffer[RESTRICT 80], 195911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson int16_t* pcm, OI_UINT strideShift, 196a239d20e95238c37d02121abb49b14d433c5afc2Jakub Pawlowski int32_t subband[8]); 197ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 198ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef SBC_ENHANCED 199911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void analyze8_enhanced_generated( 200911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson SBC_BUFFER_T analysisBuffer[RESTRICT 112], int16_t* pcm, 201911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT strideShift, int32_t subband[8]); 202ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 203ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 204ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/* Decoder functions */ 205ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 206911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonINLINE void OI_SBC_ReadHeader(OI_CODEC_SBC_COMMON_CONTEXT* common, 207911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson const OI_BYTE* data); 208911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_ReadScalefactors(OI_CODEC_SBC_COMMON_CONTEXT* common, 209911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson const OI_BYTE* b, OI_BITSTREAM* bs); 210911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_ReadSamples(OI_CODEC_SBC_DECODER_CONTEXT* common, 211911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_BITSTREAM* ob); 212911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_ReadSamplesJoint(OI_CODEC_SBC_DECODER_CONTEXT* common, 213911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_BITSTREAM* global_bs); 214911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_SynthFrame(OI_CODEC_SBC_DECODER_CONTEXT* context, 215911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson int16_t* pcm, OI_UINT start_block, 216911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_UINT nrof_blocks); 217a239d20e95238c37d02121abb49b14d433c5afc2Jakub PawlowskiINLINE int32_t OI_SBC_Dequant(uint32_t raw, OI_UINT scale_factor, OI_UINT bits); 218911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE OI_BOOL OI_SBC_ExamineCommandPacket( 219911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson OI_CODEC_SBC_DECODER_CONTEXT* context, const OI_BYTE* data, uint32_t len); 220911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_GenerateTestSignal(int16_t pcmData[][2], 221911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t sampleCount); 222911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 223911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE void OI_SBC_ExpandFrameFields(OI_CODEC_SBC_FRAME_INFO* frame); 224911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonPRIVATE OI_STATUS OI_CODEC_SBC_Alloc(OI_CODEC_SBC_COMMON_CONTEXT* common, 225911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t* codecDataAligned, 226a239d20e95238c37d02121abb49b14d433c5afc2Jakub Pawlowski uint32_t codecDataBytes, 227911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t maxChannels, uint8_t pcmStride); 228ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 229ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@} 230ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/ 231ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 232ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif /* _OI_CODEC_SBC_PRIVATE_H */ 233