Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +39 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,10 @@ namespace android { // Maximum time in paused state when offloading audio decompression. When elapsed, the AudioSink // is closed to allow the audio DSP to power down. static const int64_t kOffloadPauseMaxUs = 60000000ll; // static const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll; Loading Loading @@ -61,7 +65,9 @@ NuPlayer::Renderer::Renderer( mVideoRenderingStartGeneration(0), mAudioRenderingStartGeneration(0), mLastPositionUpdateUs(-1ll), mVideoLateByUs(0ll) { mVideoLateByUs(0ll), mAudioOffloadPauseTimeoutGeneration(0), mAudioOffloadTornDown(false) { } NuPlayer::Renderer::~Renderer() { Loading Loading @@ -259,6 +265,17 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatAudioOffloadPauseTimeout: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mAudioOffloadPauseTimeoutGeneration) { break; } onAudioOffloadTearDown(); break; } default: TRESPASS(); break; Loading Loading @@ -951,6 +968,7 @@ void NuPlayer::Renderer::onPause() { if (mHasAudio) { mAudioSink->pause(); startAudioOffloadPauseTimeout(); } ALOGV("now paused audio queue has %d entries, video has %d entries", Loading @@ -963,6 +981,7 @@ void NuPlayer::Renderer::onResume() { } if (mHasAudio) { cancelAudioOffloadPauseTimeout(); mAudioSink->start(); } Loading Loading @@ -1051,6 +1070,11 @@ int64_t NuPlayer::Renderer::getPlayedOutAudioDurationUs(int64_t nowUs) { } void NuPlayer::Renderer::onAudioOffloadTearDown() { if (mAudioOffloadTornDown) { return; } mAudioOffloadTornDown = true; int64_t firstAudioTimeUs; { Mutex::Autolock autoLock(mLock); Loading @@ -1069,5 +1093,19 @@ void NuPlayer::Renderer::onAudioOffloadTearDown() { notify->post(); } void NuPlayer::Renderer::startAudioOffloadPauseTimeout() { if (offloadingAudio()) { sp<AMessage> msg = new AMessage(kWhatAudioOffloadPauseTimeout, id()); msg->setInt32("generation", mAudioOffloadPauseTimeoutGeneration); msg->post(kOffloadPauseMaxUs); } } void NuPlayer::Renderer::cancelAudioOffloadPauseTimeout() { if (offloadingAudio()) { ++mAudioOffloadPauseTimeoutGeneration; } } } // namespace android media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +7 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ struct NuPlayer::Renderer : public AHandler { kWhatVideoRenderingStart = 'vdrd', kWhatMediaRenderingStart = 'mdrd', kWhatAudioOffloadTearDown = 'aOTD', kWhatAudioOffloadPauseTimeout = 'aOPT', }; protected: Loading Loading @@ -132,6 +133,9 @@ private: int64_t mLastPositionUpdateUs; int64_t mVideoLateByUs; int32_t mAudioOffloadPauseTimeoutGeneration; bool mAudioOffloadTornDown; size_t fillAudioBuffer(void *buffer, size_t size); bool onDrainAudioQueue(); Loading Loading @@ -168,6 +172,9 @@ private: bool offloadingAudio() const { return (mFlags & FLAG_OFFLOAD_AUDIO) != 0; } void startAudioOffloadPauseTimeout(); void cancelAudioOffloadPauseTimeout(); DISALLOW_EVIL_CONSTRUCTORS(Renderer); }; Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +39 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,10 @@ namespace android { // Maximum time in paused state when offloading audio decompression. When elapsed, the AudioSink // is closed to allow the audio DSP to power down. static const int64_t kOffloadPauseMaxUs = 60000000ll; // static const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll; Loading Loading @@ -61,7 +65,9 @@ NuPlayer::Renderer::Renderer( mVideoRenderingStartGeneration(0), mAudioRenderingStartGeneration(0), mLastPositionUpdateUs(-1ll), mVideoLateByUs(0ll) { mVideoLateByUs(0ll), mAudioOffloadPauseTimeoutGeneration(0), mAudioOffloadTornDown(false) { } NuPlayer::Renderer::~Renderer() { Loading Loading @@ -259,6 +265,17 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatAudioOffloadPauseTimeout: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mAudioOffloadPauseTimeoutGeneration) { break; } onAudioOffloadTearDown(); break; } default: TRESPASS(); break; Loading Loading @@ -951,6 +968,7 @@ void NuPlayer::Renderer::onPause() { if (mHasAudio) { mAudioSink->pause(); startAudioOffloadPauseTimeout(); } ALOGV("now paused audio queue has %d entries, video has %d entries", Loading @@ -963,6 +981,7 @@ void NuPlayer::Renderer::onResume() { } if (mHasAudio) { cancelAudioOffloadPauseTimeout(); mAudioSink->start(); } Loading Loading @@ -1051,6 +1070,11 @@ int64_t NuPlayer::Renderer::getPlayedOutAudioDurationUs(int64_t nowUs) { } void NuPlayer::Renderer::onAudioOffloadTearDown() { if (mAudioOffloadTornDown) { return; } mAudioOffloadTornDown = true; int64_t firstAudioTimeUs; { Mutex::Autolock autoLock(mLock); Loading @@ -1069,5 +1093,19 @@ void NuPlayer::Renderer::onAudioOffloadTearDown() { notify->post(); } void NuPlayer::Renderer::startAudioOffloadPauseTimeout() { if (offloadingAudio()) { sp<AMessage> msg = new AMessage(kWhatAudioOffloadPauseTimeout, id()); msg->setInt32("generation", mAudioOffloadPauseTimeoutGeneration); msg->post(kOffloadPauseMaxUs); } } void NuPlayer::Renderer::cancelAudioOffloadPauseTimeout() { if (offloadingAudio()) { ++mAudioOffloadPauseTimeoutGeneration; } } } // namespace android
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +7 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ struct NuPlayer::Renderer : public AHandler { kWhatVideoRenderingStart = 'vdrd', kWhatMediaRenderingStart = 'mdrd', kWhatAudioOffloadTearDown = 'aOTD', kWhatAudioOffloadPauseTimeout = 'aOPT', }; protected: Loading Loading @@ -132,6 +133,9 @@ private: int64_t mLastPositionUpdateUs; int64_t mVideoLateByUs; int32_t mAudioOffloadPauseTimeoutGeneration; bool mAudioOffloadTornDown; size_t fillAudioBuffer(void *buffer, size_t size); bool onDrainAudioQueue(); Loading Loading @@ -168,6 +172,9 @@ private: bool offloadingAudio() const { return (mFlags & FLAG_OFFLOAD_AUDIO) != 0; } void startAudioOffloadPauseTimeout(); void cancelAudioOffloadPauseTimeout(); DISALLOW_EVIL_CONSTRUCTORS(Renderer); }; Loading