Provide a sequence number on Requests which are added by the pipeline handler. Each pipeline handler keeps a requestSequence per CameraData and increments everytime a request is queued on that camera. The sequence number is associated with the Request and can be utilised for assisting with debugging, and printing the queueing sequence of in flight requests. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
84 lines
1.7 KiB
C++
84 lines
1.7 KiB
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
*
|
|
* request.h - Capture request handling
|
|
*/
|
|
#ifndef __LIBCAMERA_REQUEST_H__
|
|
#define __LIBCAMERA_REQUEST_H__
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <stdint.h>
|
|
#include <unordered_set>
|
|
|
|
#include <libcamera/class.h>
|
|
#include <libcamera/controls.h>
|
|
#include <libcamera/signal.h>
|
|
|
|
namespace libcamera {
|
|
|
|
class Camera;
|
|
class CameraControlValidator;
|
|
class FrameBuffer;
|
|
class Stream;
|
|
|
|
class Request
|
|
{
|
|
public:
|
|
enum Status {
|
|
RequestPending,
|
|
RequestComplete,
|
|
RequestCancelled,
|
|
};
|
|
|
|
enum ReuseFlag {
|
|
Default = 0,
|
|
ReuseBuffers = (1 << 0),
|
|
};
|
|
|
|
using BufferMap = std::map<const Stream *, FrameBuffer *>;
|
|
|
|
Request(Camera *camera, uint64_t cookie = 0);
|
|
~Request();
|
|
|
|
void reuse(ReuseFlag flags = Default);
|
|
|
|
ControlList &controls() { return *controls_; }
|
|
ControlList &metadata() { return *metadata_; }
|
|
const BufferMap &buffers() const { return bufferMap_; }
|
|
int addBuffer(const Stream *stream, FrameBuffer *buffer);
|
|
FrameBuffer *findBuffer(const Stream *stream) const;
|
|
|
|
uint32_t sequence() const { return sequence_; }
|
|
uint64_t cookie() const { return cookie_; }
|
|
Status status() const { return status_; }
|
|
|
|
bool hasPendingBuffers() const { return !pending_.empty(); }
|
|
|
|
private:
|
|
LIBCAMERA_DISABLE_COPY(Request)
|
|
|
|
friend class PipelineHandler;
|
|
|
|
void complete();
|
|
|
|
bool completeBuffer(FrameBuffer *buffer);
|
|
|
|
Camera *camera_;
|
|
CameraControlValidator *validator_;
|
|
ControlList *controls_;
|
|
ControlList *metadata_;
|
|
BufferMap bufferMap_;
|
|
std::unordered_set<FrameBuffer *> pending_;
|
|
|
|
uint32_t sequence_;
|
|
const uint64_t cookie_;
|
|
Status status_;
|
|
bool cancelled_;
|
|
};
|
|
|
|
} /* namespace libcamera */
|
|
|
|
#endif /* __LIBCAMERA_REQUEST_H__ */
|