8#ifndef META_OCEAN_DEVICES_SERIALIZATION_SERIALIZER_DEVICE_PLAYER_H
9#define META_OCEAN_DEVICES_SERIALIZATION_SERIALIZER_DEVICE_PLAYER_H
33namespace Serialization
92 using ChannelDeviceMap = std::unordered_map<IO::Serialization::DataSerializer::ChannelId, DeviceRef>;
97 using ChannelPixelImageMap = std::unordered_map<IO::Serialization::DataSerializer::ChannelId, Media::PixelImageRef>;
107 using SampleTypeMap = std::unordered_map<std::string, SampleProcessorFunction>;
112 using ChannelProcessorMap = std::unordered_map<IO::Serialization::DataSerializer::ChannelId, SampleProcessorFunction>;
154 using SamplePair = std::pair<IO::Serialization::DataSerializer::ChannelId, IO::Serialization::UniqueDataSample>;
186 bool start(
const float speed = 1.0f)
override;
208 inline double duration()
const override;
230 inline bool isStarted()
const override;
476 std::atomic_bool isStarted_ =
false;
489 pixelImage_(pixelImage)
496 ocean_assert(
false &&
"This function is not supported");
Definition of a class holding the major and minor device type.
Definition devices/Device.h:62
This class is the base class for all devices of any type.
Definition devices/Device.h:28
This class implements the abstract base class for all device players.
Definition DevicePlayer.h:41
TransformationResult
Definition of individual transformation results.
Definition DevicePlayer.h:53
Lock lock_
The player's lock.
Definition DevicePlayer.h:147
This class holds data associated with a frame medium channel.
Definition SerializerDevicePlayer.h:118
bool update(const IO::Serialization::MediaSerializer::DataSampleFrame &frameSample)
Updates the frame medium data with a new frame sample.
Media::PixelImageRef pixelImage_
The pixel image object.
Definition SerializerDevicePlayer.h:139
SharedAnyCamera camera_
The camera profile.
Definition SerializerDevicePlayer.h:142
FrameMediumData()=default
This class implements a simple helper to ensure that there cannot be more than one active DevicePlaye...
Definition SerializerDevicePlayer.h:52
bool registerUsage()
Informs the manager that the player will be used.
Lock lock_
The manager's lock.
Definition SerializerDevicePlayer.h:81
UsageManager()=default
Default constructor.
void unregisterUsage()
Informs the manager that the player is not longer used.
This class implements a player for device objects based on Ocean's DataSerializer.
Definition SerializerDevicePlayer.h:45
bool start(const float speed=1.0f) override
Starts the replay.
bool isStarted() const override
Returns whether this player is currently started.
Definition SerializerDevicePlayer.h:507
void processDataSamplePositionTracker3DOF(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSamplePositionTracker3DOF sample.
~SerializerDevicePlayer() override
Destructs the device player.
static IO::Serialization::UniqueDataSample createDataSampleGPSTracker(const std::string &sampleType)
Factory function for creating DataSampleGPSTracker objects.
void processDataSampleGPSTracker(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleGPSTracker sample.
void processLookaheadSamples(const IO::Serialization::DataTimestamp &dataTimestamp, const double maxPlaybackTimestamp)
Processes samples within the lookahead window.
static Device * createPositionTracker3DOF(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationPositionTracker3DOF devices.
void processDataSampleGravityTracker3DOF(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleGravityTracker3DOF sample.
std::unordered_map< IO::Serialization::DataSerializer::ChannelId, DeviceRef > ChannelDeviceMap
Definition of a map mapping channel ids to device objects.
Definition SerializerDevicePlayer.h:92
DeviceRef ensureDevice(const IO::Serialization::DataSerializer::ChannelId channelId, const std::string &deviceName, const Device::DeviceType &deviceType)
Creates or retrieves a device for a specific channel.
Media::FrameMediumRefs frameMediums() override
Returns all media objects which have been created based on the recording.
Definition SerializerDevicePlayer.h:500
ChannelDeviceMap channelDeviceMap_
The map associating channel ids with device objects.
Definition SerializerDevicePlayer.h:464
static Device * createTracker6DOF(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationTracker6DOF devices.
std::unordered_map< IO::Serialization::DataSerializer::ChannelId, Media::PixelImageRef > ChannelPixelImageMap
Definition of a map mapping channel ids to PixelImage objects.
Definition SerializerDevicePlayer.h:97
bool isValid() const override
Returns whether this player holds a valid recording.
void processSample(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a sample and forwards it to the appropriate device.
void processDataSampleTracker6DOF(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleTracker6DOF sample.
static IO::Serialization::UniqueDataSample createDataSamplePositionTracker3DOF(const std::string &sampleType)
Factory function for creating DataSamplePositionTracker3DOF objects.
std::unique_ptr< IO::Serialization::FileInputDataSerializer > inputSerializer_
The input data serializer for reading the content.
Definition SerializerDevicePlayer.h:458
bool stop() override
Stops the replay.
std::unordered_map< std::string, SampleProcessorFunction > SampleTypeMap
Definition of a map mapping sample type strings to specialized processing functions.
Definition SerializerDevicePlayer.h:107
double duration() const override
Returns the duration of the content when played with default speed.
Definition SerializerDevicePlayer.h:494
std::atomic_bool isStarted_
True, if the player is started.
Definition SerializerDevicePlayer.h:476
void processDataSampleOrientationTracker3DOF(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleOrientationTracker3DOF sample.
static IO::Serialization::UniqueDataSample createDataSampleTracker6DOF(const std::string &sampleType)
Factory function for creating DataSampleTracker6DOF objects.
static Device * createAccelerationSensor3DOF(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationAccelerationSensor3DOF devices.
static Device * createGyroSensor3DOF(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationGyroSensor3DOF devices.
SerializerDevicePlayer()=default
Creates a new device player.
Media::FrameMediumRefs frameMediums_
The FrameMedium objects receiving image content from the recording.
Definition SerializerDevicePlayer.h:470
void(SerializerDevicePlayer::*)(const IO::Serialization::DataSerializer::ChannelId, IO::Serialization::UniqueDataSample &&) SampleProcessorFunction
Definition of a function pointer for specialized sample processing functions.
Definition SerializerDevicePlayer.h:102
static IO::Serialization::UniqueDataSample createDataSampleFrame(const std::string &sampleType)
Factory function for creating SampleFrame objects.
void threadRun() override
The thread's run function in which the samples are read.
Timestamp playNextFrame() override
Plays the next frame of the recording, the player must be started with stop-motion mode.
static IO::Serialization::UniqueDataSample createDataSampleOrientationTracker3DOF(const std::string &sampleType)
Factory function for creating DataSampleOrientationTracker3DOF objects.
bool initializeDeviceFactories()
Initializes the device factories by registering factory functions for all supported sample types.
ChannelFrameMediumDataMap channelFrameMediumDataMap_
The map associating channel ids with FrameMediumData objects.
Definition SerializerDevicePlayer.h:467
std::deque< SamplePair > SampleQueue
Definition of a queue holding sample pairs.
Definition SerializerDevicePlayer.h:157
void processDataSampleGyroSensor3DOF(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleGyroSensor3DOF sample.
static IO::Serialization::UniqueDataSample createDataSampleAccelerationSensor3DOF(const std::string &sampleType)
Factory function for creating DataSampleAccelerationSensor3DOF objects.
void release()
Stops playback and releases the player.
SampleTypeMap sampleTypeMap_
Map associating sample type strings with specialized processing functions.
Definition SerializerDevicePlayer.h:482
static IO::Serialization::UniqueDataSample createDataSampleGravityTracker3DOF(const std::string &sampleType)
Factory function for creating DataSampleGravityTracker3DOF objects.
bool isPlaying() const
Returns whether this player is currently playing.
std::pair< IO::Serialization::DataSerializer::ChannelId, IO::Serialization::UniqueDataSample > SamplePair
Definition of a pair holding a channel id and a unique data sample.
Definition SerializerDevicePlayer.h:154
static IO::Serialization::UniqueDataSample createDataSampleGyroSensor3DOF(const std::string &sampleType)
Factory function for creating DataSampleGyroSensor3DOF objects.
bool initialize(const std::string &filename) override
Loads a new serialized file for replay.
static Device * createOrientationTracker3DOF(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationOrientationTracker3DOF devices.
std::unordered_map< IO::Serialization::DataSerializer::ChannelId, SampleProcessorFunction > ChannelProcessorMap
Definition of a map mapping channel ids to specialized processing functions.
Definition SerializerDevicePlayer.h:112
void processDataSampleFrame(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleFrame sample.
static Device * createGPSTracker(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationGPSTracker devices.
ChannelProcessorMap channelProcessorMap_
The map associating channel ids with specialized processing functions.
Definition SerializerDevicePlayer.h:473
TransformationResult transformation(const std::string &name, const Timestamp ×tamp, HomogenousMatrixD4 &matrix) override
Returns a specific transformation which is expected to be part of the recording.
std::unordered_map< IO::Serialization::DataSerializer::ChannelId, FrameMediumData > ChannelFrameMediumDataMap
Definition of a map mapping channel ids to FrameMediumData objects.
Definition SerializerDevicePlayer.h:151
void processDataSampleAccelerationSensor3DOF(const IO::Serialization::DataSerializer::ChannelId channelId, IO::Serialization::UniqueDataSample &&sample)
Processes a DataSampleAccelerationSensor3DOF sample.
static Device * createGravityTracker3DOF(const std::string &name, const Device::DeviceType &deviceType)
Factory function for creating SerializationGravityTracker3DOF devices.
uint32_t ChannelId
Definition of a channel id.
Definition DataSerializer.h:40
This class implements a data timestamp which can hold either a double or int64_t value.
Definition DataTimestamp.h:29
This class implements a recursive lock object.
Definition Lock.h:31
This class implements a scoped lock object for recursive lock objects.
Definition Lock.h:147
This template class is the base class for all singleton objects.
Definition Singleton.h:71
This class implements a thread.
Definition Thread.h:115
This class implements a timestamp.
Definition Timestamp.h:63
std::unique_ptr< DataSample > UniqueDataSample
Definition of a unique pointer holding a DataSample.
Definition DataSample.h:39
std::shared_ptr< AnyCamera > SharedAnyCamera
Definition of a shared pointer holding an AnyCamera object with Scalar precision.
Definition AnyCamera.h:61
The namespace covering the entire Ocean framework.
Definition Accessor.h:15