Camera2: Use CameraMetadata wrapper class.
Wrap the use of the camera_metadata library inside a CameraMetadata
class to avoid memory leaks, improve code clarity, and increase type
safety.
Bug: 6243944
Change-Id: I90ca592b5875e27e4c58ea1ca680582dc3c3b56a
diff --git a/services/camera/libcameraservice/Camera2Device.cpp b/services/camera/libcameraservice/Camera2Device.cpp
index 583701d..3390ff3 100644
--- a/services/camera/libcameraservice/Camera2Device.cpp
+++ b/services/camera/libcameraservice/Camera2Device.cpp
@@ -155,25 +155,28 @@
return res;
}
-camera_metadata_t *Camera2Device::info() {
+const CameraMetadata& Camera2Device::info() const {
ALOGVV("%s: E", __FUNCTION__);
return mDeviceInfo;
}
-status_t Camera2Device::capture(camera_metadata_t* request) {
+status_t Camera2Device::capture(CameraMetadata &request) {
ALOGV("%s: E", __FUNCTION__);
- mRequestQueue.enqueue(request);
+ mRequestQueue.enqueue(request.release());
return OK;
}
-status_t Camera2Device::setStreamingRequest(camera_metadata_t* request) {
+status_t Camera2Device::setStreamingRequest(const CameraMetadata &request) {
ALOGV("%s: E", __FUNCTION__);
+ CameraMetadata streamRequest(request);
+ return mRequestQueue.setStreamSlot(streamRequest.release());
+}
- mRequestQueue.setStreamSlot(request);
- return OK;
+status_t Camera2Device::clearStreamingRequest() {
+ return mRequestQueue.setStreamSlot(NULL);
}
status_t Camera2Device::createStream(sp<ANativeWindow> consumer,
@@ -269,10 +272,14 @@
}
status_t Camera2Device::createDefaultRequest(int templateId,
- camera_metadata_t **request) {
+ CameraMetadata *request) {
+ status_t err;
ALOGV("%s: E", __FUNCTION__);
- return mDevice->ops->construct_default_request(
- mDevice, templateId, request);
+ camera_metadata_t *rawRequest;
+ err = mDevice->ops->construct_default_request(
+ mDevice, templateId, &rawRequest);
+ request->acquire(rawRequest);
+ return err;
}
status_t Camera2Device::waitUntilDrained() {
@@ -344,8 +351,16 @@
return mFrameQueue.setListener(listener);
}
-status_t Camera2Device::getNextFrame(camera_metadata_t **frame) {
- return mFrameQueue.dequeue(frame);
+status_t Camera2Device::getNextFrame(CameraMetadata *frame) {
+ status_t res;
+ camera_metadata_t *rawFrame;
+ res = mFrameQueue.dequeue(&rawFrame);
+ if (rawFrame == NULL) {
+ return NOT_ENOUGH_DATA;
+ } else if (res == OK) {
+ frame->acquire(rawFrame);
+ }
+ return res;
}
status_t Camera2Device::triggerAutofocus(uint32_t id) {