emscripten adaptions to optflow-demo

pull/3471/head
kallaballa 2 years ago
parent 17637cbe3a
commit 91ff766d7d
  1. 44
      modules/v4d/samples/optflow-demo.cpp

@ -21,8 +21,6 @@ using std::cerr;
using std::endl;
using std::vector;
using std::string;
using namespace std::literals::chrono_literals;
/* Demo parameters */
@ -97,7 +95,7 @@ float effect_color[4] = {1.0f, 0.75f, 0.4f, 1.0f};
//display on-screen FPS
bool show_fps = true;
//Stretch frame buffer to window size
bool scale = false;
bool stretch = false;
//Use OpenCL or not
bool use_acceleration = true;
//The post processing mode
@ -339,7 +337,8 @@ static void composite_layers(cv::UMat& background, const cv::UMat& foreground, c
using namespace cv::v4d;
//Build the GUI
static void setup_gui(cv::Ptr<V4D> main) {
static void setup_gui(cv::Ptr<V4D> main, cv::Ptr<V4D> mini) {
CV_UNUSED(mini);
main->imgui([main](ImGuiContext* ctx){
using namespace ImGui;
SetCurrentContext(ctx);
@ -373,13 +372,24 @@ static void setup_gui(cv::Ptr<V4D> main) {
SliderFloat("Threshold", &scene_change_thresh, 0.1f, 1.0f);
SliderFloat("Threshold Diff", &scene_change_thresh_diff, 0.1f, 1.0f);
End();
#ifndef __EMSCRIPTEN__
});
mini->imgui([main, mini](ImGuiContext* ctx){
using namespace ImGui;
SetCurrentContext(ctx);
#endif
Begin("Window");
Checkbox("Show FPS", &show_fps);
if(Checkbox("Scale", &scale)) {
main->setScaling(scale);
if(Checkbox("Show FPS", &show_fps)) {
main->setShowFPS(show_fps);
#ifndef __EMSCRIPTEN__
mini->setShowFPS(show_fps);
#endif
}
if(Checkbox("Stretch", &stretch)) {
main->setStretching(stretch);
}
#ifndef __EMSCRIPTEN__
if(Button("Fullscreen")) {
main->setFullscreen(!main->isFullscreen());
};
@ -387,6 +397,7 @@ static void setup_gui(cv::Ptr<V4D> main) {
if(Button("Offscreen")) {
main->setVisible(!main->isVisible());
};
#endif
End();
});
}
@ -434,7 +445,7 @@ static bool iteration(cv::Ptr<V4D> window) {
window->fb([&](cv::UMat& framebuffer){
//Put it all together (OpenCL)
composite_layers(background, foreground, framebuffer, framebuffer, glow_kernel_size, fg_loss, background_mode, post_proc_mode);
cvtColor(framebuffer, miniFrame, cv::COLOR_BGRA2BGR);
cvtColor(framebuffer, miniFrame, cv::COLOR_BGRA2RGB);
});
#ifndef __EMSCRIPTEN__
@ -444,7 +455,12 @@ static bool iteration(cv::Ptr<V4D> window) {
//If onscreen rendering is enabled it displays the framebuffer in the native window. Returns false if the window was closed.
#ifndef __EMSCRIPTEN__
return window->display() && miniWindow->display();
if(window->isFocused()) {
return window->display() && miniWindow->display();
}
else {
return miniWindow->display() && window->display();
}
#else
return window->display();
#endif
@ -465,15 +481,15 @@ int main(int argc, char **argv) {
using namespace cv::v4d;
cv::Ptr<V4D> window = V4D::make(WIDTH, HEIGHT, "Sparse Optical Flow Demo", false, false, 0);
#ifndef __EMSCRIPTEN__
miniWindow = V4D::make(240, 135, "Mini", false, false, 0);
miniWindow = V4D::make(270, 240, "Mini", false, false, 0);
#endif
window->printSystemInfo();
// window->setStretching(stretch);
if (!OFFSCREEN) {
#ifndef __EMSCRIPTEN__
setup_gui(window);
setup_gui(window, miniWindow);
#else
setup_gui(window);
setup_gui(window, window);
#endif
}

Loading…
Cancel
Save