fixed memory and lifetime issues

pull/3471/head
kallaballa 2 years ago
parent 686d04d4d8
commit a6157e6b29
  1. 28
      src/common/subsystems.hpp
  2. 6
      src/optflow/optflow-demo.cpp

@ -367,17 +367,23 @@ public:
~Window() { ~Window() {
//don't delete form_. it is autmatically cleaned up by screen_ //don't delete form_. it is autmatically cleaned up by screen_
if(screen_)
delete screen_; delete screen_;
if(writer_)
delete writer_; delete writer_;
if(capture_)
delete capture_; delete capture_;
if(nvgContext_)
delete nvgContext_; delete nvgContext_;
if(clvaContext_)
delete clvaContext_; delete clvaContext_;
if(clglContext_)
delete clglContext_; delete clglContext_;
glfwDestroyWindow(getGLFWWindow()); glfwDestroyWindow(getGLFWWindow());
glfwTerminate(); glfwTerminate();
} }
cv::Ptr<nanogui::FormHelper> form() { nanogui::FormHelper* form() {
return form_; return form_;
} }
@ -421,6 +427,10 @@ public:
}); });
} }
void makeGLFWContextCurrent() {
glfwMakeContextCurrent(getGLFWWindow());
}
cv::VideoWriter& makeVAWriter(const string& outputFilename, const int fourcc, const float fps, const cv::Size& frameSize, const int vaDeviceIndex) { cv::VideoWriter& makeVAWriter(const string& outputFilename, const int fourcc, const float fps, const cv::Size& frameSize, const int vaDeviceIndex) {
writer_ = new cv::VideoWriter(outputFilename, cv::CAP_FFMPEG, cv::VideoWriter::fourcc('V', 'P', '9', '0'), fps, frameSize, { writer_ = new cv::VideoWriter(outputFilename, cv::CAP_FFMPEG, cv::VideoWriter::fourcc('V', 'P', '9', '0'), fps, frameSize, {
cv::VIDEOWRITER_PROP_HW_DEVICE, vaDeviceIndex, cv::VIDEOWRITER_PROP_HW_DEVICE, vaDeviceIndex,
@ -526,22 +536,22 @@ public:
offscreen_ = o; offscreen_ = o;
} }
nanogui::Window& makeWindow(int x, int y, const string& title) { nanogui::Window* makeWindow(int x, int y, const string& title) {
return *form()->add_window(nanogui::Vector2i(x, y), title); return form()->add_window(nanogui::Vector2i(x, y), title);
} }
nanogui::Label& makeGroup(const string& label) { nanogui::Label* makeGroup(const string& label) {
return *form()->add_group(label); return form()->add_group(label);
} }
nanogui::detail::FormWidget<bool>& makeFormVariable(const string &name, bool &v, const string &tooltip = "") { nanogui::detail::FormWidget<bool>* makeFormVariable(const string &name, bool &v, const string &tooltip = "") {
auto var = form()->add_variable(name, v); auto var = form()->add_variable(name, v);
if (!tooltip.empty()) if (!tooltip.empty())
var->set_tooltip(tooltip); var->set_tooltip(tooltip);
return *var; return var;
} }
template<typename T> nanogui::detail::FormWidget<T>& makeFormVariable(const string &name, T &v, const T &min, const T &max, bool spinnable = true, const string &unit = "", const string tooltip = "") { template<typename T> nanogui::detail::FormWidget<T>* makeFormVariable(const string &name, T &v, const T &min, const T &max, bool spinnable = true, const string &unit = "", const string tooltip = "") {
auto var = form()->add_variable(name, v); auto var = form()->add_variable(name, v);
var->set_spinnable(spinnable); var->set_spinnable(spinnable);
var->set_min_value(min); var->set_min_value(min);
@ -550,7 +560,7 @@ public:
var->set_units(unit); var->set_units(unit);
if (!tooltip.empty()) if (!tooltip.empty())
var->set_tooltip(tooltip); var->set_tooltip(tooltip);
return *var; return var;
} }
void setUseOpenCL(bool u) { void setUseOpenCL(bool u) {

@ -13,6 +13,7 @@ using std::cerr;
using std::endl; using std::endl;
using std::vector; using std::vector;
using std::string; using std::string;
using namespace std::literals::chrono_literals;
/** Application parameters **/ /** Application parameters **/
@ -182,7 +183,7 @@ void composite_layers(const cv::UMat background, const cv::UMat foreground, cons
} }
void setup_gui(cv::Ptr<kb::Window> window) { void setup_gui(cv::Ptr<kb::Window> window) {
auto subWin = window->makeWindow(6, 45, "Settings"); window->makeWindow(6, 45, "Settings");
auto useOpenCL = window->makeFormVariable("Use OpenCL", use_opencl, "Enable or disable OpenCL acceleration"); auto useOpenCL = window->makeFormVariable("Use OpenCL", use_opencl, "Enable or disable OpenCL acceleration");
@ -201,7 +202,7 @@ void setup_gui(cv::Ptr<kb::Window> window) {
window->makeGroup("Effect"); window->makeGroup("Effect");
window->makeFormVariable("Max. Stroke Size", max_stroke, 1, 100, true, "px", "The theoretical maximum size of the drawing stroke which is scaled by the area of the convex hull of tracked points and therefor is usually much smaller"); window->makeFormVariable("Max. Stroke Size", max_stroke, 1, 100, true, "px", "The theoretical maximum size of the drawing stroke which is scaled by the area of the convex hull of tracked points and therefor is usually much smaller");
auto glowKernel = window->makeFormVariable("Glow Kernel Size", glow_kernel_size, 1, 63, true, "", "Intensity of glow defined by kernel size"); auto glowKernel = window->makeFormVariable("Glow Kernel Size", glow_kernel_size, 1, 63, true, "", "Intensity of glow defined by kernel size");
glowKernel.set_callback([](const int& k) { glowKernel->set_callback([](const int& k) {
glow_kernel_size = std::max(int(k % 2 == 0 ? k + 1 : k), 1); glow_kernel_size = std::max(int(k % 2 == 0 ? k + 1 : k), 1);
}); });
auto color = window->form()->add_variable("Color", effect_color); auto color = window->form()->add_variable("Color", effect_color);
@ -243,6 +244,7 @@ int main(int argc, char **argv) {
} }
float fps = capture.get(cv::CAP_PROP_FPS); float fps = capture.get(cv::CAP_PROP_FPS);
window->makeVAWriter(OUTPUT_FILENAME, cv::VideoWriter::fourcc('V', 'P', '9', '0'), fps, window->getSize(), VA_HW_DEVICE_INDEX); window->makeVAWriter(OUTPUT_FILENAME, cv::VideoWriter::fourcc('V', 'P', '9', '0'), fps, window->getSize(), VA_HW_DEVICE_INDEX);
//BGRA //BGRA

Loading…
Cancel
Save