libcamera  v0.3.2+116-83c5ad0f
Supporting cameras in Linux since 2019
stream.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  * Video stream for a Camera
6  */
7 
8 #pragma once
9 
10 #include <map>
11 #include <ostream>
12 #include <string>
13 #include <vector>
14 
15 #include <libcamera/color_space.h>
16 #include <libcamera/framebuffer.h>
17 #include <libcamera/geometry.h>
18 #include <libcamera/pixel_format.h>
19 
20 namespace libcamera {
21 
22 class Camera;
23 class Stream;
24 
26 {
27 public:
28  StreamFormats();
29  StreamFormats(const std::map<PixelFormat, std::vector<SizeRange>> &formats);
30 
31  std::vector<PixelFormat> pixelformats() const;
32  std::vector<Size> sizes(const PixelFormat &pixelformat) const;
33 
34  SizeRange range(const PixelFormat &pixelformat) const;
35 
36 private:
37  std::map<PixelFormat, std::vector<SizeRange>> formats_;
38 };
39 
42  StreamConfiguration(const StreamFormats &formats);
43 
46  unsigned int stride;
47  unsigned int frameSize;
48 
49  unsigned int bufferCount;
50 
51  std::optional<ColorSpace> colorSpace;
52 
53  Stream *stream() const { return stream_; }
54  void setStream(Stream *stream) { stream_ = stream; }
55  const StreamFormats &formats() const { return formats_; }
56 
57  std::string toString() const;
58 
59 private:
60  Stream *stream_;
61  StreamFormats formats_;
62 };
63 
64 enum class StreamRole {
65  Raw,
68  Viewfinder,
69 };
70 
71 std::ostream &operator<<(std::ostream &out, StreamRole role);
72 
73 class Stream
74 {
75 public:
76  Stream();
77 
78  const StreamConfiguration &configuration() const { return configuration_; }
79 
80 protected:
81  friend class Camera;
82 
84 };
85 
86 } /* namespace libcamera */
Frame buffer handling.
libcamera image pixel format
Definition: pixel_format.h:16
Class and enums to represent color spaces.
Video stream for a camera.
Definition: stream.h:73
unsigned int frameSize
Frame size for the stream, in bytes.
Definition: stream.h:47
Top-level libcamera namespace.
Definition: bound_method.h:15
const StreamConfiguration & configuration() const
Retrieve the active configuration of the stream.
Definition: stream.h:78
unsigned int bufferCount
Requested number of buffers to allocate for the stream.
Definition: stream.h:49
Describe a two-dimensional size.
Definition: geometry.h:52
std::vector< Size > sizes(const PixelFormat &pixelformat) const
Retrieve the list of frame sizes supported for pixelformat.
Definition: stream.cpp:131
Stream * stream() const
Retrieve the stream associated with the configuration.
Definition: stream.h:53
const StreamFormats & formats() const
Retrieve advisory stream format information.
Definition: stream.h:55
Camera device.
Definition: camera.h:113
PixelFormat pixelFormat
Stream pixel format.
Definition: stream.h:44
void setStream(Stream *stream)
Associate a stream with a configuration.
Definition: stream.h:54
unsigned int stride
Image stride for the stream, in bytes.
Definition: stream.h:46
std::ostream & operator<<(std::ostream &out, const Point &p)
Insert a text representation of a Point into an output stream.
Definition: geometry.cpp:91
std::optional< ColorSpace > colorSpace
The ColorSpace for this stream.
Definition: stream.h:51
Hold information about supported stream formats.
Definition: stream.h:25
StreamRole
Identify the role a stream is intended to play.
Definition: stream.h:64
Describe a range of sizes.
Definition: geometry.h:200
StreamConfiguration configuration_
The stream configuration.
Definition: stream.h:83
Size size
Stream size in pixels.
Definition: stream.h:45
std::vector< PixelFormat > pixelformats() const
Retrieve the list of supported pixel formats.
Definition: stream.cpp:107
Data structures related to geometric objects.
SizeRange range(const PixelFormat &pixelformat) const
Retrieve the range of minimum and maximum sizes.
Definition: stream.cpp:244
Configuration parameters for a stream.
Definition: stream.h:40
libcamera pixel format