android: CameraDevice: Fix Camera3RequestDescriptor leakage

CameraDevice creates Camera3RequestDescriptor in
processCaptureRequest() and disallocates in requestComplete().
Camera3RequestDescriptor can never be destroyed if
requestComplete() is never called. This avoid the memory
leakage by storing them in map CameraRequestDescriptor.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Hirokazu Honda
2021-04-03 22:57:34 +09:00
committed by Laurent Pinchart
parent 0b661d70ec
commit d40430116b
4 changed files with 57 additions and 39 deletions
+8 -2
View File
@@ -9,6 +9,7 @@
#include <map>
#include <memory>
#include <mutex>
#include <tuple>
#include <vector>
@@ -69,11 +70,13 @@ private:
CameraDevice(unsigned int id, std::shared_ptr<libcamera::Camera> camera);
struct Camera3RequestDescriptor {
Camera3RequestDescriptor() = default;
~Camera3RequestDescriptor() = default;
Camera3RequestDescriptor(libcamera::Camera *camera,
const camera3_capture_request_t *camera3Request);
~Camera3RequestDescriptor();
Camera3RequestDescriptor &operator=(Camera3RequestDescriptor &&) = default;
uint32_t frameNumber_;
uint32_t frameNumber_ = 0;
std::vector<camera3_stream_buffer_t> buffers_;
std::vector<std::unique_ptr<libcamera::FrameBuffer>> frameBuffers_;
CameraMetadata settings_;
@@ -124,6 +127,9 @@ private:
std::map<int, libcamera::PixelFormat> formatsMap_;
std::vector<CameraStream> streams_;
std::mutex mutex_; /* Protect descriptors_ */
std::map<uint64_t, Camera3RequestDescriptor> descriptors_;
std::string maker_;
std::string model_;