1093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber/* 2093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * 4093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * you may not use this file except in compliance with the License. 6093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * You may obtain a copy of the License at 7093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * 8093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * 10093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * Unless required by applicable law or agreed to in writing, software 11093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * See the License for the specific language governing permissions and 14093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * limitations under the License. 15093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber */ 16093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 17093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#ifndef MATROSKA_EXTRACTOR_H_ 18093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 19093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#define MATROSKA_EXTRACTOR_H_ 20093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 21093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#include <media/stagefright/MediaExtractor.h> 22093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#include <utils/Vector.h> 23d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber#include <utils/threads.h> 24093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 25093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Hubernamespace mkvparser { 26093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct Segment; 27093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber}; 28093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 29093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Hubernamespace android { 30093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 315a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage; 32093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberclass String8; 33093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 34093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct DataSourceReader; 35093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct MatroskaSource; 36093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 37093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct MatroskaExtractor : public MediaExtractor { 38093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber MatroskaExtractor(const sp<DataSource> &source); 39093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 40093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual size_t countTracks(); 41093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 42093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual sp<MediaSource> getTrack(size_t index); 43093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 44093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual sp<MetaData> getTrackMetaData( 45093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber size_t index, uint32_t flags); 46093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 47093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual sp<MetaData> getMetaData(); 48093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 49d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber virtual uint32_t flags() const; 50d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber 51093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberprotected: 52093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual ~MatroskaExtractor(); 53093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 54093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberprivate: 55093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber friend struct MatroskaSource; 56d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber friend struct BlockIterator; 57093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 58093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber struct TrackInfo { 59093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber unsigned long mTrackNum; 60093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber sp<MetaData> mMeta; 61093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber }; 62d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber 63d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber Mutex mLock; 64093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber Vector<TrackInfo> mTracks; 65093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 66093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber sp<DataSource> mDataSource; 67093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber DataSourceReader *mReader; 68093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber mkvparser::Segment *mSegment; 695279d1d8c19e5fdbb177805db0da8e8aadac3079Andreas Huber bool mExtractedThumbnails; 70d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber bool mIsLiveStreaming; 718c32b164d00d3e4d73764d06956331f09693ef43Andreas Huber bool mIsWebm; 72093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 73093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber void addTracks(); 745279d1d8c19e5fdbb177805db0da8e8aadac3079Andreas Huber void findThumbnails(); 75093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 76d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber bool isLiveStreaming() const; 77d42573cace9db2b5948e540c32beaef80f04153cAndreas Huber 78093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber MatroskaExtractor(const MatroskaExtractor &); 79093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber MatroskaExtractor &operator=(const MatroskaExtractor &); 80093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber}; 81093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 82093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberbool SniffMatroska( 835a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 845a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber sp<AMessage> *); 85093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 86093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber} // namespace android 87093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 88093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#endif // MATROSKA_EXTRACTOR_H_ 89