2025-09-25 17:15:13 -03:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2025, Gregory Bertilson <gregory@ladybird.org>
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "GenericTimeProvider.h"
|
|
|
|
|
|
|
|
|
|
namespace Media {
|
|
|
|
|
|
|
|
|
|
GenericTimeProvider::GenericTimeProvider() = default;
|
|
|
|
|
|
|
|
|
|
GenericTimeProvider::~GenericTimeProvider() = default;
|
|
|
|
|
|
|
|
|
|
AK::Duration GenericTimeProvider::current_time() const
|
|
|
|
|
{
|
|
|
|
|
auto time = m_media_time;
|
2026-06-03 08:37:23 -03:00
|
|
|
if (m_monotonic_time_on_resume.has_value()) {
|
|
|
|
|
auto elapsed = MonotonicTime::now() - m_monotonic_time_on_resume.value();
|
|
|
|
|
if (m_playback_rate != 1.0f)
|
|
|
|
|
elapsed = AK::Duration::from_seconds_f64(elapsed.to_seconds_f64() * m_playback_rate);
|
|
|
|
|
time += elapsed;
|
|
|
|
|
}
|
2025-09-25 17:15:13 -03:00
|
|
|
return time;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GenericTimeProvider::resume()
|
|
|
|
|
{
|
|
|
|
|
m_monotonic_time_on_resume.emplace(MonotonicTime::now());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GenericTimeProvider::pause()
|
|
|
|
|
{
|
|
|
|
|
if (!m_monotonic_time_on_resume.has_value())
|
|
|
|
|
return;
|
|
|
|
|
m_media_time = current_time();
|
|
|
|
|
m_monotonic_time_on_resume = {};
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-26 16:59:19 -03:00
|
|
|
void GenericTimeProvider::seek(AK::Duration time)
|
2025-09-25 17:15:13 -03:00
|
|
|
{
|
|
|
|
|
if (m_monotonic_time_on_resume.has_value())
|
|
|
|
|
m_monotonic_time_on_resume.emplace(MonotonicTime::now());
|
|
|
|
|
|
|
|
|
|
m_media_time = time;
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-03 08:37:23 -03:00
|
|
|
void GenericTimeProvider::set_playback_rate(float rate)
|
|
|
|
|
{
|
|
|
|
|
VERIFY(rate >= 0);
|
|
|
|
|
if (m_playback_rate == rate)
|
|
|
|
|
return;
|
|
|
|
|
if (m_monotonic_time_on_resume.has_value()) {
|
|
|
|
|
m_media_time = current_time();
|
|
|
|
|
m_monotonic_time_on_resume.emplace(MonotonicTime::now());
|
|
|
|
|
}
|
|
|
|
|
m_playback_rate = rate;
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-25 17:15:13 -03:00
|
|
|
}
|