MCPcopy Create free account
hub / github.com/MediaArea/MediaInfoLib / FromFrames

Method FromFrames

Source/MediaInfo/TimeCode.cpp:638–669  ·  view source on GitHub ↗

---------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

636
637//---------------------------------------------------------------------------
638int TimeCode::FromFrames(uint64_t Frames)
639{
640 uint64_t Dropped = IsDropFrame() ? (1 + GetFramesMax() / 30) : 0;
641 uint64_t FrameRate = (uint64_t)GetFramesMax() + 1;
642 uint64_t Dropped2 = Dropped * 2;
643 uint64_t Dropped18 = Dropped * 18;
644
645 uint64_t Minutes_Tens = ((uint64_t)Frames) / (600 * FrameRate - Dropped18); //Count of 10 minutes
646 uint64_t Minutes_Units = (Frames - Minutes_Tens * (600 * FrameRate - Dropped18)) / (60 * FrameRate - Dropped2);
647
648 Frames += Dropped18 * Minutes_Tens + Dropped2 * Minutes_Units;
649 if (Minutes_Units && !((Frames / FrameRate) % 60) && (Frames % FrameRate) < Dropped2) // If Minutes_Tens is not 0 (drop) but count of remaining seconds is 0 and count of remaining frames is less than 2, 1 additional drop was actually counted, removing it
650 Frames -= Dropped2;
651
652 int64_t HoursTemp = Frames / (FrameRate * 3600);
653 if (HoursTemp >= 24 && IsWrapped24Hours())
654 HoursTemp %= 24;
655 else if (HoursTemp > numeric_limits<uint32_t>::max())
656 {
657 *this = TimeCode();
658 return 1;
659 }
660 SetHours(HoursTemp);
661 SetNegative(false);
662 SetValid();
663 auto TotalSeconds = Frames / FrameRate;
664 SetMinutes((TotalSeconds / 60) % 60);
665 SetSeconds(TotalSeconds % 60);
666 SetFrames((uint32_t)(Frames % FrameRate));
667
668 return 0;
669}
670
671//---------------------------------------------------------------------------
672int TimeCode::FromFrames(int64_t Frames)

Callers

nothing calls this directly

Calls 1

TimeCodeClass · 0.70

Tested by

no test coverage detected