diff --git a/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp b/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp index 6ec2a531f50..b2491494b1f 100644 --- a/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp +++ b/Userland/Libraries/LibWeb/HTML/AudioTrack.cpp @@ -37,6 +37,10 @@ AudioTrack::AudioTrack(JS::Realm& realm, JS::NonnullGCPtr medi auto playback_position = static_cast(position.to_milliseconds()) / 1000.0; m_media_element->set_current_playback_position(playback_position); }; + + m_audio_plugin->on_decoder_error = [this](String error_message) { + m_media_element->set_decoder_error(error_message).release_value_but_fixme_should_propagate_errors(); + }; } AudioTrack::~AudioTrack() diff --git a/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h b/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h index 4e6b2996493..7cf0a540347 100644 --- a/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h +++ b/Userland/Libraries/LibWeb/Platform/AudioCodecPlugin.h @@ -35,6 +35,7 @@ public: virtual Duration duration() = 0; Function on_playback_position_updated; + Function on_decoder_error; protected: AudioCodecPlugin(); diff --git a/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp b/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp index 0f50d1b9966..e0cd413bb4d 100644 --- a/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp +++ b/Userland/Libraries/LibWeb/Platform/AudioCodecPluginAgnostic.cpp @@ -43,8 +43,17 @@ ErrorOr> AudioCodecPluginAgnostic::creat Audio::OutputState::Suspended, loader->sample_rate(), /* channels = */ 2, latency_ms, [&plugin = *plugin, loader](Bytes buffer, Audio::PcmSampleFormat format, size_t sample_count) -> ReadonlyBytes { VERIFY(format == Audio::PcmSampleFormat::Float32); - auto samples = loader->get_more_samples(sample_count).release_value_but_fixme_should_propagate_errors(); + + auto samples_result = loader->get_more_samples(sample_count); + + if (samples_result.is_error()) { + plugin.on_decoder_error(MUST(String::formatted("Decoding failure: {}", samples_result.error()))); + return buffer.trim(0); + } + + auto samples = samples_result.release_value(); VERIFY(samples.size() <= sample_count); + FixedMemoryStream writing_stream { buffer }; for (auto& sample : samples) {