android: CameraDevice: Manage requestTemplates_ with std::unique_ptr

CameraMetadata stored in requestTemplates_ in CameraDevice is
not necessary to be a raw pointer. This reduces the manual
new/delete code by changing the type to std::unique_ptr.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Hirokazu Honda 2021-03-24 16:07:57 +09:00 committed by Laurent Pinchart
parent dca709c44a
commit f101cc6878
2 changed files with 11 additions and 17 deletions

View file

@ -338,11 +338,7 @@ CameraDevice::CameraDevice(unsigned int id, std::shared_ptr<Camera> camera)
} }
} }
CameraDevice::~CameraDevice() CameraDevice::~CameraDevice() = default;
{
for (auto &it : requestTemplates_)
delete it.second;
}
std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id, std::unique_ptr<CameraDevice> CameraDevice::create(unsigned int id,
std::shared_ptr<Camera> cam) std::shared_ptr<Camera> cam)
@ -1358,15 +1354,14 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
return staticMetadata_->get(); return staticMetadata_->get();
} }
CameraMetadata *CameraDevice::requestTemplatePreview() std::unique_ptr<CameraMetadata> CameraDevice::requestTemplatePreview()
{ {
/* /*
* \todo Keep this in sync with the actual number of entries. * \todo Keep this in sync with the actual number of entries.
* Currently: 20 entries, 35 bytes * Currently: 20 entries, 35 bytes
*/ */
CameraMetadata *requestTemplate = new CameraMetadata(21, 36); auto requestTemplate = std::make_unique<CameraMetadata>(21, 36);
if (!requestTemplate->isValid()) { if (!requestTemplate->isValid()) {
delete requestTemplate;
return nullptr; return nullptr;
} }
@ -1454,9 +1449,9 @@ CameraMetadata *CameraDevice::requestTemplatePreview()
return requestTemplate; return requestTemplate;
} }
CameraMetadata *CameraDevice::requestTemplateVideo() std::unique_ptr<CameraMetadata> CameraDevice::requestTemplateVideo()
{ {
CameraMetadata *previewTemplate = requestTemplatePreview(); std::unique_ptr<CameraMetadata> previewTemplate = requestTemplatePreview();
if (!previewTemplate) if (!previewTemplate)
return nullptr; return nullptr;
@ -1488,7 +1483,7 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)
return it->second->get(); return it->second->get();
/* Use the capture intent matching the requested template type. */ /* Use the capture intent matching the requested template type. */
CameraMetadata *requestTemplate; std::unique_ptr<CameraMetadata> requestTemplate;
uint8_t captureIntent; uint8_t captureIntent;
switch (type) { switch (type) {
case CAMERA3_TEMPLATE_PREVIEW: case CAMERA3_TEMPLATE_PREVIEW:
@ -1521,15 +1516,14 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)
if (!requestTemplate || !requestTemplate->isValid()) { if (!requestTemplate || !requestTemplate->isValid()) {
LOG(HAL, Error) << "Failed to construct request template"; LOG(HAL, Error) << "Failed to construct request template";
delete requestTemplate;
return nullptr; return nullptr;
} }
requestTemplate->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, requestTemplate->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT,
&captureIntent, 1); &captureIntent, 1);
requestTemplates_[type] = requestTemplate; requestTemplates_[type] = std::move(requestTemplate);
return requestTemplate->get(); return requestTemplates_[type]->get();
} }
PixelFormat CameraDevice::toPixelFormat(int format) const PixelFormat CameraDevice::toPixelFormat(int format) const

View file

@ -97,8 +97,8 @@ private:
libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer); libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer);
void notifyShutter(uint32_t frameNumber, uint64_t timestamp); void notifyShutter(uint32_t frameNumber, uint64_t timestamp);
void notifyError(uint32_t frameNumber, camera3_stream_t *stream); void notifyError(uint32_t frameNumber, camera3_stream_t *stream);
CameraMetadata *requestTemplatePreview(); std::unique_ptr<CameraMetadata> requestTemplatePreview();
CameraMetadata *requestTemplateVideo(); std::unique_ptr<CameraMetadata> requestTemplateVideo();
libcamera::PixelFormat toPixelFormat(int format) const; libcamera::PixelFormat toPixelFormat(int format) const;
int processControls(Camera3RequestDescriptor *descriptor); int processControls(Camera3RequestDescriptor *descriptor);
std::unique_ptr<CameraMetadata> getResultMetadata( std::unique_ptr<CameraMetadata> getResultMetadata(
@ -114,7 +114,7 @@ private:
std::unique_ptr<libcamera::CameraConfiguration> config_; std::unique_ptr<libcamera::CameraConfiguration> config_;
std::unique_ptr<CameraMetadata> staticMetadata_; std::unique_ptr<CameraMetadata> staticMetadata_;
std::map<unsigned int, const CameraMetadata *> requestTemplates_; std::map<unsigned int, std::unique_ptr<CameraMetadata>> requestTemplates_;
const camera3_callback_ops_t *callbacks_; const camera3_callback_ops_t *callbacks_;
std::vector<Camera3StreamConfiguration> streamConfigurations_; std::vector<Camera3StreamConfiguration> streamConfigurations_;