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