150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang/*
250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * Copyright (C) 2011 The Android Open Source Project
350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang *
450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * Licensed under the Apache License, Version 2.0 (the "License");
550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * you may not use this file except in compliance with the License.
650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * You may obtain a copy of the License at
750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang *
850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang *      http://www.apache.org/licenses/LICENSE-2.0
950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang *
1050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * Unless required by applicable law or agreed to in writing, software
1150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * distributed under the License is distributed on an "AS IS" BASIS,
1250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * See the License for the specific language governing permissions and
1450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang * limitations under the License.
1550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang */
1650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
1750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#ifndef AAC_EXTRACTOR_H_
1850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
1950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#define AAC_EXTRACTOR_H_
2050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#include <media/stagefright/MediaExtractor.h>
2250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#include <utils/Vector.h>
2450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangnamespace android {
2650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangstruct AMessage;
2850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangclass String8;
2950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
3050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangclass AACExtractor : public MediaExtractor {
3150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangpublic:
3214da736f1707a6dbefa52405e910ecb1b3bc2dd2Andreas Huber    AACExtractor(const sp<DataSource> &source, const sp<AMessage> &meta);
3350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
3450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual size_t countTracks();
3550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual sp<MediaSource> getTrack(size_t index);
3650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
3750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
3850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual sp<MetaData> getMetaData();
3950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
4050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangprotected:
4150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual ~AACExtractor();
4250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
4350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangprivate:
4450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    sp<DataSource> mDataSource;
4550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    sp<MetaData> mMeta;
4650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    status_t mInitCheck;
4750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
4850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    Vector<uint64_t> mOffsetVector;
4950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    int64_t mFrameDurationUs;
5050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
5150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    AACExtractor(const AACExtractor &);
5250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    AACExtractor &operator=(const AACExtractor &);
5350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang};
5450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
5550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangbool SniffAAC(
5650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang        const sp<DataSource> &source, String8 *mimeType, float *confidence,
5750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang        sp<AMessage> *);
5850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
5950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang}  // namespace android
6050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
6150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#endif  // AAC_EXTRACTOR_H_
62