summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
diff options
context:
space:
mode:
authorRonghua Wu <ronghuawu@google.com>2015-05-22 18:41:38 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-05-22 18:41:38 +0000
commit0a7989f5691f161fff97dd550eb602e44a6e6185 (patch)
tree79fd65829976dd4efa997ca8e65aa7cc3c2fb968 /media/libmediaplayerservice/nuplayer/NuPlayer.cpp
parentc5648e09bdacc0882aa55525cc1aad6d09794e11 (diff)
parentfaeb0f291330134dc4468359a36e099aae508449 (diff)
downloadframeworks_av-0a7989f5691f161fff97dd550eb602e44a6e6185.zip
frameworks_av-0a7989f5691f161fff97dd550eb602e44a6e6185.tar.gz
frameworks_av-0a7989f5691f161fff97dd550eb602e44a6e6185.tar.bz2
Merge "libmediaplayerservice: try to open audio sink in offload mode in error." into mnc-dev
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index c8f289c..a79858c 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -1083,12 +1083,12 @@ 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 if due to error.");
+ } else if (what == Renderer::kWhatAudioTearDown) {
int64_t positionUs;
CHECK(msg->findInt64("positionUs", &positionUs));
int32_t reason;
CHECK(msg->findInt32("reason", &reason));
+ ALOGV("Tear down audio with reason %d.", reason);
closeAudioSink();
mAudioDecoder.clear();
++mAudioDecoderGeneration;
@@ -1100,9 +1100,22 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
}
performSeek(positionUs);
+
if (reason == Renderer::kDueToError) {
- mRenderer->signalDisableOffloadAudio();
- mOffloadAudio = false;
+ sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */);
+ sp<AMessage> videoFormat = mSource->getFormat(false /* audio */);
+ audio_stream_type_t streamType = mAudioSink->getAudioStreamType();
+ const bool hasVideo = (videoFormat != NULL);
+ const bool canOffload = canOffloadStream(
+ audioMeta, hasVideo, true /* is_streaming */, streamType);
+ if (canOffload) {
+ mRenderer->signalEnableOffloadAudio();
+ sp<AMessage> format = mSource->getFormat(true /*audio*/);
+ tryOpenAudioSinkForOffload(format, hasVideo);
+ } else {
+ mRenderer->signalDisableOffloadAudio();
+ mOffloadAudio = false;
+ }
instantiateDecoder(true /* audio */, &mAudioDecoder);
}
}