12f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong/*
22f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * Copyright (C) 2010 The Android Open Source Project
32f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong *
42f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * Licensed under the Apache License, Version 2.0 (the "License");
52f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * you may not use this file except in compliance with the License.
62f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * You may obtain a copy of the License at
72f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong *
82f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong *      http://www.apache.org/licenses/LICENSE-2.0
92f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong *
102f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * Unless required by applicable law or agreed to in writing, software
112f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * distributed under the License is distributed on an "AS IS" BASIS,
122f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * See the License for the specific language governing permissions and
142f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * limitations under the License.
152f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong */
162f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong
17a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#ifndef MPEG2_TS_EXTRACTOR_H_
18a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
19a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#define MPEG2_TS_EXTRACTOR_H_
20a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
21a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <media/stagefright/foundation/ABase.h>
22a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <media/stagefright/MediaExtractor.h>
23a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <utils/threads.h>
24a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <utils/Vector.h>
25a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
26a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Hubernamespace android {
27a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
28efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huberstruct AMessage;
29a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct AnotherPacketSource;
30a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct ATSParser;
31a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct DataSource;
32a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct MPEG2TSSource;
33a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct String8;
34b5590846c035a28399818451201aaf1256913ec3Andreas Huberstruct LiveSession;
35a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
36a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor {
37a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    MPEG2TSExtractor(const sp<DataSource> &source);
38a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
39a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    virtual size_t countTracks();
40a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    virtual sp<MediaSource> getTrack(size_t index);
41a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
42a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
43a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    virtual sp<MetaData> getMetaData();
44a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
4554d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber    virtual uint32_t flags() const;
4654d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber
47b5590846c035a28399818451201aaf1256913ec3Andreas Huber    void setLiveSession(const sp<LiveSession> &liveSession);
4854d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber    void seekTo(int64_t seekTimeUs);
49a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
50a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberprivate:
51a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    friend struct MPEG2TSSource;
52a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
5354d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber    mutable Mutex mLock;
54a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
55a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    sp<DataSource> mDataSource;
56b5590846c035a28399818451201aaf1256913ec3Andreas Huber    sp<LiveSession> mLiveSession;
5754d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber
58a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    sp<ATSParser> mParser;
59a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
60a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    Vector<sp<AnotherPacketSource> > mSourceImpls;
61a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
62b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dong    off64_t mOffset;
63a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
64a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    void init();
65a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    status_t feedMore();
66a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
67a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
68a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber};
69a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
70a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberbool SniffMPEG2TS(
71efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
72efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber        sp<AMessage> *);
73a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
74a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber}  // namespace android
75a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber
76a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#endif  // MPEG2_TS_EXTRACTOR_H_
77