1956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong/* 2956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * Copyright (C) 2010 The Android Open Source Project 3956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * 4956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * Licensed under the Apache License, Version 2.0 (the "License"); 5956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * you may not use this file except in compliance with the License. 6956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * You may obtain a copy of the License at 7956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * 8956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * http://www.apache.org/licenses/LICENSE-2.0 9956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * 10956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * Unless required by applicable law or agreed to in writing, software 11956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * distributed under the License is distributed on an "AS IS" BASIS, 12956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * See the License for the specific language governing permissions and 14956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong * limitations under the License. 15956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong */ 16956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 17956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#ifndef AAC_ENCODER_H 18956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define AAC_ENCODER_H 19956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 20956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include <media/stagefright/MediaSource.h> 21956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include <media/stagefright/MetaData.h> 22956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 23956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstruct VO_AUDIO_CODECAPI; 24956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstruct VO_MEM_OPERATOR; 25956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 26956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongnamespace android { 27956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 28956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstruct MediaBufferGroup; 29956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 30956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongclass AACEncoder: public MediaSource { 31956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong public: 32956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong AACEncoder(const sp<MediaSource> &source, const sp<MetaData> &meta); 33956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 34956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong virtual status_t start(MetaData *params); 35956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong virtual status_t stop(); 36956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong virtual sp<MetaData> getFormat(); 37956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong virtual status_t read( 38956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong MediaBuffer **buffer, const ReadOptions *options); 39956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 40956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 41956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong protected: 42956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong virtual ~AACEncoder(); 43956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 44956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong private: 45956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong sp<MediaSource> mSource; 46956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong sp<MetaData> mMeta; 47956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong bool mStarted; 48956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong MediaBufferGroup *mBufferGroup; 49956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong MediaBuffer *mInputBuffer; 50956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong status_t mInitCheck; 51956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong int32_t mSampleRate; 52956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong int32_t mChannels; 53956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong int32_t mBitRate; 54956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong int32_t mFrameCount; 55065d1aff96818df54456053f1574aec8a234d0deJames Dong 56065d1aff96818df54456053f1574aec8a234d0deJames Dong int64_t mAnchorTimeUs; 57065d1aff96818df54456053f1574aec8a234d0deJames Dong int64_t mNumInputSamples; 58065d1aff96818df54456053f1574aec8a234d0deJames Dong 59065d1aff96818df54456053f1574aec8a234d0deJames Dong enum { 60065d1aff96818df54456053f1574aec8a234d0deJames Dong kNumSamplesPerFrame = 1024, 61065d1aff96818df54456053f1574aec8a234d0deJames Dong }; 62065d1aff96818df54456053f1574aec8a234d0deJames Dong 638fff6bb0000e43f02c9d04ca90f941fdefdc1356James Dong int16_t *mInputFrame; 64065d1aff96818df54456053f1574aec8a234d0deJames Dong 65956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong uint8_t mAudioSpecificConfigData[2]; // auido specific data 66956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong void *mEncoderHandle; 67956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong VO_AUDIO_CODECAPI *mApiHandle; 68956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong VO_MEM_OPERATOR *mMemOperator; 69956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 70956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong status_t setAudioSpecificConfigData(); 71956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong status_t initCheck(); 72956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 73956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong AACEncoder& operator=(const AACEncoder &rhs); 74956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong AACEncoder(const AACEncoder& copy); 75956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 76956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong}; 77956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 78956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} 79956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 80956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#endif //#ifndef AAC_ENCODER_H 81956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 82