diff options
-rw-r--r-- | camera/BufferSourceAdapter.cpp | 6 | ||||
-rw-r--r-- | camera/inc/BufferSourceAdapter.h | 27 |
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() { |