Properly announce decoder output format changes, make sure AMessage::dup does.
Change-Id: Ia77f6b6d5e5c5055583740dfe876b8a3c22be9b6
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 403029a..e99c24a 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -198,6 +198,21 @@
mFlushingAudio = NONE;
mFlushingVideo = NONE;
}
+ } else if (what == ACodec::kWhatOutputFormatChanged) {
+ CHECK(audio);
+
+ int32_t numChannels;
+ CHECK(codecRequest->findInt32("channel-count", &numChannels));
+
+ int32_t sampleRate;
+ CHECK(codecRequest->findInt32("sample-rate", &sampleRate));
+
+ LOGI("Audio output format changed to %d Hz, %d channels",
+ sampleRate, numChannels);
+
+ mAudioSink->close();
+ CHECK_EQ(mAudioSink->open(sampleRate, numChannels), (status_t)OK);
+ mAudioSink->start();
} else {
CHECK_EQ((int)what, (int)ACodec::kWhatDrainThisBuffer);
@@ -365,18 +380,6 @@
const sp<MetaData> &meta = source->getFormat();
(*decoder)->configure(meta);
- if (audio) {
- int32_t sampleRate;
- int32_t channelCount;
- CHECK(meta->findInt32(kKeySampleRate, &sampleRate));
- CHECK(meta->findInt32(kKeyChannelCount, &channelCount));
-
- channelCount = 2; // XXX
-
- CHECK_EQ(mAudioSink->open(sampleRate, channelCount), (status_t)OK);
- mAudioSink->start();
- }
-
return OK;
}