mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-04 23:19:27 +00:00
LibVideo: Remove hook to override LibVideo's playback timers
This was added to allow Ladybird to override the timers with Qt timers.
This commit is contained in:
parent
78ad471367
commit
374a24d84c
|
@ -25,39 +25,19 @@ namespace Video {
|
|||
_fatal_expression.release_value(); \
|
||||
})
|
||||
|
||||
class DefaultPlaybackTimer final : public PlaybackTimer {
|
||||
public:
|
||||
static ErrorOr<NonnullOwnPtr<DefaultPlaybackTimer>> create(int interval_ms, Function<void()>&& timeout_handler)
|
||||
{
|
||||
auto timer = TRY(Core::Timer::create_single_shot(interval_ms, move(timeout_handler)));
|
||||
return adopt_nonnull_own_or_enomem(new (nothrow) DefaultPlaybackTimer(move(timer)));
|
||||
}
|
||||
|
||||
virtual void start() override { m_timer->start(); }
|
||||
virtual void start(int interval_ms) override { m_timer->start(interval_ms); }
|
||||
|
||||
private:
|
||||
explicit DefaultPlaybackTimer(NonnullRefPtr<Core::Timer> timer)
|
||||
: m_timer(move(timer))
|
||||
{
|
||||
}
|
||||
|
||||
NonnullRefPtr<Core::Timer> m_timer;
|
||||
};
|
||||
|
||||
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_file(StringView filename, PlaybackTimerCreator playback_timer_creator)
|
||||
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_file(StringView filename)
|
||||
{
|
||||
auto demuxer = TRY(Matroska::MatroskaDemuxer::from_file(filename));
|
||||
return create_with_demuxer(move(demuxer), move(playback_timer_creator));
|
||||
return create_with_demuxer(move(demuxer));
|
||||
}
|
||||
|
||||
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_data(ReadonlyBytes data, PlaybackTimerCreator playback_timer_creator)
|
||||
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_data(ReadonlyBytes data)
|
||||
{
|
||||
auto demuxer = TRY(Matroska::MatroskaDemuxer::from_data(data));
|
||||
return create_with_demuxer(move(demuxer), move(playback_timer_creator));
|
||||
return create_with_demuxer(move(demuxer));
|
||||
}
|
||||
|
||||
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::create_with_demuxer(NonnullOwnPtr<Demuxer> demuxer, PlaybackTimerCreator playback_timer_creator)
|
||||
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::create_with_demuxer(NonnullOwnPtr<Demuxer> demuxer)
|
||||
{
|
||||
auto video_tracks = TRY(demuxer->get_tracks_for_type(TrackType::Video));
|
||||
if (video_tracks.is_empty())
|
||||
|
@ -66,27 +46,24 @@ DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::create_with_demu
|
|||
|
||||
dbgln_if(PLAYBACK_MANAGER_DEBUG, "Selecting video track number {}", track.identifier());
|
||||
|
||||
return make<PlaybackManager>(demuxer, track, make<VP9::Decoder>(), move(playback_timer_creator));
|
||||
return make<PlaybackManager>(demuxer, track, make<VP9::Decoder>());
|
||||
}
|
||||
|
||||
PlaybackManager::PlaybackManager(NonnullOwnPtr<Demuxer>& demuxer, Track video_track, NonnullOwnPtr<VideoDecoder>&& decoder, PlaybackTimerCreator playback_timer_creator)
|
||||
PlaybackManager::PlaybackManager(NonnullOwnPtr<Demuxer>& demuxer, Track video_track, NonnullOwnPtr<VideoDecoder>&& decoder)
|
||||
: m_demuxer(move(demuxer))
|
||||
, m_selected_video_track(video_track)
|
||||
, m_decoder(move(decoder))
|
||||
, m_frame_queue(make<VideoFrameQueue>())
|
||||
, m_playback_handler(make<SeekingStateHandler>(*this, false, Time::zero(), SeekMode::Fast))
|
||||
{
|
||||
if (playback_timer_creator) {
|
||||
m_present_timer = playback_timer_creator(0, [&] { timer_callback(); }).release_value_but_fixme_should_propagate_errors();
|
||||
m_decode_timer = playback_timer_creator(0, [&] { on_decode_timer(); }).release_value_but_fixme_should_propagate_errors();
|
||||
} else {
|
||||
m_present_timer = DefaultPlaybackTimer::create(0, [&] { timer_callback(); }).release_value_but_fixme_should_propagate_errors();
|
||||
m_decode_timer = DefaultPlaybackTimer::create(0, [&] { on_decode_timer(); }).release_value_but_fixme_should_propagate_errors();
|
||||
}
|
||||
m_present_timer = Core::Timer::create_single_shot(0, [&] { timer_callback(); }).release_value_but_fixme_should_propagate_errors();
|
||||
m_decode_timer = Core::Timer::create_single_shot(0, [&] { on_decode_timer(); }).release_value_but_fixme_should_propagate_errors();
|
||||
|
||||
TRY_OR_FATAL_ERROR(m_playback_handler->on_enter());
|
||||
}
|
||||
|
||||
PlaybackManager::~PlaybackManager() = default;
|
||||
|
||||
void PlaybackManager::resume_playback()
|
||||
{
|
||||
dbgln_if(PLAYBACK_MANAGER_DEBUG, "Resuming playback.");
|
||||
|
|
|
@ -83,14 +83,6 @@ private:
|
|||
static constexpr size_t FRAME_BUFFER_COUNT = 4;
|
||||
using VideoFrameQueue = Queue<FrameQueueItem, FRAME_BUFFER_COUNT>;
|
||||
|
||||
class PlaybackTimer {
|
||||
public:
|
||||
virtual ~PlaybackTimer() = default;
|
||||
|
||||
virtual void start() = 0;
|
||||
virtual void start(int interval_ms) = 0;
|
||||
};
|
||||
|
||||
enum class PlaybackState {
|
||||
Playing,
|
||||
Paused,
|
||||
|
@ -108,12 +100,11 @@ public:
|
|||
|
||||
static constexpr SeekMode DEFAULT_SEEK_MODE = SeekMode::Accurate;
|
||||
|
||||
using PlaybackTimerCreator = Function<ErrorOr<NonnullOwnPtr<PlaybackTimer>>(int, Function<void()>)>;
|
||||
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_file(StringView file);
|
||||
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_data(ReadonlyBytes data);
|
||||
|
||||
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_file(StringView file, PlaybackTimerCreator = nullptr);
|
||||
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_data(ReadonlyBytes data, PlaybackTimerCreator = nullptr);
|
||||
|
||||
PlaybackManager(NonnullOwnPtr<Demuxer>& demuxer, Track video_track, NonnullOwnPtr<VideoDecoder>&& decoder, PlaybackTimerCreator);
|
||||
PlaybackManager(NonnullOwnPtr<Demuxer>& demuxer, Track video_track, NonnullOwnPtr<VideoDecoder>&& decoder);
|
||||
~PlaybackManager();
|
||||
|
||||
void resume_playback();
|
||||
void pause_playback();
|
||||
|
@ -150,7 +141,7 @@ private:
|
|||
class SeekingStateHandler;
|
||||
class StoppedStateHandler;
|
||||
|
||||
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> create_with_demuxer(NonnullOwnPtr<Demuxer> demuxer, PlaybackTimerCreator playback_timer_creator);
|
||||
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> create_with_demuxer(NonnullOwnPtr<Demuxer> demuxer);
|
||||
|
||||
void start_timer(int milliseconds);
|
||||
void timer_callback();
|
||||
|
@ -174,10 +165,10 @@ private:
|
|||
|
||||
NonnullOwnPtr<VideoFrameQueue> m_frame_queue;
|
||||
|
||||
OwnPtr<PlaybackTimer> m_present_timer;
|
||||
RefPtr<Core::Timer> m_present_timer;
|
||||
unsigned m_decoding_buffer_time_ms = 16;
|
||||
|
||||
OwnPtr<PlaybackTimer> m_decode_timer;
|
||||
RefPtr<Core::Timer> m_decode_timer;
|
||||
|
||||
NonnullOwnPtr<PlaybackStateHandler> m_playback_handler;
|
||||
Optional<FrameQueueItem> m_next_frame;
|
||||
|
|
Loading…
Reference in a new issue