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