1072f5247ef893e683728263a540bb93daafda376Andreas Huber/* 2072f5247ef893e683728263a540bb93daafda376Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3072f5247ef893e683728263a540bb93daafda376Andreas Huber * 4072f5247ef893e683728263a540bb93daafda376Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5072f5247ef893e683728263a540bb93daafda376Andreas Huber * you may not use this file except in compliance with the License. 6072f5247ef893e683728263a540bb93daafda376Andreas Huber * You may obtain a copy of the License at 7072f5247ef893e683728263a540bb93daafda376Andreas Huber * 8072f5247ef893e683728263a540bb93daafda376Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9072f5247ef893e683728263a540bb93daafda376Andreas Huber * 10072f5247ef893e683728263a540bb93daafda376Andreas Huber * Unless required by applicable law or agreed to in writing, software 11072f5247ef893e683728263a540bb93daafda376Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12072f5247ef893e683728263a540bb93daafda376Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13072f5247ef893e683728263a540bb93daafda376Andreas Huber * See the License for the specific language governing permissions and 14072f5247ef893e683728263a540bb93daafda376Andreas Huber * limitations under the License. 15072f5247ef893e683728263a540bb93daafda376Andreas Huber */ 16072f5247ef893e683728263a540bb93daafda376Andreas Huber 17072f5247ef893e683728263a540bb93daafda376Andreas Huber#ifndef MATROSKA_EXTRACTOR_H_ 18072f5247ef893e683728263a540bb93daafda376Andreas Huber 19072f5247ef893e683728263a540bb93daafda376Andreas Huber#define MATROSKA_EXTRACTOR_H_ 20072f5247ef893e683728263a540bb93daafda376Andreas Huber 21072f5247ef893e683728263a540bb93daafda376Andreas Huber#include <media/stagefright/MediaExtractor.h> 22072f5247ef893e683728263a540bb93daafda376Andreas Huber#include <utils/Vector.h> 238885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber#include <utils/threads.h> 24072f5247ef893e683728263a540bb93daafda376Andreas Huber 25072f5247ef893e683728263a540bb93daafda376Andreas Hubernamespace mkvparser { 26072f5247ef893e683728263a540bb93daafda376Andreas Huberstruct Segment; 27072f5247ef893e683728263a540bb93daafda376Andreas Huber}; 28072f5247ef893e683728263a540bb93daafda376Andreas Huber 29072f5247ef893e683728263a540bb93daafda376Andreas Hubernamespace android { 30072f5247ef893e683728263a540bb93daafda376Andreas Huber 31efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huberstruct AMessage; 32072f5247ef893e683728263a540bb93daafda376Andreas Huberclass String8; 33072f5247ef893e683728263a540bb93daafda376Andreas Huber 34072f5247ef893e683728263a540bb93daafda376Andreas Huberstruct DataSourceReader; 35072f5247ef893e683728263a540bb93daafda376Andreas Huberstruct MatroskaSource; 36072f5247ef893e683728263a540bb93daafda376Andreas Huber 37072f5247ef893e683728263a540bb93daafda376Andreas Huberstruct MatroskaExtractor : public MediaExtractor { 38072f5247ef893e683728263a540bb93daafda376Andreas Huber MatroskaExtractor(const sp<DataSource> &source); 39072f5247ef893e683728263a540bb93daafda376Andreas Huber 40072f5247ef893e683728263a540bb93daafda376Andreas Huber virtual size_t countTracks(); 41072f5247ef893e683728263a540bb93daafda376Andreas Huber 42072f5247ef893e683728263a540bb93daafda376Andreas Huber virtual sp<MediaSource> getTrack(size_t index); 43072f5247ef893e683728263a540bb93daafda376Andreas Huber 44072f5247ef893e683728263a540bb93daafda376Andreas Huber virtual sp<MetaData> getTrackMetaData( 45072f5247ef893e683728263a540bb93daafda376Andreas Huber size_t index, uint32_t flags); 46072f5247ef893e683728263a540bb93daafda376Andreas Huber 47072f5247ef893e683728263a540bb93daafda376Andreas Huber virtual sp<MetaData> getMetaData(); 48072f5247ef893e683728263a540bb93daafda376Andreas Huber 498885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber virtual uint32_t flags() const; 508885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber 51072f5247ef893e683728263a540bb93daafda376Andreas Huberprotected: 52072f5247ef893e683728263a540bb93daafda376Andreas Huber virtual ~MatroskaExtractor(); 53072f5247ef893e683728263a540bb93daafda376Andreas Huber 54072f5247ef893e683728263a540bb93daafda376Andreas Huberprivate: 55072f5247ef893e683728263a540bb93daafda376Andreas Huber friend struct MatroskaSource; 568885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber friend struct BlockIterator; 57072f5247ef893e683728263a540bb93daafda376Andreas Huber 58072f5247ef893e683728263a540bb93daafda376Andreas Huber struct TrackInfo { 59072f5247ef893e683728263a540bb93daafda376Andreas Huber unsigned long mTrackNum; 60072f5247ef893e683728263a540bb93daafda376Andreas Huber sp<MetaData> mMeta; 61072f5247ef893e683728263a540bb93daafda376Andreas Huber }; 628885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber 638885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber Mutex mLock; 64072f5247ef893e683728263a540bb93daafda376Andreas Huber Vector<TrackInfo> mTracks; 65072f5247ef893e683728263a540bb93daafda376Andreas Huber 66072f5247ef893e683728263a540bb93daafda376Andreas Huber sp<DataSource> mDataSource; 67072f5247ef893e683728263a540bb93daafda376Andreas Huber DataSourceReader *mReader; 68072f5247ef893e683728263a540bb93daafda376Andreas Huber mkvparser::Segment *mSegment; 696bdf2edba4de7f971639e8a50e938d218b6d7299Andreas Huber bool mExtractedThumbnails; 708885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber bool mIsLiveStreaming; 716e37cf90f90678a083eef57c62d47831fd208f48Andreas Huber bool mIsWebm; 72072f5247ef893e683728263a540bb93daafda376Andreas Huber 73072f5247ef893e683728263a540bb93daafda376Andreas Huber void addTracks(); 746bdf2edba4de7f971639e8a50e938d218b6d7299Andreas Huber void findThumbnails(); 75072f5247ef893e683728263a540bb93daafda376Andreas Huber 768885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber bool isLiveStreaming() const; 778885e679fc65ff856898fccd6fca8a388f42a4e5Andreas Huber 78072f5247ef893e683728263a540bb93daafda376Andreas Huber MatroskaExtractor(const MatroskaExtractor &); 79072f5247ef893e683728263a540bb93daafda376Andreas Huber MatroskaExtractor &operator=(const MatroskaExtractor &); 80072f5247ef893e683728263a540bb93daafda376Andreas Huber}; 81072f5247ef893e683728263a540bb93daafda376Andreas Huber 82072f5247ef893e683728263a540bb93daafda376Andreas Huberbool SniffMatroska( 83efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 84efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber sp<AMessage> *); 85072f5247ef893e683728263a540bb93daafda376Andreas Huber 86072f5247ef893e683728263a540bb93daafda376Andreas Huber} // namespace android 87072f5247ef893e683728263a540bb93daafda376Andreas Huber 88072f5247ef893e683728263a540bb93daafda376Andreas Huber#endif // MATROSKA_EXTRACTOR_H_ 89