1bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber/*
2bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * Copyright (C) 2011 The Android Open Source Project
3bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber *
4bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * you may not use this file except in compliance with the License.
6bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * You may obtain a copy of the License at
7bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber *
8bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber *
10bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * Unless required by applicable law or agreed to in writing, software
11bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * See the License for the specific language governing permissions and
14bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * limitations under the License.
15bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber */
16bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
17bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#ifndef MPEG2_PS_EXTRACTOR_H_
18bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
19bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#define MPEG2_PS_EXTRACTOR_H_
20bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
21bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <media/stagefright/foundation/ABase.h>
22bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <media/stagefright/MediaExtractor.h>
23bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <utils/threads.h>
24bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <utils/KeyedVector.h>
25bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
26bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Hubernamespace android {
27bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
28bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct ABuffer;
29bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct AMessage;
30bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct Track;
31bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct String8;
32bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
33bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct MPEG2PSExtractor : public MediaExtractor {
34bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    MPEG2PSExtractor(const sp<DataSource> &source);
35bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
36bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    virtual size_t countTracks();
37bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    virtual sp<MediaSource> getTrack(size_t index);
38bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
39bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
40bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    virtual sp<MetaData> getMetaData();
41bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
42bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    virtual uint32_t flags() const;
43bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
44bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberprotected:
45bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    virtual ~MPEG2PSExtractor();
46bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
47bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberprivate:
48bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    struct Track;
49bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    struct WrappedTrack;
50bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
51bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    mutable Mutex mLock;
52bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    sp<DataSource> mDataSource;
53bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
54bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    off64_t mOffset;
55bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    status_t mFinalResult;
56bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    sp<ABuffer> mBuffer;
57bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    KeyedVector<unsigned, sp<Track> > mTracks;
58bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    bool mScanning;
59bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
60bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    bool mProgramStreamMapValid;
61bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    KeyedVector<unsigned, unsigned> mStreamTypeByESID;
62bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
63bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    status_t feedMore();
64bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
65bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    status_t dequeueChunk();
66bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    ssize_t dequeuePack();
67bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    ssize_t dequeueSystemHeader();
68bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    ssize_t dequeuePES();
69bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
70bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2PSExtractor);
71bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber};
72bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
73bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberbool SniffMPEG2PS(
74bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
75bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber        sp<AMessage> *);
76bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
77bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber}  // namespace android
78bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
79bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#endif  // MPEG2_PS_EXTRACTOR_H_
80bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber
81