Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +17 −14 Original line number Diff line number Diff line Loading @@ -424,7 +424,8 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { onDrainVideoQueue(); postDrainVideoQueue(); Mutex::Autolock autoLock(mLock); postDrainVideoQueue_l(); break; } Loading @@ -437,7 +438,8 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { } mDrainVideoQueuePending = false; postDrainVideoQueue(); Mutex::Autolock autoLock(mLock); postDrainVideoQueue_l(); break; } Loading Loading @@ -766,7 +768,7 @@ int64_t NuPlayer::Renderer::getPendingAudioPlayoutDurationUs(int64_t nowUs) { int64_t NuPlayer::Renderer::getRealTimeUs(int64_t mediaTimeUs, int64_t nowUs) { int64_t currentPositionUs; if (getCurrentPositionOnLooper( if (mPaused || getCurrentPositionOnLooper( ¤tPositionUs, nowUs, true /* allowPastQueuedVideo */) != OK) { // If failed to get current position, e.g. due to audio clock is not ready, then just // play out video immediately without delay. Loading @@ -787,7 +789,7 @@ void NuPlayer::Renderer::onNewAudioMediaTime(int64_t mediaTimeUs) { mediaTimeUs, nowUs + getPendingAudioPlayoutDurationUs(nowUs), mNumFramesWritten); } void NuPlayer::Renderer::postDrainVideoQueue() { void NuPlayer::Renderer::postDrainVideoQueue_l() { if (mDrainVideoQueuePending || mSyncQueues || (mPaused && mVideoSampleReceived)) { Loading Loading @@ -823,6 +825,7 @@ void NuPlayer::Renderer::postDrainVideoQueue() { if (mAnchorTimeMediaUs < 0) { setAnchorTime(mediaTimeUs, nowUs); mPausePositionMediaTimeUs = mediaTimeUs; mAnchorMaxMediaUs = mediaTimeUs; realTimeUs = nowUs; } else { Loading Loading @@ -986,16 +989,15 @@ void NuPlayer::Renderer::onQueueBuffer(const sp<AMessage> &msg) { entry.mFinalResult = OK; entry.mBufferOrdinal = ++mTotalBuffersQueued; if (audio) { Mutex::Autolock autoLock(mLock); if (audio) { mAudioQueue.push_back(entry); postDrainAudioQueue_l(); } else { mVideoQueue.push_back(entry); postDrainVideoQueue(); postDrainVideoQueue_l(); } Mutex::Autolock autoLock(mLock); if (!mSyncQueues || mAudioQueue.empty() || mVideoQueue.empty()) { return; } Loading Loading @@ -1044,7 +1046,7 @@ void NuPlayer::Renderer::syncQueuesDone_l() { } if (!mVideoQueue.empty()) { postDrainVideoQueue(); postDrainVideoQueue_l(); } } Loading @@ -1063,8 +1065,8 @@ void NuPlayer::Renderer::onQueueEOS(const sp<AMessage> &msg) { entry.mOffset = 0; entry.mFinalResult = finalResult; if (audio) { Mutex::Autolock autoLock(mLock); if (audio) { if (mAudioQueue.empty() && mSyncQueues) { syncQueuesDone_l(); } Loading @@ -1072,11 +1074,10 @@ void NuPlayer::Renderer::onQueueEOS(const sp<AMessage> &msg) { postDrainAudioQueue_l(); } else { if (mVideoQueue.empty() && mSyncQueues) { Mutex::Autolock autoLock(mLock); syncQueuesDone_l(); } mVideoQueue.push_back(entry); postDrainVideoQueue(); postDrainVideoQueue_l(); } } Loading Loading @@ -1229,18 +1230,20 @@ void NuPlayer::Renderer::onPause() { return; } int64_t currentPositionUs; int64_t pausePositionMediaTimeUs; if (getCurrentPositionFromAnchor( ¤tPositionUs, ALooper::GetNowUs()) == OK) { mPausePositionMediaTimeUs = currentPositionUs; pausePositionMediaTimeUs = currentPositionUs; } else { // Set paused position to -1 (unavailabe) if we don't have anchor time // This could happen if client does a seekTo() immediately followed by // pause(). Renderer will be flushed with anchor time cleared. We don't // want to leave stale value in mPausePositionMediaTimeUs. mPausePositionMediaTimeUs = -1; pausePositionMediaTimeUs = -1; } { Mutex::Autolock autoLock(mLock); mPausePositionMediaTimeUs = pausePositionMediaTimeUs; ++mAudioQueueGeneration; ++mVideoQueueGeneration; prepareForMediaRenderingStart(); Loading Loading @@ -1284,7 +1287,7 @@ void NuPlayer::Renderer::onResume() { } if (!mVideoQueue.empty()) { postDrainVideoQueue(); postDrainVideoQueue_l(); } } Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +1 −1 Original line number Diff line number Diff line Loading @@ -212,7 +212,7 @@ private: int64_t getRealTimeUs(int64_t mediaTimeUs, int64_t nowUs); void onDrainVideoQueue(); void postDrainVideoQueue(); void postDrainVideoQueue_l(); void prepareForMediaRenderingStart(); void notifyIfMediaRenderingStarted(); Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +17 −14 Original line number Diff line number Diff line Loading @@ -424,7 +424,8 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { onDrainVideoQueue(); postDrainVideoQueue(); Mutex::Autolock autoLock(mLock); postDrainVideoQueue_l(); break; } Loading @@ -437,7 +438,8 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { } mDrainVideoQueuePending = false; postDrainVideoQueue(); Mutex::Autolock autoLock(mLock); postDrainVideoQueue_l(); break; } Loading Loading @@ -766,7 +768,7 @@ int64_t NuPlayer::Renderer::getPendingAudioPlayoutDurationUs(int64_t nowUs) { int64_t NuPlayer::Renderer::getRealTimeUs(int64_t mediaTimeUs, int64_t nowUs) { int64_t currentPositionUs; if (getCurrentPositionOnLooper( if (mPaused || getCurrentPositionOnLooper( ¤tPositionUs, nowUs, true /* allowPastQueuedVideo */) != OK) { // If failed to get current position, e.g. due to audio clock is not ready, then just // play out video immediately without delay. Loading @@ -787,7 +789,7 @@ void NuPlayer::Renderer::onNewAudioMediaTime(int64_t mediaTimeUs) { mediaTimeUs, nowUs + getPendingAudioPlayoutDurationUs(nowUs), mNumFramesWritten); } void NuPlayer::Renderer::postDrainVideoQueue() { void NuPlayer::Renderer::postDrainVideoQueue_l() { if (mDrainVideoQueuePending || mSyncQueues || (mPaused && mVideoSampleReceived)) { Loading Loading @@ -823,6 +825,7 @@ void NuPlayer::Renderer::postDrainVideoQueue() { if (mAnchorTimeMediaUs < 0) { setAnchorTime(mediaTimeUs, nowUs); mPausePositionMediaTimeUs = mediaTimeUs; mAnchorMaxMediaUs = mediaTimeUs; realTimeUs = nowUs; } else { Loading Loading @@ -986,16 +989,15 @@ void NuPlayer::Renderer::onQueueBuffer(const sp<AMessage> &msg) { entry.mFinalResult = OK; entry.mBufferOrdinal = ++mTotalBuffersQueued; if (audio) { Mutex::Autolock autoLock(mLock); if (audio) { mAudioQueue.push_back(entry); postDrainAudioQueue_l(); } else { mVideoQueue.push_back(entry); postDrainVideoQueue(); postDrainVideoQueue_l(); } Mutex::Autolock autoLock(mLock); if (!mSyncQueues || mAudioQueue.empty() || mVideoQueue.empty()) { return; } Loading Loading @@ -1044,7 +1046,7 @@ void NuPlayer::Renderer::syncQueuesDone_l() { } if (!mVideoQueue.empty()) { postDrainVideoQueue(); postDrainVideoQueue_l(); } } Loading @@ -1063,8 +1065,8 @@ void NuPlayer::Renderer::onQueueEOS(const sp<AMessage> &msg) { entry.mOffset = 0; entry.mFinalResult = finalResult; if (audio) { Mutex::Autolock autoLock(mLock); if (audio) { if (mAudioQueue.empty() && mSyncQueues) { syncQueuesDone_l(); } Loading @@ -1072,11 +1074,10 @@ void NuPlayer::Renderer::onQueueEOS(const sp<AMessage> &msg) { postDrainAudioQueue_l(); } else { if (mVideoQueue.empty() && mSyncQueues) { Mutex::Autolock autoLock(mLock); syncQueuesDone_l(); } mVideoQueue.push_back(entry); postDrainVideoQueue(); postDrainVideoQueue_l(); } } Loading Loading @@ -1229,18 +1230,20 @@ void NuPlayer::Renderer::onPause() { return; } int64_t currentPositionUs; int64_t pausePositionMediaTimeUs; if (getCurrentPositionFromAnchor( ¤tPositionUs, ALooper::GetNowUs()) == OK) { mPausePositionMediaTimeUs = currentPositionUs; pausePositionMediaTimeUs = currentPositionUs; } else { // Set paused position to -1 (unavailabe) if we don't have anchor time // This could happen if client does a seekTo() immediately followed by // pause(). Renderer will be flushed with anchor time cleared. We don't // want to leave stale value in mPausePositionMediaTimeUs. mPausePositionMediaTimeUs = -1; pausePositionMediaTimeUs = -1; } { Mutex::Autolock autoLock(mLock); mPausePositionMediaTimeUs = pausePositionMediaTimeUs; ++mAudioQueueGeneration; ++mVideoQueueGeneration; prepareForMediaRenderingStart(); Loading Loading @@ -1284,7 +1287,7 @@ void NuPlayer::Renderer::onResume() { } if (!mVideoQueue.empty()) { postDrainVideoQueue(); postDrainVideoQueue_l(); } } Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +1 −1 Original line number Diff line number Diff line Loading @@ -212,7 +212,7 @@ private: int64_t getRealTimeUs(int64_t mediaTimeUs, int64_t nowUs); void onDrainVideoQueue(); void postDrainVideoQueue(); void postDrainVideoQueue_l(); void prepareForMediaRenderingStart(); void notifyIfMediaRenderingStarted(); Loading