android: camera_metadata: Add functions for instrumenting resizing
Add utility functions to CameraMetadata to check if it has been resized, and for outputting the actual entry and data count. This is meant to be used to output information on resizing, to assist developers in choosing proper initial sizes to avoid resizing. Also make CameraDevice use these functions for static and result metadata. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
This commit is contained in:
parent
2a84728dab
commit
9b006872cd
3 changed files with 31 additions and 1 deletions
|
@ -1438,6 +1438,13 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (staticMetadata_->resized()) {
|
||||
auto [entryCount, dataCount] = staticMetadata_->usage();
|
||||
LOG(HAL, Info)
|
||||
<< "Static metadata resized: " << entryCount
|
||||
<< " entries and " << dataCount << " bytes used";
|
||||
}
|
||||
|
||||
return staticMetadata_->get();
|
||||
}
|
||||
|
||||
|
@ -2316,5 +2323,12 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons
|
|||
LOG(HAL, Error) << "Failed to construct result metadata";
|
||||
}
|
||||
|
||||
if (resultMetadata->resized()) {
|
||||
auto [entryCount, dataCount] = resultMetadata->usage();
|
||||
LOG(HAL, Info)
|
||||
<< "Result metadata resized: " << entryCount
|
||||
<< " entries and " << dataCount << " bytes used";
|
||||
}
|
||||
|
||||
return resultMetadata;
|
||||
}
|
||||
|
|
|
@ -14,17 +14,19 @@ using namespace libcamera;
|
|||
LOG_DEFINE_CATEGORY(CameraMetadata)
|
||||
|
||||
CameraMetadata::CameraMetadata()
|
||||
: metadata_(nullptr), valid_(false)
|
||||
: metadata_(nullptr), valid_(false), resized_(false)
|
||||
{
|
||||
}
|
||||
|
||||
CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity)
|
||||
: resized_(false)
|
||||
{
|
||||
metadata_ = allocate_camera_metadata(entryCapacity, dataCapacity);
|
||||
valid_ = metadata_ != nullptr;
|
||||
}
|
||||
|
||||
CameraMetadata::CameraMetadata(const camera_metadata_t *metadata)
|
||||
: resized_(false)
|
||||
{
|
||||
metadata_ = clone_camera_metadata(metadata);
|
||||
valid_ = metadata_ != nullptr;
|
||||
|
@ -55,6 +57,14 @@ CameraMetadata &CameraMetadata::operator=(const CameraMetadata &other)
|
|||
return *this;
|
||||
}
|
||||
|
||||
std::tuple<size_t, size_t> CameraMetadata::usage() const
|
||||
{
|
||||
size_t currentEntryCount = get_camera_metadata_entry_count(metadata_);
|
||||
size_t currentDataCount = get_camera_metadata_data_count(metadata_);
|
||||
|
||||
return { currentEntryCount, currentDataCount };
|
||||
}
|
||||
|
||||
bool CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const
|
||||
{
|
||||
if (find_camera_metadata_ro_entry(metadata_, tag, entry))
|
||||
|
@ -104,6 +114,8 @@ bool CameraMetadata::resize(size_t count, size_t size)
|
|||
|
||||
append_camera_metadata(metadata_, oldMetadata);
|
||||
free_camera_metadata(oldMetadata);
|
||||
|
||||
resized_ = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -23,6 +23,9 @@ public:
|
|||
|
||||
CameraMetadata &operator=(const CameraMetadata &other);
|
||||
|
||||
std::tuple<size_t, size_t> usage() const;
|
||||
bool resized() const { return resized_; }
|
||||
|
||||
bool isValid() const { return valid_; }
|
||||
bool getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const;
|
||||
|
||||
|
@ -89,6 +92,7 @@ private:
|
|||
|
||||
camera_metadata_t *metadata_;
|
||||
bool valid_;
|
||||
bool resized_;
|
||||
};
|
||||
|
||||
#endif /* __ANDROID_CAMERA_METADATA_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue