LibMedia: Remove WrapperTimeProvider in favor of diamond inheritance
This commit is contained in:
parent
dd626013b9
commit
5d761397da
6 changed files with 29 additions and 45 deletions
18
Libraries/LibMedia/MediaPipelineNode.h
Normal file
18
Libraries/LibMedia/MediaPipelineNode.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright (c) 2026-present, the Ladybird developers.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/AtomicRefCounted.h>
|
||||
|
||||
namespace Media {
|
||||
|
||||
class MediaPipelineNode : public AtomicRefCounted<MediaPipelineNode> {
|
||||
public:
|
||||
virtual ~MediaPipelineNode() = default;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -11,7 +11,6 @@
|
|||
#include <LibMedia/Providers/AudioDataProvider.h>
|
||||
#include <LibMedia/Providers/GenericTimeProvider.h>
|
||||
#include <LibMedia/Providers/VideoDataProvider.h>
|
||||
#include <LibMedia/Providers/WrapperTimeProvider.h>
|
||||
#include <LibMedia/Sinks/AudioMixingSink.h>
|
||||
#include <LibMedia/Sinks/DisplayingVideoSink.h>
|
||||
#include <LibMedia/Track.h>
|
||||
|
|
@ -117,7 +116,7 @@ DecoderErrorOr<void> PlaybackManager::prepare_playback_from_demuxer(WeakPlayback
|
|||
|
||||
if (!self->m_audio_output_disabled && !self->m_audio_sink && !self->m_audio_tracks.is_empty()) {
|
||||
self->m_audio_sink = MUST(AudioMixingSink::try_create());
|
||||
self->set_time_provider(make_ref_counted<WrapperTimeProvider<AudioMixingSink>>(*self->m_audio_sink));
|
||||
self->set_time_provider(*self->m_audio_sink);
|
||||
self->m_audio_sink->on_audio_output_error = [self](Error&& error) {
|
||||
if (!self)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/AtomicRefCounted.h>
|
||||
#include <AK/Time.h>
|
||||
#include <LibMedia/MediaPipelineNode.h>
|
||||
|
||||
namespace Media {
|
||||
|
||||
class MediaTimeProvider : public AtomicRefCounted<MediaTimeProvider> {
|
||||
class MediaTimeProvider : public virtual MediaPipelineNode {
|
||||
public:
|
||||
virtual ~MediaTimeProvider() = default;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2025, Gregory Bertilson <gregory@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibMedia/Providers/MediaTimeProvider.h>
|
||||
|
||||
namespace Media {
|
||||
|
||||
template<typename T>
|
||||
class WrapperTimeProvider final : public MediaTimeProvider {
|
||||
public:
|
||||
WrapperTimeProvider(T& inner)
|
||||
: m_inner(inner)
|
||||
{
|
||||
}
|
||||
virtual ~WrapperTimeProvider() override = default;
|
||||
|
||||
virtual AK::Duration current_time() const override { return m_inner->current_time(); }
|
||||
virtual void resume() override { m_inner->resume(); }
|
||||
virtual void pause() override { m_inner->pause(); }
|
||||
virtual void set_time(AK::Duration time) override { m_inner->set_time(time); }
|
||||
|
||||
private:
|
||||
NonnullRefPtr<T> m_inner;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -18,7 +18,8 @@
|
|||
|
||||
namespace Media {
|
||||
|
||||
class MEDIA_API AudioMixingSink final : public AudioSink {
|
||||
class MEDIA_API AudioMixingSink final : public AudioSink
|
||||
, public MediaTimeProvider {
|
||||
class AudioMixingSinkWeakReference;
|
||||
|
||||
private:
|
||||
|
|
@ -32,13 +33,10 @@ public:
|
|||
virtual void set_provider(Track const&, RefPtr<AudioDataProvider> const&) override;
|
||||
virtual RefPtr<AudioDataProvider> provider(Track const&) const override;
|
||||
|
||||
// This section implements the pure virtuals in MediaTimeProvider.
|
||||
// AudioMixingSink cannot inherit from MediaTimeProvider, as AudioSink and MediaTimeProvider both inherit from
|
||||
// AtomicRefCounted. In order to use AudioMixingSink as a MediaTimeProvider, wrap it with WrapperTimeProvider.
|
||||
AK::Duration current_time() const;
|
||||
void resume();
|
||||
void pause();
|
||||
void set_time(AK::Duration);
|
||||
virtual AK::Duration current_time() const override;
|
||||
virtual void resume() override;
|
||||
virtual void pause() override;
|
||||
virtual void set_time(AK::Duration) override;
|
||||
|
||||
void set_volume(double);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/AtomicRefCounted.h>
|
||||
#include <LibMedia/AudioBlock.h>
|
||||
#include <LibMedia/Export.h>
|
||||
#include <LibMedia/Forward.h>
|
||||
#include <LibMedia/MediaPipelineNode.h>
|
||||
#include <LibMedia/Track.h>
|
||||
|
||||
namespace Media {
|
||||
|
||||
class MEDIA_API AudioSink : public AtomicRefCounted<AudioSink> {
|
||||
class MEDIA_API AudioSink : public virtual MediaPipelineNode {
|
||||
public:
|
||||
virtual ~AudioSink() = default;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue