@@ -35,6 +35,10 @@ public:
PipelineHandler *pipe() { return pipe_.get(); }
const PipelineHandler *pipe() const { return pipe_.get(); }
+ void emitBufferCompleted(Request *request, FrameBuffer *buffer);
+ void emitRequestCompleted(Request *request);
+ void emitDisconnected();
+
std::list<Request *> queuedRequests_;
ControlInfoMap controlInfo_;
ControlList properties_;
@@ -737,6 +737,25 @@ void Camera::Private::setState(State state)
{
state_.store(state, std::memory_order_release);
}
+
+void Camera::Private::emitBufferCompleted(Request *request, FrameBuffer *buffer)
+{
+ Camera *camera = _o<Camera>();
+ camera->bufferCompleted.emit(request, buffer);
+}
+
+void Camera::Private::emitRequestCompleted(Request *request)
+{
+ Camera *camera = _o<Camera>();
+ camera->requestCompleted.emit(request);
+}
+
+void Camera::Private::emitDisconnected()
+{
+ Camera *camera = _o<Camera>();
+ camera->disconnected.emit();
+}
+
#endif /* __DOXYGEN_PUBLIC__ */
/**
@@ -947,7 +966,7 @@ void Camera::disconnect()
LOG(Camera, Debug) << "Disconnecting camera " << id();
_d()->disconnect();
- disconnected.emit();
+ _d()->emitDisconnected();
}
int Camera::exportFrameBuffers(Stream *stream,
@@ -1451,7 +1470,7 @@ void Camera::requestComplete(Request *request)
true))
LOG(Camera, Fatal) << "Trying to complete a request when stopped";
- requestCompleted.emit(request);
+ _d()->emitRequestCompleted(request);
}
} /* namespace libcamera */
@@ -527,7 +527,7 @@ void PipelineHandler::doQueueRequests()
bool PipelineHandler::completeBuffer(Request *request, FrameBuffer *buffer)
{
Camera *camera = request->_d()->camera();
- camera->bufferCompleted.emit(request, buffer);
+ camera->_d()->emitBufferCompleted(request, buffer);
return request->_d()->completeBuffer(buffer);
}
@@ -137,7 +137,7 @@ void Request::Private::doCancelRequest()
for (FrameBuffer *buffer : pending_) {
buffer->_d()->cancel();
- camera_->bufferCompleted.emit(request, buffer);
+ camera_->_d()->emitBufferCompleted(request, buffer);
}
cancelled_ = true;
Add an extra level of indirection when emitting signals from the Camera. This is to facilitate the implementation of the layer system in the near future, which will need to hook into Camera signal emissions. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> --- include/libcamera/internal/camera.h | 4 ++++ src/libcamera/camera.cpp | 23 +++++++++++++++++++++-- src/libcamera/pipeline_handler.cpp | 2 +- src/libcamera/request.cpp | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-)