Properly shutdown the decoders on a reset() in NuPlayer's implementation.
related-to-bug: 3321470
Change-Id: Ida6d2171c5a3a407188d4633602b764f8fe7086a
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index d21d4ff..4988d24 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -22,12 +22,14 @@
#include "NuPlayer.h"
+#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ALooper.h>
namespace android {
NuPlayerDriver::NuPlayerDriver()
- : mLooper(new ALooper),
+ : mResetInProgress(false),
+ mLooper(new ALooper),
mPlayer(false) {
mLooper->setName("NuPlayerDriver Looper");
@@ -121,6 +123,15 @@
}
status_t NuPlayerDriver::reset() {
+ Mutex::Autolock autoLock(mLock);
+ mResetInProgress = true;
+
+ mPlayer->resetAsync();
+
+ while (mResetInProgress) {
+ mCondition.wait(mLock);
+ }
+
return OK;
}
@@ -145,4 +156,16 @@
return INVALID_OPERATION;
}
+void NuPlayerDriver::sendEvent(int msg, int ext1, int ext2) {
+ if (msg != MEDIA_RESET_COMPLETE) {
+ MediaPlayerInterface::sendEvent(msg, ext1, ext2);
+ return;
+ }
+
+ Mutex::Autolock autoLock(mLock);
+ CHECK(mResetInProgress);
+ mResetInProgress = false;
+ mCondition.broadcast();
+}
+
} // namespace android