summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShuzhen Wang2018-06-06 00:23:39 -0500
committerShuzhen Wang2018-06-06 01:13:54 -0500
commit9b71bc20c436eae3642ca0014d1381afaabe52d4 (patch)
treebf7358049fba1ab81203996ac852e5d6210d2ff2
parent3b50bd927b7c494d04657383d486aa0b862b3fe5 (diff)
downloadplatform-hardware-interfaces-9b71bc20c436eae3642ca0014d1381afaabe52d4.tar.gz
platform-hardware-interfaces-9b71bc20c436eae3642ca0014d1381afaabe52d4.tar.xz
platform-hardware-interfaces-9b71bc20c436eae3642ca0014d1381afaabe52d4.zip
Camera: Avoid Metadata re-allocation during shrinkCaptureResult
If capture result metadata is to be shrinked, reserve enough space so that CameraMetadata isn't re-allocated when std::vector expands. If vector expansion happens, CameraMetadata is re-allocated, causing camera_metadata_t being re-allocated as well. Test: Camera CTS Bug: 109672123 Change-Id: Idaf5bf409bdbbccf617614edc96c0478260b4c30
-rw-r--r--camera/device/3.2/default/CameraDeviceSession.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp
index 8d002646..69f85356 100644
--- a/camera/device/3.2/default/CameraDeviceSession.cpp
+++ b/camera/device/3.2/default/CameraDeviceSession.cpp
@@ -1391,6 +1391,8 @@ void CameraDeviceSession::sShrinkCaptureResult(
1391 std::vector<const camera_metadata_t*>* physCamMdArray, 1391 std::vector<const camera_metadata_t*>* physCamMdArray,
1392 bool handlePhysCam) { 1392 bool handlePhysCam) {
1393 *dst = *src; 1393 *dst = *src;
1394 // Reserve maximum number of entries to avoid metadata re-allocation.
1395 mds->reserve(1 + (handlePhysCam ? src->num_physcam_metadata : 0));
1394 if (sShouldShrink(src->result)) { 1396 if (sShouldShrink(src->result)) {
1395 mds->emplace_back(sCreateCompactCopy(src->result)); 1397 mds->emplace_back(sCreateCompactCopy(src->result));
1396 dst->result = mds->back().getAndLock(); 1398 dst->result = mds->back().getAndLock();