1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:07:45 +00:00

LibAudio+LibCore: Remove unnecessary IODeviceStreamReader.h

IODeviceStreamReader isn't pulling its weight.
It's essentially a subset of InputFileStream with only one user
(WavLoader).

This refactors WavLoader to use InputFileStream instead.
This commit is contained in:
Nick Miller 2021-06-05 09:38:43 -07:00 committed by Ali Mohammad Pur
parent 06ea31d0d5
commit 3938b56577
3 changed files with 21 additions and 85 deletions

View file

@ -11,7 +11,7 @@
#include <LibAudio/Buffer.h> #include <LibAudio/Buffer.h>
#include <LibAudio/WavLoader.h> #include <LibAudio/WavLoader.h>
#include <LibCore/File.h> #include <LibCore/File.h>
#include <LibCore/IODeviceStreamReader.h> #include <LibCore/FileStream.h>
namespace Audio { namespace Audio {
@ -47,11 +47,6 @@ WavLoaderPlugin::WavLoaderPlugin(const ByteBuffer& buffer)
m_resampler = make<ResampleHelper>(m_sample_rate, 44100); m_resampler = make<ResampleHelper>(m_sample_rate, 44100);
} }
bool WavLoaderPlugin::sniff()
{
return valid;
}
RefPtr<Buffer> WavLoaderPlugin::get_more_samples(size_t max_bytes_to_read_from_input) RefPtr<Buffer> WavLoaderPlugin::get_more_samples(size_t max_bytes_to_read_from_input)
{ {
dbgln_if(AWAVLOADER_DEBUG, "Read {} bytes WAV with num_channels {} sample rate {}, " dbgln_if(AWAVLOADER_DEBUG, "Read {} bytes WAV with num_channels {} sample rate {}, "
@ -89,58 +84,40 @@ void WavLoaderPlugin::seek(const int position)
m_stream->seek(byte_position); m_stream->seek(byte_position);
} }
void WavLoaderPlugin::reset()
{
seek(0);
}
bool WavLoaderPlugin::parse_header() bool WavLoaderPlugin::parse_header()
{ {
OwnPtr<Core::IODeviceStreamReader> file_stream; OwnPtr<Core::InputFileStream> file_stream;
bool ok = true;
if (m_file) if (m_file)
file_stream = make<Core::IODeviceStreamReader>(*m_file); file_stream = make<Core::InputFileStream>(*m_file);
AK::InputStream* const stream =
(m_file ?
file_stream.ptr() :
dynamic_cast<AK::InputStream*>(m_stream.ptr()));
bool ok = true;
auto read_u8 = [&]() -> u8 { auto read_u8 = [&]() -> u8 {
u8 value; u8 value;
if (m_file) { *stream >> value;
*file_stream >> value; if (stream->handle_any_error())
if (file_stream->handle_read_failure())
ok = false; ok = false;
} else {
*m_stream >> value;
if (m_stream->handle_any_error())
ok = false;
}
return value; return value;
}; };
auto read_u16 = [&]() -> u16 { auto read_u16 = [&]() -> u16 {
u16 value; u16 value;
if (m_file) { *stream >> value;
*file_stream >> value; if (stream->handle_any_error())
if (file_stream->handle_read_failure())
ok = false; ok = false;
} else {
*m_stream >> value;
if (m_stream->handle_any_error())
ok = false;
}
return value; return value;
}; };
auto read_u32 = [&]() -> u32 { auto read_u32 = [&]() -> u32 {
u32 value; u32 value;
if (m_file) { *stream >> value;
*file_stream >> value; if (stream->handle_any_error())
if (file_stream->handle_read_failure())
ok = false; ok = false;
} else {
*m_stream >> value;
if (m_stream->handle_any_error())
ok = false;
}
return value; return value;
}; };

View file

@ -33,14 +33,14 @@ public:
WavLoaderPlugin(const StringView& path); WavLoaderPlugin(const StringView& path);
WavLoaderPlugin(const ByteBuffer& buffer); WavLoaderPlugin(const ByteBuffer& buffer);
virtual bool sniff() override; virtual bool sniff() override { return valid; }
virtual bool has_error() override { return !m_error_string.is_null(); } virtual bool has_error() override { return !m_error_string.is_null(); }
virtual const char* error_string() override { return m_error_string.characters(); } virtual const char* error_string() override { return m_error_string.characters(); }
virtual RefPtr<Buffer> get_more_samples(size_t max_bytes_to_read_from_input = 128 * KiB) override; virtual RefPtr<Buffer> get_more_samples(size_t max_bytes_to_read_from_input = 128 * KiB) override;
virtual void reset() override; virtual void reset() override { return seek(0); }
virtual void seek(const int position) override; virtual void seek(const int position) override;
virtual int loaded_samples() override { return m_loaded_samples; } virtual int loaded_samples() override { return m_loaded_samples; }

View file

@ -1,41 +0,0 @@
/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/StdLibExtras.h>
#include <LibCore/IODevice.h>
namespace Core {
class IODeviceStreamReader {
public:
IODeviceStreamReader(IODevice& device)
: m_device(device)
{
}
bool handle_read_failure()
{
return exchange(m_had_failure, false);
}
template<typename T>
IODeviceStreamReader& operator>>(T& value)
{
int nread = m_device.read((u8*)&value, sizeof(T));
VERIFY(nread == sizeof(T));
if (nread != sizeof(T))
m_had_failure = true;
return *this;
}
private:
IODevice& m_device;
bool m_had_failure { false };
};
}