#ifndef OPENPOSE_GUI_W_GUI_HPP #define OPENPOSE_GUI_W_GUI_HPP #include #include #include namespace op { template class WGui : public WorkerConsumer { public: explicit WGui(const std::shared_ptr& gui); virtual ~WGui(); void initializationOnThread(); void workConsumer(const TDatums& tDatums); private: std::shared_ptr spGui; DELETE_COPY(WGui); }; } // Implementation #include namespace op { template WGui::WGui(const std::shared_ptr& gui) : spGui{gui} { } template WGui::~WGui() { } template void WGui::initializationOnThread() { try { spGui->initializationOnThread(); } catch (const std::exception& e) { error(e.what(), __LINE__, __FUNCTION__, __FILE__); } } template void WGui::workConsumer(const TDatums& tDatums) { try { // tDatums might be empty but we still wanna update the GUI if (tDatums != nullptr) { // Debugging log opLogIfDebug("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); // Profiling speed const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); // Update cvMat if (!tDatums->empty()) { std::vector cvOutputDatas; for (auto& tDatumPtr : *tDatums) cvOutputDatas.emplace_back(tDatumPtr->cvOutputData); spGui->setImage(cvOutputDatas); } // Refresh/update GUI spGui->update(); // Profiling speed if (!tDatums->empty()) { Profiler::timerEnd(profilerKey); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__); } // Debugging log opLogIfDebug("", Priority::Low, __LINE__, __FUNCTION__, __FILE__); } } catch (const std::exception& e) { this->stop(); error(e.what(), __LINE__, __FUNCTION__, __FILE__); } } COMPILE_TEMPLATE_DATUM(WGui); } #endif // OPENPOSE_GUI_W_GUI_HPP