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
gugelfrei
Emilian Peev 5 years ago
parent 612be7ff33
commit 1da379a140

@ -104,7 +104,8 @@ ACameraMetadata::derivePhysicalCameraIds() {
for (size_t i = 0; i < entry.count; ++i) { for (size_t i = 0; i < entry.count; ++i) {
if (ids[i] == '\0') { if (ids[i] == '\0') {
if (start != i) { 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; start = i+1;
} }

@ -117,6 +117,7 @@ struct ACameraMetadata : public RefBase {
static std::unordered_set<uint32_t> sSystemTags; static std::unordered_set<uint32_t> sSystemTags;
std::vector<const char*> mStaticPhysicalCameraIds; std::vector<const char*> mStaticPhysicalCameraIds;
std::vector<String8> mStaticPhysicalCameraIdValues;
}; };
#endif // _ACAMERA_METADATA_H #endif // _ACAMERA_METADATA_H

Loading…
Cancel
Save