Introduces a new esp32s3_camera implementation for ESP32-S3 boards using the esp_camera component, with conditional compilation and Kconfig options to select between esp_camera and esp_video. Updates board initialization code and config files to use the new camera class where appropriate, and adjusts build system and dependencies to support both camera components on ESP32-S3 and ESP32-P4 targets.
58 lines
1.6 KiB
C++
58 lines
1.6 KiB
C++
#pragma once
|
||
#include "sdkconfig.h"
|
||
// esp32_camera (使用 esp_video 组件) 用于 ESP32-P4,或 ESP32-S3 选择使用 esp_video 时
|
||
#if defined(CONFIG_IDF_TARGET_ESP32P4) || (defined(CONFIG_IDF_TARGET_ESP32S3) && defined(CONFIG_XIAOZHI_USE_ESP_VIDEO))
|
||
|
||
#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 Esp32Camera : 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:
|
||
Esp32Camera(const esp_video_init_config_t& config);
|
||
~Esp32Camera();
|
||
|
||
virtual void SetExplainUrl(const std::string& url, const std::string& token);
|
||
virtual bool Capture();
|
||
// 翻转控制函数
|
||
virtual bool SetHMirror(bool enabled) override;
|
||
virtual bool SetVFlip(bool enabled) override;
|
||
virtual std::string Explain(const std::string& question);
|
||
};
|
||
|
||
#endif // ndef CONFIG_IDF_TARGET_ESP32
|