diff options
| author | 2011-09-13 08:28:38 -0700 | |
|---|---|---|
| committer | 2011-09-13 09:48:22 -0700 | |
| commit | fa6dfdcfd741980ba1c1d1971b69fc6f8a34dfeb (patch) | |
| tree | 060523120efd3b3a080a94d0e86e52a57fe56d9b | |
| parent | 62bb0cdc746e850c2d2d5da4f6c7a38f8782f4bc (diff) | |
Don't post position updates too frequently
i.e. don't hog my message queue.
related-to-bug: 5284760
Change-Id: I8e2d36a11dbee1567b18ed13dc5257a65c6eeda7
| -rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 16 | ||||
| -rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h | 4 |
2 files changed, 17 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 8f213daedf4e..bf838498695d 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -26,6 +26,9 @@ namespace android { +// static +const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll; + NuPlayer::Renderer::Renderer( const sp<MediaPlayerBase::AudioSink> &sink, const sp<AMessage> ¬ify) @@ -43,7 +46,8 @@ NuPlayer::Renderer::Renderer( mHasAudio(false), mHasVideo(false), mSyncQueues(false), - mPaused(false) { + mPaused(false), + mLastPositionUpdateUs(-1ll) { } NuPlayer::Renderer::~Renderer() { @@ -190,7 +194,7 @@ void NuPlayer::Renderer::postDrainAudioQueue() { mDrainAudioQueuePending = true; sp<AMessage> msg = new AMessage(kWhatDrainAudioQueue, id()); msg->setInt32("generation", mAudioQueueGeneration); - msg->post(10000); + msg->post(); } void NuPlayer::Renderer::signalAudioSinkChanged() { @@ -198,7 +202,6 @@ void NuPlayer::Renderer::signalAudioSinkChanged() { } void NuPlayer::Renderer::onDrainAudioQueue() { - for (;;) { if (mAudioQueue.empty()) { break; @@ -562,6 +565,13 @@ void NuPlayer::Renderer::notifyPosition() { } int64_t nowUs = ALooper::GetNowUs(); + + if (mLastPositionUpdateUs >= 0 + && nowUs < mLastPositionUpdateUs + kMinPositionUpdateDelayUs) { + return; + } + mLastPositionUpdateUs = nowUs; + int64_t positionUs = (nowUs - mAnchorTimeRealUs) + mAnchorTimeMediaUs; sp<AMessage> notify = mNotify->dup(); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h index 2713031f4b70..3a641a22042d 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h @@ -74,6 +74,8 @@ private: status_t mFinalResult; }; + static const int64_t kMinPositionUpdateDelayUs; + sp<MediaPlayerBase::AudioSink> mAudioSink; sp<AMessage> mNotify; List<QueueEntry> mAudioQueue; @@ -98,6 +100,8 @@ private: bool mPaused; + int64_t mLastPositionUpdateUs; + void onDrainAudioQueue(); void postDrainAudioQueue(); |