Merge "Camera: synchronize access to mMemoryMap" am: 2b888b349f
am: 623ddbb528
Change-Id: I5b6d641a3cd324b7d2c3078c2d94cbaf0c3a4113
This commit is contained in:
commit
7fa903cdaa
2 changed files with 23 additions and 5 deletions
|
@ -377,10 +377,14 @@ camera_memory_t* CameraDevice::sGetMemory(int fd, size_t buf_size, uint_t num_bu
|
|||
hidl_handle hidlHandle = mem->mHidlHandle;
|
||||
MemoryId id = object->mDeviceCallback->registerMemory(hidlHandle, buf_size, num_bufs);
|
||||
mem->handle.mId = id;
|
||||
if (object->mMemoryMap.count(id) != 0) {
|
||||
ALOGE("%s: duplicate MemoryId %d returned by client!", __FUNCTION__, id);
|
||||
|
||||
{
|
||||
Mutex::Autolock _l(object->mMemoryMapLock);
|
||||
if (object->mMemoryMap.count(id) != 0) {
|
||||
ALOGE("%s: duplicate MemoryId %d returned by client!", __FUNCTION__, id);
|
||||
}
|
||||
object->mMemoryMap[id] = mem;
|
||||
}
|
||||
object->mMemoryMap[id] = mem;
|
||||
mem->handle.mDevice = object;
|
||||
return &mem->handle;
|
||||
}
|
||||
|
@ -398,7 +402,10 @@ void CameraDevice::sPutMemory(camera_memory_t *data) {
|
|||
ALOGE("%s: camera HAL return memory while camera is not opened!", __FUNCTION__);
|
||||
}
|
||||
device->mDeviceCallback->unregisterMemory(mem->handle.mId);
|
||||
device->mMemoryMap.erase(mem->handle.mId);
|
||||
{
|
||||
Mutex::Autolock _l(device->mMemoryMapLock);
|
||||
device->mMemoryMap.erase(mem->handle.mId);
|
||||
}
|
||||
mem->decStrong(mem);
|
||||
}
|
||||
|
||||
|
@ -826,7 +833,16 @@ void CameraDevice::releaseRecordingFrameLocked(
|
|||
return;
|
||||
}
|
||||
if (mDevice->ops->release_recording_frame) {
|
||||
CameraHeapMemory* camMemory = mMemoryMap.at(memId);
|
||||
CameraHeapMemory* camMemory;
|
||||
{
|
||||
Mutex::Autolock _l(mMemoryMapLock);
|
||||
auto it = mMemoryMap.find(memId);
|
||||
if (it == mMemoryMap.end() || it->second == nullptr) {
|
||||
ALOGE("%s unknown memoryId %d", __FUNCTION__, memId);
|
||||
return;
|
||||
}
|
||||
camMemory = it->second;
|
||||
}
|
||||
if (bufferIndex >= camMemory->mNumBufs) {
|
||||
ALOGE("%s: bufferIndex %d exceeds number of buffers %d",
|
||||
__FUNCTION__, bufferIndex, camMemory->mNumBufs);
|
||||
|
|
|
@ -165,6 +165,8 @@ private:
|
|||
|
||||
sp<ICameraDeviceCallback> mDeviceCallback = nullptr;
|
||||
|
||||
mutable Mutex mMemoryMapLock; // gating access to mMemoryMap
|
||||
// must not hold mLock after this lock is acquired
|
||||
std::unordered_map<MemoryId, CameraHeapMemory*> mMemoryMap;
|
||||
|
||||
bool mMetadataMode = false;
|
||||
|
|
Loading…
Reference in a new issue