android: Remove internal thread

Now that libcamera creates threads internally and doesn't rely on an
application-provided event loop, remove the thread from the Android
Camera HAL layer. The CameraProxy class becomes meaningless, remove it
and communicate directly from the CameraHalManager to the CameraDevice.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart 2020-01-20 01:09:34 +02:00
parent 8a8502ec0e
commit da3f50ee9c
10 changed files with 189 additions and 315 deletions

View file

@ -13,7 +13,6 @@
#include <libcamera/buffer.h>
#include <libcamera/camera.h>
#include <libcamera/object.h>
#include <libcamera/request.h>
#include <libcamera/stream.h>
@ -21,19 +20,23 @@
class CameraMetadata;
class CameraDevice : public libcamera::Object
class CameraDevice
{
public:
CameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);
~CameraDevice();
int open();
int open(const hw_module_t *hardwareModule);
void close();
unsigned int id() const { return id_; }
camera3_device_t *camera3Device() { return &camera3Device_; }
void setCallbacks(const camera3_callback_ops_t *callbacks);
camera_metadata_t *getStaticMetadata();
const camera_metadata_t *getStaticMetadata();
const camera_metadata_t *constructDefaultRequestSettings(int type);
int configureStreams(camera3_stream_configuration_t *stream_list);
void processCaptureRequest(camera3_capture_request_t *request);
int processCaptureRequest(camera3_capture_request_t *request);
void requestComplete(libcamera::Request *request);
private:
@ -52,6 +55,9 @@ private:
std::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,
int64_t timestamp);
unsigned int id_;
camera3_device_t camera3Device_;
bool running_;
std::shared_ptr<libcamera::Camera> camera_;
std::unique_ptr<libcamera::CameraConfiguration> config_;