timecodefunctions: allow flooring "to timestamp" conversions

This commit is contained in:
itsmattkc
2021-05-13 23:57:50 +10:00
parent c4dcf89fde
commit 60c21e23f5
2 changed files with 15 additions and 9 deletions
+12 -6
View File
@@ -239,10 +239,10 @@ rational Timecode::timecode_to_time(const QString &timecode, const rational &tim
return timestamp_to_time(timestamp, timebase);
}
rational Timecode::snap_time_to_timebase(const rational &time, const rational &timebase)
rational Timecode::snap_time_to_timebase(const rational &time, const rational &timebase, bool floor)
{
// Just convert to a timestamp in timebase units and back
int64_t timestamp = time_to_timestamp(time, timebase);
int64_t timestamp = time_to_timestamp(time, timebase, floor);
return timestamp_to_time(timestamp, timebase);
}
@@ -275,14 +275,20 @@ QString Timecode::TimeToString(int64_t ms)
.arg(ss, 2, 10, QChar('0'));
}
int64_t Timecode::time_to_timestamp(const rational &time, const rational &timebase)
int64_t Timecode::time_to_timestamp(const rational &time, const rational &timebase, bool floor)
{
return time_to_timestamp(time.toDouble(), timebase);
return time_to_timestamp(time.toDouble(), timebase, floor);
}
int64_t Timecode::time_to_timestamp(const double &time, const rational &timebase)
int64_t Timecode::time_to_timestamp(const double &time, const rational &timebase, bool floor)
{
return qRound64(time * timebase.flipped().toDouble());
double d = time * timebase.flipped().toDouble();
if (floor) {
return qFloor(d);
} else {
return qRound64(d);
}
}
int64_t Timecode::rescale_timestamp(const int64_t &ts, const rational &source, const rational &dest)
+3 -3
View File
@@ -55,10 +55,10 @@ public:
static int64_t timecode_to_timestamp(const QString& timecode, const rational& timebase, const Display& display, bool *ok = nullptr);
static rational timecode_to_time(const QString& timecode, const rational& timebase, const Display& display, bool *ok = nullptr);
static rational snap_time_to_timebase(const rational& time, const rational& timebase);
static rational snap_time_to_timebase(const rational& time, const rational& timebase, bool floor = false);
static int64_t time_to_timestamp(const rational& time, const rational& timebase);
static int64_t time_to_timestamp(const double& time, const rational& timebase);
static int64_t time_to_timestamp(const rational& time, const rational& timebase, bool floor = false);
static int64_t time_to_timestamp(const double& time, const rational& timebase, bool floor = false);
static int64_t rescale_timestamp(const int64_t& ts, const rational& source, const rational& dest);
static int64_t rescale_timestamp_ceil(const int64_t& ts, const rational& source, const rational& dest);