diff --git a/api/units/frequency.h b/api/units/frequency.h index 45561f4aee..53bd7c902f 100644 --- a/api/units/frequency.h +++ b/api/units/frequency.h @@ -32,6 +32,11 @@ class Frequency final : public rtc_units_impl::RelativeUnit { return FromFraction(1000, hertz); } template + static constexpr Frequency kHz(T hertz) { + static_assert(std::is_arithmetic::value, ""); + return FromFraction(1000000, hertz); + } + template static constexpr Frequency hertz(T hertz) { static_assert(std::is_arithmetic::value, ""); return FromFraction(1000, hertz); @@ -74,6 +79,13 @@ inline constexpr TimeDelta operator/(int64_t nominator, return TimeDelta::us(nominator * kMegaPerMilli / frequency.millihertz()); } +inline constexpr double operator*(Frequency frequency, TimeDelta time_delta) { + return frequency.hertz() * time_delta.seconds(); +} +inline constexpr double operator*(TimeDelta time_delta, Frequency frequency) { + return frequency * time_delta; +} + std::string ToString(Frequency value); inline std::string ToLogString(Frequency value) { return ToString(value); diff --git a/api/units/frequency_unittest.cc b/api/units/frequency_unittest.cc index cabfdfaf4b..16a7e1bb85 100644 --- a/api/units/frequency_unittest.cc +++ b/api/units/frequency_unittest.cc @@ -154,6 +154,7 @@ TEST(FrequencyTest, InfinityOperations) { TEST(UnitConversionTest, TimeDeltaAndFrequency) { EXPECT_EQ(1 / Frequency::hertz(50), TimeDelta::ms(20)); EXPECT_EQ(1 / TimeDelta::ms(20), Frequency::hertz(50)); + EXPECT_EQ(Frequency::kHz(200) * TimeDelta::ms(2), 400.0); } } // namespace test } // namespace webrtc