1c5b0abf900474b204c367093984ff60da4fba09cGloria Wang/*
2c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * Copyright (C) 2011 The Android Open Source Project
3c5b0abf900474b204c367093984ff60da4fba09cGloria Wang *
4c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * Licensed under the Apache License, Version 2.0 (the "License");
5c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * you may not use this file except in compliance with the License.
6c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * You may obtain a copy of the License at
7c5b0abf900474b204c367093984ff60da4fba09cGloria Wang *
8c5b0abf900474b204c367093984ff60da4fba09cGloria Wang *      http://www.apache.org/licenses/LICENSE-2.0
9c5b0abf900474b204c367093984ff60da4fba09cGloria Wang *
10c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * Unless required by applicable law or agreed to in writing, software
11c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * distributed under the License is distributed on an "AS IS" BASIS,
12c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * See the License for the specific language governing permissions and
14c5b0abf900474b204c367093984ff60da4fba09cGloria Wang * limitations under the License.
15c5b0abf900474b204c367093984ff60da4fba09cGloria Wang */
16c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
17c5b0abf900474b204c367093984ff60da4fba09cGloria Wang#ifndef AAC_EXTRACTOR_H_
18c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
19c5b0abf900474b204c367093984ff60da4fba09cGloria Wang#define AAC_EXTRACTOR_H_
20c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
21c5b0abf900474b204c367093984ff60da4fba09cGloria Wang#include <media/stagefright/MediaExtractor.h>
22c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
23c5b0abf900474b204c367093984ff60da4fba09cGloria Wang#include <utils/Vector.h>
24c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
25c5b0abf900474b204c367093984ff60da4fba09cGloria Wangnamespace android {
26c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
27c5b0abf900474b204c367093984ff60da4fba09cGloria Wangstruct AMessage;
28c5b0abf900474b204c367093984ff60da4fba09cGloria Wangclass String8;
29c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
30c5b0abf900474b204c367093984ff60da4fba09cGloria Wangclass AACExtractor : public MediaExtractor {
31c5b0abf900474b204c367093984ff60da4fba09cGloria Wangpublic:
32c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    AACExtractor(const sp<DataSource> &source);
33c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
34c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    virtual size_t countTracks();
35c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    virtual sp<MediaSource> getTrack(size_t index);
36c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
37c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
38c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    virtual sp<MetaData> getMetaData();
39c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
40c5b0abf900474b204c367093984ff60da4fba09cGloria Wangprotected:
41c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    virtual ~AACExtractor();
42c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
43c5b0abf900474b204c367093984ff60da4fba09cGloria Wangprivate:
44c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    sp<DataSource> mDataSource;
45c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    sp<MetaData> mMeta;
46c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    status_t mInitCheck;
47c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
48c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    Vector<uint64_t> mOffsetVector;
49c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    int64_t mFrameDurationUs;
50c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
51c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    AACExtractor(const AACExtractor &);
52c5b0abf900474b204c367093984ff60da4fba09cGloria Wang    AACExtractor &operator=(const AACExtractor &);
53c5b0abf900474b204c367093984ff60da4fba09cGloria Wang};
54c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
55c5b0abf900474b204c367093984ff60da4fba09cGloria Wangbool SniffAAC(
56c5b0abf900474b204c367093984ff60da4fba09cGloria Wang        const sp<DataSource> &source, String8 *mimeType, float *confidence,
57c5b0abf900474b204c367093984ff60da4fba09cGloria Wang        sp<AMessage> *);
58c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
59c5b0abf900474b204c367093984ff60da4fba09cGloria Wang}  // namespace android
60c5b0abf900474b204c367093984ff60da4fba09cGloria Wang
61c5b0abf900474b204c367093984ff60da4fba09cGloria Wang#endif  // AAC_EXTRACTOR_H_
62