1ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/******************************************************************************
2ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta *
3ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta *  Copyright (C) 2014 The Android Open Source Project
4ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta *  Copyright 2006 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
20ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/*******************************************************************************
21ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta  $Revision: #1 $
22ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
23ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
24ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/**
25ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@file
26ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaThis file exposes OINA-specific interfaces to decoder functions.
27ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
28ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@ingroup codec_internal
29ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/
30ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
31ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/**
32ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@addtogroup codec_internal
33ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@{
34ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/
35ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
36ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include <oi_codec_sbc_private.h>
37ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
38911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonOI_STATUS OI_CODEC_SBC_DecoderConfigureRaw(
39911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    OI_CODEC_SBC_DECODER_CONTEXT* context, OI_BOOL enhanced, uint8_t frequency,
40911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    uint8_t mode, uint8_t subbands, uint8_t blocks, uint8_t alloc,
41911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    uint8_t maxBitpool) {
42911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (frequency > SBC_FREQ_48000) {
43911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
44911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
45ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
46911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (enhanced) {
47ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef SBC_ENHANCED
48911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    if (subbands != SBC_SUBBANDS_8) {
49911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      return OI_STATUS_INVALID_PARAMETERS;
50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    }
51ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else
52911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
53ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif
54911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
55ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
56911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (mode > SBC_JOINT_STEREO) {
57911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
58911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
59ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
60911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (subbands > SBC_SUBBANDS_8) {
61911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
62911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
63ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
64911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (blocks > SBC_BLOCKS_16) {
65911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
66911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
67ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
68911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (alloc > SBC_SNR) {
69911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
70911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
71ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
72ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef SBC_ENHANCED
73911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.enhanced = enhanced;
74ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else
75911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.enhanced = FALSE;
76ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif
77911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.freqIndex = frequency;
78911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.mode = mode;
79911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.subbands = subbands;
80911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.blocks = blocks;
81911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.alloc = alloc;
82911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->common.frameInfo.bitpool = maxBitpool;
83ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
84911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  OI_SBC_ExpandFrameFields(&context->common.frameInfo);
85ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
86911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (context->common.frameInfo.nrof_channels >= context->common.pcmStride) {
87911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    return OI_STATUS_INVALID_PARAMETERS;
88911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
89ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
90911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return OI_OK;
91ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta}
92ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
93911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonOI_STATUS OI_CODEC_SBC_DecodeRaw(OI_CODEC_SBC_DECODER_CONTEXT* context,
94911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                 uint8_t bitpool, const OI_BYTE** frameData,
95911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                 uint32_t* frameBytes, int16_t* pcmData,
96911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                 uint32_t* pcmBytes) {
97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return internal_DecodeRaw(context, bitpool, frameData, frameBytes, pcmData,
98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                            pcmBytes);
99ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta}
100ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
101911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsonOI_STATUS OI_CODEC_SBC_DecoderLimit(OI_CODEC_SBC_DECODER_CONTEXT* context,
102911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                                    OI_BOOL enhanced, uint8_t subbands) {
103911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (enhanced) {
104ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef SBC_ENHANCED
105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    context->enhancedEnabled = TRUE;
106ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#else
107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    context->enhancedEnabled = FALSE;
108ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif
109911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  } else {
110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    context->enhancedEnabled = FALSE;
111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
112911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->restrictSubbands = subbands;
113911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  context->limitFrameFormat = TRUE;
114911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return OI_OK;
115ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta}
116ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta
117ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/**
118ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta@}
119ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta*/
120