Loading media/libmedia/Visualizer.cpp +20 −3 Original line number Diff line number Diff line Loading @@ -56,6 +56,19 @@ Visualizer::~Visualizer() setCaptureCallBack(NULL, NULL, 0, 0); } void Visualizer::release() { ALOGV("Visualizer::release()"); setEnabled(false); Mutex::Autolock _l(mCaptureLock); mCaptureThread.clear(); mCaptureCallBack = NULL; mCaptureCbkUser = NULL; mCaptureFlags = 0; mCaptureRate = 0; } status_t Visualizer::setEnabled(bool enabled) { Mutex::Autolock _l(mCaptureLock); Loading Loading @@ -115,7 +128,7 @@ status_t Visualizer::setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t mCaptureRate = rate; if (cbk != NULL) { mCaptureThread = new CaptureThread(*this, rate, ((flags & CAPTURE_CALL_JAVA) != 0)); mCaptureThread = new CaptureThread(this, rate, ((flags & CAPTURE_CALL_JAVA) != 0)); } ALOGV("setCaptureCallBack() rate: %d thread %p flags 0x%08x", rate, mCaptureThread.get(), mCaptureFlags); Loading Loading @@ -402,7 +415,7 @@ void Visualizer::controlStatusChanged(bool controlGranted) { //------------------------------------------------------------------------- Visualizer::CaptureThread::CaptureThread(Visualizer& receiver, uint32_t captureRate, Visualizer::CaptureThread::CaptureThread(Visualizer* receiver, uint32_t captureRate, bool bCanCallJava) : Thread(bCanCallJava), mReceiver(receiver) { Loading @@ -413,10 +426,14 @@ Visualizer::CaptureThread::CaptureThread(Visualizer& receiver, uint32_t captureR bool Visualizer::CaptureThread::threadLoop() { ALOGV("CaptureThread %p enter", this); sp<Visualizer> receiver = mReceiver.promote(); if (receiver == NULL) { return false; } while (!exitPending()) { usleep(mSleepTimeUs); mReceiver.periodicCapture(); receiver->periodicCapture(); } ALOGV("CaptureThread %p exiting", this); return false; Loading media/libmedia/include/media/Visualizer.h +3 −2 Original line number Diff line number Diff line Loading @@ -131,6 +131,7 @@ public: // getCaptureSize() but the length of the FFT is half of the size (both parts of the spectrum // are returned status_t getFft(uint8_t *fft); void release(); protected: // from IEffectClient Loading @@ -146,12 +147,12 @@ private: class CaptureThread : public Thread { public: CaptureThread(Visualizer& receiver, uint32_t captureRate, bool bCanCallJava = false); CaptureThread(Visualizer* visualizer, uint32_t captureRate, bool bCanCallJava = false); private: friend class Visualizer; virtual bool threadLoop(); Visualizer& mReceiver; wp<Visualizer> mReceiver; Mutex mLock; uint32_t mSleepTimeUs; }; Loading Loading
media/libmedia/Visualizer.cpp +20 −3 Original line number Diff line number Diff line Loading @@ -56,6 +56,19 @@ Visualizer::~Visualizer() setCaptureCallBack(NULL, NULL, 0, 0); } void Visualizer::release() { ALOGV("Visualizer::release()"); setEnabled(false); Mutex::Autolock _l(mCaptureLock); mCaptureThread.clear(); mCaptureCallBack = NULL; mCaptureCbkUser = NULL; mCaptureFlags = 0; mCaptureRate = 0; } status_t Visualizer::setEnabled(bool enabled) { Mutex::Autolock _l(mCaptureLock); Loading Loading @@ -115,7 +128,7 @@ status_t Visualizer::setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t mCaptureRate = rate; if (cbk != NULL) { mCaptureThread = new CaptureThread(*this, rate, ((flags & CAPTURE_CALL_JAVA) != 0)); mCaptureThread = new CaptureThread(this, rate, ((flags & CAPTURE_CALL_JAVA) != 0)); } ALOGV("setCaptureCallBack() rate: %d thread %p flags 0x%08x", rate, mCaptureThread.get(), mCaptureFlags); Loading Loading @@ -402,7 +415,7 @@ void Visualizer::controlStatusChanged(bool controlGranted) { //------------------------------------------------------------------------- Visualizer::CaptureThread::CaptureThread(Visualizer& receiver, uint32_t captureRate, Visualizer::CaptureThread::CaptureThread(Visualizer* receiver, uint32_t captureRate, bool bCanCallJava) : Thread(bCanCallJava), mReceiver(receiver) { Loading @@ -413,10 +426,14 @@ Visualizer::CaptureThread::CaptureThread(Visualizer& receiver, uint32_t captureR bool Visualizer::CaptureThread::threadLoop() { ALOGV("CaptureThread %p enter", this); sp<Visualizer> receiver = mReceiver.promote(); if (receiver == NULL) { return false; } while (!exitPending()) { usleep(mSleepTimeUs); mReceiver.periodicCapture(); receiver->periodicCapture(); } ALOGV("CaptureThread %p exiting", this); return false; Loading
media/libmedia/include/media/Visualizer.h +3 −2 Original line number Diff line number Diff line Loading @@ -131,6 +131,7 @@ public: // getCaptureSize() but the length of the FFT is half of the size (both parts of the spectrum // are returned status_t getFft(uint8_t *fft); void release(); protected: // from IEffectClient Loading @@ -146,12 +147,12 @@ private: class CaptureThread : public Thread { public: CaptureThread(Visualizer& receiver, uint32_t captureRate, bool bCanCallJava = false); CaptureThread(Visualizer* visualizer, uint32_t captureRate, bool bCanCallJava = false); private: friend class Visualizer; virtual bool threadLoop(); Visualizer& mReceiver; wp<Visualizer> mReceiver; Mutex mLock; uint32_t mSleepTimeUs; }; Loading