Prefix all size_t with std::
done automatically by executing regex replace `([^:0-9a-zA-Z_])size_t([^0-9a-zA-Z_])` -> `$1std::size_t$2`
This commit is contained in:
parent
eca98eeb3e
commit
7d8f115185
158 changed files with 669 additions and 634 deletions
|
@ -26,7 +26,7 @@ using QuadFrame32 = std::array<std::array<s32, 4>, samples_per_frame>;
|
|||
/// A variable length buffer of signed PCM16 stereo samples.
|
||||
using StereoBuffer16 = std::deque<std::array<s16, 2>>;
|
||||
|
||||
constexpr size_t num_dsp_pipe = 8;
|
||||
constexpr std::size_t num_dsp_pipe = 8;
|
||||
enum class DspPipe {
|
||||
Debug = 0,
|
||||
Dma = 1,
|
||||
|
|
|
@ -14,26 +14,26 @@
|
|||
namespace AudioCore {
|
||||
namespace Codec {
|
||||
|
||||
StereoBuffer16 DecodeADPCM(const u8* const data, const size_t sample_count,
|
||||
StereoBuffer16 DecodeADPCM(const u8* const data, const std::size_t sample_count,
|
||||
const std::array<s16, 16>& adpcm_coeff, ADPCMState& state) {
|
||||
// GC-ADPCM with scale factor and variable coefficients.
|
||||
// Frames are 8 bytes long containing 14 samples each.
|
||||
// Samples are 4 bits (one nibble) long.
|
||||
|
||||
constexpr size_t FRAME_LEN = 8;
|
||||
constexpr size_t SAMPLES_PER_FRAME = 14;
|
||||
constexpr std::size_t FRAME_LEN = 8;
|
||||
constexpr std::size_t SAMPLES_PER_FRAME = 14;
|
||||
constexpr std::array<int, 16> SIGNED_NIBBLES = {
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, -8, -7, -6, -5, -4, -3, -2, -1}};
|
||||
|
||||
const size_t ret_size =
|
||||
const std::size_t ret_size =
|
||||
sample_count % 2 == 0 ? sample_count : sample_count + 1; // Ensure multiple of two.
|
||||
StereoBuffer16 ret(ret_size);
|
||||
|
||||
int yn1 = state.yn1, yn2 = state.yn2;
|
||||
|
||||
const size_t NUM_FRAMES =
|
||||
const std::size_t NUM_FRAMES =
|
||||
(sample_count + (SAMPLES_PER_FRAME - 1)) / SAMPLES_PER_FRAME; // Round up.
|
||||
for (size_t framei = 0; framei < NUM_FRAMES; framei++) {
|
||||
for (std::size_t framei = 0; framei < NUM_FRAMES; framei++) {
|
||||
const int frame_header = data[framei * FRAME_LEN];
|
||||
const int scale = 1 << (frame_header & 0xF);
|
||||
const int idx = (frame_header >> 4) & 0x7;
|
||||
|
@ -58,9 +58,9 @@ StereoBuffer16 DecodeADPCM(const u8* const data, const size_t sample_count,
|
|||
return (s16)val;
|
||||
};
|
||||
|
||||
size_t outputi = framei * SAMPLES_PER_FRAME;
|
||||
size_t datai = framei * FRAME_LEN + 1;
|
||||
for (size_t i = 0; i < SAMPLES_PER_FRAME && outputi < sample_count; i += 2) {
|
||||
std::size_t outputi = framei * SAMPLES_PER_FRAME;
|
||||
std::size_t datai = framei * FRAME_LEN + 1;
|
||||
for (std::size_t i = 0; i < SAMPLES_PER_FRAME && outputi < sample_count; i += 2) {
|
||||
const s16 sample1 = decode_sample(SIGNED_NIBBLES[data[datai] >> 4]);
|
||||
ret[outputi].fill(sample1);
|
||||
outputi++;
|
||||
|
@ -80,7 +80,7 @@ StereoBuffer16 DecodeADPCM(const u8* const data, const size_t sample_count,
|
|||
}
|
||||
|
||||
StereoBuffer16 DecodePCM8(const unsigned num_channels, const u8* const data,
|
||||
const size_t sample_count) {
|
||||
const std::size_t sample_count) {
|
||||
ASSERT(num_channels == 1 || num_channels == 2);
|
||||
|
||||
const auto decode_sample = [](u8 sample) {
|
||||
|
@ -90,11 +90,11 @@ StereoBuffer16 DecodePCM8(const unsigned num_channels, const u8* const data,
|
|||
StereoBuffer16 ret(sample_count);
|
||||
|
||||
if (num_channels == 1) {
|
||||
for (size_t i = 0; i < sample_count; i++) {
|
||||
for (std::size_t i = 0; i < sample_count; i++) {
|
||||
ret[i].fill(decode_sample(data[i]));
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < sample_count; i++) {
|
||||
for (std::size_t i = 0; i < sample_count; i++) {
|
||||
ret[i][0] = decode_sample(data[i * 2 + 0]);
|
||||
ret[i][1] = decode_sample(data[i * 2 + 1]);
|
||||
}
|
||||
|
@ -104,19 +104,19 @@ StereoBuffer16 DecodePCM8(const unsigned num_channels, const u8* const data,
|
|||
}
|
||||
|
||||
StereoBuffer16 DecodePCM16(const unsigned num_channels, const u8* const data,
|
||||
const size_t sample_count) {
|
||||
const std::size_t sample_count) {
|
||||
ASSERT(num_channels == 1 || num_channels == 2);
|
||||
|
||||
StereoBuffer16 ret(sample_count);
|
||||
|
||||
if (num_channels == 1) {
|
||||
for (size_t i = 0; i < sample_count; i++) {
|
||||
for (std::size_t i = 0; i < sample_count; i++) {
|
||||
s16 sample;
|
||||
std::memcpy(&sample, data + i * sizeof(s16), sizeof(s16));
|
||||
ret[i].fill(sample);
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < sample_count; ++i) {
|
||||
for (std::size_t i = 0; i < sample_count; ++i) {
|
||||
std::memcpy(&ret[i], data + i * sizeof(s16) * 2, 2 * sizeof(s16));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ struct ADPCMState {
|
|||
* @param state ADPCM state, this is updated with new state
|
||||
* @return Decoded stereo signed PCM16 data, sample_count in length
|
||||
*/
|
||||
StereoBuffer16 DecodeADPCM(const u8* const data, const size_t sample_count,
|
||||
StereoBuffer16 DecodeADPCM(const u8* const data, const std::size_t sample_count,
|
||||
const std::array<s16, 16>& adpcm_coeff, ADPCMState& state);
|
||||
|
||||
/**
|
||||
|
@ -36,7 +36,7 @@ StereoBuffer16 DecodeADPCM(const u8* const data, const size_t sample_count,
|
|||
* @return Decoded stereo signed PCM16 data, sample_count in length
|
||||
*/
|
||||
StereoBuffer16 DecodePCM8(const unsigned num_channels, const u8* const data,
|
||||
const size_t sample_count);
|
||||
const std::size_t sample_count);
|
||||
|
||||
/**
|
||||
* @param num_channels Number of channels
|
||||
|
@ -45,6 +45,6 @@ StereoBuffer16 DecodePCM8(const unsigned num_channels, const u8* const data,
|
|||
* @return Decoded stereo signed PCM16 data, sample_count in length
|
||||
*/
|
||||
StereoBuffer16 DecodePCM16(const unsigned num_channels, const u8* const data,
|
||||
const size_t sample_count);
|
||||
const std::size_t sample_count);
|
||||
} // namespace Codec
|
||||
} // namespace AudioCore
|
||||
|
|
|
@ -95,7 +95,7 @@ unsigned int CubebSink::GetNativeSampleRate() const {
|
|||
return impl->sample_rate;
|
||||
}
|
||||
|
||||
void CubebSink::EnqueueSamples(const s16* samples, size_t sample_count) {
|
||||
void CubebSink::EnqueueSamples(const s16* samples, std::size_t sample_count) {
|
||||
if (!impl->ctx)
|
||||
return;
|
||||
|
||||
|
@ -123,7 +123,8 @@ long CubebSink::Impl::DataCallback(cubeb_stream* stream, void* user_data, const
|
|||
|
||||
std::lock_guard lock{impl->queue_mutex};
|
||||
|
||||
size_t frames_to_write = std::min(impl->queue.size() / 2, static_cast<size_t>(num_frames));
|
||||
std::size_t frames_to_write =
|
||||
std::min(impl->queue.size() / 2, static_cast<std::size_t>(num_frames));
|
||||
|
||||
memcpy(buffer, impl->queue.data(), frames_to_write * sizeof(s16) * 2);
|
||||
impl->queue.erase(impl->queue.begin(), impl->queue.begin() + frames_to_write * 2);
|
||||
|
@ -152,7 +153,7 @@ std::vector<std::string> ListCubebSinkDevices() {
|
|||
if (cubeb_enumerate_devices(ctx, CUBEB_DEVICE_TYPE_OUTPUT, &collection) != CUBEB_OK) {
|
||||
LOG_WARNING(Audio_Sink, "Audio output device enumeration not supported");
|
||||
} else {
|
||||
for (size_t i = 0; i < collection.count; i++) {
|
||||
for (std::size_t i = 0; i < collection.count; i++) {
|
||||
const cubeb_device_info& device = collection.device[i];
|
||||
if (device.friendly_name) {
|
||||
device_list.emplace_back(device.friendly_name);
|
||||
|
|
|
@ -17,9 +17,9 @@ public:
|
|||
|
||||
unsigned int GetNativeSampleRate() const override;
|
||||
|
||||
void EnqueueSamples(const s16* samples, size_t sample_count) override;
|
||||
void EnqueueSamples(const s16* samples, std::size_t sample_count) override;
|
||||
|
||||
size_t SamplesInQueue() const override;
|
||||
std::size_t SamplesInQueue() const override;
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
|
|
|
@ -46,7 +46,7 @@ void DspInterface::OutputFrame(StereoFrame16& frame) {
|
|||
|
||||
// Implementation of the hardware volume slider with a dynamic range of 60 dB
|
||||
double volume_scale_factor = std::exp(6.90775 * Settings::values.volume) * 0.001;
|
||||
for (size_t i = 0; i < frame.size(); i++) {
|
||||
for (std::size_t i = 0; i < frame.size(); i++) {
|
||||
frame[i][0] = static_cast<s16>(frame[i][0] * volume_scale_factor);
|
||||
frame[i][1] = static_cast<s16>(frame[i][1] * volume_scale_factor);
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ void DspInterface::OutputFrame(StereoFrame16& frame) {
|
|||
std::vector<s16> stretched_samples = time_stretcher.Process(sink->SamplesInQueue());
|
||||
sink->EnqueueSamples(stretched_samples.data(), stretched_samples.size() / 2);
|
||||
} else {
|
||||
constexpr size_t maximum_sample_latency = 2048; // about 64 miliseconds
|
||||
constexpr std::size_t maximum_sample_latency = 2048; // about 64 miliseconds
|
||||
if (sink->SamplesInQueue() > maximum_sample_latency) {
|
||||
// This can occur if we're running too fast and samples are starting to back up.
|
||||
// Just drop the samples.
|
||||
|
|
|
@ -54,7 +54,7 @@ public:
|
|||
* @return The amount of data remaning in the pipe. This is the maximum length PipeRead will
|
||||
* return.
|
||||
*/
|
||||
virtual size_t GetPipeReadableSize(DspPipe pipe_number) const = 0;
|
||||
virtual std::size_t GetPipeReadableSize(DspPipe pipe_number) const = 0;
|
||||
|
||||
/**
|
||||
* Write to a DSP pipe.
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
namespace AudioCore {
|
||||
namespace HLE {
|
||||
|
||||
constexpr size_t num_sources = 24;
|
||||
constexpr std::size_t num_sources = 24;
|
||||
|
||||
/**
|
||||
* This performs the filter operation defined by FilterT::ProcessSample on the frame in-place.
|
||||
|
|
|
@ -66,7 +66,7 @@ void SourceFilters::SimpleFilter::Configure(
|
|||
|
||||
std::array<s16, 2> SourceFilters::SimpleFilter::ProcessSample(const std::array<s16, 2>& x0) {
|
||||
std::array<s16, 2> y0;
|
||||
for (size_t i = 0; i < 2; i++) {
|
||||
for (std::size_t i = 0; i < 2; i++) {
|
||||
const s32 tmp = (b0 * x0[i] + a1 * y1[i]) >> 15;
|
||||
y0[i] = std::clamp(tmp, -32768, 32767);
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ void SourceFilters::BiquadFilter::Configure(
|
|||
|
||||
std::array<s16, 2> SourceFilters::BiquadFilter::ProcessSample(const std::array<s16, 2>& x0) {
|
||||
std::array<s16, 2> y0;
|
||||
for (size_t i = 0; i < 2; i++) {
|
||||
for (std::size_t i = 0; i < 2; i++) {
|
||||
const s32 tmp = (b0 * x0[i] + b1 * x1[i] + b2 * x2[i] + a1 * y1[i] + a2 * y2[i]) >> 14;
|
||||
y0[i] = std::clamp(tmp, -32768, 32767);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
DspState GetDspState() const;
|
||||
|
||||
std::vector<u8> PipeRead(DspPipe pipe_number, u32 length);
|
||||
size_t GetPipeReadableSize(DspPipe pipe_number) const;
|
||||
std::size_t GetPipeReadableSize(DspPipe pipe_number) const;
|
||||
void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer);
|
||||
|
||||
std::array<u8, Memory::DSP_RAM_SIZE>& GetDspMemory();
|
||||
|
@ -41,7 +41,7 @@ private:
|
|||
void WriteU16(DspPipe pipe_number, u16 value);
|
||||
void AudioPipeWriteStructAddresses();
|
||||
|
||||
size_t CurrentRegionIndex() const;
|
||||
std::size_t CurrentRegionIndex() const;
|
||||
HLE::SharedMemory& ReadRegion();
|
||||
HLE::SharedMemory& WriteRegion();
|
||||
|
||||
|
@ -87,7 +87,7 @@ DspState DspHle::Impl::GetDspState() const {
|
|||
}
|
||||
|
||||
std::vector<u8> DspHle::Impl::PipeRead(DspPipe pipe_number, u32 length) {
|
||||
const size_t pipe_index = static_cast<size_t>(pipe_number);
|
||||
const std::size_t pipe_index = static_cast<std::size_t>(pipe_number);
|
||||
|
||||
if (pipe_index >= num_dsp_pipe) {
|
||||
LOG_ERROR(Audio_DSP, "pipe_number = {} invalid", pipe_index);
|
||||
|
@ -118,7 +118,7 @@ std::vector<u8> DspHle::Impl::PipeRead(DspPipe pipe_number, u32 length) {
|
|||
}
|
||||
|
||||
size_t DspHle::Impl::GetPipeReadableSize(DspPipe pipe_number) const {
|
||||
const size_t pipe_index = static_cast<size_t>(pipe_number);
|
||||
const std::size_t pipe_index = static_cast<std::size_t>(pipe_number);
|
||||
|
||||
if (pipe_index >= num_dsp_pipe) {
|
||||
LOG_ERROR(Audio_DSP, "pipe_number = {} invalid", pipe_index);
|
||||
|
@ -183,7 +183,8 @@ void DspHle::Impl::PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer)
|
|||
return;
|
||||
}
|
||||
default:
|
||||
LOG_CRITICAL(Audio_DSP, "pipe_number = {} unimplemented", static_cast<size_t>(pipe_number));
|
||||
LOG_CRITICAL(Audio_DSP, "pipe_number = {} unimplemented",
|
||||
static_cast<std::size_t>(pipe_number));
|
||||
UNIMPLEMENTED();
|
||||
return;
|
||||
}
|
||||
|
@ -205,7 +206,7 @@ void DspHle::Impl::ResetPipes() {
|
|||
}
|
||||
|
||||
void DspHle::Impl::WriteU16(DspPipe pipe_number, u16 value) {
|
||||
const size_t pipe_index = static_cast<size_t>(pipe_number);
|
||||
const std::size_t pipe_index = static_cast<std::size_t>(pipe_number);
|
||||
|
||||
std::vector<u8>& data = pipe_data.at(pipe_index);
|
||||
// Little endian
|
||||
|
@ -280,10 +281,10 @@ StereoFrame16 DspHle::Impl::GenerateCurrentFrame() {
|
|||
std::array<QuadFrame32, 3> intermediate_mixes = {};
|
||||
|
||||
// Generate intermediate mixes
|
||||
for (size_t i = 0; i < HLE::num_sources; i++) {
|
||||
for (std::size_t i = 0; i < HLE::num_sources; i++) {
|
||||
write.source_statuses.status[i] =
|
||||
sources[i].Tick(read.source_configurations.config[i], read.adpcm_coefficients.coeff[i]);
|
||||
for (size_t mix = 0; mix < 3; mix++) {
|
||||
for (std::size_t mix = 0; mix < 3; mix++) {
|
||||
sources[i].MixInto(intermediate_mixes[mix], mix);
|
||||
}
|
||||
}
|
||||
|
@ -295,8 +296,8 @@ StereoFrame16 DspHle::Impl::GenerateCurrentFrame() {
|
|||
StereoFrame16 output_frame = mixers.GetOutput();
|
||||
|
||||
// Write current output frame to the shared memory region
|
||||
for (size_t samplei = 0; samplei < output_frame.size(); samplei++) {
|
||||
for (size_t channeli = 0; channeli < output_frame[0].size(); channeli++) {
|
||||
for (std::size_t samplei = 0; samplei < output_frame.size(); samplei++) {
|
||||
for (std::size_t channeli = 0; channeli < output_frame[0].size(); channeli++) {
|
||||
write.final_samples.pcm16[samplei][channeli] = s16_le(output_frame[samplei][channeli]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ public:
|
|||
DspState GetDspState() const override;
|
||||
|
||||
std::vector<u8> PipeRead(DspPipe pipe_number, u32 length) override;
|
||||
size_t GetPipeReadableSize(DspPipe pipe_number) const override;
|
||||
std::size_t GetPipeReadableSize(DspPipe pipe_number) const override;
|
||||
void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer) override;
|
||||
|
||||
std::array<u8, Memory::DSP_RAM_SIZE>& GetDspMemory() override;
|
||||
|
|
|
@ -68,7 +68,7 @@ void Mixers::ParseConfig(DspConfiguration& config) {
|
|||
config.output_format_dirty.Assign(0);
|
||||
state.output_format = config.output_format;
|
||||
LOG_TRACE(Audio_DSP, "mixers output_format = {}",
|
||||
static_cast<size_t>(config.output_format));
|
||||
static_cast<std::size_t>(config.output_format));
|
||||
}
|
||||
|
||||
if (config.headphones_connected_dirty) {
|
||||
|
@ -131,7 +131,7 @@ void Mixers::DownmixAndMixIntoCurrentFrame(float gain, const QuadFrame32& sample
|
|||
return;
|
||||
}
|
||||
|
||||
UNREACHABLE_MSG("Invalid output_format {}", static_cast<size_t>(state.output_format));
|
||||
UNREACHABLE_MSG("Invalid output_format {}", static_cast<std::size_t>(state.output_format));
|
||||
}
|
||||
|
||||
void Mixers::AuxReturn(const IntermediateMixSamples& read_samples) {
|
||||
|
@ -139,8 +139,8 @@ void Mixers::AuxReturn(const IntermediateMixSamples& read_samples) {
|
|||
// QuadFrame32.
|
||||
|
||||
if (state.mixer1_enabled) {
|
||||
for (size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (size_t channel = 0; channel < 4; channel++) {
|
||||
for (std::size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (std::size_t channel = 0; channel < 4; channel++) {
|
||||
state.intermediate_mix_buffer[1][sample][channel] =
|
||||
read_samples.mix1.pcm32[channel][sample];
|
||||
}
|
||||
|
@ -148,8 +148,8 @@ void Mixers::AuxReturn(const IntermediateMixSamples& read_samples) {
|
|||
}
|
||||
|
||||
if (state.mixer2_enabled) {
|
||||
for (size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (size_t channel = 0; channel < 4; channel++) {
|
||||
for (std::size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (std::size_t channel = 0; channel < 4; channel++) {
|
||||
state.intermediate_mix_buffer[2][sample][channel] =
|
||||
read_samples.mix2.pcm32[channel][sample];
|
||||
}
|
||||
|
@ -165,8 +165,8 @@ void Mixers::AuxSend(IntermediateMixSamples& write_samples,
|
|||
state.intermediate_mix_buffer[0] = input[0];
|
||||
|
||||
if (state.mixer1_enabled) {
|
||||
for (size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (size_t channel = 0; channel < 4; channel++) {
|
||||
for (std::size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (std::size_t channel = 0; channel < 4; channel++) {
|
||||
write_samples.mix1.pcm32[channel][sample] = input[1][sample][channel];
|
||||
}
|
||||
}
|
||||
|
@ -175,8 +175,8 @@ void Mixers::AuxSend(IntermediateMixSamples& write_samples,
|
|||
}
|
||||
|
||||
if (state.mixer2_enabled) {
|
||||
for (size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (size_t channel = 0; channel < 4; channel++) {
|
||||
for (std::size_t sample = 0; sample < samples_per_frame; sample++) {
|
||||
for (std::size_t channel = 0; channel < 4; channel++) {
|
||||
write_samples.mix2.pcm32[channel][sample] = input[2][sample][channel];
|
||||
}
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ void Mixers::AuxSend(IntermediateMixSamples& write_samples,
|
|||
void Mixers::MixCurrentFrame() {
|
||||
current_frame.fill({});
|
||||
|
||||
for (size_t mix = 0; mix < 3; mix++) {
|
||||
for (std::size_t mix = 0; mix < 3; mix++) {
|
||||
DownmixAndMixIntoCurrentFrame(state.intermediate_mixer_volume[mix],
|
||||
state.intermediate_mix_buffer[mix]);
|
||||
}
|
||||
|
|
|
@ -26,12 +26,12 @@ SourceStatus::Status Source::Tick(SourceConfiguration::Configuration& config,
|
|||
return GetCurrentStatus();
|
||||
}
|
||||
|
||||
void Source::MixInto(QuadFrame32& dest, size_t intermediate_mix_id) const {
|
||||
void Source::MixInto(QuadFrame32& dest, std::size_t intermediate_mix_id) const {
|
||||
if (!state.enabled)
|
||||
return;
|
||||
|
||||
const std::array<float, 4>& gains = state.gain.at(intermediate_mix_id);
|
||||
for (size_t samplei = 0; samplei < samples_per_frame; samplei++) {
|
||||
for (std::size_t samplei = 0; samplei < samples_per_frame; samplei++) {
|
||||
// Conversion from stereo (current_frame) to quadraphonic (dest) occurs here.
|
||||
dest[samplei][0] += static_cast<s32>(gains[0] * current_frame[samplei][0]);
|
||||
dest[samplei][1] += static_cast<s32>(gains[1] * current_frame[samplei][1]);
|
||||
|
@ -141,21 +141,21 @@ void Source::ParseConfig(SourceConfiguration::Configuration& config,
|
|||
config.interpolation_dirty.Assign(0);
|
||||
state.interpolation_mode = config.interpolation_mode;
|
||||
LOG_TRACE(Audio_DSP, "source_id={} interpolation_mode={}", source_id,
|
||||
static_cast<size_t>(state.interpolation_mode));
|
||||
static_cast<std::size_t>(state.interpolation_mode));
|
||||
}
|
||||
|
||||
if (config.format_dirty || config.embedded_buffer_dirty) {
|
||||
config.format_dirty.Assign(0);
|
||||
state.format = config.format;
|
||||
LOG_TRACE(Audio_DSP, "source_id={} format={}", source_id,
|
||||
static_cast<size_t>(state.format));
|
||||
static_cast<std::size_t>(state.format));
|
||||
}
|
||||
|
||||
if (config.mono_or_stereo_dirty || config.embedded_buffer_dirty) {
|
||||
config.mono_or_stereo_dirty.Assign(0);
|
||||
state.mono_or_stereo = config.mono_or_stereo;
|
||||
LOG_TRACE(Audio_DSP, "source_id={} mono_or_stereo={}", source_id,
|
||||
static_cast<size_t>(state.mono_or_stereo));
|
||||
static_cast<std::size_t>(state.mono_or_stereo));
|
||||
}
|
||||
|
||||
u32_dsp play_position = {};
|
||||
|
@ -195,7 +195,7 @@ void Source::ParseConfig(SourceConfiguration::Configuration& config,
|
|||
|
||||
if (config.buffer_queue_dirty) {
|
||||
config.buffer_queue_dirty.Assign(0);
|
||||
for (size_t i = 0; i < 4; i++) {
|
||||
for (std::size_t i = 0; i < 4; i++) {
|
||||
if (config.buffers_dirty & (1 << i)) {
|
||||
const auto& b = config.buffers[i];
|
||||
state.input_queue.emplace(Buffer{
|
||||
|
@ -236,7 +236,7 @@ void Source::GenerateFrame() {
|
|||
return;
|
||||
}
|
||||
|
||||
size_t frame_position = 0;
|
||||
std::size_t frame_position = 0;
|
||||
|
||||
state.current_sample_number = state.next_sample_number;
|
||||
while (frame_position < current_frame.size()) {
|
||||
|
|
|
@ -28,7 +28,7 @@ namespace HLE {
|
|||
*/
|
||||
class Source final {
|
||||
public:
|
||||
explicit Source(size_t source_id_) : source_id(source_id_) {
|
||||
explicit Source(std::size_t source_id_) : source_id(source_id_) {
|
||||
Reset();
|
||||
}
|
||||
|
||||
|
@ -52,10 +52,10 @@ public:
|
|||
* @param dest The QuadFrame32 to mix into.
|
||||
* @param intermediate_mix_id The id of the intermediate mix whose gains we are using.
|
||||
*/
|
||||
void MixInto(QuadFrame32& dest, size_t intermediate_mix_id) const;
|
||||
void MixInto(QuadFrame32& dest, std::size_t intermediate_mix_id) const;
|
||||
|
||||
private:
|
||||
const size_t source_id;
|
||||
const std::size_t source_id;
|
||||
StereoFrame16 current_frame;
|
||||
|
||||
using Format = SourceConfiguration::Configuration::Format;
|
||||
|
|
|
@ -18,7 +18,7 @@ constexpr u64 scale_mask = scale_factor - 1;
|
|||
/// Three adjacent samples are passed to fn each step.
|
||||
template <typename Function>
|
||||
static void StepOverSamples(State& state, StereoBuffer16& input, float rate, StereoFrame16& output,
|
||||
size_t& outputi, Function fn) {
|
||||
std::size_t& outputi, Function fn) {
|
||||
ASSERT(rate > 0);
|
||||
|
||||
if (input.empty())
|
||||
|
@ -28,10 +28,10 @@ static void StepOverSamples(State& state, StereoBuffer16& input, float rate, Ste
|
|||
|
||||
const u64 step_size = static_cast<u64>(rate * scale_factor);
|
||||
u64 fposition = state.fposition;
|
||||
size_t inputi = 0;
|
||||
std::size_t inputi = 0;
|
||||
|
||||
while (outputi < output.size()) {
|
||||
inputi = static_cast<size_t>(fposition / scale_factor);
|
||||
inputi = static_cast<std::size_t>(fposition / scale_factor);
|
||||
|
||||
if (inputi + 2 >= input.size()) {
|
||||
inputi = input.size() - 2;
|
||||
|
@ -51,14 +51,15 @@ static void StepOverSamples(State& state, StereoBuffer16& input, float rate, Ste
|
|||
input.erase(input.begin(), std::next(input.begin(), inputi + 2));
|
||||
}
|
||||
|
||||
void None(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, size_t& outputi) {
|
||||
void None(State& state, StereoBuffer16& input, float rate, StereoFrame16& output,
|
||||
std::size_t& outputi) {
|
||||
StepOverSamples(
|
||||
state, input, rate, output, outputi,
|
||||
[](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; });
|
||||
}
|
||||
|
||||
void Linear(State& state, StereoBuffer16& input, float rate, StereoFrame16& output,
|
||||
size_t& outputi) {
|
||||
std::size_t& outputi) {
|
||||
// Note on accuracy: Some values that this produces are +/- 1 from the actual firmware.
|
||||
StepOverSamples(state, input, rate, output, outputi,
|
||||
[](u64 fraction, const auto& x0, const auto& x1, const auto& x2) {
|
||||
|
|
|
@ -32,7 +32,8 @@ struct State {
|
|||
* @param output The resampled audio buffer.
|
||||
* @param outputi The index of output to start writing to.
|
||||
*/
|
||||
void None(State& state, StereoBuffer16& input, float rate, StereoFrame16& output, size_t& outputi);
|
||||
void None(State& state, StereoBuffer16& input, float rate, StereoFrame16& output,
|
||||
std::size_t& outputi);
|
||||
|
||||
/**
|
||||
* Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay.
|
||||
|
@ -44,7 +45,7 @@ void None(State& state, StereoBuffer16& input, float rate, StereoFrame16& output
|
|||
* @param outputi The index of output to start writing to.
|
||||
*/
|
||||
void Linear(State& state, StereoBuffer16& input, float rate, StereoFrame16& output,
|
||||
size_t& outputi);
|
||||
std::size_t& outputi);
|
||||
|
||||
} // namespace AudioInterp
|
||||
} // namespace AudioCore
|
||||
|
|
|
@ -19,9 +19,9 @@ public:
|
|||
return native_sample_rate;
|
||||
}
|
||||
|
||||
void EnqueueSamples(const s16*, size_t) override {}
|
||||
void EnqueueSamples(const s16*, std::size_t) override {}
|
||||
|
||||
size_t SamplesInQueue() const override {
|
||||
std::size_t SamplesInQueue() const override {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -74,7 +74,7 @@ unsigned int SDL2Sink::GetNativeSampleRate() const {
|
|||
return impl->sample_rate;
|
||||
}
|
||||
|
||||
void SDL2Sink::EnqueueSamples(const s16* samples, size_t sample_count) {
|
||||
void SDL2Sink::EnqueueSamples(const s16* samples, std::size_t sample_count) {
|
||||
if (impl->audio_device_id <= 0)
|
||||
return;
|
||||
|
||||
|
@ -89,12 +89,13 @@ size_t SDL2Sink::SamplesInQueue() const {
|
|||
|
||||
SDL_LockAudioDevice(impl->audio_device_id);
|
||||
|
||||
size_t total_size = std::accumulate(impl->queue.begin(), impl->queue.end(),
|
||||
static_cast<size_t>(0), [](size_t sum, const auto& buffer) {
|
||||
// Division by two because each stereo sample is made of
|
||||
// two s16.
|
||||
return sum + buffer.size() / 2;
|
||||
});
|
||||
std::size_t total_size =
|
||||
std::accumulate(impl->queue.begin(), impl->queue.end(), static_cast<std::size_t>(0),
|
||||
[](std::size_t sum, const auto& buffer) {
|
||||
// Division by two because each stereo sample is made of
|
||||
// two s16.
|
||||
return sum + buffer.size() / 2;
|
||||
});
|
||||
|
||||
SDL_UnlockAudioDevice(impl->audio_device_id);
|
||||
|
||||
|
@ -104,8 +105,8 @@ size_t SDL2Sink::SamplesInQueue() const {
|
|||
void SDL2Sink::Impl::Callback(void* impl_, u8* buffer, int buffer_size_in_bytes) {
|
||||
Impl* impl = reinterpret_cast<Impl*>(impl_);
|
||||
|
||||
size_t remaining_size = static_cast<size_t>(buffer_size_in_bytes) /
|
||||
sizeof(s16); // Keep track of size in 16-bit increments.
|
||||
std::size_t remaining_size = static_cast<std::size_t>(buffer_size_in_bytes) /
|
||||
sizeof(s16); // Keep track of size in 16-bit increments.
|
||||
|
||||
while (remaining_size > 0 && !impl->queue.empty()) {
|
||||
if (impl->queue.front().size() <= remaining_size) {
|
||||
|
|
|
@ -17,9 +17,9 @@ public:
|
|||
|
||||
unsigned int GetNativeSampleRate() const override;
|
||||
|
||||
void EnqueueSamples(const s16* samples, size_t sample_count) override;
|
||||
void EnqueueSamples(const s16* samples, std::size_t sample_count) override;
|
||||
|
||||
size_t SamplesInQueue() const override;
|
||||
std::size_t SamplesInQueue() const override;
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
* @param samples Samples in interleaved stereo PCM16 format.
|
||||
* @param sample_count Number of samples.
|
||||
*/
|
||||
virtual void EnqueueSamples(const s16* samples, size_t sample_count) = 0;
|
||||
virtual void EnqueueSamples(const s16* samples, std::size_t sample_count) = 0;
|
||||
|
||||
/// Samples enqueued that have not been played yet.
|
||||
virtual std::size_t SamplesInQueue() const = 0;
|
||||
|
|
|
@ -23,9 +23,9 @@ static double ClampRatio(double ratio) {
|
|||
return std::clamp(ratio, MIN_RATIO, MAX_RATIO);
|
||||
}
|
||||
|
||||
constexpr double MIN_DELAY_TIME = 0.05; // Units: seconds
|
||||
constexpr double MAX_DELAY_TIME = 0.25; // Units: seconds
|
||||
constexpr size_t DROP_FRAMES_SAMPLE_DELAY = 16000; // Units: samples
|
||||
constexpr double MIN_DELAY_TIME = 0.05; // Units: seconds
|
||||
constexpr double MAX_DELAY_TIME = 0.25; // Units: seconds
|
||||
constexpr std::size_t DROP_FRAMES_SAMPLE_DELAY = 16000; // Units: samples
|
||||
|
||||
constexpr double SMOOTHING_FACTOR = 0.007;
|
||||
|
||||
|
@ -33,14 +33,14 @@ struct TimeStretcher::Impl {
|
|||
soundtouch::SoundTouch soundtouch;
|
||||
|
||||
steady_clock::time_point frame_timer = steady_clock::now();
|
||||
size_t samples_queued = 0;
|
||||
std::size_t samples_queued = 0;
|
||||
|
||||
double smoothed_ratio = 1.0;
|
||||
|
||||
double sample_rate = static_cast<double>(native_sample_rate);
|
||||
};
|
||||
|
||||
std::vector<s16> TimeStretcher::Process(size_t samples_in_queue) {
|
||||
std::vector<s16> TimeStretcher::Process(std::size_t samples_in_queue) {
|
||||
// This is a very simple algorithm without any fancy control theory. It works and is stable.
|
||||
|
||||
double ratio = CalculateCurrentRatio();
|
||||
|
@ -76,7 +76,7 @@ void TimeStretcher::SetOutputSampleRate(unsigned int sample_rate) {
|
|||
impl->soundtouch.setRate(static_cast<double>(native_sample_rate) / impl->sample_rate);
|
||||
}
|
||||
|
||||
void TimeStretcher::AddSamples(const s16* buffer, size_t num_samples) {
|
||||
void TimeStretcher::AddSamples(const s16* buffer, std::size_t num_samples) {
|
||||
impl->soundtouch.putSamples(buffer, static_cast<uint>(num_samples));
|
||||
impl->samples_queued += num_samples;
|
||||
}
|
||||
|
@ -115,9 +115,11 @@ double TimeStretcher::CalculateCurrentRatio() {
|
|||
return ratio;
|
||||
}
|
||||
|
||||
double TimeStretcher::CorrectForUnderAndOverflow(double ratio, size_t sample_delay) const {
|
||||
const size_t min_sample_delay = static_cast<size_t>(MIN_DELAY_TIME * impl->sample_rate);
|
||||
const size_t max_sample_delay = static_cast<size_t>(MAX_DELAY_TIME * impl->sample_rate);
|
||||
double TimeStretcher::CorrectForUnderAndOverflow(double ratio, std::size_t sample_delay) const {
|
||||
const std::size_t min_sample_delay =
|
||||
static_cast<std::size_t>(MIN_DELAY_TIME * impl->sample_rate);
|
||||
const std::size_t max_sample_delay =
|
||||
static_cast<std::size_t>(MAX_DELAY_TIME * impl->sample_rate);
|
||||
|
||||
if (sample_delay < min_sample_delay) {
|
||||
// Make the ratio bigger.
|
||||
|
@ -133,7 +135,7 @@ double TimeStretcher::CorrectForUnderAndOverflow(double ratio, size_t sample_del
|
|||
std::vector<s16> TimeStretcher::GetSamples() {
|
||||
uint available = impl->soundtouch.numSamples();
|
||||
|
||||
std::vector<s16> output(static_cast<size_t>(available) * 2);
|
||||
std::vector<s16> output(static_cast<std::size_t>(available) * 2);
|
||||
|
||||
impl->soundtouch.receiveSamples(output.data(), available);
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
* @param sample_buffer Buffer of samples in interleaved stereo PCM16 format.
|
||||
* @param num_samples Number of samples.
|
||||
*/
|
||||
void AddSamples(const s16* sample_buffer, size_t num_samples);
|
||||
void AddSamples(const s16* sample_buffer, std::size_t num_samples);
|
||||
|
||||
/// Flush audio remaining in internal buffers.
|
||||
void Flush();
|
||||
|
@ -42,7 +42,7 @@ public:
|
|||
* played yet.
|
||||
* @return Samples to play in interleaved stereo PCM16 format.
|
||||
*/
|
||||
std::vector<s16> Process(size_t sample_delay);
|
||||
std::vector<s16> Process(std::size_t sample_delay);
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
|
@ -52,7 +52,7 @@ private:
|
|||
double CalculateCurrentRatio();
|
||||
/// INTERNAL: If we have too many or too few samples downstream, nudge ratio in the appropriate
|
||||
/// direction.
|
||||
double CorrectForUnderAndOverflow(double ratio, size_t sample_delay) const;
|
||||
double CorrectForUnderAndOverflow(double ratio, std::size_t sample_delay) const;
|
||||
/// INTERNAL: Gets the time-stretched samples from SoundTouch.
|
||||
std::vector<s16> GetSamples();
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue