Common: Add a NullAudioStream implementation

This commit is contained in:
Connor McLaughlin 2019-12-23 17:02:11 +10:00
parent c8d3b2c546
commit ed7aabe5f2
9 changed files with 51 additions and 1 deletions

View file

@ -20,6 +20,8 @@ add_library(common
iso_reader.h
jit_code_buffer.cpp
jit_code_buffer.h
null_audio_stream.cpp
null_audio_stream.h
rectangle.h
state_wrapper.cpp
state_wrapper.h

View file

@ -97,6 +97,7 @@ void AudioStream::WriteSamples(const SampleType* samples, u32 num_samples)
m_num_free_buffers--;
m_first_free_buffer = (m_first_free_buffer + 1) % m_buffers.size();
m_num_available_buffers++;
BufferAvailable();
}
}
}
@ -116,6 +117,7 @@ void AudioStream::EndWrite(u32 num_samples)
m_num_free_buffers--;
m_first_free_buffer = (m_first_free_buffer + 1) % m_buffers.size();
m_num_available_buffers++;
BufferAvailable();
}
m_buffer_mutex.unlock();

View file

@ -45,11 +45,14 @@ protected:
virtual bool OpenDevice() = 0;
virtual void PauseDevice(bool paused) = 0;
virtual void CloseDevice() = 0;
virtual void BufferAvailable() = 0;
bool IsDeviceOpen() const { return (m_output_sample_rate > 0); }
u32 ReadSamples(SampleType* samples, u32 num_samples);
void DropBuffer();
u32 m_output_sample_rate = 0;
u32 m_channels = 0;
u32 m_buffer_size = 0;
@ -64,7 +67,6 @@ private:
void AllocateBuffers(u32 buffer_count);
void EnsureBuffer();
void DropBuffer();
std::vector<Buffer> m_buffers;
std::mutex m_buffer_mutex;

View file

@ -49,6 +49,7 @@
<ClInclude Include="heap_array.h" />
<ClInclude Include="iso_reader.h" />
<ClInclude Include="jit_code_buffer.h" />
<ClInclude Include="null_audio_stream.h" />
<ClInclude Include="rectangle.h" />
<ClInclude Include="cd_subchannel_replacement.h" />
<ClInclude Include="state_wrapper.h" />
@ -70,6 +71,7 @@
<ClCompile Include="iso_reader.cpp" />
<ClCompile Include="jit_code_buffer.cpp" />
<ClCompile Include="cd_subchannel_replacement.cpp" />
<ClCompile Include="null_audio_stream.cpp" />
<ClCompile Include="state_wrapper.cpp" />
<ClCompile Include="cd_xa.cpp" />
</ItemGroup>

View file

@ -34,6 +34,7 @@
<ClInclude Include="iso_reader.h" />
<ClInclude Include="cd_image.h" />
<ClInclude Include="cd_subchannel_replacement.h" />
<ClInclude Include="null_audio_stream.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="jit_code_buffer.cpp" />
@ -66,6 +67,7 @@
</ClCompile>
<ClCompile Include="iso_reader.cpp" />
<ClCompile Include="cd_subchannel_replacement.cpp" />
<ClCompile Include="null_audio_stream.cpp" />
</ItemGroup>
<ItemGroup>
<Natvis Include="bitfield.natvis" />

View file

@ -0,0 +1,20 @@
#include "null_audio_stream.h"
NullAudioStream::NullAudioStream() = default;
NullAudioStream::~NullAudioStream() = default;
bool NullAudioStream::OpenDevice()
{
return true;
}
void NullAudioStream::PauseDevice(bool paused) {}
void NullAudioStream::CloseDevice() {}
void NullAudioStream::BufferAvailable()
{
// drop any buffer as soon as they're available
DropBuffer();
}

View file

@ -0,0 +1,17 @@
#pragma once
#include "audio_stream.h"
class NullAudioStream final : public AudioStream
{
public:
NullAudioStream();
~NullAudioStream();
static std::unique_ptr<AudioStream> Create();
protected:
bool OpenDevice() override;
void PauseDevice(bool paused) override;
void CloseDevice() override;
void BufferAvailable() override;
};

View file

@ -59,3 +59,5 @@ void SDLAudioStream::AudioCallback(void* userdata, uint8_t* stream, int len)
silence_samples * this_ptr->m_channels * sizeof(SampleType));
}
}
void SDLAudioStream::BufferAvailable() {}

View file

@ -12,6 +12,7 @@ protected:
bool OpenDevice() override;
void PauseDevice(bool paused) override;
void CloseDevice() override;
void BufferAvailable() override;
static void AudioCallback(void* userdata, uint8_t* stream, int len);