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