ESPHome 2025.10.0-dev
Loading...
Searching...
No Matches
camera.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace esphome {
9namespace camera {
10
17
24
26inline const char *to_string(PixelFormat format) {
27 switch (format) {
29 return "PIXEL_FORMAT_GRAYSCALE";
31 return "PIXEL_FORMAT_RGB565";
33 return "PIXEL_FORMAT_BGR888";
34 }
35 return "PIXEL_FORMAT_UNKNOWN";
36}
37
43 public:
44 virtual uint8_t *get_data_buffer() = 0;
45 virtual size_t get_data_length() = 0;
46 virtual bool was_requested_by(CameraRequester requester) const = 0;
47 virtual ~CameraImage() {}
48};
49
57 public:
58 virtual void set_image(std::shared_ptr<CameraImage> image) = 0;
59 virtual size_t available() const = 0;
60 virtual uint8_t *peek_data_buffer() = 0;
61 virtual void consume_data(size_t consumed) = 0;
62 virtual void return_image() = 0;
63 virtual ~CameraImageReader() {}
64};
65
70 uint16_t width;
71 uint16_t height;
73 size_t bytes_per_pixel() {
74 switch (format) {
76 return 1;
78 return 2;
80 return 3;
81 }
82
83 return 1;
84 }
85 size_t bytes_per_row() { return bytes_per_pixel() * width; }
86 size_t bytes_per_image() { return bytes_per_pixel() * width * height; }
87};
88
100class Camera : public EntityBase, public Component {
101 public:
102 Camera();
103 // Camera implementation invokes callback to publish a new image.
104 virtual void add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback) = 0;
107 // Connection, camera or web server requests one new JPEG image.
108 virtual void request_image(CameraRequester requester) = 0;
109 // Connection, camera or web server requests a stream of images.
110 virtual void start_stream(CameraRequester requester) = 0;
111 // Connection or web server stops the previously started stream.
112 virtual void stop_stream(CameraRequester requester) = 0;
113 virtual ~Camera() {}
115 static Camera *instance();
116
117 protected:
118 // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
120};
121
122} // namespace camera
123} // namespace esphome
Abstract camera base class.
Definition camera.h:100
virtual CameraImageReader * create_image_reader()=0
Returns a new camera image reader that keeps track of the JPEG data in the camera image.
virtual void start_stream(CameraRequester requester)=0
virtual void stop_stream(CameraRequester requester)=0
virtual void request_image(CameraRequester requester)=0
static Camera * instance()
The singleton instance of the camera implementation.
Definition camera.cpp:19
static Camera * global_camera
Definition camera.h:119
virtual void add_image_callback(std::function< void(std::shared_ptr< CameraImage >)> &&callback)=0
Abstract camera image base class.
Definition camera.h:42
virtual uint8_t * get_data_buffer()=0
virtual size_t get_data_length()=0
virtual bool was_requested_by(CameraRequester requester) const =0
Abstract image reader base class.
Definition camera.h:56
virtual void set_image(std::shared_ptr< CameraImage > image)=0
virtual void consume_data(size_t consumed)=0
virtual size_t available() const =0
virtual uint8_t * peek_data_buffer()=0
const char * to_string(PixelFormat format)
Returns string name for a given PixelFormat.
Definition camera.h:26
CameraRequester
Different sources for filtering.
Definition camera.h:16
PixelFormat
Enumeration of different pixel formats.
Definition camera.h:19
@ PIXEL_FORMAT_RGB565
16-bit RGB (5-6-5).
Definition camera.h:21
@ PIXEL_FORMAT_GRAYSCALE
8-bit grayscale.
Definition camera.h:20
@ PIXEL_FORMAT_BGR888
RGB pixel data in 8-bit format, stored as B, G, R (1 byte each).
Definition camera.h:22
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
Specification of a caputured camera image.
Definition camera.h:69