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);
44b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
45b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burkeprivate:
46b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    enum {
4739a3113539f9bcc86a8efe562780c23ac8731098Andreas Huber        kNumInputBuffers        = 4,
48eb61431af13741aa8b7e57a39f69bba5a6c190dcAndreas Huber        kNumOutputBuffers       = 4,
49b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    };
50b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
51b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    HANDLE_AACDECODER mAACDecoder;
52b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    CStreamInfo *mStreamInfo;
53b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    bool mIsADTS;
5441914becfd019c619783d875c61ef71db0e67400Marco Nelissen    bool mIsFirst;
55b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    size_t mInputBufferCount;
56b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    bool mSignalledError;
57b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    int64_t mAnchorTimeUs;
58b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    int64_t mNumSamplesOutput;
59b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
60b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    enum {
61b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke        NONE,
62b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke        AWAITING_DISABLED,
63b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke        AWAITING_ENABLED
64b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    } mOutputPortSettingsChange;
65b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
66b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    void initPorts();
67b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    status_t initDecoder();
68b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    bool isConfigured() const;
691adacd921319ec52fac1a4596ab6eaf8689e6a7dDave Burke    void maybeConfigureDownmix() const;
70b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
71b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke    DISALLOW_EVIL_CONSTRUCTORS(SoftAAC2);
72b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke};
73b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
74b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke}  // namespace android
75b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke
76b7ddcc9460f488f0b032aeb27b52a423318a97eaDave Burke#endif  // SOFT_AAC_2_H_
77