mirror of
https://github.com/m5stack/StackChan.git
synced 2026-04-27 11:02:40 +00:00
5001b7081b
* add firmware source code
83 lines
1.9 KiB
C++
83 lines
1.9 KiB
C++
#pragma once
|
|
#include "sdkconfig.h"
|
|
|
|
#ifndef CONFIG_IDF_TARGET_ESP32
|
|
#include <lvgl.h>
|
|
#include <thread>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/queue.h>
|
|
|
|
#include "camera.h"
|
|
#include "jpg/image_to_jpeg.h"
|
|
#include "esp_video_init.h"
|
|
|
|
struct JpegChunk {
|
|
uint8_t* data;
|
|
size_t len;
|
|
};
|
|
|
|
class StackChanCamera : public Camera {
|
|
private:
|
|
struct FrameBuffer {
|
|
uint8_t* data = nullptr;
|
|
size_t len = 0;
|
|
uint16_t width = 0;
|
|
uint16_t height = 0;
|
|
v4l2_pix_fmt_t format = 0;
|
|
} frame_;
|
|
v4l2_pix_fmt_t sensor_format_ = 0;
|
|
#ifdef CONFIG_XIAOZHI_ENABLE_ROTATE_CAMERA_IMAGE
|
|
uint16_t sensor_width_ = 0;
|
|
uint16_t sensor_height_ = 0;
|
|
#endif // CONFIG_XIAOZHI_ENABLE_ROTATE_CAMERA_IMAGE
|
|
int video_fd_ = -1;
|
|
bool streaming_on_ = false;
|
|
struct MmapBuffer {
|
|
void* start = nullptr;
|
|
size_t length = 0;
|
|
};
|
|
std::vector<MmapBuffer> mmap_buffers_;
|
|
std::string explain_url_;
|
|
std::string explain_token_;
|
|
std::thread encoder_thread_;
|
|
|
|
public:
|
|
StackChanCamera(const esp_video_init_config_t& config);
|
|
~StackChanCamera();
|
|
|
|
virtual void SetExplainUrl(const std::string& url, const std::string& token);
|
|
virtual bool Capture() override;
|
|
bool StreamCaptures();
|
|
|
|
// 翻转控制函数
|
|
virtual bool SetHMirror(bool enabled) override;
|
|
virtual bool SetVFlip(bool enabled) override;
|
|
virtual std::string Explain(const std::string& question);
|
|
|
|
const uint8_t* GetFrameData()
|
|
{
|
|
return frame_.data;
|
|
}
|
|
size_t GetFrameSize()
|
|
{
|
|
return frame_.len;
|
|
}
|
|
int GetFrameWidth()
|
|
{
|
|
return frame_.width;
|
|
}
|
|
int GetFrameHeight()
|
|
{
|
|
return frame_.height;
|
|
}
|
|
int GetFrameFormat()
|
|
{
|
|
return frame_.format;
|
|
}
|
|
};
|
|
|
|
#endif // ndef CONFIG_IDF_TARGET_ESP32
|