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