1644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar/* 2644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * Copyright (C) 2018 The Android Open Source Project 3644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * 4644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * Licensed under the Apache License, Version 2.0 (the "License"); 5644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * you may not use this file except in compliance with the License. 6644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * You may obtain a copy of the License at 7644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * 8644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * http://www.apache.org/licenses/LICENSE-2.0 9644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * 10644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * Unless required by applicable law or agreed to in writing, software 11644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * distributed under the License is distributed on an "AS IS" BASIS, 12644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * See the License for the specific language governing permissions and 14644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar * limitations under the License. 15644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar */ 16644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 17644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#ifndef ANDROID_C2_SOFT_XAAC_DEC_H_ 18644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#define ANDROID_C2_SOFT_XAAC_DEC_H_ 19644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 20644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include <SimpleC2Component.h> 21644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 22644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include "ixheaacd_type_def.h" 23644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include "ixheaacd_error_standards.h" 24644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include "ixheaacd_error_handler.h" 25644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include "ixheaacd_apicmd_standards.h" 26644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include "ixheaacd_memory_standards.h" 27644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#include "ixheaacd_aac_config.h" 28644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 29644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#define MAX_MEM_ALLOCS 100 30644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#define MAX_CHANNEL_COUNT 8 /* maximum number of audio channels that can be decoded */ 31644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#define MAX_NUM_BLOCKS 8 /* maximum number of audio blocks that can be decoded */ 32644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 33644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumarextern "C" IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_module_obj, 34644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar WORD32 i_cmd, WORD32 i_idx, pVOID pv_value); 35644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 36644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumarnamespace android { 37644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 38644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumarstruct C2SoftXaacDec : public SimpleC2Component { 39644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar class IntfImpl; 40644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 41644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar C2SoftXaacDec(const char* name, c2_node_id_t id, 42644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar const std::shared_ptr<IntfImpl>& intfImpl); 43644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar virtual ~C2SoftXaacDec(); 44644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 45644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar // From SimpleC2Component 46644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar c2_status_t onInit() override; 47644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar c2_status_t onStop() override; 48644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void onReset() override; 49644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void onRelease() override; 50644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar c2_status_t onFlush_sm() override; 51644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void process( 52644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar const std::unique_ptr<C2Work> &work, 53644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar const std::shared_ptr<C2BlockPool> &pool) override; 54644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar c2_status_t drain( 55644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint32_t drainMode, 56644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar const std::shared_ptr<C2BlockPool> &pool) override; 57644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 58644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumarprivate: 59644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar enum { 60644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar kOutputDrainBufferSize = 2048 * MAX_CHANNEL_COUNT * MAX_NUM_BLOCKS, 61644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar }; 62644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 63644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar std::shared_ptr<IntfImpl> mIntf; 64644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void* mXheaacCodecHandle; 65644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint32_t mInputBufferSize; 66644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint32_t mOutputFrameLength; 67644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int8_t* mInputBuffer; 68644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int8_t* mOutputBuffer; 69644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t mSampFreq; 70644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t mNumChannels; 71644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t mPcmWdSz; 72644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t mChannelMask; 73644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t mNumOutBytes; 74644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint64_t mCurFrameIndex; 75644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint64_t mCurTimestamp; 76644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar bool mIsCodecInitialized; 77644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar bool mIsCodecConfigFlushRequired; 78644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 79644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void* mMemoryArray[MAX_MEM_ALLOCS]; 80644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t mMallocCount; 81644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 82644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar size_t mInputBufferCount __unused; 83644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar size_t mOutputBufferCount __unused; 84644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar bool mSignalledOutputEos; 85644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar bool mSignalledError; 86644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar short* mOutputDrainBuffer; 87644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint32_t mOutputDrainBufferWritePos; 88644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 89644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar status_t initDecoder(); 90644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void configflushDecode(); 91644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int drainDecoder(); 92644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 93644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar void finishWork(const std::unique_ptr<C2Work>& work, 94644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar const std::shared_ptr<C2BlockPool>& pool); 95644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 96644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar status_t initXAACDrc(); 97644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int initXAACDecoder(); 98644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int deInitXAACDecoder(); 99644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int configXAACDecoder(uint8_t* inBuffer, uint32_t inBufferLength); 100644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int decodeXAACStream(uint8_t* inBuffer, 101644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar uint32_t inBufferLength, 102644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t* bytesConsumed, 103644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar int32_t* outBytes); 104644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar IA_ERRORCODE getXAACStreamInfo(); 105644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 106644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar C2_DO_NOT_COPY(C2SoftXaacDec); 107644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar}; 108644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 109644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar} // namespace android 110644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar 111644ade33117e336116ec97fca4c12d8245c12676Rakesh Kumar#endif // C2_SOFT_XAAC_H_ 112