summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp23
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