MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ advance_frame()

void FrameAccessProcessor::advance_frame ( uint64_t  frames_to_advance)
private

Advance the frame cursor, respecting loop boundaries.

Parameters
frames_to_advanceNumber of frames to step forward.

Definition at line 247 of file FrameAccessProcessor.cpp.

248{
249 uint64_t new_frame = m_current_frame + frames_to_advance;
250
251 if (new_frame >= m_total_frames) {
252 if (m_looping_enabled) {
253 uint64_t loop_start = 0;
254 uint64_t loop_end = m_total_frames - 1;
255
256 if (!m_loop_region.start_coordinates.empty()) {
257 loop_start = m_loop_region.start_coordinates[0];
258 }
259 if (!m_loop_region.end_coordinates.empty()) {
260 loop_end = m_loop_region.end_coordinates[0];
261 }
262
263 if (loop_end > loop_start) {
264 uint64_t loop_length = loop_end - loop_start + 1;
265 uint64_t overflow = new_frame - m_total_frames;
266 new_frame = loop_start + (overflow % loop_length);
267 } else {
268 new_frame = loop_start;
269 }
270 } else {
271 new_frame = m_total_frames > 0 ? m_total_frames - 1 : 0;
272 }
273 }
274
275 m_current_frame = new_frame;
276
277 if (auto stream = std::dynamic_pointer_cast<StreamContainer>(m_source_container_weak.lock())) {
278 stream->update_read_position_for_channel(0, m_current_frame);
279 }
280}
std::weak_ptr< SignalSourceContainer > m_source_container_weak
std::vector< uint64_t > end_coordinates
Ending frame index (inclusive)
Definition Region.hpp:72
std::vector< uint64_t > start_coordinates
Starting frame index (inclusive)
Definition Region.hpp:69

References MayaFlux::Kakshya::Region::end_coordinates, m_current_frame, m_loop_region, m_looping_enabled, m_source_container_weak, m_total_frames, and MayaFlux::Kakshya::Region::start_coordinates.

Referenced by process().

+ Here is the caller graph for this function: