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