The FrameSink class serves as a base to implement components that consume frames. This allows handling frame sinks in a generic way, independent of their nature. The BufferWrite class will be ported to FrameSink in a second step. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
67 lines
1.9 KiB
C++
67 lines
1.9 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2021, Ideas on Board Oy
|
|
*
|
|
* frame_sink.cpp - Base Frame Sink Class
|
|
*/
|
|
|
|
#include "frame_sink.h"
|
|
|
|
/**
|
|
* \class FrameSink
|
|
* \brief Abstract class to model a consumer of frames
|
|
*
|
|
* The FrameSink class models the consumer that processes frames after a request
|
|
* completes. It receives requests through processRequest(), and processes them
|
|
* synchronously or asynchronously. This allows frame sinks to hold onto frames
|
|
* for an extended period of time, for instance to display them until a new
|
|
* frame arrives.
|
|
*
|
|
* A frame sink processes whole requests, and is solely responsible for deciding
|
|
* how to handle different frame buffers in case multiple streams are captured.
|
|
*/
|
|
|
|
FrameSink::~FrameSink()
|
|
{
|
|
}
|
|
|
|
int FrameSink::configure([[maybe_unused]] const libcamera::CameraConfiguration &config)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void FrameSink::mapBuffer([[maybe_unused]] libcamera::FrameBuffer *buffer)
|
|
{
|
|
}
|
|
|
|
int FrameSink::start()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int FrameSink::stop()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* \fn FrameSink::processRequest()
|
|
* \param[in] request The request
|
|
*
|
|
* This function is called to instruct the sink to process a request. The sink
|
|
* may process the request synchronously or queue it for asynchronous
|
|
* processing.
|
|
*
|
|
* When the request is processed synchronously, this function shall return true.
|
|
* The \a request shall not be accessed by the FrameSink after the function
|
|
* returns.
|
|
*
|
|
* When the request is processed asynchronously, the FrameSink temporarily takes
|
|
* ownership of the \a request. The function shall return false, and the
|
|
* FrameSink shall emit the requestProcessed signal when the request processing
|
|
* completes. If the stop() function is called before the request processing
|
|
* completes, it shall release the request synchronously.
|
|
*
|
|
* \return True if the request has been processed synchronously, false if
|
|
* processing has been queued
|
|
*/
|