mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-03-06 14:27:44 +00:00
Common: Add a NullAudioStream implementation
This commit is contained in:
parent
c8d3b2c546
commit
ed7aabe5f2
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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" />
|
||||
|
|
20
src/common/null_audio_stream.cpp
Normal file
20
src/common/null_audio_stream.cpp
Normal 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();
|
||||
}
|
17
src/common/null_audio_stream.h
Normal file
17
src/common/null_audio_stream.h
Normal 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;
|
||||
};
|
|
@ -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() {}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue