127c174483a8ae9688d5d4897c19074f62c7f1701James Dong/*
227c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Copyright (C) 2010 The Android Open Source Project
327c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
427c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Licensed under the Apache License, Version 2.0 (the "License");
527c174483a8ae9688d5d4897c19074f62c7f1701James Dong * you may not use this file except in compliance with the License.
627c174483a8ae9688d5d4897c19074f62c7f1701James Dong * You may obtain a copy of the License at
727c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
827c174483a8ae9688d5d4897c19074f62c7f1701James Dong *      http://www.apache.org/licenses/LICENSE-2.0
927c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
1027c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Unless required by applicable law or agreed to in writing, software
1127c174483a8ae9688d5d4897c19074f62c7f1701James Dong * distributed under the License is distributed on an "AS IS" BASIS,
1227c174483a8ae9688d5d4897c19074f62c7f1701James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327c174483a8ae9688d5d4897c19074f62c7f1701James Dong * See the License for the specific language governing permissions and
1427c174483a8ae9688d5d4897c19074f62c7f1701James Dong * limitations under the License.
1527c174483a8ae9688d5d4897c19074f62c7f1701James Dong */
1627c174483a8ae9688d5d4897c19074f62c7f1701James Dong
17cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#ifndef MPEG2_TS_EXTRACTOR_H_
18cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#define MPEG2_TS_EXTRACTOR_H_
20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/foundation/ABase.h>
22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/MediaExtractor.h>
23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/threads.h>
24cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/Vector.h>
25cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
26cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Hubernamespace android {
27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
285a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage;
29cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct AnotherPacketSource;
30cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct ATSParser;
31cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct DataSource;
32cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSSource;
33cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct String8;
34a44153c1a57202fb538659eb50706e60454d6273Andreas Huberstruct LiveSession;
35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor {
37cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    MPEG2TSExtractor(const sp<DataSource> &source);
38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual size_t countTracks();
40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MediaSource> getTrack(size_t index);
41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getMetaData();
44cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
45bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    virtual uint32_t flags() const;
46bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber
47a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    void setLiveSession(const sp<LiveSession> &liveSession);
48bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    void seekTo(int64_t seekTimeUs);
49cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate:
51cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    friend struct MPEG2TSSource;
52cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
53bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    mutable Mutex mLock;
54cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
55cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<DataSource> mDataSource;
56a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    sp<LiveSession> mLiveSession;
57bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber
58cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<ATSParser> mParser;
59cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
60cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Vector<sp<AnotherPacketSource> > mSourceImpls;
61cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
62c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    off64_t mOffset;
63cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
64cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    void init();
65cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    status_t feedMore();
66cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
67cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
68cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber};
69cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
70cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberbool SniffMPEG2TS(
715a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
725a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
73cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
74cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}  // namespace android
75cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
76cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif  // MPEG2_TS_EXTRACTOR_H_
77