Files
StackChan/firmware/main/hal/board/stackchan_camera.h
T
Forairaaaaa 5001b7081b add firmware source code (#4)
* add firmware source code
2026-01-08 09:18:20 +08:00

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