ESPHome 2026.5.0b1
Loading...
Searching...
No Matches
camera.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace esphome::camera {
9
16
23
25inline const char *to_string(PixelFormat format) {
26 switch (format) {
28 return "PIXEL_FORMAT_GRAYSCALE";
30 return "PIXEL_FORMAT_RGB565";
32 return "PIXEL_FORMAT_BGR888";
33 }
34 return "PIXEL_FORMAT_UNKNOWN";
35}
36
37// Forward declaration
38class CameraImage;
39
46 public:
47 virtual void on_camera_image(const std::shared_ptr<CameraImage> &image) {}
48 virtual void on_stream_start() {}
49 virtual void on_stream_stop() {}
50};
51
57 public:
58 virtual uint8_t *get_data_buffer() = 0;
59 virtual size_t get_data_length() = 0;
60 virtual bool was_requested_by(CameraRequester requester) const = 0;
61 virtual ~CameraImage() {}
62};
63
71 public:
72 virtual void set_image(std::shared_ptr<CameraImage> image) = 0;
73 virtual size_t available() const = 0;
74 virtual uint8_t *peek_data_buffer() = 0;
75 virtual void consume_data(size_t consumed) = 0;
76 virtual void return_image() = 0;
77 virtual ~CameraImageReader() {}
78};
79
84 uint16_t width;
85 uint16_t height;
87 size_t bytes_per_pixel() {
88 switch (format) {
90 return 1;
92 return 2;
94 return 3;
95 }
96
97 return 1;
98 }
99 size_t bytes_per_row() { return bytes_per_pixel() * width; }
100 size_t bytes_per_image() { return bytes_per_pixel() * width * height; }
101};
102
114class Camera : public EntityBase, public Component {
115 public:
116 Camera();
118 virtual void add_listener(CameraListener *listener) = 0;
121 // Connection, camera or web server requests one new JPEG image.
122 virtual void request_image(CameraRequester requester) = 0;
123 // Connection, camera or web server requests a stream of images.
124 virtual void start_stream(CameraRequester requester) = 0;
125 // Connection or web server stops the previously started stream.
126 virtual void stop_stream(CameraRequester requester) = 0;
127 virtual ~Camera() {}
129 static Camera *instance();
130
131 protected:
132 // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
134};
135
136} // namespace esphome::camera
Abstract camera base class.
Definition camera.h:114
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 add_listener(CameraListener *listener)=0
Add a listener to receive camera events.
virtual void request_image(CameraRequester requester)=0
static Camera * instance()
The singleton instance of the camera implementation.
Definition camera.cpp:18
static Camera * global_camera
Definition camera.h:133
Abstract camera image base class.
Definition camera.h:56
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:70
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
Listener interface for camera events.
Definition camera.h:45
virtual void on_stream_stop()
Definition camera.h:49
virtual void on_stream_start()
Definition camera.h:48
virtual void on_camera_image(const std::shared_ptr< CameraImage > &image)
Definition camera.h:47
const char * to_string(PixelFormat format)
Returns string name for a given PixelFormat.
Definition camera.h:25
CameraRequester
Different sources for filtering.
Definition camera.h:15
PixelFormat
Enumeration of different pixel formats.
Definition camera.h:18
@ PIXEL_FORMAT_RGB565
16-bit RGB (5-6-5).
Definition camera.h:20
@ PIXEL_FORMAT_GRAYSCALE
8-bit grayscale.
Definition camera.h:19
@ PIXEL_FORMAT_BGR888
RGB pixel data in 8-bit format, stored as B, G, R (1 byte each).
Definition camera.h:21
const char int const __FlashStringHelper * format
Definition log.h:74
Specification of a caputured camera image.
Definition camera.h:83