libcamera  v0.0.0
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 <unordered_set>
14 
15 #include <libcamera/controls.h>
16 #include <libcamera/signal.h>
17 
18 namespace libcamera {
19 
20 class Camera;
21 class CameraControlValidator;
22 class FrameBuffer;
23 class Stream;
24 
25 class Request
26 {
27 public:
28  enum Status {
32  };
33 
34  Request(Camera *camera, uint64_t cookie = 0);
35  Request(const Request &) = delete;
36  Request &operator=(const Request &) = delete;
37  ~Request();
38 
39  ControlList &controls() { return *controls_; }
40  ControlList &metadata() { return *metadata_; }
41  const std::map<Stream *, FrameBuffer *> &buffers() const { return bufferMap_; }
42  int addBuffer(Stream *stream, FrameBuffer *buffer);
43  FrameBuffer *findBuffer(Stream *stream) const;
44 
45  uint64_t cookie() const { return cookie_; }
46  Status status() const { return status_; }
47 
48  bool hasPendingBuffers() const { return !pending_.empty(); }
49 
50 private:
51  friend class PipelineHandler;
52 
53  void complete();
54 
55  bool completeBuffer(FrameBuffer *buffer);
56 
57  Camera *camera_;
58  CameraControlValidator *validator_;
59  ControlList *controls_;
60  ControlList *metadata_;
61  std::map<Stream *, FrameBuffer *> bufferMap_;
62  std::unordered_set<FrameBuffer *> pending_;
63 
64  const uint64_t cookie_;
65  Status status_;
66  bool cancelled_;
67 };
68 
69 } /* namespace libcamera */
70 
71 #endif /* __LIBCAMERA_REQUEST_H__ */
A control validator for Camera instances.
Definition: camera_controls.h:17
Camera device.
Definition: camera.h:70
Associate a list of ControlId with their values for an object.
Definition: controls.h:342
Frame buffer data and its associated dynamic metadata.
Definition: buffer.h:37
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:59
A frame capture request.
Definition: request.h:26
Status
Definition: request.h:28
@ RequestPending
Definition: request.h:29
@ RequestCancelled
Definition: request.h:31
@ RequestComplete
Definition: request.h:30
int addBuffer(Stream *stream, FrameBuffer *buffer)
Add a FrameBuffer with its associated Stream to the Request.
Definition: request.cpp:125
const std::map< Stream *, FrameBuffer * > & buffers() const
Retrieve the request's streams to buffers map.
Definition: request.h:41
uint64_t cookie() const
Retrieve the cookie set when the request was created.
Definition: request.h:45
Status status() const
Retrieve the request completion status.
Definition: request.h:46
ControlList & metadata()
Retrieve the request's metadata.
Definition: request.h:40
FrameBuffer * findBuffer(Stream *stream) const
Return the buffer associated with a stream.
Definition: request.cpp:160
bool hasPendingBuffers() const
Check if a request has buffers yet to be completed.
Definition: request.h:48
Request(Camera *camera, uint64_t cookie=0)
Create a capture request for a camera.
Definition: request.cpp:59
ControlList & controls()
Retrieve the request's ControlList.
Definition: request.h:39
Video stream for a camera.
Definition: stream.h:70
Framework to manage controls related to an object.
Signal & slot implementation.