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
2886a58cabe322b746ab0eb17f0cade34ed68ba60eBernhard Rosenkränzerclass MediaBufferGroup;
29956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
30b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenclass AACEncoder: public BnMediaSource {
31956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong    public:
32b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        AACEncoder(const sp<IMediaSource> &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:
45b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        sp<IMediaSource>   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