]> git.sesse.net Git - kdenlive/blobdiff - src/timecode.cpp
Const'ref
[kdenlive] / src / timecode.cpp
index d60fa3554cf83404e271290f980432b2854072ab..789b286103d2bf0659513ec0c6fc04da94b64cf9 100644 (file)
@@ -117,7 +117,7 @@ bool Timecode::df() const
     return m_dropFrameTimecode;
 }
 
-const QString Timecode::mask(GenTime t) const
+const QString Timecode::mask(const GenTime& t) const
 {
     if (t < GenTime()) {
         if (m_dropFrameTimecode) return "#99:99:99,99";
@@ -142,13 +142,17 @@ int Timecode::getDisplayFrameCount(const QString &duration, bool frameDisplay) c
 
 int Timecode::getFrameCount(const QString &duration) const
 {
+    if (duration.isEmpty()) {
+        return 0;
+    }
     int hours, minutes, seconds, frames;
     int offset = 0;
     if (duration.at(0) == '-') {
         offset = 1;
         hours = duration.mid(1, 2).toInt();
+    } else {
+        hours = duration.left(2).toInt();
     }
-    else hours = duration.left(2).toInt();
     minutes = duration.mid(3 + offset, 2).toInt();
     seconds = duration.mid(6 + offset, 2).toInt();
     frames = duration.right(2).toInt();
@@ -161,7 +165,7 @@ int Timecode::getFrameCount(const QString &duration) const
         int frameNumber = ((m_displayedFramesPerSecond * 3600 * hours) + (m_displayedFramesPerSecond * 60 * minutes) + (m_displayedFramesPerSecond * seconds) + frames) - (m_dropFrames * (totalMinutes - floor(totalMinutes / 10)));
         return frameNumber;
     }
-    return (int)(hours * 3600.0 + minutes * 60.0 + seconds * m_realFps + frames);
+    return (int)((hours * 3600.0 + minutes * 60.0 + seconds) * m_realFps + frames);
 }
 
 QString Timecode::getDisplayTimecode(const GenTime & time, bool frameDisplay) const
@@ -206,7 +210,7 @@ const QString Timecode::getTimecodeFromFrames(int frames) const
 
 
 //static
-QString Timecode::getStringTimecode(int frames, const double &fps)
+QString Timecode::getStringTimecode(int frames, const double &fps, bool showFrames)
 {
     // Returns the timecode in an hh:mm:ss format
 
@@ -217,6 +221,7 @@ QString Timecode::getStringTimecode(int frames, const double &fps)
     }
 
     int seconds = (int)(frames / fps);
+    int frms = frames % (int) (fps + 0.5);
     int minutes = seconds / 60;
     seconds = seconds % 60;
     int hours = minutes / 60;
@@ -229,6 +234,10 @@ QString Timecode::getStringTimecode(int frames, const double &fps)
     text.append(QString::number(minutes).rightJustified(2, '0', false));
     text.append(':');
     text.append(QString::number(seconds).rightJustified(2, '0', false));
+    if (showFrames) {
+        text.append('.');
+        text.append(QString::number(frms).rightJustified(2, '0', false));
+    }
     return text;
 }