/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2021, Ideas on Board Oy * * frame_sink.h - Base Frame Sink Class */ #ifndef __CAM_FRAME_SINK_H__ #define __CAM_FRAME_SINK_H__ #include namespace libcamera { class CameraConfiguration; class FrameBuffer; class Request; } /* namespace libcamera */ class FrameSink { public: virtual ~FrameSink(); virtual int configure(const libcamera::CameraConfiguration &config); virtual void mapBuffer(libcamera::FrameBuffer *buffer); virtual int start(); virtual int stop(); virtual bool processRequest(libcamera::Request *request) = 0; libcamera::Signal requestProcessed; }; #endif /* __CAM_FRAME_SINK_H__ */ ra/pinchartl/libcamera.git' href='/libcamera/pinchartl/libcamera.git/'>libcamera/pinchartl/libcamera.git
Laurent Pinchart's clone of libcameragit repository hosting on libcamera.org
summaryrefslogtreecommitdiff
blob: 22f0323b3ff08013a63f23b9672a7aec08bf2c18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * camera_hal_manager.cpp - libcamera Android Camera Manager
 */

#include "camera_hal_manager.h"

#include <libcamera/camera.h>

#include "log.h"

#include "camera_device.h"
#include "camera_proxy.h"

using namespace libcamera;

LOG_DECLARE_CATEGORY(HAL);

/*
 * \class CameraHalManager
 *
 * The HAL camera manager is initializated at camera_module_t 'hal_init()' time
 * and spawns its own thread where libcamera related events are dispatched to.
 * It wraps the libcamera CameraManager operations and provides helpers for the
 * camera_module_t operations, to retrieve the number of cameras in the system,
 * their static information and to open camera devices.
 */

CameraHalManager::~CameraHalManager()
{
	if (isRunning()) {
		exit(0);
		/* \todo Wait with a timeout, just in case. */
		wait();
	}
}

int CameraHalManager::init()
{
	/*
	 * Start the camera HAL manager thread and wait until its
	 * initialisation completes to be fully operational before
	 * receiving calls from the camera stack.
	 */
	start();

	MutexLocker locker(mutex_);
	cv_.wait(locker);

	return 0;
}