From 21317e2847055d186d8c2f9e678755ff144bbbb8 Mon Sep 17 00:00:00 2001 From: Nik Bamert Date: Fri, 14 Nov 2025 14:32:54 +0100 Subject: [PATCH] minimal diff for cpp17 compatability --- .github/workflows/build.yml | 6 +++- lib/gpc/Feature.hpp | 2 +- lib/gpc/SintelOpticalFlow.hpp | 56 ++++++++++++++++------------------- lib/gpc/SintelStereo.hpp | 49 +++++++++++++----------------- samples/CMakeLists.txt | 2 +- 5 files changed, 54 insertions(+), 61 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e6d04c..7f48fc0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,10 @@ name: Build -on: [push, pull_request] +on: + push: + branches: + - main + pull_request: jobs: build: diff --git a/lib/gpc/Feature.hpp b/lib/gpc/Feature.hpp index c461f1a..f0f7072 100644 --- a/lib/gpc/Feature.hpp +++ b/lib/gpc/Feature.hpp @@ -39,9 +39,9 @@ #include //for log2 #include #include +#include #include #include -#include #include #include #include diff --git a/lib/gpc/SintelOpticalFlow.hpp b/lib/gpc/SintelOpticalFlow.hpp index a97f24b..d73b9be 100644 --- a/lib/gpc/SintelOpticalFlow.hpp +++ b/lib/gpc/SintelOpticalFlow.hpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -81,6 +82,19 @@ class SintelOpticalFlow { return false; } + static std::string makeFramePath(const std::filesystem::path& baseDir, + const std::string& scene, + int idx) { + std::ostringstream os; + os << std::setw(4) << std::setfill('0') << idx; + + // //frame_XXXX.png + std::filesystem::path p = + baseDir / scene / ("frame_" + os.str() + ".png"); + + return p.string(); + } + public: SintelOpticalFlow(std::string basePath) { if (basePath.back() != '/') basePath += "/"; @@ -173,7 +187,8 @@ class SintelOpticalFlow { } // scene loop // Random shuffle the data - std::random_shuffle(trainingData.begin(), trainingData.end()); + std::mt19937 rng(12345); + std::shuffle(trainingData.begin(), trainingData.end(), rng); return trainingData; } @@ -363,15 +378,8 @@ class SintelOpticalFlow { * @return The bw. */ int getBW(int id, ndb::Buffer& L, ndb::Buffer& R) { - char buf[16]; - - sprintf(buf, "%04d", id); - int err1 = L.readPNG(cleanDir + "/" + selectedScene + "/frame_" + buf + - ".png"); - sprintf(buf, "%04d", id + 1); - int err2 = R.readPNG(cleanDir + "/" + selectedScene + "/frame_" + buf + - ".png"); - + int err1 = L.readPNG(makeFramePath(cleanDir, selectedScene, id)); + int err2 = R.readPNG(makeFramePath(cleanDir, selectedScene, id + 1)); return err1 | err2; } @@ -385,14 +393,8 @@ class SintelOpticalFlow { * @return 0 if success */ int getRGB(int id, ndb::Buffer& L, ndb::Buffer& R) { - char buf[16]; - sprintf(buf, "%04d", id); - int err1 = L.readPNG(cleanDir + "/" + selectedScene + "/frame_" + buf + - ".png"); - sprintf(buf, "%04d", id + 1); - int err2 = R.readPNG(cleanDir + "/" + selectedScene + "/frame_" + buf + - ".png"); - + int err1 = L.readPNG(makeFramePath(cleanDir, selectedScene, id)); + int err2 = R.readPNG(makeFramePath(cleanDir, selectedScene, id + 1)); return err1 | err2; } @@ -406,10 +408,10 @@ class SintelOpticalFlow { * @return 0 if success */ int getFlow(int id, Eigen::MatrixXd& uMat, Eigen::MatrixXd& vMat) { - char tbuf[16]; - sprintf(tbuf, "%04d", id); - string filename = - flowDir + "/" + selectedScene + "/frame_" + tbuf + ".flo"; + std::ostringstream os; + os << std::setw(4) << std::setfill('0') << id; + std::string filename = + (flowDir + "/" + selectedScene + "/frame_" + os.str() + ".flo"); // Read file into buffer FILE* readFile = fopen(filename.c_str(), "rb"); @@ -463,10 +465,7 @@ class SintelOpticalFlow { * @return 0 if success. */ int getOcclusion(int id, ndb::Buffer& O) { - char buf[16]; - sprintf(buf, "%04d", id); - return O.readPNG(oclDir + "/" + selectedScene + "/frame_" + buf + - ".png"); + return O.readPNG(makeFramePath(oclDir, selectedScene, id)); } /** * @brief Gets the invalid pixel map (out of frame) @@ -477,10 +476,7 @@ class SintelOpticalFlow { * @return The invalid. */ int getInvalid(int id, ndb::Buffer& I) { - char buf[16]; - sprintf(buf, "%04d", id); - return I.readPNG(invDir + "/" + selectedScene + "/frame_" + buf + - ".png"); + return I.readPNG(makeFramePath(invDir, selectedScene, id)); } /** diff --git a/lib/gpc/SintelStereo.hpp b/lib/gpc/SintelStereo.hpp index 49696b6..f50350a 100644 --- a/lib/gpc/SintelStereo.hpp +++ b/lib/gpc/SintelStereo.hpp @@ -77,6 +77,18 @@ class SintelStereo { else return false; } + static std::string makeFramePath(const std::filesystem::path& baseDir, + const std::string& scene, + int idx) { + std::ostringstream os; + os << std::setw(4) << std::setfill('0') << idx; + + // //frame_XXXX.png + std::filesystem::path p = + baseDir / scene / ("frame_" + os.str() + ".png"); + + return p.string(); + } public: SintelStereo(std::string basePath) { @@ -163,7 +175,8 @@ class SintelStereo { } } // image loop } // scene loop - std::random_shuffle(trainingData.begin(), trainingData.end()); + std::mt19937 rng(12345); + std::shuffle(trainingData.begin(), trainingData.end(), rng); return trainingData; } @@ -307,14 +320,8 @@ class SintelStereo { * @return The bw. */ int getBW(int id, ndb::Buffer& L, ndb::Buffer& R) { - char buf[16]; - - sprintf(buf, "%04d", id); - int err1 = L.readPNG(cleanLeftDir + "/" + selectedScene + "/frame_" + - buf + ".png"); - int err2 = R.readPNG(cleanRightDir + "/" + selectedScene + "/frame_" + - buf + ".png"); - + int err1 = L.readPNG(makeFramePath(cleanLeftDir, selectedScene, id)); + int err2 = R.readPNG(makeFramePath(cleanRightDir, selectedScene, id)); return err1 | err2; } @@ -328,13 +335,8 @@ class SintelStereo { * @return The rgb. */ int getRGB(int id, ndb::Buffer& L, ndb::Buffer& R) { - char buf[16]; - sprintf(buf, "%04d", id); - int err1 = L.readPNG(cleanLeftDir + "/" + selectedScene + "/frame_" + - buf + ".png"); - int err2 = R.readPNG(cleanRightDir + "/" + selectedScene + "/frame_" + - buf + ".png"); - + int err1 = L.readPNG(makeFramePath(cleanLeftDir, selectedScene, id)); + int err2 = R.readPNG(makeFramePath(cleanRightDir, selectedScene, id)); return err1 | err2; } @@ -347,10 +349,7 @@ class SintelStereo { * @return 0 if succecss. */ int getOcclusion(int id, ndb::Buffer& O) { - char buf[16]; - sprintf(buf, "%04d", id); - return O.readPNG(oclDir + "/" + selectedScene + "/frame_" + buf + - ".png"); + return O.readPNG(makeFramePath(oclDir, selectedScene, id)); } /** * @brief Gets the disparity map @@ -361,10 +360,7 @@ class SintelStereo { * @return 0 if success. */ int getDisparity(int id, ndb::RGBBuffer& D) { - char buf[16]; - sprintf(buf, "%04d", id); - return D.readPNGRGB(dispDir + "/" + selectedScene + "/frame_" + buf + - ".png"); + return D.readPNGRGB(makeFramePath(dispDir, selectedScene, id)); } /** @@ -376,10 +372,7 @@ class SintelStereo { * @return 0 if success */ int getInvalid(int id, ndb::Buffer& I) { - char buf[16]; - sprintf(buf, "%04d", id); - return I.readPNG(oofDir + "/" + selectedScene + "/frame_" + buf + - ".png"); + return I.readPNG(makeFramePath(oofDir, selectedScene, id)); } /** diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index f10bbc0..9dafd8a 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -4,7 +4,7 @@ include(CheckCXXSourceRuns) project(openGPC CXX) set (REQ_CPP11_FEATURES cxx_strong_enums cxx_auto_type) -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)