libcamera v0.0.0+3240-f2a18172-dirty (2021-12-20T13:26:04+00:00)
Supporting cameras in Linux since 2019
request.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2019, Google Inc.
4 *
5 * request.h - Capture request handling
6 */
7#ifndef __LIBCAMERA_REQUEST_H__
8#define __LIBCAMERA_REQUEST_H__
9
10#include <map>
11#include <memory>
12#include <stdint.h>
13#include <string>
14#include <unordered_set>
15
18
19#include <libcamera/controls.h>
20
21namespace libcamera {
22
23class Camera;
24class CameraControlValidator;
25class FrameBuffer;
26class Stream;
27
29{
30public:
31 enum Status {
35 };
36
37 enum ReuseFlag {
39 ReuseBuffers = (1 << 0),
40 };
41
42 using BufferMap = std::map<const Stream *, FrameBuffer *>;
43
44 Request(Camera *camera, uint64_t cookie = 0);
45 ~Request();
46
47 void reuse(ReuseFlag flags = Default);
48
49 ControlList &controls() { return *controls_; }
50 ControlList &metadata() { return *metadata_; }
51 const BufferMap &buffers() const { return bufferMap_; }
52 int addBuffer(const Stream *stream, FrameBuffer *buffer);
53 FrameBuffer *findBuffer(const Stream *stream) const;
54
55 uint32_t sequence() const { return sequence_; }
56 uint64_t cookie() const { return cookie_; }
57 Status status() const { return status_; }
58
59 bool hasPendingBuffers() const { return !pending_.empty(); }
60
61 std::string toString() const;
62
63private:
65
66 friend class PipelineHandler;
67
68 void complete();
69 void cancel();
70
71 bool completeBuffer(FrameBuffer *buffer);
72
73 Camera *camera_;
74 ControlList *controls_;
75 ControlList *metadata_;
76 BufferMap bufferMap_;
77 std::unordered_set<FrameBuffer *> pending_;
78
79 uint32_t sequence_;
80 const uint64_t cookie_;
81 Status status_;
82 bool cancelled_;
83};
84
85} /* namespace libcamera */
86
87#endif /* __LIBCAMERA_REQUEST_H__ */
Utilities to help constructing class interfaces.
#define LIBCAMERA_DISABLE_COPY(klass)
Disable copy construction and assignment of the klass.
Camera device.
Definition: camera.h:77
Associate a list of ControlId with their values for an object.
Definition: controls.h:350
Frame buffer data and its associated dynamic metadata.
Definition: framebuffer.h:49
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:37
A frame capture request.
Definition: request.h:29
Status
Definition: request.h:31
@ RequestPending
Definition: request.h:32
@ RequestCancelled
Definition: request.h:34
@ RequestComplete
Definition: request.h:33
uint32_t sequence() const
Retrieve the sequence number for the request.
Definition: request.h:55
const BufferMap & buffers() const
Retrieve the request's streams to buffers map.
Definition: request.h:51
std::string toString() const
Generate a string representation of the Request internals.
Definition: request.cpp:351
std::map< const Stream *, FrameBuffer * > BufferMap
A map of Stream to FrameBuffer pointers.
Definition: request.h:42
int addBuffer(const Stream *stream, FrameBuffer *buffer)
Add a FrameBuffer with its associated Stream to the Request.
Definition: request.cpp:177
uint64_t cookie() const
Retrieve the cookie set when the request was created.
Definition: request.h:56
ReuseFlag
Definition: request.h:37
@ ReuseBuffers
Definition: request.h:39
@ Default
Definition: request.h:38
FrameBuffer * findBuffer(const Stream *stream) const
Return the buffer associated with a stream.
Definition: request.cpp:212
Status status() const
Retrieve the request completion status.
Definition: request.h:57
ControlList & metadata()
Retrieve the request's metadata.
Definition: request.h:50
bool hasPendingBuffers() const
Check if a request has buffers yet to be completed.
Definition: request.h:59
Request(Camera *camera, uint64_t cookie=0)
Create a capture request for a camera.
Definition: request.cpp:77
ControlList & controls()
Retrieve the request's ControlList.
Definition: request.h:49
void reuse(ReuseFlag flags=Default)
Reset the request for reuse.
Definition: request.cpp:112
Video stream for a camera.
Definition: stream.h:71
Framework to manage controls related to an object.
Top-level libcamera namespace.
Definition: backtrace.h:17
Signal & slot implementation.