From 1da379a140fda8bd1a76ecab5347622641b44528 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Tue, 5 Feb 2019 15:36:31 -0800 Subject: [PATCH] Camera: Cache physical camera id values A pointer to data within CameraMetadata can become invalid after each metadata modification. Cache any values that could potentially point to the raw internal metadata buffer. Bug: 123954417 Test: Camera CTS Change-Id: Ie5ac9600ff454af551c4cf8e0f25ba5a6a6e897d --- camera/ndk/impl/ACameraMetadata.cpp | 3 ++- camera/ndk/impl/ACameraMetadata.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/camera/ndk/impl/ACameraMetadata.cpp b/camera/ndk/impl/ACameraMetadata.cpp index c6612337ed..50ad7b28c8 100644 --- a/camera/ndk/impl/ACameraMetadata.cpp +++ b/camera/ndk/impl/ACameraMetadata.cpp @@ -104,7 +104,8 @@ ACameraMetadata::derivePhysicalCameraIds() { for (size_t i = 0; i < entry.count; ++i) { if (ids[i] == '\0') { if (start != i) { - mStaticPhysicalCameraIds.push_back((const char*)ids+start); + mStaticPhysicalCameraIdValues.push_back(String8((const char *)ids+start)); + mStaticPhysicalCameraIds.push_back(mStaticPhysicalCameraIdValues.back().string()); } start = i+1; } diff --git a/camera/ndk/impl/ACameraMetadata.h b/camera/ndk/impl/ACameraMetadata.h index 7049c4bab5..3d895cb21f 100644 --- a/camera/ndk/impl/ACameraMetadata.h +++ b/camera/ndk/impl/ACameraMetadata.h @@ -117,6 +117,7 @@ struct ACameraMetadata : public RefBase { static std::unordered_set sSystemTags; std::vector mStaticPhysicalCameraIds; + std::vector mStaticPhysicalCameraIdValues; }; #endif // _ACAMERA_METADATA_H