summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-12-14 02:54:24 -0800
committerSteve Kondik <steve@cyngn.com>2015-12-14 02:58:56 -0800
commit23e9ce412425be12b8b637fff5886703f753c36e (patch)
treea840a7030de14a3337fd078ce7c5c4884cfc1391 /media/libmediaplayerservice
parentdc5f0eb0bb08885f63a97a111b02e234efc5c413 (diff)
downloadframeworks_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.cpp13
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp10
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.