diff options
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 855bc0a..57a652c 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -39,7 +39,9 @@ NuPlayer::Renderer::Renderer( mAnchorTimeRealUs(-1), mFlushingAudio(false), mFlushingVideo(false), - mSyncQueues(true) { + mHasAudio(mAudioSink != NULL), + mHasVideo(true), + mSyncQueues(mHasAudio && mHasVideo) { } NuPlayer::Renderer::~Renderer() { @@ -87,7 +89,7 @@ void NuPlayer::Renderer::signalTimeDiscontinuity() { CHECK(mVideoQueue.empty()); mAnchorTimeMediaUs = -1; mAnchorTimeRealUs = -1; - mSyncQueues = true; + mSyncQueues = mHasAudio && mHasVideo; } void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { @@ -142,6 +144,12 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { break; } + case kWhatAudioSinkChanged: + { + onAudioSinkChanged(); + break; + } + default: TRESPASS(); break; @@ -163,6 +171,10 @@ void NuPlayer::Renderer::postDrainAudioQueue() { msg->post(10000); } +void NuPlayer::Renderer::signalAudioSinkChanged() { + (new AMessage(kWhatAudioSinkChanged, id()))->post(); +} + void NuPlayer::Renderer::onDrainAudioQueue() { uint32_t numFramesPlayed; CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK); @@ -264,7 +276,7 @@ void NuPlayer::Renderer::postDrainVideoQueue() { if (mAnchorTimeMediaUs < 0) { delayUs = 0; - if (mAudioSink == NULL) { + if (!mHasAudio) { mAnchorTimeMediaUs = mediaTimeUs; mAnchorTimeRealUs = ALooper::GetNowUs(); } @@ -492,5 +504,10 @@ bool NuPlayer::Renderer::dropBufferWhileFlushing( return true; } +void NuPlayer::Renderer::onAudioSinkChanged() { + CHECK(!mDrainAudioQueuePending); + mNumFramesWritten = 0; +} + } // namespace android |