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