mirror of
https://github.com/m5stack/StackChan.git
synced 2026-04-27 19:12:40 +00:00
5001b7081b
* add firmware source code
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
/*
|
|
* SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
#pragma once
|
|
#include <lvgl.h>
|
|
#include <hal/hal.h>
|
|
#include <smooth_lvgl.hpp>
|
|
#include <uitk/short_namespace.hpp>
|
|
#include <memory>
|
|
|
|
namespace view {
|
|
|
|
class VideoWindow {
|
|
public:
|
|
VideoWindow(lv_obj_t* parent)
|
|
{
|
|
_image = std::make_unique<uitk::lvgl_cpp::Image>(parent);
|
|
_image->align(LV_ALIGN_CENTER, 0, 0);
|
|
_image->setSize(320, 240);
|
|
_image->setHidden(true);
|
|
|
|
_on_ws_video_mode_change_id = GetHAL().onWsVideoModeChange.connect([this](bool enabled) {
|
|
LvglLockGuard lock;
|
|
if (enabled) {
|
|
_image->setHidden(false);
|
|
} else {
|
|
_image->setHidden(true);
|
|
}
|
|
});
|
|
|
|
_on_ws_video_frame_id = GetHAL().onWsVideoFrame.connect([this](std::shared_ptr<LvglImage> img) {
|
|
LvglLockGuard lock;
|
|
_image_cached = img;
|
|
auto img_dsc = _image_cached->image_dsc();
|
|
_image->setSrc(img_dsc);
|
|
});
|
|
}
|
|
|
|
~VideoWindow()
|
|
{
|
|
GetHAL().onWsVideoModeChange.disconnect(_on_ws_video_mode_change_id);
|
|
GetHAL().onWsVideoFrame.disconnect(_on_ws_video_frame_id);
|
|
}
|
|
|
|
private:
|
|
std::unique_ptr<uitk::lvgl_cpp::Image> _image;
|
|
std::shared_ptr<LvglImage> _image_cached;
|
|
|
|
int _on_ws_video_mode_change_id = -1;
|
|
int _on_ws_video_frame_id = -1;
|
|
};
|
|
|
|
} // namespace view
|