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
+5 -12
View File
@@ -7,8 +7,7 @@
#ifndef __ANDROID_CAMERA_MANAGER_H__
#define __ANDROID_CAMERA_MANAGER_H__
#include <condition_variable>
#include <mutex>
#include <stddef.h>
#include <vector>
#include <hardware/hardware.h>
@@ -16,33 +15,27 @@
#include <libcamera/camera_manager.h>
#include "thread.h"
class CameraDevice;
class CameraProxy;
class CameraHalManager : public libcamera::Thread
class CameraHalManager
{
public:
CameraHalManager();
~CameraHalManager();
int init();
CameraProxy *open(unsigned int id, const hw_module_t *module);
CameraDevice *open(unsigned int id, const hw_module_t *module);
unsigned int numCameras() const;
int getCameraInfo(unsigned int id, struct camera_info *info);
private:
void run() override;
camera_metadata_t *getStaticMetadata(unsigned int id);
libcamera::CameraManager *cameraManager_;
std::mutex mutex_;
std::condition_variable cv_;
std::vector<std::unique_ptr<CameraProxy>> proxies_;
std::vector<std::unique_ptr<CameraDevice>> cameras_;
};
#endif /* __ANDROID_CAMERA_MANAGER_H__ */