diff options
Diffstat (limited to 'camera')
-rw-r--r-- | camera/QCamera2/HAL3/QCamera3Channel.cpp | 48 | ||||
-rw-r--r-- | camera/QCamera2/HAL3/QCamera3Channel.h | 2 |
2 files changed, 29 insertions, 21 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp index e1f6b63..c13cade 100644 --- a/camera/QCamera2/HAL3/QCamera3Channel.cpp +++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp @@ -4036,31 +4036,35 @@ QCamera3Stream * QCamera3ReprocessChannel::getSrcStreamBySrcHandle(uint32_t srcH int32_t QCamera3ReprocessChannel::unmapOfflineBuffers(bool all) { int rc = NO_ERROR; - if (!mOfflineBuffers.empty()) { - QCamera3Stream *stream = NULL; - List<OfflineBuffer>::iterator it = mOfflineBuffers.begin(); - for (; it != mOfflineBuffers.end(); it++) { - stream = (*it).stream; - if (NULL != stream) { - rc = stream->unmapBuf((*it).type, - (*it).index, - -1); - if (NO_ERROR != rc) { - LOGE("Error during offline buffer unmap %d", - rc); + { + Mutex::Autolock lock(mOfflineBuffersLock); + if (!mOfflineBuffers.empty()) { + QCamera3Stream *stream = NULL; + List<OfflineBuffer>::iterator it = mOfflineBuffers.begin(); + for (; it != mOfflineBuffers.end(); it++) { + stream = (*it).stream; + if (NULL != stream) { + rc = stream->unmapBuf((*it).type, + (*it).index, + -1); + if (NO_ERROR != rc) { + LOGE("Error during offline buffer unmap %d", + rc); + } + LOGD("Unmapped buffer with index %d", (*it).index); } - LOGD("Unmapped buffer with index %d", (*it).index); - } - if (!all) { - mOfflineBuffers.erase(it); - break; - } - } - if (all) { - mOfflineBuffers.clear(); + if (!all) { + mOfflineBuffers.erase(it); + break; + } + } + if (all) { + mOfflineBuffers.clear(); + } } } + Mutex::Autolock lock(mOfflineMetaBuffersLock); if (!mOfflineMetaBuffers.empty()) { QCamera3Stream *stream = NULL; List<OfflineBuffer>::iterator it = mOfflineMetaBuffers.begin(); @@ -4450,6 +4454,7 @@ int32_t QCamera3ReprocessChannel::overrideFwkMetadata( mappedBuffer.index = buf_idx; mappedBuffer.stream = pStream; mappedBuffer.type = CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF; + Mutex::Autolock lock(mOfflineBuffersLock); mOfflineBuffers.push_back(mappedBuffer); mOfflineBuffersIndex = (int32_t)buf_idx; LOGD("Mapped buffer with index %d", mOfflineBuffersIndex); @@ -4469,6 +4474,7 @@ int32_t QCamera3ReprocessChannel::overrideFwkMetadata( mappedBuffer.index = meta_buf_idx; mappedBuffer.stream = pStream; mappedBuffer.type = CAM_MAPPING_BUF_TYPE_OFFLINE_META_BUF; + Mutex::Autolock lock(mOfflineMetaBuffersLock); mOfflineMetaBuffers.push_back(mappedBuffer); mOfflineMetaIndex = (int32_t)meta_buf_idx; LOGD("Mapped meta buffer with index %d", mOfflineMetaIndex); diff --git a/camera/QCamera2/HAL3/QCamera3Channel.h b/camera/QCamera2/HAL3/QCamera3Channel.h index 38b6c81..4495072 100644 --- a/camera/QCamera2/HAL3/QCamera3Channel.h +++ b/camera/QCamera2/HAL3/QCamera3Channel.h @@ -568,6 +568,8 @@ private: int32_t resetToCamPerfNormal(uint32_t frameNumber); android::List<OfflineBuffer> mOfflineBuffers; android::List<OfflineBuffer> mOfflineMetaBuffers; + Mutex mOfflineBuffersLock; + Mutex mOfflineMetaBuffersLock; int32_t mOfflineBuffersIndex; int32_t mOfflineMetaIndex; uint32_t mFrameLen; |