diff options
author | Shuzhen Wang | 2018-06-06 00:23:39 -0500 |
---|---|---|
committer | Shuzhen Wang | 2018-06-06 01:13:54 -0500 |
commit | 9b71bc20c436eae3642ca0014d1381afaabe52d4 (patch) | |
tree | bf7358049fba1ab81203996ac852e5d6210d2ff2 | |
parent | 3b50bd927b7c494d04657383d486aa0b862b3fe5 (diff) | |
download | platform-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.cpp | 2 |
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(); |