MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Kakshya::FrameSeekProcessor Class Reference

FrameAccessProcessor whose read position follows a function of time. More...

#include <FrameSeekProcessor.hpp>

+ Inheritance diagram for MayaFlux::Kakshya::FrameSeekProcessor:
+ Collaboration diagram for MayaFlux::Kakshya::FrameSeekProcessor:

Public Member Functions

void on_attach (const std::shared_ptr< SignalSourceContainer > &container) override
 Attach the processor to a video container.
 
void process (const std::shared_ptr< SignalSourceContainer > &container) override
 Extract the current frame(s) into the container's processed_data.
 
void reset ()
 Restart the clock and the repeat.
 
void set_blend (bool enable)
 Mix the two frames either side of a fractional position.
 
void set_repeat (const std::shared_ptr< const Kinesis::TimeMap > &length)
 Restart the time map over and over, with a length that can change.
 
void set_time_map (const std::shared_ptr< const Kinesis::TimeMap > &map)
 Drive the read position from a function of time.
 
void trail (double write_head, double lag_frames)
 Trail a stream that is being written by a fixed number of frames.
 
void trail (double write_head, Kinesis::TimeMap lag)
 Trail a stream that is being written, by a lag that can change.
 
- Public Member Functions inherited from MayaFlux::Kakshya::FrameAccessProcessor
 FrameAccessProcessor ()=default
 
bool get_auto_advance () const
 Get the current auto-advance state.
 
uint64_t get_current_frame () const
 Get the current frame index.
 
uint64_t get_frame_byte_size () const
 Get the cached frame byte size (width × height × channels).
 
uint64_t get_frames_per_batch () const
 Get the number of frames per batch.
 
bool is_processing () const override
 Query if the processor is currently performing processing.
 
void on_detach (const std::shared_ptr< SignalSourceContainer > &container) override
 Detach the processor from its container.
 
void set_auto_advance (bool enable)
 Enable or disable automatic frame advancement after each process() call.
 
void set_current_frame (uint64_t frame)
 Set the current frame index (temporal cursor).
 
void set_frames_per_batch (uint64_t count)
 Set the number of frames extracted per process() call.
 
void set_global_fps (double fps)
 
 ~FrameAccessProcessor () override=default
 
- Public Member Functions inherited from MayaFlux::Kakshya::DataProcessor
virtual ~DataProcessor ()=default
 Virtual destructor for proper cleanup.
 

Private Member Functions

double position_at (uint64_t tick)
 

Private Attributes

bool m_blend {}
 
std::shared_ptr< const Kinesis::TimeMap > m_repeat
 
uint64_t m_repeat_length {}
 
uint64_t m_repeat_start {}
 
uint64_t m_ticks {}
 
std::shared_ptr< const Kinesis::TimeMap > m_time_map
 

Additional Inherited Members

- Protected Member Functions inherited from MayaFlux::Kakshya::FrameAccessProcessor
void advance_frame (uint64_t frames_to_advance)
 Advance the frame cursor, respecting loop boundaries.
 
void store_metadata (const std::shared_ptr< SignalSourceContainer > &container)
 Cache dimension metadata and frame geometry from the container.
 
void validate ()
 Validate that the container is suitable for frame-based processing.
 
- Protected Attributes inherited from MayaFlux::Kakshya::FrameAccessProcessor
bool m_auto_advance { true }
 
uint64_t m_channels {}
 
uint64_t m_current_frame {}
 
double m_frame_accumulator {}
 Sub-frame accumulator for wall-clock-driven advancement.
 
uint64_t m_frame_byte_size {}
 
double m_frame_rate {}
 Cached video frame rate in frames per second.
 
uint64_t m_frames_per_batch { 1 }
 
double m_global_fps { 60.0 }
 
uint64_t m_height {}
 
std::atomic< bool > m_is_processing { false }
 
std::chrono::steady_clock::time_point m_last_process_time {}
 
Region m_loop_region
 
bool m_looping_enabled {}
 
bool m_prepared {}
 
std::weak_ptr< SignalSourceContainer > m_source_container_weak
 
ContainerDataStructure m_structure
 
uint64_t m_total_frames {}
 
uint64_t m_width {}
 

Detailed Description

FrameAccessProcessor whose read position follows a function of time.

The video counterpart of the time-mapped read in CursorAccessProcessor. With a time map set, each process() call advances a clock by 1 / global fps seconds and reads the frame the map points at, so scrub, freeze, reverse, a tap trailing a live DynamicVideoStream (TimeMaps::lagged with the stream's frame rate) and stutter all work on video. Without a map it behaves exactly like FrameAccessProcessor.

The map takes seconds since the last reset() and returns a position in frames. Positions wrap inside the loop region when the container loops, and are held at the first or last frame otherwise.

Definition at line 24 of file FrameSeekProcessor.hpp.


The documentation for this class was generated from the following files: