| /****************************************************************************** |
| * |
| * Copyright (C) 2014 The Android Open Source Project |
| * Copyright 2006 Open Interface North America, Inc. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| |
| /********************************************************************************** |
| $Revision: #1 $ |
| ***********************************************************************************/ |
| |
| /** |
| @file |
| This file exposes OINA-specific interfaces to decoder functions. |
| |
| @ingroup codec_internal |
| */ |
| |
| /** |
| @addtogroup codec_internal |
| @{ |
| */ |
| |
| |
| #include <oi_codec_sbc_private.h> |
| |
| OI_STATUS OI_CODEC_SBC_DecoderConfigureRaw(OI_CODEC_SBC_DECODER_CONTEXT *context, |
| OI_BOOL enhanced, |
| uint8_t frequency, |
| uint8_t mode, |
| uint8_t subbands, |
| uint8_t blocks, |
| uint8_t alloc, |
| uint8_t maxBitpool) |
| { |
| if (frequency > SBC_FREQ_48000) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| |
| if (enhanced) { |
| #ifdef SBC_ENHANCED |
| if (subbands != SBC_SUBBANDS_8) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| #else |
| return OI_STATUS_INVALID_PARAMETERS; |
| #endif |
| } |
| |
| if (mode > SBC_JOINT_STEREO) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| |
| if (subbands > SBC_SUBBANDS_8) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| |
| if (blocks > SBC_BLOCKS_16) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| |
| if (alloc > SBC_SNR) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| |
| #ifdef SBC_ENHANCED |
| context->common.frameInfo.enhanced = enhanced; |
| #else |
| context->common.frameInfo.enhanced = FALSE; |
| #endif |
| context->common.frameInfo.freqIndex = frequency; |
| context->common.frameInfo.mode = mode; |
| context->common.frameInfo.subbands = subbands; |
| context->common.frameInfo.blocks = blocks; |
| context->common.frameInfo.alloc = alloc; |
| context->common.frameInfo.bitpool = maxBitpool; |
| |
| OI_SBC_ExpandFrameFields(&context->common.frameInfo); |
| |
| if (context->common.frameInfo.nrof_channels >= context->common.pcmStride) { |
| return OI_STATUS_INVALID_PARAMETERS; |
| } |
| |
| return OI_OK; |
| } |
| |
| |
| |
| OI_STATUS OI_CODEC_SBC_DecodeRaw(OI_CODEC_SBC_DECODER_CONTEXT *context, |
| uint8_t bitpool, |
| const OI_BYTE **frameData, |
| uint32_t *frameBytes, |
| int16_t *pcmData, |
| uint32_t *pcmBytes) |
| { |
| return internal_DecodeRaw(context, |
| bitpool, |
| frameData, |
| frameBytes, |
| pcmData, |
| pcmBytes); |
| } |
| |
| OI_STATUS OI_CODEC_SBC_DecoderLimit(OI_CODEC_SBC_DECODER_CONTEXT *context, |
| OI_BOOL enhanced, |
| uint8_t subbands) |
| { |
| if (enhanced) |
| { |
| #ifdef SBC_ENHANCED |
| context->enhancedEnabled = TRUE; |
| #else |
| context->enhancedEnabled = FALSE; |
| #endif |
| } |
| else |
| { |
| context->enhancedEnabled = FALSE; |
| } |
| context->restrictSubbands = subbands; |
| context->limitFrameFormat = TRUE; |
| return OI_OK; |
| } |
| |
| |
| /** |
| @} |
| */ |