- // calculate how many frames need to be dropped every minute.
- int frames;
- int toDrop = (int) floor(600.0 * (m_displayedFramesPerSecond - m_realFps) + 0.5);
-
- int perMinute = toDrop / 9;
- int tenthMinute = toDrop % 9;
-
- // calculate how many frames are in a normal minute, and how many are in a tenth minute.
- int normalMinuteFrames = (m_displayedFramesPerSecond * 60) - perMinute;
- int tenthMinuteFrames = (m_displayedFramesPerSecond * 60) - tenthMinute;;
-
- // Number of actual frames in a 10 minute interval :
- int tenMinutes = (normalMinuteFrames * 9) + tenthMinuteFrames;
- frames = 6 * duration.section(':', 0, 0).toInt() * tenMinutes;
- int minutes = duration.section(':', 1, 1).toInt();
- frames += ((int) minutes / 10) * tenMinutes;
- int mins = minutes % 10;
- if (mins > 0) {
- frames += tenthMinuteFrames;
- mins--;
- if (mins > 0) frames += mins * normalMinuteFrames;
+ //Get Hours, Minutes, Seconds, Frames from timecode
+ int hours, minutes, seconds, frames;
+
+ hours = duration.section(':', 0, 0).toInt();
+ if (duration.contains('.')) {
+ minutes = duration.section('.', 0, 0).section(':', 1, 1).toInt();
+ seconds = duration.section('.', 1, 1).section(':', 0, 0).toInt();
+ frames = duration.section('.', 1, 1).section(':', 1, 1).toInt();
+ } else {
+ //Handle Drop Frame timecode frame calculations, even if the timecode supplied uses incorrect "99:99:99:99" format instead of "99:99.99:99"
+ minutes = duration.section(':', 1, 1).toInt();
+ seconds = duration.section(':', 2, 2).toInt();
+ frames = duration.section(':', 3, 3).toInt();