diff options
author | Tyler Luu <tluu@ti.com> | 2012-04-18 20:09:02 -0500 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-07-25 08:55:47 -0500 |
commit | 9dfdada25877a0eda9655661bd9eb7251cff7092 (patch) | |
tree | 9442a5e696f122b31849755e75a28758dc580b92 /test | |
parent | 2ec4485410f71d26dfd6b5126906eacdeb9086e0 (diff) | |
download | hardware_ti_omap4-9dfdada25877a0eda9655661bd9eb7251cff7092.zip hardware_ti_omap4-9dfdada25877a0eda9655661bd9eb7251cff7092.tar.gz hardware_ti_omap4-9dfdada25877a0eda9655661bd9eb7251cff7092.tar.bz2 |
camera_test: destroy buffer source thread properly
BufferSourceThread was not properly joining since it was
stuck waiting for frame which also meant BufferSourceThread
was not being destroyed properly since it still had children.
Change-Id: I63f775b7fe46e91c4589779df5647b87aa707360
Signed-off-by: Tyler Luu <tluu@ti.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/CameraHal/camera_test.h | 15 | ||||
-rw-r--r-- | test/CameraHal/camera_test_menu.cpp | 5 | ||||
-rw-r--r-- | test/CameraHal/camera_test_surfacetexture.cpp | 2 |
3 files changed, 22 insertions, 0 deletions
diff --git a/test/CameraHal/camera_test.h b/test/CameraHal/camera_test.h index 73e33c7..48d670b 100644 --- a/test/CameraHal/camera_test.h +++ b/test/CameraHal/camera_test.h @@ -346,6 +346,13 @@ public: mFrameQueueCondition.signal(); } + virtual void requestExit() { + Thread::requestExit(); + + mExiting = true; + mFrameQueueCondition.signal(); + } + virtual bool threadLoop() { Mutex::Autolock lock(mFrameQueueMutex); while (mDeferQueue.isEmpty() && !mExiting) { @@ -395,6 +402,7 @@ public: virtual ~BufferSourceThread() { mDestroying = true; + mSurfaceTextureBase->deinit(); delete mSurfaceTextureBase; for (unsigned int i = 0; i < mReturnedBuffers.size(); i++) { buffer_info_t info = mReturnedBuffers.itemAt(i); @@ -426,6 +434,13 @@ public: return false; } + virtual void requestExit() { + Thread::requestExit(); + + mDestroying = true; + mFW->onFrameAvailable(); + } + void setBuffer() { mCamera->setBufferSource(NULL, mSurfaceTexture); } diff --git a/test/CameraHal/camera_test_menu.cpp b/test/CameraHal/camera_test_menu.cpp index fc3d7d7..a2e865a 100644 --- a/test/CameraHal/camera_test_menu.cpp +++ b/test/CameraHal/camera_test_menu.cpp @@ -1835,6 +1835,11 @@ int deleteAllocatedMemory() { delete [] layoutstr; delete [] capturelayoutstr; + if (bufferSourceOutputThread.get()) { + bufferSourceOutputThread->requestExit(); + bufferSourceOutputThread.clear(); + } + return 0; } diff --git a/test/CameraHal/camera_test_surfacetexture.cpp b/test/CameraHal/camera_test_surfacetexture.cpp index e71f6d0..35b39b6 100644 --- a/test/CameraHal/camera_test_surfacetexture.cpp +++ b/test/CameraHal/camera_test_surfacetexture.cpp @@ -283,6 +283,8 @@ void SurfaceTextureBase::initialize(int tex_id, EGLenum tex_target) { void SurfaceTextureBase::deinit() { mANW.clear(); mSTC.clear(); + + mST->abandon(); mST.clear(); } |