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> ¬ify, 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