Loading services/camera/libcameraservice/device3/Camera3Device.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -4091,6 +4091,26 @@ status_t Camera3Device::HalInterface::switchToOffline( // Verify buffer caches std::vector<uint64_t> bufIds(offlineStream.circulatingBufferIds.begin(), offlineStream.circulatingBufferIds.end()); { // Due to timing it is possible that we may not have any remaining pending capture // requests that can update the caches on Hal side. This can result in buffer cache // mismatch between the service and the Hal and must be accounted for. std::lock_guard<std::mutex> l(mFreedBuffersLock); for (const auto& it : mFreedBuffers) { if (it.first == id) { ALOGV("%s: stream ID %d buffer id %" PRIu64 " cache removal still pending", __FUNCTION__, id, it.second); const auto& cachedEntry = std::find(bufIds.begin(), bufIds.end(), it.second); if (cachedEntry != bufIds.end()) { bufIds.erase(cachedEntry); } else { ALOGE("%s: stream ID %d buffer id %" PRIu64 " cache removal still pending " "however buffer is no longer in the offline stream info!", __FUNCTION__, id, it.second); } } } } if (!verifyBufferIds(id, bufIds)) { ALOGE("%s: stream ID %d buffer cache records mismatch!", __FUNCTION__, id); return UNKNOWN_ERROR; Loading Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -4091,6 +4091,26 @@ status_t Camera3Device::HalInterface::switchToOffline( // Verify buffer caches std::vector<uint64_t> bufIds(offlineStream.circulatingBufferIds.begin(), offlineStream.circulatingBufferIds.end()); { // Due to timing it is possible that we may not have any remaining pending capture // requests that can update the caches on Hal side. This can result in buffer cache // mismatch between the service and the Hal and must be accounted for. std::lock_guard<std::mutex> l(mFreedBuffersLock); for (const auto& it : mFreedBuffers) { if (it.first == id) { ALOGV("%s: stream ID %d buffer id %" PRIu64 " cache removal still pending", __FUNCTION__, id, it.second); const auto& cachedEntry = std::find(bufIds.begin(), bufIds.end(), it.second); if (cachedEntry != bufIds.end()) { bufIds.erase(cachedEntry); } else { ALOGE("%s: stream ID %d buffer id %" PRIu64 " cache removal still pending " "however buffer is no longer in the offline stream info!", __FUNCTION__, id, it.second); } } } } if (!verifyBufferIds(id, bufIds)) { ALOGE("%s: stream ID %d buffer cache records mismatch!", __FUNCTION__, id); return UNKNOWN_ERROR; Loading