Add async frame recording
This commit is contained in:
@@ -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; }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user