Files
external_libcamera/include/libcamera/internal/framebuffer.h
Laurent Pinchart c20d3f5575 libcamera: framebuffer: Move remaining private data to Private class
Private members of the FrameBuffer class are split between FrameBuffer
and FrameBuffer::Private. There was no real justification for this
split, and keeping some members private in the FrameBuffer class causes
multiple issues:

- Future modifications of the FrameBuffer class without breaking the ABI
  may be more difficult.
- Mutable access to members that should not be modified by applications
  require a friend statement, or going through the Private class.

Move all remaining private members to the Private class to address the
first issue, and add a Private::metadata() function to address the
second problem.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Tested-by: Naushir Patuck <naush@raspberrypi.com>
2022-10-10 17:49:49 +03:00

49 lines
1.0 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2020, Google Inc.
*
* framebuffer.h - Internal frame buffer handling
*/
#pragma once
#include <memory>
#include <utility>
#include <libcamera/base/class.h>
#include <libcamera/fence.h>
#include <libcamera/framebuffer.h>
namespace libcamera {
class FrameBuffer::Private : public Extensible::Private
{
LIBCAMERA_DECLARE_PUBLIC(FrameBuffer)
public:
Private(const std::vector<Plane> &planes, uint64_t cookie = 0);
virtual ~Private();
void setRequest(Request *request) { request_ = request; }
bool isContiguous() const { return isContiguous_; }
Fence *fence() const { return fence_.get(); }
void setFence(std::unique_ptr<Fence> fence) { fence_ = std::move(fence); }
void cancel() { metadata_.status = FrameMetadata::FrameCancelled; }
FrameMetadata &metadata() { return metadata_; }
private:
std::vector<Plane> planes_;
FrameMetadata metadata_;
uint64_t cookie_;
std::unique_ptr<Fence> fence_;
Request *request_;
bool isContiguous_;
};
} /* namespace libcamera */