libcamera: request: Make Request class Extensible
Implement the D-Pointer design pattern in the Request class to allow changing internal data without affecting the public ABI. Move the internal fields that are not needed to implement the public API to the Request::Private class already. This allows to remove the friend class declaration for the PipelineHandler class, which can now use the Request::Private API. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> [Move all internal fields to Request::Private and remove friend declaration] Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
6705596e29
commit
db37335ee0
6 changed files with 219 additions and 108 deletions
|
@ -35,6 +35,7 @@ libcamera_internal_headers = files([
|
|||
'pipeline_handler.h',
|
||||
'process.h',
|
||||
'pub_key.h',
|
||||
'request.h',
|
||||
'source_paths.h',
|
||||
'sysfs.h',
|
||||
'v4l2_device.h',
|
||||
|
|
49
include/libcamera/internal/request.h
Normal file
49
include/libcamera/internal/request.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2019, Google Inc.
|
||||
*
|
||||
* request.h - Request class private data
|
||||
*/
|
||||
#ifndef __LIBCAMERA_INTERNAL_REQUEST_H__
|
||||
#define __LIBCAMERA_INTERNAL_REQUEST_H__
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <libcamera/request.h>
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
class Camera;
|
||||
class FrameBuffer;
|
||||
|
||||
class Request::Private : public Extensible::Private
|
||||
{
|
||||
LIBCAMERA_DECLARE_PUBLIC(Request)
|
||||
|
||||
public:
|
||||
Private(Camera *camera);
|
||||
~Private();
|
||||
|
||||
Camera *camera() const { return camera_; }
|
||||
bool hasPendingBuffers() const;
|
||||
|
||||
bool completeBuffer(FrameBuffer *buffer);
|
||||
void complete();
|
||||
void cancel();
|
||||
void reuse();
|
||||
|
||||
private:
|
||||
friend class PipelineHandler;
|
||||
|
||||
void doCancelRequest();
|
||||
|
||||
Camera *camera_;
|
||||
bool cancelled_;
|
||||
uint32_t sequence_ = 0;
|
||||
|
||||
std::unordered_set<FrameBuffer *> pending_;
|
||||
};
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
||||
#endif /* __LIBCAMERA_INTERNAL_REQUEST_H__ */
|
|
@ -5,8 +5,9 @@
|
|||
* request.tp - Tracepoints for the request object
|
||||
*/
|
||||
|
||||
#include <libcamera/internal/request.h>
|
||||
|
||||
#include <libcamera/framebuffer.h>
|
||||
#include <libcamera/request.h>
|
||||
|
||||
TRACEPOINT_EVENT_CLASS(
|
||||
libcamera,
|
||||
|
@ -62,7 +63,7 @@ TRACEPOINT_EVENT_INSTANCE(
|
|||
request,
|
||||
request_complete,
|
||||
TP_ARGS(
|
||||
libcamera::Request *, req
|
||||
libcamera::Request::Private *, req
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -71,7 +72,7 @@ TRACEPOINT_EVENT_INSTANCE(
|
|||
request,
|
||||
request_cancel,
|
||||
TP_ARGS(
|
||||
libcamera::Request *, req
|
||||
libcamera::Request::Private *, req
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -79,13 +80,13 @@ TRACEPOINT_EVENT(
|
|||
libcamera,
|
||||
request_complete_buffer,
|
||||
TP_ARGS(
|
||||
libcamera::Request *, req,
|
||||
libcamera::Request::Private *, req,
|
||||
libcamera::FrameBuffer *, buf
|
||||
),
|
||||
TP_FIELDS(
|
||||
ctf_integer_hex(uintptr_t, request, reinterpret_cast<uintptr_t>(req))
|
||||
ctf_integer(uint64_t, cookie, req->cookie())
|
||||
ctf_integer(int, status, req->status())
|
||||
ctf_integer(uint64_t, cookie, req->_o<libcamera::Request>()->cookie())
|
||||
ctf_integer(int, status, req->_o<libcamera::Request>()->status())
|
||||
ctf_integer_hex(uintptr_t, buffer, reinterpret_cast<uintptr_t>(buf))
|
||||
ctf_enum(libcamera, buffer_status, uint32_t, buf_status, buf->metadata().status)
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue