From 9f90c7dd6a4ced23ed033f9211c042b204b31502 Mon Sep 17 00:00:00 2001 From: Terrence Date: Mon, 26 May 2025 07:04:25 +0800 Subject: [PATCH] remove preview_thread_, cost more time but less memory usage --- main/boards/common/esp32_camera.cc | 29 ++++++++++++----------------- main/boards/common/esp32_camera.h | 1 - 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/main/boards/common/esp32_camera.cc b/main/boards/common/esp32_camera.cc index eec97868..eeaaf76b 100644 --- a/main/boards/common/esp32_camera.cc +++ b/main/boards/common/esp32_camera.cc @@ -64,9 +64,6 @@ void Esp32Camera::SetExplainUrl(const std::string& url, const std::string& token } bool Esp32Camera::Capture() { - if (preview_thread_.joinable()) { - preview_thread_.join(); - } if (encoder_thread_.joinable()) { encoder_thread_.join(); } @@ -84,20 +81,18 @@ bool Esp32Camera::Capture() { } } - preview_thread_ = std::thread([this]() { - // 显示预览图片 - auto display = Board::GetInstance().GetDisplay(); - if (display != nullptr) { - auto src = (uint16_t*)fb_->buf; - auto dst = (uint16_t*)preview_image_.data; - size_t pixel_count = fb_->len / 2; - for (size_t i = 0; i < pixel_count; i++) { - // 交换每个16位字内的字节 - dst[i] = __builtin_bswap16(src[i]); - } - display->SetPreviewImage(&preview_image_); + // 显示预览图片 + auto display = Board::GetInstance().GetDisplay(); + if (display != nullptr) { + auto src = (uint16_t*)fb_->buf; + auto dst = (uint16_t*)preview_image_.data; + size_t pixel_count = fb_->len / 2; + for (size_t i = 0; i < pixel_count; i++) { + // 交换每个16位字内的字节 + dst[i] = __builtin_bswap16(src[i]); } - }); + display->SetPreviewImage(&preview_image_); + } return true; } @@ -109,7 +104,7 @@ bool Esp32Camera::Capture() { * 问题对图像进行AI分析并返回结果。 * * 实现特点: - * - 使用多线程异步JPEG编码,避免阻塞主线程 + * - 使用独立线程编码JPEG,与主线程分离 * - 采用分块传输编码(chunked transfer encoding)优化内存使用 * - 通过队列机制实现编码线程和发送线程的数据同步 * - 支持设备ID、客户端ID和认证令牌的HTTP头部配置 diff --git a/main/boards/common/esp32_camera.h b/main/boards/common/esp32_camera.h index bcb599ad..d7a30d80 100644 --- a/main/boards/common/esp32_camera.h +++ b/main/boards/common/esp32_camera.h @@ -22,7 +22,6 @@ private: lv_img_dsc_t preview_image_; std::string explain_url_; std::string explain_token_; - std::thread preview_thread_; std::thread encoder_thread_; public: