mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-02 20:42:11 +02:00
`IncrementallyPopulatedStream::Cursor` now tracks whether it's currently blocked inside a wait for more bytes, allowing higher layers to distinguish "no frames yet" from "decoder is idle". Enter buffering when `DisplayingVideoSink` runs out of frames and the associated `VideoDataProvider` is blocked waiting for data to arrive. Exit buffering once decoding refills the frame queue. For now, buffering behaves like paused, but it gives us an explicit state to hook UI into.
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2025, Gregory Bertilson <zaggy1024@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibMedia/PlaybackManager.h>
|
|
#include <LibMedia/PlaybackStates/BufferingStateHandler.h>
|
|
#include <LibMedia/PlaybackStates/Forward.h>
|
|
#include <LibMedia/PlaybackStates/PausedStateHandler.h>
|
|
|
|
namespace Media {
|
|
|
|
class PlayingStateHandler final : public PlaybackStateHandler {
|
|
public:
|
|
PlayingStateHandler(PlaybackManager& manager)
|
|
: PlaybackStateHandler(manager)
|
|
{
|
|
}
|
|
virtual ~PlayingStateHandler() override = default;
|
|
|
|
virtual void on_enter() override
|
|
{
|
|
manager().m_time_provider->resume();
|
|
}
|
|
virtual void on_exit() override
|
|
{
|
|
manager().m_time_provider->pause();
|
|
}
|
|
|
|
virtual void play() override { }
|
|
virtual void pause() override
|
|
{
|
|
manager().replace_state_handler<PausedStateHandler>();
|
|
}
|
|
|
|
virtual bool is_playing() override
|
|
{
|
|
return true;
|
|
}
|
|
virtual PlaybackState state() override
|
|
{
|
|
return PlaybackState::Playing;
|
|
}
|
|
|
|
virtual void enter_buffering() override
|
|
{
|
|
manager().replace_state_handler<BufferingStateHandler>(true);
|
|
}
|
|
virtual void exit_buffering() override { }
|
|
};
|
|
|
|
}
|