summaryrefslogtreecommitdiff
path: root/src/android/jpeg/encoder_jea.cpp
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2023-06-05 10:14:04 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2023-06-06 18:19:51 +0300
commitbdba31cc0258dbfc71cb0fe68a9350189ef985e4 (patch)
tree10883d90b3b0076a38418387be984cd560cf5d21 /src/android/jpeg/encoder_jea.cpp
parentea93e7899fbfbc34dec3cdb08aca8ac9a51d414b (diff)
libcamera: controls: Define a default lens position behaviour
Update the AfMode control description to explicitly define a startup/default behaviour. On startup, the camera will move the lens to the position given by the default value of the LensPosition control if operating in manual focus mode. Typically this would be the hyperfocal position of the lens. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/android/jpeg/encoder_jea.cpp')
0 files changed, 0 insertions, 0 deletions
58' href='#n58'>58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2018, Google Inc.
 *
 * pipeline_handler.h - Pipeline handler infrastructure
 */
#ifndef __LIBCAMERA_PIPELINE_HANDLER_H__
#define __LIBCAMERA_PIPELINE_HANDLER_H__

#include <list>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <vector>

namespace libcamera {

class Buffer;
class BufferPool;
class Camera;
class CameraConfiguration;
class CameraManager;
class DeviceEnumerator;
class DeviceMatch;
class MediaDevice;
class PipelineHandler;
class Request;
class Stream;
class StreamUsage;

class CameraData
{
public:
	explicit CameraData(PipelineHandler *pipe)
		: pipe_(pipe)
	{
	}
	virtual ~CameraData() {}

	Camera *camera_;
	PipelineHandler *pipe_;
	std::list<Request *> queuedRequests_;

private:
	CameraData(const CameraData &) = delete;
	CameraData &operator=(const CameraData &) = delete;
};

class PipelineHandler : public std::enable_shared_from_this<PipelineHandler>
{
public:
	PipelineHandler(CameraManager *manager);
	virtual ~PipelineHandler();

	virtual bool match(DeviceEnumerator *enumerator) = 0;
	MediaDevice *acquireMediaDevice(DeviceEnumerator *enumerator,
					const DeviceMatch &dm);

	bool lock();
	void unlock();

	virtual CameraConfiguration
	streamConfiguration(Camera *camera, const std::vector<StreamUsage> &usages) = 0;
	virtual int configureStreams(Camera *camera, const CameraConfiguration &config) = 0;

	virtual int allocateBuffers(Camera *camera,
				    const std::set<Stream *> &streams) = 0;
	virtual int freeBuffers(Camera *camera,
				const std::set<Stream *> &streams) = 0;

	virtual int start(Camera *camera) = 0;
	virtual void stop(Camera *camera);

	virtual int queueRequest(Camera *camera, Request *request);

	bool completeBuffer(Camera *camera, Request *request, Buffer *buffer);
	void completeRequest(Camera *camera, Request *request);

protected:
	void registerCamera(std::shared_ptr<Camera> camera,
			    std::unique_ptr<CameraData> data);
	void hotplugMediaDevice(MediaDevice *media);

	CameraData *cameraData(const Camera *camera);

	CameraManager *manager_;

private:
	void mediaDeviceDisconnected(MediaDevice *media);
	virtual void disconnect();

	std::vector<std::shared_ptr<MediaDevice>> mediaDevices_;
	std::vector<std::weak_ptr<Camera>> cameras_;
	std::map<const Camera *, std::unique_ptr<CameraData>> cameraData_;
};

class PipelineHandlerFactory
{
public:
	PipelineHandlerFactory(const char *name);
	virtual ~PipelineHandlerFactory() { };

	virtual std::shared_ptr<PipelineHandler> create(CameraManager *manager) = 0;

	const std::string &name() const { return name_; }

	static void registerType(PipelineHandlerFactory *factory);
	static std::vector<PipelineHandlerFactory *> &factories();

private:
	std::string name_;
};

#define REGISTER_PIPELINE_HANDLER(handler)				\
class handler##Factory final : public PipelineHandlerFactory		\
{									\
public:									\
	handler##Factory() : PipelineHandlerFactory(#handler) {}	\
	std::shared_ptr<PipelineHandler> create(CameraManager *manager)	\
	{								\
		return std::make_shared<handler>(manager);		\
	}								\
};									\
static handler##Factory global_##handler##Factory;

} /* namespace libcamera */

#endif /* __LIBCAMERA_PIPELINE_HANDLER_H__ */