Support both esp_video and esp32_camera (#1671)
* Update project version to 2.2.1 and refactor camera component handling - Incremented project version from 2.2.0 to 2.2.1 in CMakeLists.txt. - Removed legacy esp32_camera component and replaced it with esp_video for ESP32-S3 and ESP32-P4 boards. - Updated board implementations to utilize the new esp_video component, ensuring compatibility and improved functionality. - Cleaned up Kconfig options related to camera selection, streamlining the configuration process. - Enhanced camera initialization logic across various board files to support the new component structure. * Refactor camera handling in AtomS3R CAM/M12 EchoBase board - Replaced the legacy EspVideo component with the new Esp32Camera class for improved camera functionality. - Updated camera initialization logic to utilize a more structured configuration approach, enhancing clarity and maintainability. - Removed outdated comments and code related to the previous camera implementation in the README file. * Update camera configuration for atoms3r-cam-m12-echo-base - Removed outdated camera configuration options from config.json to streamline the setup. - Retained essential partition table configuration for improved clarity. * Enhance Esp32Camera functionality and memory management - Added esp_timer.h for improved timing functionality. - Streamlined camera initialization by removing redundant frame buffer setup and logging. - Improved memory allocation for JPEG encoding and added error handling for unsupported pixel formats. - Updated comments for clarity and consistency, ensuring better understanding of the code flow.
This commit is contained in:
53
main/boards/common/esp_video.h
Normal file
53
main/boards/common/esp_video.h
Normal file
@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#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 EspVideo : 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:
|
||||
EspVideo(const esp_video_init_config_t& config);
|
||||
~EspVideo();
|
||||
|
||||
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);
|
||||
};
|
||||
Reference in New Issue
Block a user