Fix for Visualizer release bug

Setting callback reference to NULL before requesting exit.

bug: 21804802
Change-Id: I54323959686880f4e7a10b766850f8c86c06edb6
diff --git a/include/media/Visualizer.h b/include/media/Visualizer.h
index b92f816..186e018 100644
--- a/include/media/Visualizer.h
+++ b/include/media/Visualizer.h
@@ -95,7 +95,8 @@
 
     // install a callback to receive periodic captures. The capture rate is specified in milliHertz
     // and the capture format is according to flags  (see callback_flags).
-    status_t setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t flags, uint32_t rate);
+    status_t setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t flags, uint32_t rate,
+                                bool force = false);
 
     // set the capture size capture size must be a power of two in the range
     // [VISUALIZER_CAPTURE_SIZE_MAX. VISUALIZER_CAPTURE_SIZE_MIN]
diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp
index dc46038..f5c1b1f 100644
--- a/media/libmedia/Visualizer.cpp
+++ b/media/libmedia/Visualizer.cpp
@@ -54,12 +54,8 @@
 Visualizer::~Visualizer()
 {
     ALOGV("Visualizer::~Visualizer()");
-    if (mCaptureThread != NULL) {
-        mCaptureThread->requestExitAndWait();
-        mCaptureThread.clear();
-    }
-    mCaptureCallBack = NULL;
-    mCaptureFlags = 0;
+    setEnabled(false);
+    setCaptureCallBack(NULL, NULL, 0, 0, true);
 }
 
 status_t Visualizer::setEnabled(bool enabled)
@@ -99,14 +95,14 @@
 }
 
 status_t Visualizer::setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t flags,
-        uint32_t rate)
+        uint32_t rate, bool force)
 {
     if (rate > CAPTURE_RATE_MAX) {
         return BAD_VALUE;
     }
     Mutex::Autolock _l(mCaptureLock);
 
-    if (mEnabled) {
+    if (force || mEnabled) {
         return INVALID_OPERATION;
     }