From 4b25463a2fe11abcd985d257dfba84674f8def96 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Tue, 12 Sep 2023 16:44:55 +0200 Subject: [PATCH] Fix issue with playback --- .../AR/Provider/Playback/ArSessionPlayback.cpp | 9 ++++++--- .../AR/Provider/Playback/ArSessionPlayback.hpp | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.cpp b/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.cpp index 54f5880..5d2bd24 100644 --- a/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.cpp +++ b/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.cpp @@ -29,6 +29,7 @@ namespace openVulkanoCpp::AR::Playback void ArSessionPlayback::Start() { running = true; + m_frameConsumed = true; } void ArSessionPlayback::Stop() @@ -43,9 +44,10 @@ namespace openVulkanoCpp::AR::Playback std::shared_ptr ArSessionPlayback::GetFrame() { - while(IsRunning() && !m_nextFrame) { std::this_thread::yield(); } + while(IsRunning() && m_frameConsumed) { std::this_thread::yield(); } auto frame = m_nextFrame; m_nextFrame = nullptr; + m_frameConsumed = true; return frame; } @@ -58,11 +60,13 @@ namespace openVulkanoCpp::AR::Playback { while (playbackReader.HasNext() && IsRunning()) { - while (m_nextFrame) { std::this_thread::yield(); } + while (!m_frameConsumed) { std::this_thread::yield(); } try { std::shared_ptr frame = std::make_shared(shared_from_this(), playbackReader); lastTimestamp = frame->GetTimestamp(); + m_nextFrame = frame; + m_frameConsumed = false; //TODO try to keep original frame timing // Trigger events OnNewFrameAvailable(); @@ -73,7 +77,6 @@ namespace openVulkanoCpp::AR::Playback auto view = frame->GetCameraViewForCurrentDeviceOrientation(); OnNewCameraViewMatrix(view); } - m_nextFrame = frame; } catch (const std::exception& e) { diff --git a/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.hpp b/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.hpp index 9459277..ef1f62d 100644 --- a/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.hpp +++ b/openVulkanoCpp/AR/Provider/Playback/ArSessionPlayback.hpp @@ -40,6 +40,7 @@ class ArSessionPlayback final : public ArSession, public std::enable_shared_from const bool autoAdvance; ArPlaybackReader playbackReader; + std::atomic_bool m_frameConsumed = true; std::shared_ptr m_nextFrame; std::thread m_playbackReaderThread; };