Don't post position updates too frequently

i.e. don't hog my message queue.

related-to-bug: 5284760
Change-Id: I8e2d36a11dbee1567b18ed13dc5257a65c6eeda7
This commit is contained in:
Andreas Huber
2011-09-13 08:28:38 -07:00
parent 62bb0cdc74
commit fa6dfdcfd7
2 changed files with 17 additions and 3 deletions

View File

@@ -26,6 +26,9 @@
namespace android { namespace android {
// static
const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll;
NuPlayer::Renderer::Renderer( NuPlayer::Renderer::Renderer(
const sp<MediaPlayerBase::AudioSink> &sink, const sp<MediaPlayerBase::AudioSink> &sink,
const sp<AMessage> &notify) const sp<AMessage> &notify)
@@ -43,7 +46,8 @@ NuPlayer::Renderer::Renderer(
mHasAudio(false), mHasAudio(false),
mHasVideo(false), mHasVideo(false),
mSyncQueues(false), mSyncQueues(false),
mPaused(false) { mPaused(false),
mLastPositionUpdateUs(-1ll) {
} }
NuPlayer::Renderer::~Renderer() { NuPlayer::Renderer::~Renderer() {
@@ -190,7 +194,7 @@ void NuPlayer::Renderer::postDrainAudioQueue() {
mDrainAudioQueuePending = true; mDrainAudioQueuePending = true;
sp<AMessage> msg = new AMessage(kWhatDrainAudioQueue, id()); sp<AMessage> msg = new AMessage(kWhatDrainAudioQueue, id());
msg->setInt32("generation", mAudioQueueGeneration); msg->setInt32("generation", mAudioQueueGeneration);
msg->post(10000); msg->post();
} }
void NuPlayer::Renderer::signalAudioSinkChanged() { void NuPlayer::Renderer::signalAudioSinkChanged() {
@@ -198,7 +202,6 @@ void NuPlayer::Renderer::signalAudioSinkChanged() {
} }
void NuPlayer::Renderer::onDrainAudioQueue() { void NuPlayer::Renderer::onDrainAudioQueue() {
for (;;) { for (;;) {
if (mAudioQueue.empty()) { if (mAudioQueue.empty()) {
break; break;
@@ -562,6 +565,13 @@ void NuPlayer::Renderer::notifyPosition() {
} }
int64_t nowUs = ALooper::GetNowUs(); int64_t nowUs = ALooper::GetNowUs();
if (mLastPositionUpdateUs >= 0
&& nowUs < mLastPositionUpdateUs + kMinPositionUpdateDelayUs) {
return;
}
mLastPositionUpdateUs = nowUs;
int64_t positionUs = (nowUs - mAnchorTimeRealUs) + mAnchorTimeMediaUs; int64_t positionUs = (nowUs - mAnchorTimeRealUs) + mAnchorTimeMediaUs;
sp<AMessage> notify = mNotify->dup(); sp<AMessage> notify = mNotify->dup();

View File

@@ -74,6 +74,8 @@ private:
status_t mFinalResult; status_t mFinalResult;
}; };
static const int64_t kMinPositionUpdateDelayUs;
sp<MediaPlayerBase::AudioSink> mAudioSink; sp<MediaPlayerBase::AudioSink> mAudioSink;
sp<AMessage> mNotify; sp<AMessage> mNotify;
List<QueueEntry> mAudioQueue; List<QueueEntry> mAudioQueue;
@@ -98,6 +100,8 @@ private:
bool mPaused; bool mPaused;
int64_t mLastPositionUpdateUs;
void onDrainAudioQueue(); void onDrainAudioQueue();
void postDrainAudioQueue(); void postDrainAudioQueue();