Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -754,6 +754,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { offloadInfo.has_video = (mVideoDecoder != NULL); offloadInfo.is_streaming = true; ALOGV("try to open AudioSink in offload mode"); err = mAudioSink->open( sampleRate, numChannels, Loading Loading @@ -793,6 +794,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { if (!mOffloadAudio) { flags &= ~AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; ALOGV("open AudioSink in NON-offload mode"); CHECK_EQ(mAudioSink->open( sampleRate, numChannels, Loading Loading @@ -940,6 +942,21 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else if (what == Renderer::kWhatMediaRenderingStart) { ALOGV("media rendering started"); notifyListener(MEDIA_STARTED, 0, 0); } else if (what == Renderer::kWhatAudioOffloadTearDown) { ALOGV("Tear down audio offload, fall back to s/w path"); int64_t positionUs; CHECK(msg->findInt64("positionUs", &positionUs)); mAudioSink->close(); mAudioDecoder.clear(); mRenderer->flush(true /* audio */); if (mVideoDecoder != NULL) { mRenderer->flush(false /* audio */); } mRenderer->signalDisableOffloadAudio(); mOffloadAudio = false; performSeek(positionUs); instantiateDecoder(true /* audio */, &mAudioDecoder); } break; } Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +28 −1 Original line number Diff line number Diff line Loading @@ -223,6 +223,12 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatAudioOffloadTearDown: { onAudioOffloadTearDown(); break; } default: TRESPASS(); break; Loading Loading @@ -294,7 +300,7 @@ size_t NuPlayer::Renderer::AudioSinkCallback( case MediaPlayerBase::AudioSink::CB_EVENT_TEAR_DOWN: { // TODO: send this to player. me->notifyAudioOffloadTearDown(); break; } } Loading Loading @@ -582,6 +588,10 @@ void NuPlayer::Renderer::notifyEOS(bool audio, status_t finalResult) { notify->post(); } void NuPlayer::Renderer::notifyAudioOffloadTearDown() { (new AMessage(kWhatAudioOffloadTearDown, id()))->post(); } void NuPlayer::Renderer::onQueueBuffer(const sp<AMessage> &msg) { int32_t audio; CHECK(msg->findInt32("audio", &audio)); Loading Loading @@ -814,6 +824,7 @@ void NuPlayer::Renderer::onAudioSinkChanged() { void NuPlayer::Renderer::onDisableOffloadAudio() { Mutex::Autolock autoLock(mLock); mFlags &= ~FLAG_OFFLOAD_AUDIO; ++mAudioQueueGeneration; } void NuPlayer::Renderer::notifyPosition() { Loading Loading @@ -880,5 +891,21 @@ void NuPlayer::Renderer::onResume() { } } void NuPlayer::Renderer::onAudioOffloadTearDown() { uint32_t numFramesPlayed; CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK); int64_t currentPositionUs = mFirstAudioTimeUs + (numFramesPlayed * mAudioSink->msecsPerFrame()) * 1000ll; mAudioSink->stop(); mAudioSink->flush(); sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatAudioOffloadTearDown); notify->setInt64("positionUs", currentPositionUs); notify->post(); } } // namespace android media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +3 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ struct NuPlayer::Renderer : public AHandler { kWhatPosition = 'posi', kWhatVideoRenderingStart = 'vdrd', kWhatMediaRenderingStart = 'mdrd', kWhatAudioOffloadTearDown = 'aOTD', }; protected: Loading Loading @@ -143,12 +144,14 @@ private: void onDisableOffloadAudio(); void onPause(); void onResume(); void onAudioOffloadTearDown(); void notifyEOS(bool audio, status_t finalResult); void notifyFlushComplete(bool audio); void notifyPosition(); void notifyVideoLateBy(int64_t lateByUs); void notifyVideoRenderingStart(); void notifyAudioOffloadTearDown(); void flushQueue(List<QueueEntry> *queue); bool dropBufferWhileFlushing(bool audio, const sp<AMessage> &msg); Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -754,6 +754,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { offloadInfo.has_video = (mVideoDecoder != NULL); offloadInfo.is_streaming = true; ALOGV("try to open AudioSink in offload mode"); err = mAudioSink->open( sampleRate, numChannels, Loading Loading @@ -793,6 +794,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { if (!mOffloadAudio) { flags &= ~AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; ALOGV("open AudioSink in NON-offload mode"); CHECK_EQ(mAudioSink->open( sampleRate, numChannels, Loading Loading @@ -940,6 +942,21 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else if (what == Renderer::kWhatMediaRenderingStart) { ALOGV("media rendering started"); notifyListener(MEDIA_STARTED, 0, 0); } else if (what == Renderer::kWhatAudioOffloadTearDown) { ALOGV("Tear down audio offload, fall back to s/w path"); int64_t positionUs; CHECK(msg->findInt64("positionUs", &positionUs)); mAudioSink->close(); mAudioDecoder.clear(); mRenderer->flush(true /* audio */); if (mVideoDecoder != NULL) { mRenderer->flush(false /* audio */); } mRenderer->signalDisableOffloadAudio(); mOffloadAudio = false; performSeek(positionUs); instantiateDecoder(true /* audio */, &mAudioDecoder); } break; } Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +28 −1 Original line number Diff line number Diff line Loading @@ -223,6 +223,12 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatAudioOffloadTearDown: { onAudioOffloadTearDown(); break; } default: TRESPASS(); break; Loading Loading @@ -294,7 +300,7 @@ size_t NuPlayer::Renderer::AudioSinkCallback( case MediaPlayerBase::AudioSink::CB_EVENT_TEAR_DOWN: { // TODO: send this to player. me->notifyAudioOffloadTearDown(); break; } } Loading Loading @@ -582,6 +588,10 @@ void NuPlayer::Renderer::notifyEOS(bool audio, status_t finalResult) { notify->post(); } void NuPlayer::Renderer::notifyAudioOffloadTearDown() { (new AMessage(kWhatAudioOffloadTearDown, id()))->post(); } void NuPlayer::Renderer::onQueueBuffer(const sp<AMessage> &msg) { int32_t audio; CHECK(msg->findInt32("audio", &audio)); Loading Loading @@ -814,6 +824,7 @@ void NuPlayer::Renderer::onAudioSinkChanged() { void NuPlayer::Renderer::onDisableOffloadAudio() { Mutex::Autolock autoLock(mLock); mFlags &= ~FLAG_OFFLOAD_AUDIO; ++mAudioQueueGeneration; } void NuPlayer::Renderer::notifyPosition() { Loading Loading @@ -880,5 +891,21 @@ void NuPlayer::Renderer::onResume() { } } void NuPlayer::Renderer::onAudioOffloadTearDown() { uint32_t numFramesPlayed; CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK); int64_t currentPositionUs = mFirstAudioTimeUs + (numFramesPlayed * mAudioSink->msecsPerFrame()) * 1000ll; mAudioSink->stop(); mAudioSink->flush(); sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatAudioOffloadTearDown); notify->setInt64("positionUs", currentPositionUs); notify->post(); } } // namespace android
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +3 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ struct NuPlayer::Renderer : public AHandler { kWhatPosition = 'posi', kWhatVideoRenderingStart = 'vdrd', kWhatMediaRenderingStart = 'mdrd', kWhatAudioOffloadTearDown = 'aOTD', }; protected: Loading Loading @@ -143,12 +144,14 @@ private: void onDisableOffloadAudio(); void onPause(); void onResume(); void onAudioOffloadTearDown(); void notifyEOS(bool audio, status_t finalResult); void notifyFlushComplete(bool audio); void notifyPosition(); void notifyVideoLateBy(int64_t lateByUs); void notifyVideoRenderingStart(); void notifyAudioOffloadTearDown(); void flushQueue(List<QueueEntry> *queue); bool dropBufferWhileFlushing(bool audio, const sp<AMessage> &msg); Loading