Fix issue with playback
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user