GenericSource2.h revision 1889c3edad32995c0cf26ae2248fe7c957b7ec84
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright 2017 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef GENERIC_SOURCE2_H_
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define GENERIC_SOURCE2_H_
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "NuPlayer2.h"
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "NuPlayer2Source.h"
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "ATSParser.h"
258683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian
2684e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg#include <media/stagefright/MediaBuffer.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <mediaplayer2/mediaplayer2.h>
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
31e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopianclass DecryptHandle;
328683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopianstruct AnotherPacketSource;
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct ARTSPController;
3470081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrickclass DataSource;
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IDataSource;
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IMediaSource;
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct MediaHTTPService;
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct MediaSource;
39e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopianclass MediaBuffer;
40f683e0163a84d93448b9388126902242367cd961Serban Constantinescustruct MediaClock;
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct NuCachedSource2;
425707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown
435707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brownstruct NuPlayer2::GenericSource2 : public NuPlayer2::Source,
445707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown                                   public MediaBufferObserver // Modular DRM
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    GenericSource2(const sp<AMessage> &notify, uid_t uid,
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                   const sp<MediaClock> &mediaClock);
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t setDataSource(
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const sp<MediaHTTPService> &httpService,
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const char *url,
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const KeyedVector<String8, String8> *headers);
538938ed2c8e906fc332301b64787728d4d34da571Dianne Hackborn
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t setDataSource(int fd, int64_t offset, int64_t length);
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t setDataSource(const sp<DataSource>& dataSource);
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t getBufferingSettings(
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            BufferingSettings* buffering /* nonnull */) override;
6051faf46e2958c57dab46d9420e585319125c7c42Andreas Huber    virtual status_t setBufferingSettings(const BufferingSettings& buffering) override;
6151faf46e2958c57dab46d9420e585319125c7c42Andreas Huber
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void prepareAsync();
6313b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown
647746cc318829358bb2c4dc0a03d40a7856a6d13eDianne Hackborn    virtual void start();
657746cc318829358bb2c4dc0a03d40a7856a6d13eDianne Hackborn    virtual void stop();
668938ed2c8e906fc332301b64787728d4d34da571Dianne Hackborn    virtual void pause();
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void resume();
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
69702ea9d42f52fc145090c0f0bfbe64993e4b8b33Brad Fitzpatrick    virtual void disconnect();
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
71a877cd85b5a026384542e3271fc310d6a8fe24c6Brad Fitzpatrick    virtual status_t feedMoreTSData();
72702ea9d42f52fc145090c0f0bfbe64993e4b8b33Brad Fitzpatrick
73702ea9d42f52fc145090c0f0bfbe64993e4b8b33Brad Fitzpatrick    virtual sp<MetaData> getFileFormatMeta() const;
7470081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrick
7570081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrick    virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit);
7670081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrick
7770081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrick    virtual status_t getDuration(int64_t *durationUs);
7870081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrick    virtual size_t getTrackCount() const;
79a877cd85b5a026384542e3271fc310d6a8fe24c6Brad Fitzpatrick    virtual sp<AMessage> getTrackInfo(size_t trackIndex) const;
8070081a1511955f53bd0ed7f2aec9a1bf09f0f379Brad Fitzpatrick    virtual ssize_t getSelectedTrack(media_track_type type) const;
81702ea9d42f52fc145090c0f0bfbe64993e4b8b33Brad Fitzpatrick    virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs);
8283c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    virtual status_t seekTo(
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        int64_t seekTimeUs,
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        MediaPlayer2SeekMode mode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC) override;
8584e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg
8684e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg    virtual bool isStreaming() const;
8784e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg
8884e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg    // Modular DRM
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void signalBufferReturned(MediaBufferBase *buffer);
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t prepareDrm(
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const uint8_t uuid[16],
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const Vector<uint8_t> &drmSessionId,
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            sp<AMediaCryptoWrapper> *outCrypto);
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t releaseDrm();
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
9841a0f2f86c0ca7d2fef50aef6215987f445a7231Dan Stoza
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprotected:
1002d13afdfa1f43973bf3cb917c7d6496a38baa446Ronghua Wu    virtual ~GenericSource2();
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void onMessageReceived(const sp<AMessage> &msg);
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual sp<MetaData> getFormatMeta(bool audio);
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    enum {
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        kWhatPrepareAsync,
1095c0106e134366312206702f1b072347e20c90374Marco Nelissen        kWhatFetchSubtitleData,
110f0190bff38b6c29abbfc4a877442f71fc3d7dad8Marco Nelissen        kWhatFetchTimedTextData,
111e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopian        kWhatSendSubtitleData,
112e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopian        kWhatSendGlobalTimedTextData,
113e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopian        kWhatSendTimedTextData,
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        kWhatChangeAVSource,
1158683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian        kWhatPollBuffering,
1168683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian        kWhatSeek,
1178683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian        kWhatReadBuffer,
1188683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian        kWhatStart,
119a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian        kWhatResume,
120a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian        kWhatSecureDecodersInstantiated,
121a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian    };
122a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian
123a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian    struct Track {
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        size_t mIndex;
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        sp<IMediaSource> mSource;
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        sp<AnotherPacketSource> mPackets;
12793ff1f985e233fe04412a65041e977c9f0c21f5bJeff Brown    };
12893ff1f985e233fe04412a65041e977c9f0c21f5bJeff Brown
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    Vector<sp<IMediaSource> > mSources;
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    Track mAudioTrack;
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int64_t mAudioTimeUs;
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int64_t mAudioLastDequeueTimeUs;
1335707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    Track mVideoTrack;
1345707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    int64_t mVideoTimeUs;
1355707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    int64_t mVideoLastDequeueTimeUs;
13613b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    Track mSubtitleTrack;
13713b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    Track mTimedTextTrack;
13813b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown
1395707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    BufferingSettings mBufferingSettings;
14013b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    int32_t mPrevBufferPercentage;
14113b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    int32_t mPollBufferingGeneration;
14213b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    bool mSentPauseOnBuffering;
14313b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown
14413b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    int32_t mAudioDataGeneration;
14513b1604018968408bcc5553e1fa5ea9df3e4e009Jeff Brown    int32_t mVideoDataGeneration;
1465707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    int32_t mFetchSubtitleDataGeneration;
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int32_t mFetchTimedTextDataGeneration;
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int64_t mDurationUs;
149837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    bool mAudioIsVorbis;
150837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    // Secure codec is required.
151837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    bool mIsSecure;
152837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    bool mIsStreaming;
153837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    uid_t mUID;
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const sp<MediaClock> mMediaClock;
155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<MediaHTTPService> mHTTPService;
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    AString mUri;
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    KeyedVector<String8, String8> mUriHeaders;
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int mFd;
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int64_t mOffset;
16041a0f2f86c0ca7d2fef50aef6215987f445a7231Dan Stoza    int64_t mLength;
16141a0f2f86c0ca7d2fef50aef6215987f445a7231Dan Stoza
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool mDisconnected;
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<DataSource> mDataSource;
1642d13afdfa1f43973bf3cb917c7d6496a38baa446Ronghua Wu    sp<NuCachedSource2> mCachedSource;
1652d13afdfa1f43973bf3cb917c7d6496a38baa446Ronghua Wu    sp<DataSource> mHttpSource;
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<MetaData> mFileMeta;
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool mStarted;
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool mPreparing;
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int64_t mBitrate;
17084a6d041e2c69d4d0b69269a0b59e725c9f119a3Andreas Huber    uint32_t mPendingReadBufferTypes;
17184a6d041e2c69d4d0b69269a0b59e725c9f119a3Andreas Huber    sp<ABuffer> mGlobalTimedText;
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Mutex mLock;
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<ALooper> mLooper;
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void resetDataSource();
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
179e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopian    status_t initFromDataSource();
180e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopian    int64_t getLastReadPosition();
181e142428a9c8b9d2380032cd4d7b55ee440fe8770Mathias Agopian
182837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    void notifyPreparedAndCleanup(status_t err);
1838683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    void onSecureDecodersInstantiated(status_t err);
1848683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    void finishPrepareAsync();
1858683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian    status_t startSources();
186837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick
187837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    void onSeek(const sp<AMessage>& msg);
188837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    status_t doSeek(int64_t seekTimeUs, MediaPlayer2SeekMode mode);
189837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick
190837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    void onPrepareAsync();
191837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick
192837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick    void fetchTextData(
193a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian            uint32_t what, media_track_type type,
194a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian            int32_t curGen, const sp<AnotherPacketSource>& packets, const sp<AMessage>& msg);
195a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian
196a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian    void sendGlobalTextData(
197a47f02afb1e1f2c4abd9379c13903a5dde89d354Mathias Agopian            uint32_t what,
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int32_t curGen, sp<AMessage> msg);
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void sendTextData(
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            uint32_t what, media_track_type type,
202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int32_t curGen, const sp<AnotherPacketSource>& packets, const sp<AMessage>& msg);
2035707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown
2045707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    sp<ABuffer> mediaBufferToABuffer(
2055707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown            MediaBufferBase *mbuf,
2065707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown            media_track_type trackType);
2075707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void postReadBuffer(media_track_type trackType);
209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void onReadBuffer(const sp<AMessage>& msg);
210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // When |mode| is MediaPlayer2SeekMode::SEEK_CLOSEST, the buffer read shall
211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // include an item indicating skipping rendering all buffers with timestamp
2127e790af756d7891cb1cf1374bb283a8fbcbe6b49Dianne Hackborn    // earlier than |seekTimeUs|.
2137e790af756d7891cb1cf1374bb283a8fbcbe6b49Dianne Hackborn    // For other modes, the buffer read will not include the item as above in order
2147e790af756d7891cb1cf1374bb283a8fbcbe6b49Dianne Hackborn    // to facilitate fast seek operation.
2157e790af756d7891cb1cf1374bb283a8fbcbe6b49Dianne Hackborn    void readBuffer(
2167e790af756d7891cb1cf1374bb283a8fbcbe6b49Dianne Hackborn            media_track_type trackType,
21784e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg            int64_t seekTimeUs = -1ll,
218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            MediaPlayer2SeekMode mode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC,
219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            int64_t *actualTimeUs = NULL, bool formatChange = false);
22084e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg
221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void queueDiscontinuityIfNeeded(
222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            bool seeking, bool formatChange, media_track_type trackType, Track *track);
22384e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg
224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void schedulePollBuffering();
22584e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg    void onPollBuffering();
226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void notifyBufferingUpdate(int32_t percentage);
227edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
22884e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg    void sendCacheStats();
229edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
230edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<MetaData> getFormatMeta_l(bool audio);
23184e625ac1e01f5a9c3ed16664da6498212ed662bArve Hjønnevåg    int32_t getDataGeneration(media_track_type type) const;
232edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2335707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    // Modular DRM
234edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // The source is DRM protected and is prepared for DRM.
235edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool mIsDrmProtected;
236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // releaseDrm has been processed.
237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool mIsDrmReleased;
238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    Vector<String8> mMimes;
239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t checkDrmInfo();
241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    DISALLOW_EVIL_CONSTRUCTORS(GenericSource2);
243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
244f683e0163a84d93448b9388126902242367cd961Serban Constantinescu
245f683e0163a84d93448b9388126902242367cd961Serban Constantinescu}  // namespace android
246f683e0163a84d93448b9388126902242367cd961Serban Constantinescu
247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif  // GENERIC_SOURCE2_H_
248edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project