Prusa-Firmware-ESP32-Cam/ESP32_PrusaConnectCam/stream.h

75 lines
2.0 KiB
C++

/**
@file stream.h
@brief stream library
Inspiration is from git repository https://gist.github.com/me-no-dev/d34fba51a8f059ac559bf62002e61aa3
@author Miroslav Pivovarsky
Contact: miroslav.pivovarsky@gmail.com
@bug: no know bug
*/
#ifndef _STREAM_H_
#define _STREAM_H_
#include "ESPAsyncWebSrv.h"
#include "Arduino.h"
#include "mcu_cfg.h"
#include "var.h"
#include "log.h"
#include "camera.h"
typedef struct {
camera_fb_t *fb; ///< pointer to frame buffer
size_t index; ///< index of frame
} camera_frame_t; ///< camera frame structure
class AsyncBufferResponse : public AsyncAbstractResponse {
private:
uint8_t *_buf; ///< pointer to frame buffer
size_t _len; ///< length of frame buffer
size_t _index; ///< index of frame
public:
AsyncBufferResponse(uint8_t *, size_t, const char *);
~AsyncBufferResponse();
bool _sourceValid() const;
virtual size_t _fillBuffer(uint8_t *, size_t) override;
size_t _content(uint8_t *, size_t, size_t);
};
class AsyncFrameResponse : public AsyncAbstractResponse {
private:
camera_fb_t *fb; ///< pointer to frame buffer
size_t _index; ///< index of frame
public:
AsyncFrameResponse(camera_fb_t *, const char *);
~AsyncFrameResponse();
bool _sourceValid() const;
virtual size_t _fillBuffer(uint8_t *, size_t) override;
size_t _content(uint8_t *, size_t, size_t);
};
class AsyncJpegStreamResponse : public AsyncAbstractResponse {
private:
camera_frame_t _frame; ///< camera frame
size_t _index; ///< index of frame
uint64_t lastAsyncRequest; ///< last async request
Camera *camera; ///< pointer to camera
Logs *log; ///< pointer to logs
camera_fb_t _dframe; ///< camera frame
public:
AsyncJpegStreamResponse(Camera *, Logs *);
~AsyncJpegStreamResponse();
bool _sourceValid() const;
virtual size_t _fillBuffer(uint8_t *, size_t ) override;
size_t _content(uint8_t *, size_t , size_t );
};
#endif
/* EOF */