12b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber/* 22b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * Copyright (C) 2012 The Android Open Source Project 32b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * 42b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 52b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * you may not use this file except in compliance with the License. 62b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * You may obtain a copy of the License at 72b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * 82b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 92b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * 102b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * Unless required by applicable law or agreed to in writing, software 112b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 122b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * See the License for the specific language governing permissions and 142b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber * limitations under the License. 152b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber */ 162b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 172b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#ifndef SOFT_AAC_ENCODER_H_ 182b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 192b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#define SOFT_AAC_ENCODER_H_ 202b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 212b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#include "SimpleSoftOMXComponent.h" 222b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 232b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberstruct VO_AUDIO_CODECAPI; 242b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberstruct VO_MEM_OPERATOR; 252b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 262b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Hubernamespace android { 272b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 282b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberstruct SoftAACEncoder : public SimpleSoftOMXComponent { 292b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber SoftAACEncoder( 302b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber const char *name, 312b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber const OMX_CALLBACKTYPE *callbacks, 322b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_PTR appData, 332b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_COMPONENTTYPE **component); 342b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 352b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberprotected: 362b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber virtual ~SoftAACEncoder(); 372b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 382b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber virtual OMX_ERRORTYPE internalGetParameter( 392b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_INDEXTYPE index, OMX_PTR params); 402b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 412b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber virtual OMX_ERRORTYPE internalSetParameter( 422b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 432b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 442b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber virtual void onQueueFilled(OMX_U32 portIndex); 452b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 462b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huberprivate: 472b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber enum { 482b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber kNumBuffers = 4, 492b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber kNumSamplesPerFrame = 1024, 502b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber }; 512b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 522b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber void *mEncoderHandle; 532b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber VO_AUDIO_CODECAPI *mApiHandle; 542b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber VO_MEM_OPERATOR *mMemOperator; 552b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 562b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_U32 mNumChannels; 572b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_U32 mSampleRate; 582b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber OMX_U32 mBitRate; 592b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 602b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber bool mSentCodecSpecificData; 612b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber size_t mInputSize; 622b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber int16_t *mInputFrame; 632b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber int64_t mInputTimeUs; 642b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 652b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber bool mSawInputEOS; 662b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 672b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber uint8_t mAudioSpecificConfigData[2]; 682b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 692b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber bool mSignalledError; 702b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 712b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber void initPorts(); 722b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber status_t initEncoder(); 732b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 742b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber status_t setAudioSpecificConfigData(); 752b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber status_t setAudioParams(); 762b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 772b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(SoftAACEncoder); 782b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber}; 792b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 802b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber} // namespace android 812b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber 822b1892db4a2ab47bfc09e59a4c11751aea99e4eaAndreas Huber#endif // SOFT_AAC_ENCODER_H_ 83