fixed memory and lifetime issues

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

@ -367,17 +367,23 @@ public:
~Window() {
//don't delete form_. it is autmatically cleaned up by screen_
delete screen_;
delete writer_;
delete capture_;
delete nvgContext_;
delete clvaContext_;
delete clglContext_;
if(screen_)
delete screen_;
if(writer_)
delete writer_;
if(capture_)
delete capture_;
if(nvgContext_)
delete nvgContext_;
if(clvaContext_)
delete clvaContext_;
if(clglContext_)
delete clglContext_;
glfwDestroyWindow(getGLFWWindow());
glfwTerminate();
}
cv::Ptr<nanogui::FormHelper> form() {
nanogui::FormHelper* 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) {
writer_ = new cv::VideoWriter(outputFilename, cv::CAP_FFMPEG, cv::VideoWriter::fourcc('V', 'P', '9', '0'), fps, frameSize, {
cv::VIDEOWRITER_PROP_HW_DEVICE, vaDeviceIndex,
@ -526,22 +536,22 @@ public:
offscreen_ = o;
}
nanogui::Window& makeWindow(int x, int y, const string& title) {
return *form()->add_window(nanogui::Vector2i(x, y), title);
nanogui::Window* makeWindow(int x, int y, const string& title) {
return form()->add_window(nanogui::Vector2i(x, y), title);
}
nanogui::Label& makeGroup(const string& label) {
return *form()->add_group(label);
nanogui::Label* makeGroup(const string& 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);
if (!tooltip.empty())
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);
var->set_spinnable(spinnable);
var->set_min_value(min);
@ -550,7 +560,7 @@ public:
var->set_units(unit);
if (!tooltip.empty())
var->set_tooltip(tooltip);
return *var;
return var;
}
void setUseOpenCL(bool u) {

@ -13,6 +13,7 @@ using std::cerr;
using std::endl;
using std::vector;
using std::string;
using namespace std::literals::chrono_literals;
/** 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) {
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");
@ -201,7 +202,7 @@ void setup_gui(cv::Ptr<kb::Window> window) {
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");
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);
});
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);
window->makeVAWriter(OUTPUT_FILENAME, cv::VideoWriter::fourcc('V', 'P', '9', '0'), fps, window->getSize(), VA_HW_DEVICE_INDEX);
//BGRA

Loading…
Cancel
Save