1aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke/* 2aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * Copyright (C) 2012 The Android Open Source Project 3aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * 4aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * Licensed under the Apache License, Version 2.0 (the "License"); 5aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * you may not use this file except in compliance with the License. 6aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * You may obtain a copy of the License at 7aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * 8aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * http://www.apache.org/licenses/LICENSE-2.0 9aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * 10aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * Unless required by applicable law or agreed to in writing, software 11aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * distributed under the License is distributed on an "AS IS" BASIS, 12aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * See the License for the specific language governing permissions and 14aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke * limitations under the License. 15aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke */ 16aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 17aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#ifndef SOFT_AAC_ENCODER_2_H_ 18aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 19aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#define SOFT_AAC_ENCODER_2_H_ 20aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 21aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#include "SimpleSoftOMXComponent.h" 22aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 23aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#include "aacenc_lib.h" 24aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 25aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkenamespace android { 26aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 27aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkestruct SoftAACEncoder2 : public SimpleSoftOMXComponent { 28aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke SoftAACEncoder2( 29aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke const char *name, 30aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke const OMX_CALLBACKTYPE *callbacks, 31aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_PTR appData, 32aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_COMPONENTTYPE **component); 33aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 34aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkeprotected: 35aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke virtual ~SoftAACEncoder2(); 36aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 37aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke virtual OMX_ERRORTYPE internalGetParameter( 38aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_INDEXTYPE index, OMX_PTR params); 39aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 40aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke virtual OMX_ERRORTYPE internalSetParameter( 41aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_INDEXTYPE index, const OMX_PTR params); 42aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 43aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke virtual void onQueueFilled(OMX_U32 portIndex); 44aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 45aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burkeprivate: 46aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke enum { 47aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke kNumBuffers = 4, 48aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke kNumSamplesPerFrame = 1024 49aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke }; 50aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 51aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke HANDLE_AACENCODER mAACEncoder; 52aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 53aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_U32 mNumChannels; 54aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_U32 mSampleRate; 55aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_U32 mBitRate; 56b97cc6a9a3c81215e365c61b071a932073b56ff2Jean-Michel Trivi OMX_S32 mSBRMode; 57b97cc6a9a3c81215e365c61b071a932073b56ff2Jean-Michel Trivi OMX_S32 mSBRRatio; 58aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke OMX_U32 mAACProfile; 59aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 60aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke bool mSentCodecSpecificData; 61aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke size_t mInputSize; 62aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke int16_t *mInputFrame; 63aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke int64_t mInputTimeUs; 64aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 65aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke bool mSawInputEOS; 66aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 67aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke bool mSignalledError; 68aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 69aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke void initPorts(); 70aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke status_t initEncoder(); 71aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 72aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke status_t setAudioParams(); 73aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 74aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke DISALLOW_EVIL_CONSTRUCTORS(SoftAACEncoder2); 75aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke}; 76aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 77aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke} // namespace android 78aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke 79aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke#endif // SOFT_AAC_ENCODER_2_H_ 80