Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +15 −5 Original line number Diff line number Diff line Loading @@ -189,7 +189,8 @@ NuPlayer::NuPlayer() mVideoFpsHint(-1.f), mStarted(false), mPaused(false), mPausedByClient(false) { mPausedByClient(false), mPausedForBuffering(false) { clearFlushComplete(); } Loading Loading @@ -683,7 +684,10 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { { ALOGV("kWhatStart"); if (mStarted) { // do not resume yet if the source is still buffering if (!mPausedForBuffering) { onResume(); } } else { onStart(); } Loading Loading @@ -2007,9 +2011,10 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { case Source::kWhatPauseOnBufferingStart: { // ignore if not playing if (mStarted && !mPausedByClient) { if (mStarted) { ALOGI("buffer low, pausing..."); mPausedForBuffering = true; onPause(); } // fall-thru Loading @@ -2024,11 +2029,16 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { case Source::kWhatResumeOnBufferingEnd: { // ignore if not playing if (mStarted && !mPausedByClient) { if (mStarted) { ALOGI("buffer ready, resuming..."); mPausedForBuffering = false; // do not resume yet if client didn't unpause if (!mPausedByClient) { onResume(); } } // fall-thru } Loading media/libmediaplayerservice/nuplayer/NuPlayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,9 @@ private: // still become true, when we pause internally due to buffering. bool mPausedByClient; // Pause state as requested by source (internally) due to buffering bool mPausedForBuffering; inline const sp<DecoderBase> &getDecoder(bool audio) { return audio ? mAudioDecoder : mVideoDecoder; } Loading media/libstagefright/httplive/LiveSession.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -1503,11 +1503,10 @@ void LiveSession::changeConfiguration( ALOGV("discarding fetcher-%d", fetcher->getFetcherID()); fetcher->stopAsync(); } else { float threshold = -1.0f; // always finish fetching by default float threshold = 0.0f; // default to pause after current block (47Kbytes) bool disconnect = false; if (timeUs >= 0ll) { // seeking, no need to finish fetching threshold = 0.0f; disconnect = true; } else if (delayRemoval) { // adapting, abort if remaining of current segment is over threshold Loading media/libstagefright/httplive/PlaylistFetcher.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -1424,11 +1424,17 @@ bool PlaylistFetcher::adjustSeqNumberWithAnchorTime(int64_t anchorTimeUs) { int64_t minDiffUs, maxDiffUs; if (mSeekMode == LiveSession::kSeekModeNextSample) { // if the previous fetcher paused in the middle of a segment, we // want to start at a segment that overlaps the last sample minDiffUs = -mPlaylist->getTargetDuration(); maxDiffUs = 0ll; } else { // if the previous fetcher paused at the end of a segment, ideally // we want to start at the segment that's roughly aligned with its // next segment, but if the two variants are not well aligned we // adjust the diff to within (-T/2, T/2) minDiffUs = -mPlaylist->getTargetDuration() / 2; maxDiffUs = mPlaylist->getTargetDuration(); maxDiffUs = mPlaylist->getTargetDuration() / 2; } int32_t oldSeqNumber = mSeqNumber; Loading Loading @@ -1611,6 +1617,9 @@ status_t PlaylistFetcher::extractAndQueueAccessUnitsFromTs(const sp<ABuffer> &bu ALOGE("MPEG2 Transport streams do not contain subtitles."); return ERROR_MALFORMED; } if (stream == LiveSession::STREAMTYPE_METADATA) { continue; } ATSParser::SourceType type =LiveSession::getSourceTypeForStream(stream); sp<AnotherPacketSource> source = static_cast<AnotherPacketSource *>( Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +15 −5 Original line number Diff line number Diff line Loading @@ -189,7 +189,8 @@ NuPlayer::NuPlayer() mVideoFpsHint(-1.f), mStarted(false), mPaused(false), mPausedByClient(false) { mPausedByClient(false), mPausedForBuffering(false) { clearFlushComplete(); } Loading Loading @@ -683,7 +684,10 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { { ALOGV("kWhatStart"); if (mStarted) { // do not resume yet if the source is still buffering if (!mPausedForBuffering) { onResume(); } } else { onStart(); } Loading Loading @@ -2007,9 +2011,10 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { case Source::kWhatPauseOnBufferingStart: { // ignore if not playing if (mStarted && !mPausedByClient) { if (mStarted) { ALOGI("buffer low, pausing..."); mPausedForBuffering = true; onPause(); } // fall-thru Loading @@ -2024,11 +2029,16 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { case Source::kWhatResumeOnBufferingEnd: { // ignore if not playing if (mStarted && !mPausedByClient) { if (mStarted) { ALOGI("buffer ready, resuming..."); mPausedForBuffering = false; // do not resume yet if client didn't unpause if (!mPausedByClient) { onResume(); } } // fall-thru } Loading
media/libmediaplayerservice/nuplayer/NuPlayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,9 @@ private: // still become true, when we pause internally due to buffering. bool mPausedByClient; // Pause state as requested by source (internally) due to buffering bool mPausedForBuffering; inline const sp<DecoderBase> &getDecoder(bool audio) { return audio ? mAudioDecoder : mVideoDecoder; } Loading
media/libstagefright/httplive/LiveSession.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -1503,11 +1503,10 @@ void LiveSession::changeConfiguration( ALOGV("discarding fetcher-%d", fetcher->getFetcherID()); fetcher->stopAsync(); } else { float threshold = -1.0f; // always finish fetching by default float threshold = 0.0f; // default to pause after current block (47Kbytes) bool disconnect = false; if (timeUs >= 0ll) { // seeking, no need to finish fetching threshold = 0.0f; disconnect = true; } else if (delayRemoval) { // adapting, abort if remaining of current segment is over threshold Loading
media/libstagefright/httplive/PlaylistFetcher.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -1424,11 +1424,17 @@ bool PlaylistFetcher::adjustSeqNumberWithAnchorTime(int64_t anchorTimeUs) { int64_t minDiffUs, maxDiffUs; if (mSeekMode == LiveSession::kSeekModeNextSample) { // if the previous fetcher paused in the middle of a segment, we // want to start at a segment that overlaps the last sample minDiffUs = -mPlaylist->getTargetDuration(); maxDiffUs = 0ll; } else { // if the previous fetcher paused at the end of a segment, ideally // we want to start at the segment that's roughly aligned with its // next segment, but if the two variants are not well aligned we // adjust the diff to within (-T/2, T/2) minDiffUs = -mPlaylist->getTargetDuration() / 2; maxDiffUs = mPlaylist->getTargetDuration(); maxDiffUs = mPlaylist->getTargetDuration() / 2; } int32_t oldSeqNumber = mSeqNumber; Loading Loading @@ -1611,6 +1617,9 @@ status_t PlaylistFetcher::extractAndQueueAccessUnitsFromTs(const sp<ABuffer> &bu ALOGE("MPEG2 Transport streams do not contain subtitles."); return ERROR_MALFORMED; } if (stream == LiveSession::STREAMTYPE_METADATA) { continue; } ATSParser::SourceType type =LiveSession::getSourceTypeForStream(stream); sp<AnotherPacketSource> source = static_cast<AnotherPacketSource *>( Loading