libcamera  v0.5.0+38-2f62701e
Supporting cameras in Linux since 2019
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 class private data
6  */
7 
8 #pragma once
9 
10 #include <chrono>
11 #include <map>
12 #include <memory>
13 #include <stdint.h>
14 #include <unordered_set>
15 
17 #include <libcamera/base/timer.h>
18 
19 #include <libcamera/request.h>
20 
21 using namespace std::chrono_literals;
22 
23 namespace libcamera {
24 
25 class Camera;
26 class FrameBuffer;
27 
29 {
31 
32 public:
33  Private(Camera *camera);
34  ~Private();
35 
36  Camera *camera() const { return camera_; }
37  bool hasPendingBuffers() const;
38 
39  bool completeBuffer(FrameBuffer *buffer);
40  void complete();
41  void cancel();
42  void reset();
43 
44  void prepare(std::chrono::milliseconds timeout = 0ms);
46 
47 private:
48  friend class PipelineHandler;
49  friend std::ostream &operator<<(std::ostream &out, const Request &r);
50 
51  void doCancelRequest();
52  void emitPrepareCompleted();
53  void notifierActivated(FrameBuffer *buffer);
54  void timeout();
55 
56  Camera *camera_;
57  bool cancelled_;
58  uint32_t sequence_ = 0;
59  bool prepared_ = false;
60 
61  std::unordered_set<FrameBuffer *> pending_;
62  std::map<FrameBuffer *, std::unique_ptr<EventNotifier>> notifiers_;
63  std::unique_ptr<Timer> timer_;
64 };
65 
66 } /* namespace libcamera */
Base class for private data managed through a d-pointer.
Definition: class.h:64
Signal prepared
Request preparation completed Signal.
Definition: request.h:45
Top-level libcamera namespace.
Definition: backtrace.h:17
std::ostream & operator<<(std::ostream &out, const Request &r)
Insert a text representation of a Request into an output stream.
Definition: request.cpp:606
Camera * camera() const
Retrieve the camera this request has been queued to.
Definition: request.h:36
Frame buffer data and its associated dynamic metadata.
Definition: framebuffer.h:48
#define LIBCAMERA_DECLARE_PUBLIC(klass)
Declare public data for a private class.
Generic timer.
A frame capture request.
Definition: request.h:29
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:33
Camera device.
Definition: camera.h:113
File descriptor event notifier.
Request private data.
Definition: request.h:28
Generic signal and slot communication mechanism.
Definition: object.h:22
Describes a frame capture request to be processed by a camera.