153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia/* 253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * Copyright 2017 The Android Open Source Project 353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * 453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * Licensed under the Apache License, Version 2.0 (the "License"); 553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * you may not use this file except in compliance with the License. 653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * You may obtain a copy of the License at 753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * 853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * http://www.apache.org/licenses/LICENSE-2.0 953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * 1053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * Unless required by applicable law or agreed to in writing, software 1153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * distributed under the License is distributed on an "AS IS" BASIS, 1253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * See the License for the specific language governing permissions and 1453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * limitations under the License. 1553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia */ 1653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 172409c87361b78ec733e2481c52198bea245fe1daWei Jia#ifndef GENERIC_SOURCE2_H_ 1853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 192409c87361b78ec733e2481c52198bea245fe1daWei Jia#define GENERIC_SOURCE2_H_ 2053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#include "NuPlayer2.h" 2253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#include "NuPlayer2Source.h" 2353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#include "ATSParser.h" 2553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#include <media/stagefright/MediaBuffer.h> 2751b6956bc8e09eb2237a10a401baebb35096e6abWei Jia#include <mediaplayer2/mediaplayer2.h> 280cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih#include <media/NdkMediaDataSource.h> 290cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih#include <media/NdkMediaExtractor.h> 300cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih#include <media/NdkWrapper.h> 3153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 3253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jianamespace android { 3353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 3453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass DecryptHandle; 3553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct AnotherPacketSource; 3653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct ARTSPController; 3753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass DataSource; 3853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass IDataSource; 3949ce671c4efa4c5d038351ca441e34c5afa5241fDongwon Kangclass IMediaSource; 4053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct MediaHTTPService; 4153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct MediaSource; 4253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass MediaBuffer; 4353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct MediaClock; 4453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct NuCachedSource2; 4553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 462409c87361b78ec733e2481c52198bea245fe1daWei Jiastruct NuPlayer2::GenericSource2 : public NuPlayer2::Source, 472409c87361b78ec733e2481c52198bea245fe1daWei Jia public MediaBufferObserver // Modular DRM 4853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia{ 49003fdb5b76ccc537d4ab7ef19c8a2e3be19b594cWei Jia GenericSource2(const sp<AMessage> ¬ify, uid_t uid, 502409c87361b78ec733e2481c52198bea245fe1daWei Jia const sp<MediaClock> &mediaClock); 5153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 5253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t setDataSource( 5353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia const sp<MediaHTTPService> &httpService, 5453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia const char *url, 5553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia const KeyedVector<String8, String8> *headers); 5653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 5753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t setDataSource(int fd, int64_t offset, int64_t length); 5853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 5953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t setDataSource(const sp<DataSource>& dataSource); 6053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 6153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t getBufferingSettings( 6253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia BufferingSettings* buffering /* nonnull */) override; 6353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t setBufferingSettings(const BufferingSettings& buffering) override; 6453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 6553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void prepareAsync(); 6653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 6753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void start(); 6853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void stop(); 6953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void pause(); 7053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void resume(); 7153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void disconnect(); 7353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t feedMoreTSData(); 7553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual sp<MetaData> getFileFormatMeta() const; 7753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); 7953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 8053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t getDuration(int64_t *durationUs); 8153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual size_t getTrackCount() const; 8253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; 8353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual ssize_t getSelectedTrack(media_track_type type) const; 8453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs); 8553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t seekTo( 8653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t seekTimeUs, 8753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia MediaPlayer2SeekMode mode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC) override; 8853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 8953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual bool isStreaming() const; 9053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 9153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // Modular DRM 921889c3edad32995c0cf26ae2248fe7c957b7ec84Dongwon Kang virtual void signalBufferReturned(MediaBufferBase *buffer); 9353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 9453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t prepareDrm( 9553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia const uint8_t uuid[16], 9653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia const Vector<uint8_t> &drmSessionId, 9753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<AMediaCryptoWrapper> *outCrypto); 9853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 9953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t releaseDrm(); 10053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 10153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 10253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaprotected: 1032409c87361b78ec733e2481c52198bea245fe1daWei Jia virtual ~GenericSource2(); 10453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 10553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onMessageReceived(const sp<AMessage> &msg); 10653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 1070cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih virtual sp<AMessage> getFormat(bool audio); 10853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual sp<MetaData> getFormatMeta(bool audio); 10953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 11053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaprivate: 11153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia enum { 11253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatPrepareAsync, 11353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatFetchSubtitleData, 11453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatFetchTimedTextData, 11553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSendSubtitleData, 11653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSendGlobalTimedTextData, 11753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSendTimedTextData, 11853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatChangeAVSource, 11953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatPollBuffering, 12053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSeek, 12153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatReadBuffer, 12253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatStart, 12353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatResume, 12453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSecureDecodersInstantiated, 12553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia }; 12653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 12753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia struct Track { 12853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia size_t mIndex; 1290cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih sp<AMediaExtractorWrapper> mExtractor; 13053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<AnotherPacketSource> mPackets; 13153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia }; 13253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 13353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mAudioTimeUs; 13453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mAudioLastDequeueTimeUs; 13553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mVideoTimeUs; 13653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mVideoLastDequeueTimeUs; 13753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 13853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia BufferingSettings mBufferingSettings; 13953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mPrevBufferPercentage; 14053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mPollBufferingGeneration; 14153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mSentPauseOnBuffering; 14253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 14353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mAudioDataGeneration; 14453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mVideoDataGeneration; 14553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mFetchSubtitleDataGeneration; 14653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mFetchTimedTextDataGeneration; 14753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mDurationUs; 14853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mAudioIsVorbis; 14953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // Secure codec is required. 15053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mIsSecure; 15153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mIsStreaming; 15253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia uid_t mUID; 15353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia const sp<MediaClock> mMediaClock; 15453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<MediaHTTPService> mHTTPService; 15553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia AString mUri; 15653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia KeyedVector<String8, String8> mUriHeaders; 15753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int mFd; 15853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mOffset; 15953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mLength; 16053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 16153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mDisconnected; 16253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<DataSource> mDataSource; 16353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<NuCachedSource2> mCachedSource; 16453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<DataSource> mHttpSource; 16553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<MetaData> mFileMeta; 1660cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih sp<AMediaDataSourceWrapper> mDataSourceWrapper; 1670cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih sp<AMediaExtractorWrapper> mExtractor; 1680cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih Vector<sp<AMediaExtractorWrapper> > mExtractors; 16953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mStarted; 17053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mPreparing; 17153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t mBitrate; 17253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia uint32_t mPendingReadBufferTypes; 17353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<ABuffer> mGlobalTimedText; 17453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 1750cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih Track mVideoTrack; 1760cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih Track mAudioTrack; 1770cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih Track mSubtitleTrack; 1780cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih Track mTimedTextTrack; 1790cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih 18053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia mutable Mutex mLock; 18153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 18253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<ALooper> mLooper; 18353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 18453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void resetDataSource(); 18553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 18653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t initFromDataSource(); 18753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t getLastReadPosition(); 18853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 18953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void notifyPreparedAndCleanup(status_t err); 19053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void onSecureDecodersInstantiated(status_t err); 19153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void finishPrepareAsync(); 19253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t startSources(); 19353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 19453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void onSeek(const sp<AMessage>& msg); 19553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t doSeek(int64_t seekTimeUs, MediaPlayer2SeekMode mode); 19653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 19753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void onPrepareAsync(); 19853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 19953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void fetchTextData( 20053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia uint32_t what, media_track_type type, 20153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t curGen, const sp<AnotherPacketSource>& packets, const sp<AMessage>& msg); 20253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 20353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void sendGlobalTextData( 20453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia uint32_t what, 20553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t curGen, sp<AMessage> msg); 20653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 20753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void sendTextData( 20853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia uint32_t what, media_track_type type, 20953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t curGen, const sp<AnotherPacketSource>& packets, const sp<AMessage>& msg); 21053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 21153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<ABuffer> mediaBufferToABuffer( 2121889c3edad32995c0cf26ae2248fe7c957b7ec84Dongwon Kang MediaBufferBase *mbuf, 21353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia media_track_type trackType); 21453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 21553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void postReadBuffer(media_track_type trackType); 21653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void onReadBuffer(const sp<AMessage>& msg); 21753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // When |mode| is MediaPlayer2SeekMode::SEEK_CLOSEST, the buffer read shall 21853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // include an item indicating skipping rendering all buffers with timestamp 21953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // earlier than |seekTimeUs|. 22053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // For other modes, the buffer read will not include the item as above in order 22153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // to facilitate fast seek operation. 22253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void readBuffer( 22353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia media_track_type trackType, 22453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t seekTimeUs = -1ll, 22553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia MediaPlayer2SeekMode mode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC, 22653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int64_t *actualTimeUs = NULL, bool formatChange = false); 22753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 22853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void queueDiscontinuityIfNeeded( 22953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool seeking, bool formatChange, media_track_type trackType, Track *track); 23053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 23153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void schedulePollBuffering(); 23253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void onPollBuffering(); 23353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void notifyBufferingUpdate(int32_t percentage); 23453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 23553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void sendCacheStats(); 23653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2370cd95065c5d293f0d6e53cd75e44d20106dd2e6eRobert Shih sp<AMessage> getFormat_l(bool audio); 23853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<MetaData> getFormatMeta_l(bool audio); 23953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t getDataGeneration(media_track_type type) const; 24053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 24153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // Modular DRM 24253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // The source is DRM protected and is prepared for DRM. 24353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mIsDrmProtected; 24453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // releaseDrm has been processed. 24553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mIsDrmReleased; 24653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia Vector<String8> mMimes; 24753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 24853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia status_t checkDrmInfo(); 24953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2502409c87361b78ec733e2481c52198bea245fe1daWei Jia DISALLOW_EVIL_CONSTRUCTORS(GenericSource2); 25153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia}; 25253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 25353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia} // namespace android 25453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2552409c87361b78ec733e2481c52198bea245fe1daWei Jia#endif // GENERIC_SOURCE2_H_ 256