summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camera/BufferSourceAdapter.cpp6
-rw-r--r--camera/inc/BufferSourceAdapter.h27
2 files changed, 24 insertions, 9 deletions
diff --git a/camera/BufferSourceAdapter.cpp b/camera/BufferSourceAdapter.cpp
index b34f8cb..e00cec7 100644
--- a/camera/BufferSourceAdapter.cpp
+++ b/camera/BufferSourceAdapter.cpp
@@ -123,6 +123,8 @@ BufferSourceAdapter::~BufferSourceAdapter()
{
LOG_FUNCTION_NAME;
+ android::AutoMutex lock(mLock);
+
destroy();
if (mFrameProvider) {
@@ -732,7 +734,9 @@ bool BufferSourceAdapter::handleFrameReturn()
void *y_uv[2];
android::Rect bounds(mFrameWidth, mFrameHeight);
- if ( NULL == mBufferSource ) {
+ android::AutoMutex lock(mLock);
+
+ if ( (NULL == mBufferSource) || (NULL == mBuffers) ) {
return false;
}
diff --git a/camera/inc/BufferSourceAdapter.h b/camera/inc/BufferSourceAdapter.h
index a827a10..0ca4cad 100644
--- a/camera/inc/BufferSourceAdapter.h
+++ b/camera/inc/BufferSourceAdapter.h
@@ -47,14 +47,20 @@ private:
~ReturnFrame() {
android::AutoMutex lock(mReturnFrameMutex);
- mDestroying = true;
- mReturnFrameCondition.signal();
}
void signal() {
mReturnFrameCondition.signal();
}
+ virtual void requestExit() {
+ Thread::requestExit();
+
+ android::AutoMutex lock(mReturnFrameMutex);
+ mDestroying = true;
+ mReturnFrameCondition.signal();
+ }
+
virtual bool threadLoop() {
android::AutoMutex lock(mReturnFrameMutex);
mReturnFrameCondition.wait(mReturnFrameMutex);
@@ -77,6 +83,17 @@ private:
}
~QueueFrame() {
+ }
+
+ void addFrame(CameraFrame *frame) {
+ android::AutoMutex lock(mFramesMutex);
+ mFrames.add(new CameraFrame(*frame));
+ mFramesCondition.signal();
+ }
+
+ virtual void requestExit() {
+ Thread::requestExit();
+
mDestroying = true;
android::AutoMutex lock(mFramesMutex);
@@ -86,12 +103,6 @@ private:
delete frame;
}
mFramesCondition.signal();
- }
-
- void addFrame(CameraFrame *frame) {
- android::AutoMutex lock(mFramesMutex);
- mFrames.add(new CameraFrame(*frame));
- mFramesCondition.signal();
}
virtual bool threadLoop() {