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
21d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/MediaExtractor.h>
223d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen#include <media/stagefright/MetaDataBase.h>
2350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#include <utils/Vector.h>
2550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangnamespace android {
2750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
2850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangstruct AMessage;
2950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangclass String8;
3050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
3150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangclass AACExtractor : public MediaExtractor {
3250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangpublic:
333d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen    AACExtractor(DataSourceBase *source, off64_t offset);
3450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
3550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual size_t countTracks();
363d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen    virtual MediaTrack *getTrack(size_t index);
373d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen    virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags);
3850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
393d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen    virtual status_t getMetaData(MetaDataBase& meta);
40a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen    virtual const char * name() { return "AACExtractor"; }
4150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
4250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangprotected:
4350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    virtual ~AACExtractor();
4450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
4550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangprivate:
462a243f08193fe9ff1afe018e9953f01c44ced9deMarco Nelissen    DataSourceBase *mDataSource;
473d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen    MetaDataBase mMeta;
4850c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    status_t mInitCheck;
4950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
5050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    Vector<uint64_t> mOffsetVector;
5150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    int64_t mFrameDurationUs;
5250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
5350c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    AACExtractor(const AACExtractor &);
5450c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang    AACExtractor &operator=(const AACExtractor &);
5550c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang};
5650c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
5750c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wangbool SniffAAC(
583d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen        DataSourceBase *source, String8 *mimeType, float *confidence, off64_t *offset);
5950c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
6050c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang}  // namespace android
6150c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang
6250c44c79d2d7dd6cd1485d9d939f67f80b8da1caGloria Wang#endif  // AAC_EXTRACTOR_H_
63