diff options
author | Steve Kondik <steve@cyngn.com> | 2015-12-14 02:54:24 -0800 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-12-14 02:58:56 -0800 |
commit | 23e9ce412425be12b8b637fff5886703f753c36e (patch) | |
tree | a840a7030de14a3337fd078ce7c5c4884cfc1391 /media/libmediaplayerservice | |
parent | dc5f0eb0bb08885f63a97a111b02e234efc5c413 (diff) | |
download | frameworks_av-23e9ce412425be12b8b637fff5886703f753c36e.zip frameworks_av-23e9ce412425be12b8b637fff5886703f753c36e.tar.gz frameworks_av-23e9ce412425be12b8b637fff5886703f753c36e.tar.bz2 |
nuplayer: PCM offload fixes
* Fix PCM offload when passthrough isn't used (OMX decoder)
* Fix resume of PCM offload after pause timeout
Change-Id: I742eafd6ae8656fb214ba6b81cc63af57590c28c
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 13 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 10 |
2 files changed, 13 insertions, 10 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 678db8e..c7e1b13 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -1240,7 +1240,7 @@ void NuPlayer::onResume() { } // |mAudioDecoder| may have been released due to the pause timeout, so re-create it if // needed. - if (audioDecoderStillNeeded() && mAudioDecoder == NULL && !mOffloadDecodedPCM) { + if (audioDecoderStillNeeded() && mAudioDecoder == NULL) { instantiateDecoder(true /* audio */, &mAudioDecoder); } if (mRenderer != NULL) { @@ -1316,8 +1316,8 @@ void NuPlayer::onStart(int64_t startPositionUs) { mOffloadAudio = canOffloadStream(audioMeta, (videoFormat != NULL), mSource->isStreaming(), streamType); - if (!mOffloadAudio) { - mOffloadAudio = canOffloadDecodedPCMStream(audioMeta, (videoFormat != NULL), mSource->isStreaming(), streamType); + if (!mOffloadAudio && (audioMeta != NULL)) { + mOffloadDecodedPCM = mOffloadAudio = canOffloadDecodedPCMStream(audioMeta, (videoFormat != NULL), mSource->isStreaming(), streamType); } if (mOffloadAudio) { @@ -1460,6 +1460,7 @@ void NuPlayer::tryOpenAudioSinkForOffload(const sp<AMessage> &format, bool hasVi if (err != OK) { // Any failure we turn off mOffloadAudio. mOffloadAudio = false; + mOffloadDecodedPCM = false; } else if (mOffloadAudio) { sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); @@ -1479,6 +1480,7 @@ void NuPlayer::determineAudioModeChange() { if (mRenderer == NULL) { ALOGW("No renderer can be used to determine audio mode. Use non-offload for safety."); mOffloadAudio = false; + mOffloadDecodedPCM = false; return; } @@ -1489,7 +1491,7 @@ void NuPlayer::determineAudioModeChange() { bool canOffload = canOffloadStream( audioMeta, hasVideo, mSource->isStreaming(), streamType); if (!canOffload) { - canOffload = canOffloadDecodedPCMStream(audioMeta, (videoFormat != NULL), mSource->isStreaming(), streamType); + mOffloadDecodedPCM = canOffload = canOffloadDecodedPCMStream(audioMeta, (videoFormat != NULL), mSource->isStreaming(), streamType); } if (canOffload) { if (!mOffloadAudio) { @@ -1502,7 +1504,6 @@ void NuPlayer::determineAudioModeChange() { if (mOffloadAudio) { mRenderer->signalDisableOffloadAudio(); mOffloadAudio = false; - setDecodedPcmOffload(false); } } } @@ -2477,7 +2478,7 @@ bool NuPlayer::canOffloadDecodedPCMStream(const sp<MetaData> audioMeta, AVNuUtils::get()->createPCMMetaFromSource(audioMeta); ALOGI("canOffloadDecodedPCMStream"); - audioMeta->dumpToLog(); + audioPCMMeta->dumpToLog(); mOffloadDecodedPCM = ((mime && !AVNuUtils::get()->pcmOffloadException(audioMeta)) && canOffloadStream(audioPCMMeta, hasVideo, isStreaming, streamType)); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 4135426..d1b1db2 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -1772,8 +1772,10 @@ status_t NuPlayer::Renderer::onOpenAudioSink( onDisableOffloadAudio(); } else { audioFormat = AVUtils::get()->updateAudioFormat(audioFormat, format); - bitWidth = AVUtils::get()->getAudioSampleBits(format); + ALOGV("Mime \"%s\" mapped to audio_format 0x%x", + mime.c_str(), audioFormat); + int avgBitRate = -1; format->findInt32("bitrate", &avgBitRate); @@ -1793,6 +1795,8 @@ status_t NuPlayer::Renderer::onOpenAudioSink( } } + ALOGV("onOpenAudioSink: %s", format->debugString().c_str()); + int32_t offloadBufferSize = AVUtils::get()->getAudioMaxInputBufferSize( audioFormat, @@ -1839,9 +1843,6 @@ status_t NuPlayer::Renderer::onOpenAudioSink( if (err == OK) { err = mAudioSink->setPlaybackRate(mPlaybackSettings); - } - - if (err == OK) { // If the playback is offloaded to h/w, we pass // the HAL some metadata information. // We don't want to do this for PCM because it @@ -1853,6 +1854,7 @@ status_t NuPlayer::Renderer::onOpenAudioSink( err = mAudioSink->start(); } ALOGV_IF(err == OK, "openAudioSink: offload succeeded"); + mFlags |= FLAG_OFFLOAD_AUDIO; } if (err != OK) { // Clean up, fall back to non offload mode. |