summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorTyler Luu <tluu@ti.com>2012-04-18 20:09:02 -0500
committerDaniel Levin <dendy@ti.com>2012-07-25 08:55:47 -0500
commit9dfdada25877a0eda9655661bd9eb7251cff7092 (patch)
tree9442a5e696f122b31849755e75a28758dc580b92 /test
parent2ec4485410f71d26dfd6b5126906eacdeb9086e0 (diff)
downloadhardware_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.h15
-rw-r--r--test/CameraHal/camera_test_menu.cpp5
-rw-r--r--test/CameraHal/camera_test_surfacetexture.cpp2
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();
}