1*df25739fSMilanka Ringwald /******************************************************************************
2*df25739fSMilanka Ringwald *
3*df25739fSMilanka Ringwald * Copyright (C) 2014 The Android Open Source Project
4*df25739fSMilanka Ringwald * Copyright 2006 Open Interface North America, Inc. All rights reserved.
5*df25739fSMilanka Ringwald *
6*df25739fSMilanka Ringwald * Licensed under the Apache License, Version 2.0 (the "License");
7*df25739fSMilanka Ringwald * you may not use this file except in compliance with the License.
8*df25739fSMilanka Ringwald * You may obtain a copy of the License at:
9*df25739fSMilanka Ringwald *
10*df25739fSMilanka Ringwald * http://www.apache.org/licenses/LICENSE-2.0
11*df25739fSMilanka Ringwald *
12*df25739fSMilanka Ringwald * Unless required by applicable law or agreed to in writing, software
13*df25739fSMilanka Ringwald * distributed under the License is distributed on an "AS IS" BASIS,
14*df25739fSMilanka Ringwald * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*df25739fSMilanka Ringwald * See the License for the specific language governing permissions and
16*df25739fSMilanka Ringwald * limitations under the License.
17*df25739fSMilanka Ringwald *
18*df25739fSMilanka Ringwald ******************************************************************************/
19*df25739fSMilanka Ringwald
20*df25739fSMilanka Ringwald /**********************************************************************************
21*df25739fSMilanka Ringwald $Revision: #1 $
22*df25739fSMilanka Ringwald ***********************************************************************************/
23*df25739fSMilanka Ringwald
24*df25739fSMilanka Ringwald /**
25*df25739fSMilanka Ringwald @file
26*df25739fSMilanka Ringwald This file exposes OINA-specific interfaces to decoder functions.
27*df25739fSMilanka Ringwald
28*df25739fSMilanka Ringwald @ingroup codec_internal
29*df25739fSMilanka Ringwald */
30*df25739fSMilanka Ringwald
31*df25739fSMilanka Ringwald /**
32*df25739fSMilanka Ringwald @addtogroup codec_internal
33*df25739fSMilanka Ringwald @{
34*df25739fSMilanka Ringwald */
35*df25739fSMilanka Ringwald
36*df25739fSMilanka Ringwald
37*df25739fSMilanka Ringwald #include <oi_codec_sbc_private.h>
38*df25739fSMilanka Ringwald
OI_CODEC_SBC_DecoderConfigureRaw(OI_CODEC_SBC_DECODER_CONTEXT * context,OI_BOOL enhanced,OI_UINT8 frequency,OI_UINT8 mode,OI_UINT8 subbands,OI_UINT8 blocks,OI_UINT8 alloc,OI_UINT8 maxBitpool)39*df25739fSMilanka Ringwald OI_STATUS OI_CODEC_SBC_DecoderConfigureRaw(OI_CODEC_SBC_DECODER_CONTEXT *context,
40*df25739fSMilanka Ringwald OI_BOOL enhanced,
41*df25739fSMilanka Ringwald OI_UINT8 frequency,
42*df25739fSMilanka Ringwald OI_UINT8 mode,
43*df25739fSMilanka Ringwald OI_UINT8 subbands,
44*df25739fSMilanka Ringwald OI_UINT8 blocks,
45*df25739fSMilanka Ringwald OI_UINT8 alloc,
46*df25739fSMilanka Ringwald OI_UINT8 maxBitpool)
47*df25739fSMilanka Ringwald {
48*df25739fSMilanka Ringwald if (frequency > SBC_FREQ_48000) {
49*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
50*df25739fSMilanka Ringwald }
51*df25739fSMilanka Ringwald
52*df25739fSMilanka Ringwald if (enhanced) {
53*df25739fSMilanka Ringwald #ifdef SBC_ENHANCED
54*df25739fSMilanka Ringwald if (subbands != SBC_SUBBANDS_8) {
55*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
56*df25739fSMilanka Ringwald }
57*df25739fSMilanka Ringwald #else
58*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
59*df25739fSMilanka Ringwald #endif
60*df25739fSMilanka Ringwald }
61*df25739fSMilanka Ringwald
62*df25739fSMilanka Ringwald if (mode > SBC_JOINT_STEREO) {
63*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
64*df25739fSMilanka Ringwald }
65*df25739fSMilanka Ringwald
66*df25739fSMilanka Ringwald if (subbands > SBC_SUBBANDS_8) {
67*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
68*df25739fSMilanka Ringwald }
69*df25739fSMilanka Ringwald
70*df25739fSMilanka Ringwald if (blocks > SBC_BLOCKS_16) {
71*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
72*df25739fSMilanka Ringwald }
73*df25739fSMilanka Ringwald
74*df25739fSMilanka Ringwald if (alloc > SBC_SNR) {
75*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
76*df25739fSMilanka Ringwald }
77*df25739fSMilanka Ringwald
78*df25739fSMilanka Ringwald #ifdef SBC_ENHANCED
79*df25739fSMilanka Ringwald context->common.frameInfo.enhanced = enhanced;
80*df25739fSMilanka Ringwald #else
81*df25739fSMilanka Ringwald context->common.frameInfo.enhanced = FALSE;
82*df25739fSMilanka Ringwald #endif
83*df25739fSMilanka Ringwald context->common.frameInfo.freqIndex = frequency;
84*df25739fSMilanka Ringwald context->common.frameInfo.mode = mode;
85*df25739fSMilanka Ringwald context->common.frameInfo.subbands = subbands;
86*df25739fSMilanka Ringwald context->common.frameInfo.blocks = blocks;
87*df25739fSMilanka Ringwald context->common.frameInfo.alloc = alloc;
88*df25739fSMilanka Ringwald context->common.frameInfo.bitpool = maxBitpool;
89*df25739fSMilanka Ringwald
90*df25739fSMilanka Ringwald OI_SBC_ExpandFrameFields(&context->common.frameInfo);
91*df25739fSMilanka Ringwald
92*df25739fSMilanka Ringwald if (context->common.frameInfo.nrof_channels >= context->common.pcmStride) {
93*df25739fSMilanka Ringwald return OI_STATUS_INVALID_PARAMETERS;
94*df25739fSMilanka Ringwald }
95*df25739fSMilanka Ringwald
96*df25739fSMilanka Ringwald return OI_OK;
97*df25739fSMilanka Ringwald }
98*df25739fSMilanka Ringwald
99*df25739fSMilanka Ringwald
100*df25739fSMilanka Ringwald
OI_CODEC_SBC_DecodeRaw(OI_CODEC_SBC_DECODER_CONTEXT * context,OI_UINT8 bitpool,const OI_BYTE ** frameData,OI_UINT32 * frameBytes,OI_INT16 * pcmData,OI_UINT32 * pcmBytes)101*df25739fSMilanka Ringwald OI_STATUS OI_CODEC_SBC_DecodeRaw(OI_CODEC_SBC_DECODER_CONTEXT *context,
102*df25739fSMilanka Ringwald OI_UINT8 bitpool,
103*df25739fSMilanka Ringwald const OI_BYTE **frameData,
104*df25739fSMilanka Ringwald OI_UINT32 *frameBytes,
105*df25739fSMilanka Ringwald OI_INT16 *pcmData,
106*df25739fSMilanka Ringwald OI_UINT32 *pcmBytes)
107*df25739fSMilanka Ringwald {
108*df25739fSMilanka Ringwald return internal_DecodeRaw(context,
109*df25739fSMilanka Ringwald bitpool,
110*df25739fSMilanka Ringwald frameData,
111*df25739fSMilanka Ringwald frameBytes,
112*df25739fSMilanka Ringwald pcmData,
113*df25739fSMilanka Ringwald pcmBytes);
114*df25739fSMilanka Ringwald }
115*df25739fSMilanka Ringwald
OI_CODEC_SBC_DecoderLimit(OI_CODEC_SBC_DECODER_CONTEXT * context,OI_BOOL enhanced,OI_UINT8 subbands)116*df25739fSMilanka Ringwald OI_STATUS OI_CODEC_SBC_DecoderLimit(OI_CODEC_SBC_DECODER_CONTEXT *context,
117*df25739fSMilanka Ringwald OI_BOOL enhanced,
118*df25739fSMilanka Ringwald OI_UINT8 subbands)
119*df25739fSMilanka Ringwald {
120*df25739fSMilanka Ringwald if (enhanced)
121*df25739fSMilanka Ringwald {
122*df25739fSMilanka Ringwald #ifdef SBC_ENHANCED
123*df25739fSMilanka Ringwald context->enhancedEnabled = TRUE;
124*df25739fSMilanka Ringwald #else
125*df25739fSMilanka Ringwald context->enhancedEnabled = FALSE;
126*df25739fSMilanka Ringwald #endif
127*df25739fSMilanka Ringwald }
128*df25739fSMilanka Ringwald else
129*df25739fSMilanka Ringwald {
130*df25739fSMilanka Ringwald context->enhancedEnabled = FALSE;
131*df25739fSMilanka Ringwald }
132*df25739fSMilanka Ringwald context->restrictSubbands = subbands;
133*df25739fSMilanka Ringwald context->limitFrameFormat = TRUE;
134*df25739fSMilanka Ringwald return OI_OK;
135*df25739fSMilanka Ringwald }
136*df25739fSMilanka Ringwald
137*df25739fSMilanka Ringwald
138*df25739fSMilanka Ringwald /**
139*df25739fSMilanka Ringwald @}
140*df25739fSMilanka Ringwald */
141