From 747053f1327083eaa20529b5e5d97458ddbf775e Mon Sep 17 00:00:00 2001 From: TimZnr Date: Wed, 4 Jan 2023 21:50:02 +0100 Subject: [PATCH] input threadsafe --- AutonomousMode/Input/input.cpp | 8 ++++++-- AutonomousMode/Input/input.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/AutonomousMode/Input/input.cpp b/AutonomousMode/Input/input.cpp index 7dd90cf..3005c0c 100644 --- a/AutonomousMode/Input/input.cpp +++ b/AutonomousMode/Input/input.cpp @@ -1,9 +1,10 @@ #include "input.h" // TODO: Wenn ihr in die Zeile den Pfad zum Testvideo statt der 0 packt, benmutzt er das Testvideo. -Input::Input(int videoHeight, int videoWidth) : cap("C:\\Line-Following-Robot\\AutonomousMode\\Test_data\\video1.h264"), videoHeight(videoHeight), videoWidth(videoWidth) +Input::Input(int videoHeight, int videoWidth) : cap("C:\\Line-Following-Robot\\AutonomousMode\\Test_data\\video1.h264"), videoHeight(videoHeight), videoWidth(videoWidth)//Input::Input(int videoHeight, int videoWidth) : cap(0), videoHeight(videoHeight), videoWidth(videoWidth) //Input::Input(int videoHeight, int videoWidth) : cap(0), videoHeight(videoHeight), videoWidth(videoWidth) { + std::unique_lock lock(mtx); this->cap.set(CAP_PROP_FRAME_HEIGHT, videoHeight); this->cap.set(CAP_PROP_FRAME_WIDTH, videoWidth); } @@ -15,7 +16,8 @@ Input::~Input() Mat Input::readFile(String filePath) { - std::srand(std::time(0)); + std::unique_lock lock(mtx); + std::srand(static_cast(std::time(0))); // Read all .jpg files from the specified folder cv::String folder = filePath; std::vector filenames; @@ -40,6 +42,7 @@ Mat Input::readFile(String filePath) Mat Input::readWebcam() { + std::unique_lock lock(mtx); Mat image; if(!cap.isOpened()) { @@ -59,5 +62,6 @@ Mat Input::readWebcam() void Input::freeWebcam() { + std::unique_lock lock(mtx); this->cap.release(); } diff --git a/AutonomousMode/Input/input.h b/AutonomousMode/Input/input.h index c87191a..32b467a 100644 --- a/AutonomousMode/Input/input.h +++ b/AutonomousMode/Input/input.h @@ -16,7 +16,7 @@ class Input { private: VideoCapture cap; - + mutable std::mutex mtx; public: int videoHeight; int videoWidth;