156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen/*
256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * Copyright (C) 2012 The Android Open Source Project
356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen *
456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * Licensed under the Apache License, Version 2.0 (the "License");
556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * you may not use this file except in compliance with the License.
656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * You may obtain a copy of the License at
756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen *
856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen *      http://www.apache.org/licenses/LICENSE-2.0
956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen *
1056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * Unless required by applicable law or agreed to in writing, software
1156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * distributed under the License is distributed on an "AS IS" BASIS,
1256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * See the License for the specific language governing permissions and
1456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen * limitations under the License.
1556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen */
1656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
1756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#ifndef FRAGMENTED_MP4_EXTRACTOR_H_
1856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
1956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#define FRAGMENTED_MP4_EXTRACTOR_H_
2056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
2156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#include "include/FragmentedMP4Parser.h"
2256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
2356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#include <media/stagefright/MediaExtractor.h>
2456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#include <utils/Vector.h>
2556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#include <utils/String8.h>
2656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
2756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissennamespace android {
2856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
2956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenstruct AMessage;
3056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenclass DataSource;
3156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenclass SampleTable;
3256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenclass String8;
3356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
3456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenclass FragmentedMP4Extractor : public MediaExtractor {
3556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenpublic:
3656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    // Extractor assumes ownership of "source".
3756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    FragmentedMP4Extractor(const sp<DataSource> &source);
3856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
3956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    virtual size_t countTracks();
4056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    virtual sp<MediaSource> getTrack(size_t index);
4156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
4256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    virtual sp<MetaData> getMetaData();
4356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    virtual uint32_t flags() const;
4456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
4556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenprotected:
4656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    virtual ~FragmentedMP4Extractor();
4756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
4856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenprivate:
4956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    sp<ALooper> mLooper;
5056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    sp<FragmentedMP4Parser> mParser;
5156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    sp<DataSource> mDataSource;
5256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    status_t mInitCheck;
5356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    size_t mAudioTrackIndex;
5456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    size_t mTrackCount;
5556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
5656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    sp<MetaData> mFileMetaData;
5756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
5856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    Vector<uint32_t> mPath;
5956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
6056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    FragmentedMP4Extractor(const FragmentedMP4Extractor &);
6156997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen    FragmentedMP4Extractor &operator=(const FragmentedMP4Extractor &);
6256997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen};
6356997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
6456997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissenbool SniffFragmentedMP4(
6556997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen        const sp<DataSource> &source, String8 *mimeType, float *confidence,
6656997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen        sp<AMessage> *);
6756997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
6856997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen}  // namespace android
6956997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen
7056997121c5031598fbbba7b7c53980b7fd529c2dMarco Nelissen#endif  // MPEG4_EXTRACTOR_H_
71