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