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