1b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke/*
2b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * Copyright (C) 2012 The Android Open Source Project
3b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke *
4b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * Licensed under the Apache License, Version 2.0 (the "License");
5b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * you may not use this file except in compliance with the License.
6b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * You may obtain a copy of the License at
7b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke *
8b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke *      http://www.apache.org/licenses/LICENSE-2.0
9b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke *
10b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * Unless required by applicable law or agreed to in writing, software
11b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * distributed under the License is distributed on an "AS IS" BASIS,
12b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * See the License for the specific language governing permissions and
14b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke * limitations under the License.
15b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke */
16b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
17b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke#ifndef SOFT_AAC_2_H_
18b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke#define SOFT_AAC_2_H_
19b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
20b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke#include "SimpleSoftOMXComponent.h"
21b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
22b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke#include "aacdecoder_lib.h"
23b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
24b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burkenamespace android {
25b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
26b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burkestruct SoftAAC2 : public SimpleSoftOMXComponent {
27b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    SoftAAC2(const char *name,
28b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke            const OMX_CALLBACKTYPE *callbacks,
29b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke            OMX_PTR appData,
30b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke            OMX_COMPONENTTYPE **component);
31b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
32b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burkeprotected:
33b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    virtual ~SoftAAC2();
34b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
35b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    virtual OMX_ERRORTYPE internalGetParameter(
36b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke            OMX_INDEXTYPE index, OMX_PTR params);
37b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
38b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    virtual OMX_ERRORTYPE internalSetParameter(
39b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke            OMX_INDEXTYPE index, const OMX_PTR params);
40b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
41b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    virtual void onQueueFilled(OMX_U32 portIndex);
42b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    virtual void onPortFlushCompleted(OMX_U32 portIndex);
43b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled);
441c80821b0720175478981ac43e7ca9567b58b7c5Marco Nelissen    virtual void onReset();
45b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
46b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burkeprivate:
47b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    enum {
4839a3113539f9bcc86a8efe562780c23ac8731098Andreas Huber        kNumInputBuffers        = 4,
49eb61431af13741aa8b7e57a39f69bba5a6c190dcAndreas Huber        kNumOutputBuffers       = 4,
50b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    };
51b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
52b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    HANDLE_AACDECODER mAACDecoder;
53b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    CStreamInfo *mStreamInfo;
54b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    bool mIsADTS;
55b3ac921cae96686ec0902796bb8f8ef99ae08abdMarco Nelissen    bool mDecoderHasData;
56b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    size_t mInputBufferCount;
57b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    bool mSignalledError;
58b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    int64_t mAnchorTimeUs;
59b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    int64_t mNumSamplesOutput;
60b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
61b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    enum {
62b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke        NONE,
63b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke        AWAITING_DISABLED,
64b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke        AWAITING_ENABLED
65b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    } mOutputPortSettingsChange;
66b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
67b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    void initPorts();
68b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    status_t initDecoder();
69b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    bool isConfigured() const;
701adacd921319ec52fac1a4596ab6eaf8689e6a7dDave Burke    void maybeConfigureDownmix() const;
71b3ac921cae96686ec0902796bb8f8ef99ae08abdMarco Nelissen    void drainDecoder();
72b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
73b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    DISALLOW_EVIL_CONSTRUCTORS(SoftAAC2);
74b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke};
75b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
76b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke}  // namespace android
77b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
78b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke#endif  // SOFT_AAC_2_H_
79