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:
@@ -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> ¬ify)
|
const sp<AMessage> ¬ify)
|
||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user