Loading media/libmediaplayerservice/nuplayer/GenericSource.cpp +21 −18 Original line number Diff line number Diff line Loading @@ -665,8 +665,8 @@ void NuPlayer::GenericSource::onMessageReceived(const sp<AMessage> &msg) { } else { timeUs = mVideoLastDequeueTimeUs; } readBuffer(trackType, timeUs, &actualTimeUs, formatChange); readBuffer(counterpartType, -1, NULL, !formatChange); readBuffer(trackType, timeUs, false /* precise */, &actualTimeUs, formatChange); readBuffer(counterpartType, -1, false /* precise */, NULL, !formatChange); ALOGV("timeUs %lld actualTimeUs %lld", (long long)timeUs, (long long)actualTimeUs); break; Loading Loading @@ -759,7 +759,7 @@ void NuPlayer::GenericSource::fetchTextData( CHECK(msg->findInt64("timeUs", &timeUs)); int64_t subTimeUs; readBuffer(type, timeUs, &subTimeUs); readBuffer(type, timeUs, false /* precise */, &subTimeUs); int64_t delayUs = subTimeUs - timeUs; if (msg->what() == kWhatFetchSubtitleData) { Loading Loading @@ -790,7 +790,7 @@ void NuPlayer::GenericSource::sendTextData( } int64_t nextSubTimeUs; readBuffer(type, -1, &nextSubTimeUs); readBuffer(type, -1, false /* precise */, &nextSubTimeUs); sp<ABuffer> buffer; status_t dequeueStatus = packets->dequeueAccessUnit(&buffer); Loading Loading @@ -1186,9 +1186,10 @@ status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select, return INVALID_OPERATION; } status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs, bool precise) { sp<AMessage> msg = new AMessage(kWhatSeek, this); msg->setInt64("seekTimeUs", seekTimeUs); msg->setInt32("precise", precise); sp<AMessage> response; status_t err = msg->postAndAwaitResponse(&response); Loading @@ -1201,10 +1202,12 @@ status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { void NuPlayer::GenericSource::onSeek(const sp<AMessage>& msg) { int64_t seekTimeUs; int32_t precise; CHECK(msg->findInt64("seekTimeUs", &seekTimeUs)); CHECK(msg->findInt32("precise", &precise)); sp<AMessage> response = new AMessage; status_t err = doSeek(seekTimeUs); status_t err = doSeek(seekTimeUs, precise); response->setInt32("err", err); sp<AReplyToken> replyID; Loading @@ -1212,7 +1215,7 @@ void NuPlayer::GenericSource::onSeek(const sp<AMessage>& msg) { response->postReply(replyID); } status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs, bool precise) { mBufferingMonitor->updateDequeuedBufferTime(-1ll); // If the Widevine source is stopped, do not attempt to read any Loading @@ -1222,10 +1225,12 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { } if (mVideoTrack.mSource != NULL) { int64_t actualTimeUs; readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, &actualTimeUs); readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, precise, &actualTimeUs); if (!precise) { seekTimeUs = actualTimeUs; mVideoLastDequeueTimeUs = seekTimeUs; } mVideoLastDequeueTimeUs = actualTimeUs; } if (mAudioTrack.mSource != NULL) { Loading @@ -1250,7 +1255,8 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer( MediaBuffer* mb, media_track_type trackType, int64_t /* seekTimeUs */, int64_t seekTimeUs, bool precise, int64_t *actualTimeUs) { bool audio = trackType == MEDIA_TRACK_TYPE_AUDIO; size_t outLength = mb->range_length(); Loading Loading @@ -1288,15 +1294,11 @@ sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer( CHECK(mb->meta_data()->findInt64(kKeyTime, &timeUs)); meta->setInt64("timeUs", timeUs); #if 0 // Temporarily disable pre-roll till we have a full solution to handle // both single seek and continous seek gracefully. if (seekTimeUs > timeUs) { if (precise && seekTimeUs > timeUs) { sp<AMessage> extra = new AMessage; extra->setInt64("resume-at-mediaTimeUs", seekTimeUs); meta->setMessage("extra", extra); } #endif if (trackType == MEDIA_TRACK_TYPE_VIDEO) { int32_t layerId; Loading Loading @@ -1372,7 +1374,8 @@ void NuPlayer::GenericSource::onReadBuffer(const sp<AMessage>& msg) { } void NuPlayer::GenericSource::readBuffer( media_track_type trackType, int64_t seekTimeUs, int64_t *actualTimeUs, bool formatChange) { media_track_type trackType, int64_t seekTimeUs, bool precise, int64_t *actualTimeUs, bool formatChange) { // Do not read data if Widevine source is stopped if (mStopRead) { return; Loading Loading @@ -1466,7 +1469,7 @@ void NuPlayer::GenericSource::readBuffer( queueDiscontinuityIfNeeded(seeking, formatChange, trackType, track); sp<ABuffer> buffer = mediaBufferToABuffer( mbuf, trackType, seekTimeUs, mbuf, trackType, seekTimeUs, precise, numBuffers == 0 ? actualTimeUs : NULL); track->mPackets->queueAccessUnit(buffer); formatChange = false; Loading media/libmediaplayerservice/nuplayer/GenericSource.h +5 −3 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ struct NuPlayer::GenericSource : public NuPlayer::Source { virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual ssize_t getSelectedTrack(media_track_type type) const; virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs); virtual status_t seekTo(int64_t seekTimeUs); virtual status_t seekTo(int64_t seekTimeUs, bool precise = false); virtual status_t setBuffers(bool audio, Vector<MediaBuffer *> &buffers); Loading Loading @@ -258,7 +258,7 @@ private: status_t doSelectTrack(size_t trackIndex, bool select, int64_t timeUs); void onSeek(const sp<AMessage>& msg); status_t doSeek(int64_t seekTimeUs); status_t doSeek(int64_t seekTimeUs, bool precise); void onPrepareAsync(); Loading @@ -278,13 +278,15 @@ private: MediaBuffer *mbuf, media_track_type trackType, int64_t seekTimeUs, bool precise, int64_t *actualTimeUs = NULL); void postReadBuffer(media_track_type trackType); void onReadBuffer(const sp<AMessage>& msg); void readBuffer( media_track_type trackType, int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); int64_t seekTimeUs = -1ll, bool precise = false, int64_t *actualTimeUs = NULL, bool formatChange = false); void queueDiscontinuityIfNeeded( bool seeking, bool formatChange, media_track_type trackType, Track *track); Loading media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -214,8 +214,8 @@ status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select, i return (err == OK || err == BAD_VALUE) ? (status_t)OK : err; } status_t NuPlayer::HTTPLiveSource::seekTo(int64_t seekTimeUs) { return mLiveSession->seekTo(seekTimeUs); status_t NuPlayer::HTTPLiveSource::seekTo(int64_t seekTimeUs, bool precise) { return mLiveSession->seekTo(seekTimeUs, precise); } void NuPlayer::HTTPLiveSource::pollForRawData( Loading media/libmediaplayerservice/nuplayer/HTTPLiveSource.h +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ struct NuPlayer::HTTPLiveSource : public NuPlayer::Source { virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual ssize_t getSelectedTrack(media_track_type /* type */) const; virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs); virtual status_t seekTo(int64_t seekTimeUs); virtual status_t seekTo(int64_t seekTimeUs, bool precise = false); protected: virtual ~HTTPLiveSource(); Loading media/libmediaplayerservice/nuplayer/NuPlayerSource.h +1 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ struct NuPlayer::Source : public AHandler { return INVALID_OPERATION; } virtual status_t seekTo(int64_t /* seekTimeUs */) { virtual status_t seekTo(int64_t /* seekTimeUs */, bool /* precise */ = false) { return INVALID_OPERATION; } Loading Loading
media/libmediaplayerservice/nuplayer/GenericSource.cpp +21 −18 Original line number Diff line number Diff line Loading @@ -665,8 +665,8 @@ void NuPlayer::GenericSource::onMessageReceived(const sp<AMessage> &msg) { } else { timeUs = mVideoLastDequeueTimeUs; } readBuffer(trackType, timeUs, &actualTimeUs, formatChange); readBuffer(counterpartType, -1, NULL, !formatChange); readBuffer(trackType, timeUs, false /* precise */, &actualTimeUs, formatChange); readBuffer(counterpartType, -1, false /* precise */, NULL, !formatChange); ALOGV("timeUs %lld actualTimeUs %lld", (long long)timeUs, (long long)actualTimeUs); break; Loading Loading @@ -759,7 +759,7 @@ void NuPlayer::GenericSource::fetchTextData( CHECK(msg->findInt64("timeUs", &timeUs)); int64_t subTimeUs; readBuffer(type, timeUs, &subTimeUs); readBuffer(type, timeUs, false /* precise */, &subTimeUs); int64_t delayUs = subTimeUs - timeUs; if (msg->what() == kWhatFetchSubtitleData) { Loading Loading @@ -790,7 +790,7 @@ void NuPlayer::GenericSource::sendTextData( } int64_t nextSubTimeUs; readBuffer(type, -1, &nextSubTimeUs); readBuffer(type, -1, false /* precise */, &nextSubTimeUs); sp<ABuffer> buffer; status_t dequeueStatus = packets->dequeueAccessUnit(&buffer); Loading Loading @@ -1186,9 +1186,10 @@ status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select, return INVALID_OPERATION; } status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs, bool precise) { sp<AMessage> msg = new AMessage(kWhatSeek, this); msg->setInt64("seekTimeUs", seekTimeUs); msg->setInt32("precise", precise); sp<AMessage> response; status_t err = msg->postAndAwaitResponse(&response); Loading @@ -1201,10 +1202,12 @@ status_t NuPlayer::GenericSource::seekTo(int64_t seekTimeUs) { void NuPlayer::GenericSource::onSeek(const sp<AMessage>& msg) { int64_t seekTimeUs; int32_t precise; CHECK(msg->findInt64("seekTimeUs", &seekTimeUs)); CHECK(msg->findInt32("precise", &precise)); sp<AMessage> response = new AMessage; status_t err = doSeek(seekTimeUs); status_t err = doSeek(seekTimeUs, precise); response->setInt32("err", err); sp<AReplyToken> replyID; Loading @@ -1212,7 +1215,7 @@ void NuPlayer::GenericSource::onSeek(const sp<AMessage>& msg) { response->postReply(replyID); } status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs, bool precise) { mBufferingMonitor->updateDequeuedBufferTime(-1ll); // If the Widevine source is stopped, do not attempt to read any Loading @@ -1222,10 +1225,12 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { } if (mVideoTrack.mSource != NULL) { int64_t actualTimeUs; readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, &actualTimeUs); readBuffer(MEDIA_TRACK_TYPE_VIDEO, seekTimeUs, precise, &actualTimeUs); if (!precise) { seekTimeUs = actualTimeUs; mVideoLastDequeueTimeUs = seekTimeUs; } mVideoLastDequeueTimeUs = actualTimeUs; } if (mAudioTrack.mSource != NULL) { Loading @@ -1250,7 +1255,8 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) { sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer( MediaBuffer* mb, media_track_type trackType, int64_t /* seekTimeUs */, int64_t seekTimeUs, bool precise, int64_t *actualTimeUs) { bool audio = trackType == MEDIA_TRACK_TYPE_AUDIO; size_t outLength = mb->range_length(); Loading Loading @@ -1288,15 +1294,11 @@ sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer( CHECK(mb->meta_data()->findInt64(kKeyTime, &timeUs)); meta->setInt64("timeUs", timeUs); #if 0 // Temporarily disable pre-roll till we have a full solution to handle // both single seek and continous seek gracefully. if (seekTimeUs > timeUs) { if (precise && seekTimeUs > timeUs) { sp<AMessage> extra = new AMessage; extra->setInt64("resume-at-mediaTimeUs", seekTimeUs); meta->setMessage("extra", extra); } #endif if (trackType == MEDIA_TRACK_TYPE_VIDEO) { int32_t layerId; Loading Loading @@ -1372,7 +1374,8 @@ void NuPlayer::GenericSource::onReadBuffer(const sp<AMessage>& msg) { } void NuPlayer::GenericSource::readBuffer( media_track_type trackType, int64_t seekTimeUs, int64_t *actualTimeUs, bool formatChange) { media_track_type trackType, int64_t seekTimeUs, bool precise, int64_t *actualTimeUs, bool formatChange) { // Do not read data if Widevine source is stopped if (mStopRead) { return; Loading Loading @@ -1466,7 +1469,7 @@ void NuPlayer::GenericSource::readBuffer( queueDiscontinuityIfNeeded(seeking, formatChange, trackType, track); sp<ABuffer> buffer = mediaBufferToABuffer( mbuf, trackType, seekTimeUs, mbuf, trackType, seekTimeUs, precise, numBuffers == 0 ? actualTimeUs : NULL); track->mPackets->queueAccessUnit(buffer); formatChange = false; Loading
media/libmediaplayerservice/nuplayer/GenericSource.h +5 −3 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ struct NuPlayer::GenericSource : public NuPlayer::Source { virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual ssize_t getSelectedTrack(media_track_type type) const; virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs); virtual status_t seekTo(int64_t seekTimeUs); virtual status_t seekTo(int64_t seekTimeUs, bool precise = false); virtual status_t setBuffers(bool audio, Vector<MediaBuffer *> &buffers); Loading Loading @@ -258,7 +258,7 @@ private: status_t doSelectTrack(size_t trackIndex, bool select, int64_t timeUs); void onSeek(const sp<AMessage>& msg); status_t doSeek(int64_t seekTimeUs); status_t doSeek(int64_t seekTimeUs, bool precise); void onPrepareAsync(); Loading @@ -278,13 +278,15 @@ private: MediaBuffer *mbuf, media_track_type trackType, int64_t seekTimeUs, bool precise, int64_t *actualTimeUs = NULL); void postReadBuffer(media_track_type trackType); void onReadBuffer(const sp<AMessage>& msg); void readBuffer( media_track_type trackType, int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); int64_t seekTimeUs = -1ll, bool precise = false, int64_t *actualTimeUs = NULL, bool formatChange = false); void queueDiscontinuityIfNeeded( bool seeking, bool formatChange, media_track_type trackType, Track *track); Loading
media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -214,8 +214,8 @@ status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select, i return (err == OK || err == BAD_VALUE) ? (status_t)OK : err; } status_t NuPlayer::HTTPLiveSource::seekTo(int64_t seekTimeUs) { return mLiveSession->seekTo(seekTimeUs); status_t NuPlayer::HTTPLiveSource::seekTo(int64_t seekTimeUs, bool precise) { return mLiveSession->seekTo(seekTimeUs, precise); } void NuPlayer::HTTPLiveSource::pollForRawData( Loading
media/libmediaplayerservice/nuplayer/HTTPLiveSource.h +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ struct NuPlayer::HTTPLiveSource : public NuPlayer::Source { virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual ssize_t getSelectedTrack(media_track_type /* type */) const; virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs); virtual status_t seekTo(int64_t seekTimeUs); virtual status_t seekTo(int64_t seekTimeUs, bool precise = false); protected: virtual ~HTTPLiveSource(); Loading
media/libmediaplayerservice/nuplayer/NuPlayerSource.h +1 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ struct NuPlayer::Source : public AHandler { return INVALID_OPERATION; } virtual status_t seekTo(int64_t /* seekTimeUs */) { virtual status_t seekTo(int64_t /* seekTimeUs */, bool /* precise */ = false) { return INVALID_OPERATION; } Loading