MatroskaExtractor.h revision 5a1c3529e4fa2f8a11054181294e0ce79fff8dd3
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> 23093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 24093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Hubernamespace mkvparser { 25093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct Segment; 26093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber}; 27093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 28093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Hubernamespace android { 29093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 305a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage; 31093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberclass String8; 32093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 33093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct DataSourceReader; 34093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct MatroskaSource; 35093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 36093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct MatroskaExtractor : public MediaExtractor { 37093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber MatroskaExtractor(const sp<DataSource> &source); 38093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 39093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual size_t countTracks(); 40093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 41093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual sp<MediaSource> getTrack(size_t index); 42093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 43093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual sp<MetaData> getTrackMetaData( 44093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber size_t index, uint32_t flags); 45093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 46093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual sp<MetaData> getMetaData(); 47093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 48093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberprotected: 49093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber virtual ~MatroskaExtractor(); 50093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 51093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberprivate: 52093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber friend struct MatroskaSource; 53093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 54093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber struct TrackInfo { 55093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber unsigned long mTrackNum; 56093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber sp<MetaData> mMeta; 57093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber }; 58093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber Vector<TrackInfo> mTracks; 59093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 60093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber sp<DataSource> mDataSource; 61093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber DataSourceReader *mReader; 62093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber mkvparser::Segment *mSegment; 635279d1d8c19e5fdbb177805db0da8e8aadac3079Andreas Huber bool mExtractedThumbnails; 64093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 65093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber void addTracks(); 665279d1d8c19e5fdbb177805db0da8e8aadac3079Andreas Huber void findThumbnails(); 67093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 68093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber MatroskaExtractor(const MatroskaExtractor &); 69093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber MatroskaExtractor &operator=(const MatroskaExtractor &); 70093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber}; 71093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 72093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberbool SniffMatroska( 735a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 745a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber sp<AMessage> *); 75093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 76093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber} // namespace android 77093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber 78093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#endif // MATROSKA_EXTRACTOR_H_ 79