MPEG4Extractor.h revision 693d271e62a3726689ff68f4505ba49228eb94b2
1872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/* 2872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Copyright (C) 2009 The Android Open Source Project 3872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * 4872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * you may not use this file except in compliance with the License. 6872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * You may obtain a copy of the License at 7872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * 8872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * 10872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Unless required by applicable law or agreed to in writing, software 11872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * See the License for the specific language governing permissions and 14872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * limitations under the License. 15872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes */ 16872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 17872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#ifndef MPEG4_EXTRACTOR_H_ 18872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 19872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define MPEG4_EXTRACTOR_H_ 20872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 21872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#include <media/stagefright/MediaExtractor.h> 22872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 23872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesnamespace android { 24872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 25872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass DataSource; 26872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass SampleTable; 27872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass String8; 28872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 29872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass MPEG4Extractor : public MediaExtractor { 30872d4ec7225444d9400d30f9027247deb91012fdElliott Hughespublic: 31872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes // Extractor assumes ownership of "source". 32872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes MPEG4Extractor(const sp<DataSource> &source); 33872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 34872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes size_t countTracks(); 35748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes sp<MediaSource> getTrack(size_t index); 36748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes sp<MetaData> getTrackMetaData(size_t index); 37748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes 38872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesprotected: 39872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes virtual ~MPEG4Extractor(); 40872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 41872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesprivate: 42872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes struct Track { 43872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes Track *next; 44872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes sp<MetaData> meta; 45872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes uint32_t timescale; 46872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes sp<SampleTable> sampleTable; 47872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes }; 48872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 49872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes sp<DataSource> mDataSource; 50872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes bool mHaveMetadata; 51872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 52376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes Track *mFirstTrack, *mLastTrack; 53872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 54a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes uint32_t mHandlerType; 55872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 56872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes status_t readMetaData(); 57872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes status_t parseChunk(off_t *offset, int depth); 58872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 59872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes MPEG4Extractor(const MPEG4Extractor &); 60872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes MPEG4Extractor &operator=(const MPEG4Extractor &); 61872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes}; 62872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 63872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesbool SniffMPEG4( 6468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes const sp<DataSource> &source, String8 *mimeType, float *confidence); 65872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes 66872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} // namespace android 67f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes 68872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#endif // MPEG4_EXTRACTOR_H_ 69872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes