Fix issue with playback

This commit is contained in:
2023-09-12 16:44:55 +02:00
parent 7dadd440d0
commit 4b25463a2f
2 changed files with 7 additions and 3 deletions

View File

@@ -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<ArFrame> 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<ArFrame> frame = std::make_shared<ArFramePlayback>(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)
{

View File

@@ -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<ArFrame> m_nextFrame;
std::thread m_playbackReaderThread;
};