Add async frame recording

This commit is contained in:
2021-07-27 02:05:08 +02:00
parent 7faf3a7a7d
commit d372ce7c07
2 changed files with 88 additions and 5 deletions

View File

@@ -7,9 +7,14 @@
#pragma once
#include "Math/ByteSize.hpp"
#include <string>
#include <atomic>
#include <condition_variable>
#include <filesystem>
#include <mutex>
#include <memory>
#include <string>
#include <thread>
#include <queue>
namespace openVulkanoCpp
{
@@ -50,6 +55,21 @@ namespace openVulkanoCpp::AR
class ArRecorder final
{
struct AsyncProcessor final
{
ArRecorder* recorder;
std::thread processingThread;
std::queue<std::shared_ptr<ArFrame>> frameQueue, highResFrameQueue;
std::mutex queueMutex;
std::condition_variable newDataAvailable;
std::atomic_bool requestExit{};
explicit AsyncProcessor(ArRecorder* recorder);
~AsyncProcessor();
void Queue(const std::shared_ptr<ArFrame>& frame, bool highRes);
void Handler();
};
ArSession* m_session;
std::unique_ptr<MultiPartArchiveWriter> m_colorWriter, m_depthWriter, m_confidenceWriter, m_metadataWriter, m_highResWriter;
RecordingSettings m_settings;
@@ -57,6 +77,8 @@ namespace openVulkanoCpp::AR
IEventHandler* m_newFrameHandler = nullptr;
AsyncProcessor m_asyncProcessor;
void Write(ArFrame* frame, bool highRes = false);
void WriteColorImage(ArFrame* arFrame, MultiPartArchiveWriter* colorWriter, bool highRes);
void WriteDepthImage(ArFrame *arFrame, MultiPartArchiveWriter* depthWriter, MultiPartArchiveWriter* confWriter);
@@ -147,7 +169,7 @@ namespace openVulkanoCpp::AR
void SetArchivePartMaxFileSize(size_t maxPartSize = 2_GiB) { m_settings.archiveSize = maxPartSize; }
size_t GetArchivePartMaxFileSize() const { m_settings.archiveSize; }
size_t GetArchivePartMaxFileSize() const { return m_settings.archiveSize; }
const RecordingSettings& GetRecordingSettings() const { return m_settings; }
};